- Nødvendige materialer:
- Kredsløbsdiagram:
- Sådan fungerer HC-SR04-modulet:
- Måleafstand mellem to ultralydssensorer (HC-SR04):
- Program til sendersensor:
- Program til modtagersensor:
- Arbejder:
- Improviseret idé - kalibrering af sensoren ved hjælp af en kendt afstand:
Ultralydssensor (HC-SR04) bruges ofte til at finde afstanden til et objekt fra et bestemt punkt. Det har været ret let at gøre dette med Arduino, og koden er også ret enkel. Men i denne artikel vil vi prøve noget andet med disse populære HC-SR04 sensorer. Vi vil prøve at beregne afstanden mellem to ultralydssensorer, det vil sige, vi får den ene sensor til at fungere som sender og den anden sensor til at fungere som modtager. Ved at gøre dette kan vi spore placeringen af en sender ved hjælp af mange ultralydsmodtagere. Denne sporing kaldes triangulering og kan bruges til automatiske docking robotter bagage tilhængere og andre lignende applikationer. Find afstanden mellem to amerikanske sensorer lyder måske som en ret simpel opgave, men jeg stod over for få udfordringer, som diskuteres i dette projekt.
Teknikken diskuteret i denne artikel er ikke ret nøjagtig og er muligvis ikke nyttig i nogen reelle systemer uden ændringer. I løbet af denne dokumentation fandt jeg ingen, der fik resultater så tæt som min, så jeg har lige delt mine synspunkter om, hvordan jeg fik det til at arbejde, så folk, der prøver dette, ikke behøver at genopfinde hjulet.
Nødvendige materialer:
- Arduino (2Nos) - Enhver model
- HCSR04-modul (2Nos)
Kredsløbsdiagram:
Selvom vi skal lave en amerikansk (ultralydssensor) til at fungere som sender og den anden som modtager, er det obligatorisk at forbinde alle sensorernes fire ben med Arduino. Hvorfor skulle vi? Mere om det vil blive diskuteret senere, men for nu vil kredsløbsdiagrammet være som følger
Som du kan se, er kredsløbsdiagrammet for både sender og modtager begge identiske. Kontroller også: Arduino ultralydssensorgrænseflade
Sådan fungerer HC-SR04-modulet:
Før vi fortsætter, lad os forstå, hvordan HC-SR04-sensoren fungerer. Nedenstående tidsdiagram hjælper os med at forstå arbejdet.
Sensoren har to ben Trigger og Echo, som bruges til at måle afstand som vist i tidsdiagrammet. Først for at starte måling, skal vi sende en ultralydsbølge fra senderen, dette kan gøres ved at indstille udløserstiften højt til 10uS. Så snart dette er gjort, sender senderstiftet 8 soniske burst af amerikanske bølger. Denne amerikanske bølge rammer et objekt, der springer tilbage og modtages af modtageren.
Her viser tidsdiagrammet, at når modtageren modtager bølgen, vil den få Echo-stiften til at gå højt i en varighed, der er lig med den tid, det tager for bølgen at rejse fra US-sensoren og nå tilbage til sensoren. Dette tidsdiagram ser ikke ud til at være sandt.
Jeg dækkede Tx (transmitter) -delen af min sensor og kontrollerede, om Echo-pulsen blev høj, og ja den går høj. Dette betyder, at Echo-pulsen ikke venter på, at den amerikanske (ultralyd) bølge modtages af den. Når den først sender den amerikanske bølge, går den høj og forbliver høj, indtil bølgen vender tilbage. Så det korrekte timingdiagram skal være sådan som vist nedenfor (Undskyld for mine dårlige skrivefærdigheder)
Sådan får du din HC-SR04 til kun at fungere som sender:
Det er stort set lige frem at få en HC-SR04 til kun at fungere som sender. Som vist i tidsdiagrammet skal du erklære Trigger pin som output pin og få den til at forblive høj i 10 mikrosekunder. Dette vil igangsætte ultralydsbølgen. Så når vi ønsker at transmittere bølgen, er vi bare nødt til at styre udløserstiften på transmitterføleren, som koden er angivet nedenfor.
Sådan får du din HC-SR04 til kun at fungere som modtager:
Som vist i tidsdiagrammet kan vi ikke kontrollere stigningen af Echo pin, da det er relateret til trigger pin. Så der er ingen måde, vi kunne få HC-SR04 til kun at fungere som modtager. Men vi kan bruge et hack ved blot at dække senderens del af sensoren med tape (som vist på billedet nedenfor) eller dække, at den amerikanske bølge ikke kan flygte uden for dens transmitterhylster, og ekko-stiften vil ikke blive påvirket af denne amerikanske bølge.
Nu for at få ekko-stiften til at gå højt er vi bare nødt til at trække denne dummy trigger-pin højt i 10 mikrosekunder. Når denne modtagersensor får den amerikanske bølge transmitteret af sendersensoren, bliver ekko-stiften lav.
Måleafstand mellem to ultralydssensorer (HC-SR04):
Indtil videre har vi forstået, hvordan man får den ene sensor til at fungere som sender og den anden sensor til at fungere som modtager. Nu skal vi sende ultralydsbølgen fra transmitterføleren og modtage den med modtagersensoren og kontrollere den tid det tager for bølgen at rejse fra sender til modtager lyder let, ikke sandt? Men desværre !, vi har et problem her, og dette fungerer ikke.
Sendermodulet og modtagermodulet er langt fra hinanden, og når modtagermodulet modtager den amerikanske bølge fra sendermodulet, ved det ikke, hvornår senderen sendte netop denne bølge. Uden at kende starttiden kan vi ikke beregne den taget tid og dermed afstanden. For at løse dette problem skal modtagermodulets ekko-puls bringes til at gå højt nøjagtigt, når sendermodulet har transmitteret den amerikanske bølge. Med andre ord skal sendermodulet og modtagermodulet udløse på samme tid. Dette kan opnås ved hjælp af følgende metode.
I ovenstående diagram repræsenterer Tx transmitterføler og Rx repræsenterer modtagerføler. Som vist sendes sensoren til at transmittere amerikanske bølger med en periodisk kendt forsinkelse, det er alt, hvad den skal gøre.
I modtagersensoren er vi nødt til på en eller anden måde at få aftrækkerstiften til at gå højt nøjagtigt, når senderstiften bliver høj. Så oprindeligt får vi tilfældigt modtagerudløseren til at gå højt, hvilket vil og forblive højt, indtil ekko-stiften går lavt. Denne ekkostift går kun lavt, når den modtager en amerikansk bølge fra senderen. Så så snart det går lavt, kan vi antage, at transmitterføleren lige er udløst. Nu med denne antagelse, så snart ekkoet bliver lavt, kan vi vente på den kendte forsinkelse og derefter udløse modtagerudløseren. Dette vil delvist synkronisere udløseren for både senderen og modtageren, og derfor kan du læse den øjeblikkelige ekkopulsvarighed ved hjælp af pulseIn () og beregne afstanden.
Program til sendersensor:
Det komplette program til sendermodulet findes nederst på siden. Det gør intet andet end at udløse transmitterføleren med et periodisk interval.
digitalWrite (trigPin, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigPin, LOW);
For at udløse en sensor er vi nødt til at få udløseren til at forblive høj i 10uS. Koden til at gøre det samme er vist ovenfor
Program til modtagersensor:
I modtagersensoren har vi dækket sensorens senderøje for at gøre det nar som beskrevet tidligere. Nu kan vi bruge den ovennævnte teknik til at måle afstanden mellem to sensorer. Det komplette program findes nederst på denne side. Få vigtige linjer forklares nedenfor
Trigger_US (); mens (digitalRead (echoPin) == HIGH); forsinkelseMikrosekunder (10); Trigger_US (); varighed = pulseIn (echoPin, HIGH);
Oprindeligt udløser vi den amerikanske sensor ved hjælp af funktionen Trigger_US () og vent derefter, indtil ekko-stiften forbliver høj ved hjælp af en stund-loop. Når det bliver lavt, venter vi på forudbestemt varighed, denne varighed skal være et sted mellem 10 og 30 mikrosekunder, som kan bestemmes ved hjælp af forsøg og fejl (eller du kan bruge improviseret idé nedenfor). Efter denne forsinkelse udløser USA igen ved hjælp af den samme funktion, og brug derefter pulseIn () -funktionen til at beregne bølgens varighed.
Nu ved hjælp af de samme gamle formler kan vi beregne afstanden som nedenfor
afstand = varighed * 0,034;
Arbejder:
Foretag forbindelserne som forklaret i programmet. Dæk Tx-delen af modtagersensoren som vist på billedet. Upload derefter senderkoden og modtagerkoden, der er angivet nedenfor, til henholdsvis sender og modtager Arduino. Åbn modtagermodulets serielle skærm, og du skal bemærke, at afstanden mellem to moduler vises som vist i videoen nedenfor.
Bemærk: Denne metode er bare en ideologi og er muligvis ikke nøjagtig eller tilfredsstillende. Du kan dog prøve den improviserede idé nedenfor for at få bedre resultater.
Improviseret idé - kalibrering af sensoren ved hjælp af en kendt afstand:
Den metode, der hidtil blev forklaret, ser ud til at være tilfredsstillende, men alligevel var den tilstrækkelig til mit projekt. Men jeg vil også gerne dele ulemperne ved denne metode og en måde at overvinde dem på. En væsentlig ulempe ved denne metode er, at vi antager, at modtagerens ekko-stift falder lavt umiddelbart efter, at senderføleren har transmitteret den amerikanske bølge, hvilket ikke er sandt, da bølgen vil tage lidt tid at rejse fra sender til modtager. Derfor er udløseren af senderen og udløseren af modtageren ikke i perfekt synkronisering.
For at overvinde dette kan vi kalibrere sensoren indledningsvis ved hjælp af en kendeafstand. Hvis afstanden er kendt, ved vi, hvor lang tid det tager for den amerikanske bølge at nå modtageren fra senderen. Lad os holde denne tid taget som Del (D) som vist nedenfor.
Nu ved vi nøjagtigt efter, hvor lang tid vi skal gøre Trigger pin på modtageren for høj for at blive synkroniseret med udløseren af senderen. Denne varighed kan beregnes ved kendt forsinkelse (t) - Del (D). Jeg var ikke i stand til at teste denne idé på grund af tidsbegrænsninger, så jeg er ikke sikker på, hvor præcis den ville fungere. Så hvis du tilfældigvis prøver det, så lad mig vide resultaterne gennem kommentarsektionen.