Hvordan måle avstand mellom to punkter ved hjelp av Arduino?
I elektronikk brukes ultralydssensorer mesteparten av tiden for å måle avstanden fra et bestemt punkt til et annet. Det er veldig enkelt å skrive en kode på Arduino-kortet og integrere en ultralydssensor å utføre denne oppgaven. Men i denne artikkelen skal vi ta en annen tilnærming. Vi skal bruke to separate ultralydssensorer som skal integreres med to separate Arduino. Disse to modulene plasseres på to forskjellige punkter mellom hvilke avstanden skal måles. Den ene sensoren vil bli gjort til en mottaker, og den andre vil bli gjort til en sender. Ved å gjøre dette, vil vi kunne måle avstanden mellom dem bare ved å finne posisjonen til senderen ved å bruke mange ultralydmottakere. Teknikken vi bruker her kalles Triangulering.
Teknikken som brukes her, er bare nyttig i småskala systemer hvor det er en liten avstand å finne. For å implementere det i stor skala, er det sikkert behov for noen modifikasjoner. Alle utfordringene som ble møtt under gjennomføringen av dette prosjektet er omtalt nedenfor.
Hvordan bruke Arduino og ultralydssensor for å måle avstand?
Som vi vet sammendraget bak prosjektet, la oss gå videre og samle ytterligere informasjon for å starte prosjektet.
Trinn 1: Samle komponentene (maskinvare)
Hvis du vil unngå ulemper midt i ethvert prosjekt, er den beste tilnærmingen å lage en komplett liste over alle komponentene vi skal bruke. Det andre trinnet, før du begynner å lage kretsen, er å gå gjennom en kort studie av alle disse komponentene. En liste over alle komponentene vi trenger i dette prosjektet er gitt nedenfor.
Trinn 2: Samle komponentene (programvare)
Etter å ha lastet ned Proteus 8 Professional, design kretsen på den. Jeg har tatt med programvaresimuleringer her, slik at det kan være praktisk for nybegynnere å designe kretsen og lage passende tilkoblinger på maskinvaren.
Trinn 3: Arbeid med HCR-05
Som vi nå vet hovedabstraktet av prosjektet vårt, la oss gå videre og gå gjennom en kort studie av arbeidet med HCR-05. Du kan forstå hovedfunksjonen til denne sensoren ved å følge diagrammet nedenfor.
Denne sensoren har to pinner, utløserstift, og øko-pin som begge brukes til å måle avstanden mellom to bestemte punkter. Prosessen startes ved å sende en ultralydbølge fra sensoren. Denne oppgaven gjøres ved å utløse trigpinnen i 10us. En 8 sonisk utbrudd av ultralydbølger sendes fra senderen så snart denne oppgaven er utført. denne bølgen vil bevege seg i luften, og så snart den treffer en gjenstand i veien, vil den slå tilbake og mottas av mottakeren som er innebygd i sensoren.
Når ultralydbølgen vil bli mottatt av mottakeren etter å ha reflektert sensoren, vil den sette øko-pintil en høy tilstand. Denne pinnen vil forbli i høy tilstand i løpet av tiden som vil være nøyaktig lik tiden det tar av ultralydbølgen å reise fra senderen og tilbake til mottakeren til sensoren.
Å lage ultralydssensoren din bare senderen,bare gjør trigpinnen som utgangspinnen din og send en høy puls til denne pinnen i 10us. En ultralydsprengning vil bli initiert så snart dette er gjort. Så når bølgen skal overføres, skal bare utløserpinnen til ultralydssensoren styres.
Det er ingen måte å gjøre ultralydsensoren som en bare mottakeren fordi økningen av ECO-pinnen ikke kan kontrolleres av mikrokontrolleren fordi den er relatert til sensorens trigpinne. Men det er en ting vi kan gjøre er at vi kan dekke senderen til denne ultralydssensoren med duct tape s som ingen UV-bølger kommer ut. Da påvirkes ikke ECO-pinnen til denne senderen av senderen.
Trinn 4: Arbeid av kretsen
Nå som vi har fått begge sensorene til å fungere separat som sender og mottaker, er det et stort problem som står overfor her. Mottakeren vil ikke vite tiden det tar av ultralydbølgen å reise fra senderen til mottakeren fordi den ikke vet nøyaktig når denne bølgen ble overført.
For å løse dette problemet, må vi sende en HØY signalet til ECO på mottakeren så snart ultralydbølgen overføres fra sendersensoren. Eller med enkle ord kan vi si at mottakerens ECO og utløseren til senderen skal sendes til HIGH samtidig. Så, for å oppnå dette, vil vi på en eller annen måte få utløseren til mottakeren til å gå høyt så snart utløseren til senderen går høyt. Denne utløseren til mottakeren vil holde seg høy til ECO-pinnen går LAV. Når et ultralydssignal vil mottas av ECO-pinnen på mottakeren, vil det gå LAVT. Dette vil bety at utløseren til sendersensoren nettopp fikk et HØYT signal. Så snart ECO går lavt, vil vi vente på den kjente forsinkelsen og sette mottakerens trigger HIGH. Ved å gjøre dette vil utløserne til begge sensorene bli synkronisert og avstanden vil bli beregnet ved å kjenne tidsforsinkelsen til bølgeturen.
Trinn 5: Montering av komponentene
Selv om vi bare bruker senderen til den ene ultralydssensoren og mottakeren til den andre, men det er obligatorisk å koble til alle de fire pinnene på ultralydssensor til Arduino. Følg trinnene nedenfor for å koble til kretsen:
- Ta to ultralydssensorer. Dekk mottakeren til den første sensoren og senderen til den andre sensoren. Bruk hvitt kanalbånd til dette formålet og sørg for at disse to er helt dekket, slik at det ikke kommer noe signal fra senderen til den andre sensoren og at det ikke kommer noe signal inn i mottakeren til den første sensoren.
- Koble to Arduino på to separate brødbrett og koble de respektive sensorene til dem. Koble triggerpinnen til pin9 på Arduino og ecoPin til pin10 på Arduino. Slå på ultralydssensoren med 5V Arduino og bruk alle grunnlag.
- Last opp mottakerkoden til Arduino på mottakeren og senderkoden til Arduino til senderen.
- Åpne nå seriell skjerm på mottakersiden og merk avstanden som måles.
Kretsskjemaet for dette prosjektet ser ut som:
Trinn 6: Komme i gang med Arduino
Hvis du ikke allerede er kjent med Arduino IDE, ikke bekymre deg fordi en trinnvis prosedyre for å sette opp og bruke Arduino IDE med et mikrokontrollerkort er forklart nedenfor.
- Last ned den nyeste versjonen av Arduino IDE fra Arduino.
- Koble Arduino Nano-kortet til den bærbare datamaskinen og åpne kontrollpanelet. i kontrollpanelet, klikk påMaskinvare og lyd. Klikk nå påEnheter og skrivere.Her finner du porten som mikrokontrollerkortet er koblet til. I mitt tilfelle er det COM14men det er forskjellig på forskjellige datamaskiner.
- Klikk på Verktøy-menyen. og sett styret til Arduino Nano fra rullegardinmenyen.
- I samme Verktøy-meny, sett porten til portnummeret du observerte før i Enheter og skrivere.
- I samme verktøymeny, sett prosessoren til ATmega328P (gammel bootloader).
- Last ned koden som er vedlagt nedenfor, og lim den inn i Arduino IDE. Klikk på laste opp -knappen for å brenne koden på mikrokontrollerkortet.
Klikk her for å laste ned koden.
Trinn 7: Forstå koden
Koden som brukes i dette prosjektet er veldig enkel og ganske godt kommentert. Det er to filer med koder i den vedlagte mappen. Kode for senderen og en kode for mottakersiden er gitt hver for seg. Vi vil laste opp disse kodene i begge de respektive Arduino-kortene. Selv om det er selvforklarende, blir det kort beskrevet nedenfor.
Kode for sendersiden
1. I starten initialiseres pinner på Arduino-kortet som skal kobles til ultralydsensoren. Deretter blir variablene deklarert som vil bli brukt til å lagre verdier for beregning av tid og avstand i løpet av koden.
// definerer pins tall const int trigPin = 9; // Koble trigpinnen til ultralydssensoren til pin9 av Arduino const int echoPin = 10; // Koble øko-pinnen til ultralydssensoren til pin10 av Arduino // definerer variabler med lang varighet; // variabel for å lagre tiden det tar av ultralydbølgen t reise avstand; // variabel for å lagre avstand beregnet
2. ugyldig oppsett ()er en funksjon som bare kjører en gang i starten når kortet tennes eller aktiveringsknappen trykkes. Her er begge pinnene til Arduino erklært brukt INNGANG og PRODUKSJON. Baudrate er satt i denne funksjonen. Baudrate er hastigheten i bits per sekund som mikrokontrolleren kommuniserer med ultralydssensoren.
ugyldig oppsett () {pinMode (trigPin, OUTPUT); // Angir trigPin som en Output pinMode (echoPin, INPUT); // Angir echoPin som en inngangsserie. Begynnelse (9600); // Starter seriekommunikasjonen}
3. ugyldig sløyfe ()er en funksjon som går igjen og igjen i en løkke. Her har vi kodet mikrokontrolleren slik at den sender et HØYT signal til utløserpinnen til ultralydssensoren, vitter i 20 mikrosekunder og sender et LAVT signal til den.
void loop () {// Setter trigPin på HIGH-tilstand i 10 mikrosekunder digitalWrite (trigPin, HIGH); // sende et HØYT signal på utløseren av den første sensorforsinkelsen Microseconds (10); // vent i 10 mikrosekunder digitalWrite (trigPin, LOW); // sende et LAVT signal til utløseren av den første sensorforsinkelsen (2); // vent i 0,2 sekunder}
Kode for mottakersiden
1. I starten initialiseres pinner på Arduino-kortet som skal kobles til ultralydsensoren. Deretter blir variablene deklarert som vil bli brukt til å lagre verdier for beregning av tid og avstand i løpet av koden.
// definerer pins tall const int trigPin = 9; // Koble trigpinnen til ultralydssensoren til pin9 av Arduino const int echoPin = 10; // Koble øko-pinnen til ultralydssensoren til pin10 av Arduino // definerer variabler med lang varighet; // variabel for å lagre tiden det tar av ultralydbølgen t reise int avstand; // variabel for å lagre avstand beregnet
2. ugyldig oppsett ()er en funksjon som bare kjører en gang i starten når tavlen slås på eller aktiveringsknappen trykkes. Her er begge pinnene til Arduino erklært brukt som INNGANG og UTGANG. Baudrate er satt i denne funksjonen. Baudrate er hastigheten i bits per sekund som mikrokontrolleren kommuniserer med ultralydssensoren.
ugyldig oppsett () {pinMode (trigPin, OUTPUT); // Angir trigPin som en Output pinMode (echoPin, INPUT); // Angir echoPin som en inngangsserie. Begynnelse (9600); // Starter seriekommunikasjonen}
3. ugyldig Trigger_US () er en funksjon som kalles for falske utløsere av utløseren til den andre ultralydssensoren. Vi vil synkronisere utløsertiden til utløserpinnen til begge sensorene.
ugyldig Trigger_US () {// Falske utløsere den amerikanske sensoren digitalWrite (trigPin, HIGH); // Send et HØYT signal til utløserpinnen til Second sensor delayMicroseconds (10); // vent på 10 mikrosekunder digitalWrite (trigPin, LOW); // send et LAVT signal til utløserpinnens andre avsender}
4. ugyldig Calc ()er en funksjon som brukes til å beregne tiden det tar ultralydssignalet å reise fra den første sensoren til den andre sensoren.
void Calc () // funksjon for å beregne tiden det tar av ultralydbølgen å reise {varighet = 0; // varighet opprinnelig satt til null Trigger_US (); // ring Trigger_US-funksjonen mens (digitalRead (echoPin) == HIGH); // mens statusen til eo pin i høy forsinkelse (2); // sette en forsinkelse på 0,2 sekunder Trigger_US (); // ring Trigger_US-funksjonens varighet = pulseIn (echoPin, HIGH); // beregne tiden det tar}
5. Her i ugyldig sløyfe ()funksjon, beregner vi avstanden ved å bruke tiden det tar ultralydssignalet å reise fra den første sensoren til den andre sensoren.
ugyldig sløyfe () {Pdistance = avstand; Calc (); // ring til funksjonen Calc () avstand = varighet * 0,034; // kalibrere avstanden dekket av ultralydbølgen hvis (Pdistance == avstand || Pdistance == avstand + 1 || Pdistance == avstand-1) {Serial.print ("Målt avstand:"); // skriv ut på seriell skjerm Serial.println (avstand / 2); // skriv ut på seriell skjerm} //Serial.print("Distance: "); //Serial.println(avstand/2); forsinkelse (500); // vent i 0,5 sekunder}