Kako izmeriti razdaljo med dvema točkama z uporabo Arduina?

V elektroniki se večinoma ultrazvočni senzorji uporabljajo za merjenje razdalje od določene točke do druge. Na ploščo Arduino je zelo enostavno napisati kodo in jo integrirati ultrazvočni senzor za izvedbo te naloge. Toda v tem članku bomo sprejeli drugačen pristop. Uporabili bomo dva ločena ultrazvočna senzorja, ki bosta integrirana z dvema ločenima Arduino. Ta dva modula bosta postavljena na dve različni točki, med katerimi bo merjena razdalja. En senzor bo sprejemnik, drugi pa oddajnik. S tem bomo lahko izmerili razdaljo med njimi samo tako, da bomo z uporabo številnih ultrazvočnih sprejemnikov poiskali položaj oddajnika. Tehnika, ki jo tukaj uporabljamo, se imenuje Triangulacija.



Merjenje razdalje z uporabo Arduina

Tu uporabljena tehnika je uporabna le za sisteme majhnega obsega, kjer je majhna razdalja. Za njegovo izvajanje v velikem obsegu so zagotovo potrebne nekatere spremembe. Vsi izzivi, s katerimi smo se soočali med izvajanjem tega projekta, so navedeni v nadaljevanju.



Kako uporabiti Arduino in ultrazvočni senzor za merjenje razdalje?

Ker poznamo povzetek projekta, pojdimo naprej in zberemo dodatne informacije za začetek projekta.



1. korak: Zbiranje komponent (strojna oprema)

Če se želite izogniti nevšečnostim sredi katerega koli projekta, je najboljši pristop sestaviti popoln seznam vseh komponent, ki jih bomo uporabili. Drugi korak, preden začnete izdelovati vezje, je kratek študij vseh teh komponent. Seznam vseh komponent, ki jih potrebujemo v tem projektu, je spodaj.



  • Jumper žice
  • 5V adapter za izmenični in enosmerni tok (x2)

2. korak: Zbiranje komponent (programska oprema)

  • Proteus 8 Professional (Lahko ga prenesete z Tukaj )

Po prenosu Proteus 8 Professional na njem oblikujte vezje. Sem sem vključil programske simulacije, tako da je lahko začetnikom primerno načrtovati vezje in vzpostaviti ustrezne povezave na strojni opremi.

3. korak: Delo HCR-05

Ker zdaj poznamo glavni povzetek našega projekta, pojdimo naprej in si oglejmo kratko študijo o delovanju HCR-05 . Glavno delovanje tega senzorja lahko razumete po naslednjem diagramu.

Ta senzor ima dva zatiča, sprožilni zatič, in eko pin ki se uporabljata za merjenje razdalje med dvema določenima točkama. Postopek se začne s pošiljanjem ultrazvočnega vala s senzorja. Ta naloga se opravi tako, da sproži trig pin za 10us. Takoj, ko je ta naloga opravljena, se iz oddajnika pošlje 8 zvočnih izbruhov ultrazvočnih valov. ta val bo potoval po zraku in takoj, ko udari predmet na svojo pot, bo udaril nazaj in ga sprejel sprejemnik, vgrajen v senzor.



Ko bo sprejemnik po odboju senzorja sprejel ultrazvočni val, bo dal eko pin v visoko stanje. Ta zatič bo ostal v visokem stanju toliko časa, ki bo popolnoma enak času, ki ga ultrazvočni val potuje od oddajnika in nazaj do sprejemnika senzorja.

Za izdelavo ultrazvočnega senzorja oddajnik samo, samo naredite trig pin kot izhodni pin in na ta pin pošljite visok impulz za 10us. Takoj, ko se to izvede, se sproži ultrazvočni izbruh. Torej, kadar koli naj se val prenaša, je treba nadzorovati samo sprožilni zatič ultrazvočnega senzorja.

Ultrazvočnega senzorja ni mogoče narediti kot a samo sprejemnik ker vzpona ECO zatiča ne more nadzorovati mikrokrmilnik, ker je povezan s trig zatičem senzorja. Lahko pa naredimo eno stvar: oddajnik tega ultrazvočnega senzorja lahko prekrijemo z lepilnim trakom, da ne pride ven UV val. Potem oddajnik ne bo vplival na ECO zatič tega oddajnika.

4. korak: Delo vezja

Zdaj, ko smo naredili, da oba senzorja delujeta ločeno kot oddajnik in sprejemnik, se tu srečujemo z veliko težavo. Sprejemnik ne bo vedel, koliko časa ultrazvočni val potrebuje za pot od oddajnika do sprejemnika, ker ne ve natančno, kdaj je bil ta val poslan.

Da bi rešili to težavo, moramo poslati a VISOKO signal na ECO sprejemnika takoj, ko se ultrazvočni val odda na senzor oddajnika. Ali z enostavnimi besedami lahko rečemo, da je treba ECO sprejemnika in sprožilca oddajnika hkrati poslati na HIGH. Da bi to dosegli, bomo nekako sprožili sprožilec sprejemnika visoko, takoj ko se sprožilec oddajnika dvigne visoko. Ta sprožilec sprejemnika bo ostal visok, dokler se ne zažene ECO zatič NIZKO . Ko bo ECO-sprejemnik sprejemnika prejel ultrazvočni signal, bo šel NIZKO. To bo pomenilo, da je sprožilec senzorja oddajnika pravkar dobil VISOK signal. Zdaj, takoj ko se ECO spusti, bomo počakali na znano zakasnitev in sprožilec sprejemnika postavili VISOKO. S tem se sprožilca obeh senzorjev sinhronizirata in razdalja se izračuna s poznavanjem časovne zakasnitve potovanja vala.

5. korak: Sestavljanje komponent

Čeprav uporabljamo samo oddajnik enega ultrazvočnega senzorja in sprejemnik drugega, vendar je obvezno priključiti vse štiri zatiče ultrazvočni senzor do Arduina. Če želite povezati vezje, sledite spodnjim korakom:

  1. Vzemite dva ultrazvočna senzorja. Pokrijte sprejemnik prvega senzorja in oddajnik drugega senzorja. V ta namen uporabite bel lepilni trak in zagotovite, da sta ta dva popolnoma prekrita, tako da noben signal ne zapusti oddajnika drugega senzorja in noben signal ne pride v sprejemnik prvega senzorja.
  2. Povežite dva Arduina na dveh ločenih ploščah in z njimi povežite njihova senzorja. Zatič sprožilca priključite na pin9 Arduina in ecoPin na pin10 Arduina. Vklopite ultrazvočni senzor s 5V Arduino in združite vse razloge.
  3. Prenesite kodo sprejemnika v Arduino sprejemnika in kodo oddajnika v Arduino oddajnika.
  4. Zdaj odprite serijski monitor sprejemne strani in si zabeležite razdaljo, ki jo merite.

Shema vezja tega projekta je videti tako:

Shema vezja

6. korak: Uvod v Arduino

Če še niste seznanjeni z Arduino IDE, ne skrbite, ker je spodaj razložen podroben postopek za nastavitev in uporabo Arduino IDE z mikrokrmilnikom.

  1. Prenesite najnovejšo različico Arduino IDE iz Arduino.
  2. Povežite ploščo Arduino Nano s prenosnikom in odprite nadzorno ploščo. na nadzorni plošči kliknite Strojna oprema in zvok . Zdaj kliknite na Naprave in tiskalniki. Tu poiščite vrata, na katera je priključena plošča vašega mikrokrmilnika. V mojem primeru je COM14 v različnih računalnikih pa je drugače.

    Iskanje pristanišča

  3. Kliknite meni Orodje. in nastavite tablo na Arduino Nano iz spustnega menija.

    Nastavitvena plošča

  4. V istem meniju Orodja nastavite vrata na številko vrat, ki ste jih opazili prej v Naprave in tiskalniki .

    Nastavitev vrat

  5. V istem meniju orodja nastavite procesor na ATmega328P (staro Bootloader ).

    Procesor

  6. Prenesite spodnjo kodo in jo prilepite v svoj Arduino IDE. Kliknite na naložite za zapisovanje kode na ploščo mikrokrmilnika.

    Naloži

Če želite prenesti kodo, Klikni tukaj.

7. korak: Razumevanje kodeksa

Koda, uporabljena v tem projektu, je zelo preprosta in zelo dobro komentirana. V priloženi mapi sta dve datoteki kod. Koda oddajnika in koda sprejemne strani sta podani ločeno. Te kode bomo naložili na obe ustrezni plošči Arduino. Čeprav je samoumeven, je na kratko opisan spodaj.

Koda na strani oddajnika

1. Na začetku se inicializirajo nožice plošče Arduino, ki bodo priključene na ultrazvočni senzor. Nato se navedejo spremenljivke, ki bodo uporabljene za shranjevanje vrednosti za izračun časa in razdalje med časom izvajanja kode.

// definira številke zatičev const int trigPin = 9; // Trig pin ultrazvočnega senzorja priključimo na pin 9 Arduino const int echoPin = 10; // ekološki zatič ultrazvočnega senzorja priključimo na pin10 Arduina // definira spremenljivke, ki trajajo dolgo; // spremenljivka za shranjevanje časa, ki ga ultrazvočni val potuje na razdalji; // spremenljivka za shranjevanje izračunane razdalje

2. void setup () je funkcija, ki se ob zagonu plošče ali pritisku na gumb za vklop zažene samo enkrat. Tu sta oba zatiča Arduino razglašena za uporabljena kot VHOD in IZHOD . V tej funkciji je nastavljena hitrost prenosa. Hitrost prenosa je hitrost v bitov na sekundo, s katero mikrokrmilnik komunicira z ultrazvočnim senzorjem.

void setup () {pinMode (trigPin, IZHOD); // trigPin nastavi kot izhodni pinMode (echoPin, INPUT); // nastavi echoPin kot vhodni serijski.begin (9600); // Zažene serijsko komunikacijo}

3. void loop () je funkcija, ki se vedno znova izvaja v zanki. Tu smo mikrokontroler kodirali tako, da pošlje VISOK signal na sprožilni zatič ultrazvočnega senzorja, počaka 20 mikrosekund in mu pošlje LOW signal.

void loop () {// nastavi trigPin na HIGH stanje za 10 mikro sekund digitalWrite (trigPin, HIGH); // pošljemo HIGH signal na sprožilec prvega senzorja delayMicroseconds (10); // počakamo 10 mikro sekund digitalWrite (trigPin, LOW); // pošljemo LOW signal na sprožilec prve zakasnitve senzorja (2); // počakamo 0,2 sekunde}

Koda na strani sprejemnika

1. Na začetku se inicializirajo nožice plošče Arduino, ki bodo priključene na ultrazvočni senzor. Nato se navedejo spremenljivke, ki bodo uporabljene za shranjevanje vrednosti za izračun časa in razdalje med časom izvajanja kode.

// definira številke zatičev const int trigPin = 9; // Trig pin ultrazvočnega senzorja priključimo na pin 9 Arduino const int echoPin = 10; // ekološki zatič ultrazvočnega senzorja priključimo na pin10 Arduina // definira spremenljivke, ki trajajo dolgo; // spremenljivka za shranjevanje časa, ki ga ultrazvočni val t prevozi na razdalji; // spremenljivka za shranjevanje izračunane razdalje

2. void setup () je funkcija, ki se ob zagonu plošče ali pritisku na gumb za vklop zažene samo enkrat. Tu sta oba zatiča Arduino razglašena za uporabljena kot VHOD in IZHOD. V tej funkciji je nastavljena hitrost prenosa. Hitrost prenosa je hitrost v bitov na sekundo, s katero mikrokrmilnik komunicira z ultrazvočnim senzorjem.

void setup () {pinMode (trigPin, IZHOD); // trigPin nastavi kot izhodni pinMode (echoPin, INPUT); // nastavi echoPin kot vhodni serijski.begin (9600); // Zažene serijsko komunikacijo}

3. void Trigger_US () je funkcija, ki bo imenovana za lažno sprožitev trig zatiča drugega ultrazvočnega senzorja. Sinhronizirali bomo čas sprožitve sprožilnega zatiča obeh senzorjev.

void Trigger_US () {// Lažni sproži ameriški senzor digitalWrite (trigPin, HIGH); // pošljemo HIGH signal na sprožilni zatič sekunde delayMicroseconds (10); // počakamo 10 mikrosekund digitalWrite (trigPin, LOW); // pošljemo LOW signal na sprožilni pin drugi pošiljatelj}

Štiri. void Calc () je funkcija, ki se uporablja za izračun časa, ki ga ultrazvočni signal prevozi od prvega senzorja do drugega senzorja.

void Calc () // funkcija za izračun časa, ki ga ultrazvočni val potuje {trajanje = 0; // trajanje prvotno nastavljeno na nič Trigger_US (); // pokličemo funkcijo Trigger_US while (digitalRead (echoPin) == HIGH); // medtem ko je status eo pin v veliki zakasnitvi (2); // postavimo zakasnitev 0,2 sekunde Trigger_US (); // pokličemo funkcijo Trigger_US duration = pulseIn (echoPin, HIGH); // izračunamo potreben čas}

5. Tukaj v void loop () funkcijo izračunamo razdaljo tako, da uporabimo čas, ki ga ultrazvočni signal porabi za pot od prvega senzorja do drugega senzorja.

void loop () {Pdistance = razdalja; Izračun (); // pokličemo funkcijo Calc () razdalja = trajanje * 0,034; // izračunavanje razdalje, ki jo prevozi ultrazvočni val, če (Pdistance == razdalja || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Merjena razdalja:'); // tiskanje na serijski monitor Serial.println (distance / 2); // tiskanje na serijski monitor} //Serial.print('Distance: '); //Serial.println(distance/2); zamuda (500); // počakamo 0,5 sekunde}