- Nødvendige materialer:
- Kretsdiagram:
- Hvordan HC-SR04-modulen faktisk fungerer:
- Måle avstand mellom to ultralydssensorer (HC-SR04):
- Program for sendersensor:
- Program for mottakersensor:
- Jobber:
- Improvised Idea - kalibrering av sensoren med en kjent avstand:
Ultralydssensor (HC-SR04) brukes ofte til å finne avstanden til et objekt fra ett bestemt punkt. Det har vært ganske enkelt å gjøre dette med Arduino, og koden er også ganske enkel. Men i denne artikkelen skal vi prøve noe annet med disse populære HC-SR04-sensorene. Vi vil prøve å beregne avstanden mellom to ultralydsensorer det vil si, vi vil få en sensor til å fungere som sender og den andre sensoren til å fungere som mottaker. Ved å gjøre dette kan vi spore plasseringen til en sender ved hjelp av mange ultralydmottakere. Denne sporing kalles triangulering og kan brukes til automatiske dockingroboter bagasjefølgere og andre lignende applikasjoner. Finne avstanden mellom to amerikanske sensorer høres kanskje ut til å være en ganske enkel oppgave, men jeg møtte få utfordringer som er diskutert i dette prosjektet.
Teknikken diskutert i denne artikkelen er ikke ganske nøyaktig og er kanskje ikke nyttig i noen reelle systemer uten modifikasjoner. I løpet av denne dokumentasjonen fant jeg ingen som fikk resultater så nær som mine, så jeg har nettopp delt mitt syn på hvordan jeg fikk det til å fungere, slik at folk som prøver dette ikke trenger å finne på hjulet på nytt.
Nødvendige materialer:
- Arduino (2Nos) - En hvilken som helst modell
- HCSR04-modul (2Nos)
Kretsdiagram:
Selv om vi skal lage en US (Ultrasonic) sensor til å fungere som sender og den andre som mottaker, er det obligatorisk å koble alle de fire pinnene til sensorene med Arduino. Hvorfor skulle vi gjøre det? Mer av det vil bli diskutert senere, men foreløpig vil kretsskjemaet være som følger
Som du kan se, er kretsskjemaet for både sender og mottaker begge identiske. Sjekk også: Arduino ultralydssensorgrensesnitt
Hvordan HC-SR04-modulen faktisk fungerer:
Før vi fortsetter, la oss forstå hvordan HC-SR04-sensoren fungerer. Nedenfor tidsdiagram vil hjelpe oss med å forstå arbeidet.
Sensoren har to pinner utløser og ekko som brukes til å måle avstand som vist i tidsskjemaet. Først for å starte måling, bør vi sende en ultralydbølge fra senderen, dette kan gjøres ved å sette avtrekkerstiften høyt til 10uS. Så snart dette er gjort, vil senderpinnen sende 8 soniske utbrudd av amerikanske bølger. Denne amerikanske bølgen vil treffe et objekt som spretter tilbake og vil bli mottatt av mottakeren.
Her viser tidsdiagrammet at når mottakeren mottar bølgen, vil den få ekko-pinnen til å gå høyt i en varighet som er lik tiden det tar for bølgen å reise fra US-sensoren og nå tilbake til sensoren. Dette tidsskjemaet ser ikke ut til å være sant.
Jeg dekket Tx (sender) -delen av sensoren min og sjekket om ekkopulsen ble høy, og ja den går høyt. Dette betyr at Echo-pulsen ikke venter på at den amerikanske (ultralyd) bølgen skal mottas av den. Når den har overført den amerikanske bølgen, går den høyt og holder seg høy til bølgen kommer tilbake. Så det riktige tidsskjemaet skal være noe som dette vist nedenfor (Beklager for mine dårlige skriveferdigheter)
Gjør at HC-SR04 bare fungerer som sender:
Det er ganske rett frem å lage en HC-SR04 til å fungere bare som sender. Som vist i tidsskjemaet, må du erklære utløseren som utgangsstift og få den til å holde seg høy i 10 mikrosekunder. Dette vil igangsette ultralydbølgen. Så når vi vil overføre bølgen, må vi bare kontrollere utløserpinnen til sendersensoren, som koden er gitt nedenfor.
Gjør at HC-SR04 bare fungerer som mottaker:
Som vist i tidsskjemaet, kan vi ikke kontrollere økningen av ekkopinnen fordi den er relatert til utløserpinnen. Så det er ingen måte vi kan få HC-SR04 til å fungere bare som mottaker. Men vi kan bruke et hack ved å bare dekke senderdelen av sensoren med tape (som vist på bildet nedenfor) eller hette, den amerikanske bølgen kan ikke unnslippe utenfor senderen, og ekko-pinnen vil ikke bli påvirket av denne amerikanske bølgen.
Nå for å få ekko-pinnen til å bli høy, må vi bare trekke denne dummy-triggerpinnen høyt i 10 mikrosekunder. Når denne mottakersensoren får den amerikanske bølgen overført av sendersensoren, vil ekkopinnen bli lav.
Måle avstand mellom to ultralydssensorer (HC-SR04):
Så langt har vi forstått hvordan man kan få den ene sensoren til å fungere som sender og den andre sensoren til å fungere som mottaker. Nå må vi overføre ultralydbølgen fra sendersensoren og motta den med mottakersensoren og sjekke tiden det tar for bølgen å reise fra sender til mottaker høres lett ut? Men dessverre !, vi har et problem her, og dette vil ikke fungere.
Sendermodulen og mottakermodulen er langt fra hverandre, og når mottakermodulen mottar den amerikanske bølgen fra sendermodulen, vil den ikke vite når senderen sendte denne spesifikke bølgen. Uten å vite starttiden kan vi ikke beregne tiden det tar og dermed avstanden. For å løse dette problemet må mottakermodulens ekkopuls gjøres for å gå høyt nøyaktig når sendermodulen har overført den amerikanske bølgen. Sendermodulen og mottakermodulen skal med andre ord utløses samtidig. Dette kan oppnås ved hjelp av følgende metode.
I diagrammet ovenfor representerer Tx sendersensoren og Rx representerer mottakersensoren. Som vist vil sendersensoren være laget for å overføre amerikanske bølger med en periodisk kjent forsinkelse. Dette er alt den trenger å gjøre.
I mottakerføleren må vi på en eller annen måte få avtrekkerstiften til å gå høyt akkurat når senderpinnen går høyt. Så til å begynne med får vi tilfeldig mottakertriggeren til å gå høyt, som vil og holde seg høyt til ekkopinnen går lavt. Denne ekkopinnen vil bare bli lav når den mottar en amerikansk bølge fra senderen. Så så snart det går lavt, kan vi anta at sendersensoren nettopp ble utløst. Nå, med denne antagelsen så snart ekkoet blir lavt, kan vi vente på den kjente forsinkelsen og deretter utløse mottakerutløseren. Dette vil delvis synkronisere utløseren til både senderen og mottakeren, og dermed kan du lese den umiddelbare ekkopulsvarigheten ved hjelp av pulseIn () og beregne avstanden.
Program for sendersensor:
Hele programmet for sendermodulen finner du nederst på siden. Det gjør ingenting annet enn å utløse sendersensoren med jevne mellomrom.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
For å utløse en sensor må vi få avtrekkerstiften til å holde seg høy i 10uS. Koden for å gjøre det samme er vist ovenfor
Program for mottakersensor:
I mottakersensoren har vi dekket senderens øye til sensoren for å gjøre den dummy som diskutert tidligere. Nå kan vi bruke den ovennevnte teknikken til å måle avstanden mellom to sensorer. Hele programmet er gitt nederst på denne siden. Få viktige linjer er forklart nedenfor
Trigger_US (); mens (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); varighet = pulseIn (echoPin, HIGH);
Opprinnelig utløser vi den amerikanske sensoren ved å bruke funksjonen Trigger_US () og venter deretter til ekkopinnen holder seg høy med en stund-løkke. Når det blir lavt, venter vi på forhåndsbestemt varighet, denne varigheten skal være et sted mellom 10 og 30 mikrosekunder som kan bestemmes ved hjelp av prøving og feiling (eller du kan bruke improvisert idé gitt nedenfor). Etter denne forsinkelsen utløser USA igjen ved å bruke den samme funksjonen, og bruk deretter pulseIn () -funksjonen til å beregne varigheten på bølgen.
Nå med de samme gamle formlene kan vi beregne avstanden som nedenfor
avstand = varighet * 0,034;
Jobber:
Opprett tilkoblingene som forklart i programmet. Dekk Tx-delen av mottakersensoren som vist på bildet. Last deretter opp senderkoden og mottakerkoden som er gitt nedenfor til henholdsvis sender og mottaker Arduino. Åpne den serielle skjermen på mottakermodulen, og du bør merke avstanden mellom to moduler som vises i videoen nedenfor.
Merk: Denne metoden er bare en ideologi og er kanskje ikke nøyaktig eller tilfredsstillende. Du kan imidlertid prøve den improviserte ideen nedenfor for å få bedre resultater.
Improvised Idea - kalibrering av sensoren med en kjent avstand:
Metoden som ble forklart så langt merkelig synes å være tilfredsstillende, men den var tilstrekkelig for prosjektet mitt. Imidlertid vil jeg også dele ulempene med denne metoden og en måte å overvinne dem på. En stor ulempe ved denne metoden er at vi antar at ekko-pinnen på mottakeren faller lavt umiddelbart etter at sendersensoren har overført den amerikanske bølgen, noe som ikke stemmer, siden bølgen vil ta litt tid å reise fra sender til mottaker. Derfor vil ikke utløseren til senderen og utløseren til mottakeren være i perfekt synkronisering.
For å overvinne dette kan vi kalibrere sensoren med en kjenneavstand innledningsvis. Hvis avstanden er kjent, vet vi hvor lang tid det tar for den amerikanske bølgen å nå mottakeren fra senderen. La oss holde denne tiden tatt som Del (D) som vist nedenfor.
Nå vet vi nøyaktig etter hvor lang tid vi skal gjøre utløseren på mottakeren for høy for å synkronisere med utløseren til senderen. Denne varigheten kan beregnes ved Kjent forsinkelse (t) - Del (D). Jeg klarte ikke å teste denne ideen på grunn av tidsbegrensninger, så jeg er ikke sikker på hvor nøyaktig den ville fungere. Så hvis du tilfeldigvis prøver det, gi meg beskjed om resultatene gjennom kommentarseksjonen.