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 vil bli integrert 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.



Måling av avstand ved hjelp av Arduino

Teknikken som brukes her er bare nyttig på småskala systemer der 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.



  • Jumper Wires
  • 5V AC til DC-adapter (x2)

Trinn 2: Samle komponentene (programvare)

  • Proteus 8 Professional (Kan lastes ned fra Her )

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-pin til 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 sensormottakeren.

Å lage din ultralydsensor senderen kun, 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 ultralydssensoren 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 som ingen UV-bølger kommer ut. Da vil ikke ECO-pinnen til denne senderen bli påvirket av senderen.

Trinn 4: Arbeid av kretsen

Nå som vi har fått begge sensorene til å fungere hver for seg 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 signal til mottakerens ECO 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 forbli 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:

  1. Ta to ultralydssensorer. Dekk mottakeren til den første sensoren og senderen til den andre sensoren. Bruk hvitt kanaltape 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.
  2. 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.
  3. Last opp mottakerkoden til mottakerens Arduino og senderkoden til senderens Arduino.
  4. Åpne nå seriell skjerm på mottakersiden og merk avstanden som måles.

Kretsskjemaet for dette prosjektet ser ut som:

Kretsdiagram

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.

  1. Last ned den nyeste versjonen av Arduino IDE fra Arduino.
  2. 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 COM14 men det er forskjellig på forskjellige datamaskiner.

    Finne havn

  3. Klikk på Verktøy-menyen. og sett styret til Arduino Nano fra rullegardinmenyen.

    Sette styret

  4. I samme Verktøy-meny, sett porten til portnummeret du observerte før i Enheter og skrivere .

    Innstilling av port

  5. I samme verktøymeny, sett prosessoren til ATmega328P (gammel Bootloader ).

    Prosessor

  6. Last ned koden som er vedlagt nedenfor, og lim den inn i Arduino IDE. Klikk på laste opp -knappen for å brenne koden på mikrokontrollerkortet.

    Laste opp

For å laste ned koden, Klikk her.

Trinn 7: Forstå koden

Koden som brukes i dette prosjektet er veldig enkel og ganske kommentert. Det er to filer med koder i den vedlagte mappen. Kode for senderen og en kode for mottakersiden er begge gitt separat. 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 begynnelsen initialiseres pinnene på Arduino-kortet som skal kobles til ultralydssensoren. 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 ultralydsensoren 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 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); // Setter trigPin som en Output pinMode (echoPin, INPUT); // Setter 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, klar 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 begynnelsen initialiseres pinnene på Arduino-kortet som skal kobles til ultralydssensoren. 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 ultralydsensoren 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); // Setter trigPin som en Output pinMode (echoPin, INPUT); // Setter echoPin som en inngangsserie. Begynnelse (9600); // Starter seriekommunikasjonen}

3. ugyldig Trigger_US () er en funksjon som kalles for falske utløsere av trig-pinnen 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}

Fire. 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); // beregn 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 (); // kalle 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('Avstand: '); //Serial.println(avstand/2); forsinkelse (500); // vent i 0,5 sekunder}