Kako izmjeriti udaljenost između dvije točke pomoću Arduina?

U elektronici se većinom ultrazvučni senzori koriste za mjerenje udaljenosti od određene točke do druge. Vrlo je jednostavno napisati kod na ploču Arduino i integrirati an ultrazvučni senzor izvršiti ovaj zadatak. Ali u ovom ćemo članku usvojiti drugačiji pristup. Koristit ćemo dva odvojena ultrazvučna senzora koja će biti integrirana s dva odvojena Arduina. Ova dva modula bit će postavljena na dvije različite točke između kojih se mjeri udaljenost. Jedan senzor postat će prijamnik, a drugi odašiljač. Na taj način moći ćemo izmjeriti udaljenost između njih samo lociranjem položaja odašiljača pomoću mnogih ultrazvučnih prijemnika. Nazvana je Tehnika koju ovdje koristimo Triangulacija.



Mjerenje udaljenosti pomoću Arduina

Ovdje korištena tehnika samo je korisna u sustavima malih razmjera gdje se može naći mala udaljenost. Da bi se primijenila na veliko, zasigurno su potrebne neke izmjene. Svi izazovi s kojima se suočavali tijekom izvođenja ovog projekta razmatrani su u nastavku.



Kako koristiti Arduino i ultrazvučni senzor za mjerenje udaljenosti?

Kako znamo sažetak koji stoji iza projekta, krenimo dalje i prikupljajmo daljnje informacije za početak projekta.



Korak 1: Prikupljanje komponenata (hardver)

Ako želite izbjeći bilo kakve neugodnosti usred bilo kojeg projekta, najbolji je pristup napraviti cjelovit popis svih komponenata koje ćemo koristiti. Drugi korak, prije početka izrade sklopa, je proći kroz kratko proučavanje svih tih komponenata. Popis svih komponenata koje su nam potrebne u ovom projektu dan je u nastavku.



  • Jumper žice
  • 5V adapter za izmjenični i istosmjerni tok (x2)

Korak 2: Prikupljanje komponenata (softver)

  • Proteus 8 Professional (Može se preuzeti s Windows Vista Ovdje )

Nakon preuzimanja Proteus 8 Professional, dizajnirajte sklop na njemu. Ovdje sam uključio softverske simulacije kako bi početnicima bilo prikladno dizajnirati sklop i uspostaviti odgovarajuće veze na hardveru.

Korak 3: Rad HCR-05

Kako sada znamo glavnu sažetak našeg projekta, krenimo dalje i prođite kroz kratku studiju rada tvrtke HCR-05 . Glavni rad ovog senzora možete razumjeti na sljedećem dijagramu.

Ovaj senzor ima dvije pinove, okidač, i eko pribadača koje se obje koriste za mjerenje udaljenosti između dvije određene točke. Proces se započinje slanjem ultrazvučnog vala sa senzora. Ovaj se zadatak izvršava aktiviranjem klina trig za 10us. Čim je ovaj zadatak završen, odašiljač šalje 8 zvučnih provala ultrazvučnih valova. ovaj će val putovati u zraku i čim udari objekt na svoj način, uzvratit će ga i primiti ga prijemnik ugrađen u senzor.



Kada prijemnik primi ultrazvučni val nakon što odbije senzor, on će staviti eko pribadača do visoke države. Ovaj će pin ostati u visokom stanju tijekom vremena koje će biti točno jednako vremenu koje je ultrazvučnom valu trebalo za putovanje od odašiljača i natrag do prijamnika senzora.

Da napravite svoj ultrazvučni senzor odašiljač samo, samo napravite trig pin kao svoj izlazni pin i pošaljite snažni impuls na ovaj pin za 10us. Ultrazvučni prasak pokrenut će se čim se to učini. Dakle, kad god se val treba prenositi, treba kontrolirati samo okidač na ultrazvučnom senzoru.

Ne postoji način da ultrazvučni senzor napravimo kao samo prijemnik jer porast ECO pina ne može kontrolirati mikrokontroler jer je povezan s trig pinom senzora. Ali postoji jedna stvar koju možemo učiniti, možemo prekrivati ​​odašiljač ovog ultrazvučnog senzora selotejpom da ne bi izašao UV val. Tada odašiljač neće utjecati na ECO pin ovog predajnika.

Korak 4: Rad kruga

Budući da smo učinili da oba senzora rade odvojeno kao odašiljač i prijemnik, ovdje se suočava s velikim problemom. Prijamnik neće znati vrijeme koje je ultrazvučnom valu trebalo da pređe od odašiljača do prijemnika, jer ne zna točno kada je taj val odašiljan.

Da bismo riješili ovaj problem, moramo poslati a VISOKO signal na ECO prijemnika čim se ultrazvučni val prenese na senzor odašiljača. Ili jednostavnim riječima, možemo reći da ECO prijemnika i okidač odašiljača treba istovremeno slati na HIGH. Dakle, da bismo to postigli, nekako ćemo okidač prijemnika podići visoko čim se okidač odašiljača podigne visoko. Ovaj okidač prijemnika ostat će visok dok se ECO pin ne uključi NISKO . Kada ECO pin prijemnika primi ultrazvučni signal, on ide NISKO. To će značiti da je okidač senzora odašiljača upravo dobio VISOK signal. Sada, čim ECO padne, pričekat ćemo poznato kašnjenje i staviti okidač prijemnika VISOKO. Na taj će se način okidači oba senzora sinkronizirati i udaljenost će se izračunati znajući vremensko kašnjenje putovanja vala.

Korak 5: Sastavljanje komponenata

Iako koristimo samo odašiljač jednog ultrazvučnog senzora i prijemnik drugog, ali obvezno je spojiti sve četiri pinove ultrazvučni senzor do Arduina. Da biste povezali krug, slijedite korake dane u nastavku:

  1. Uzmite dva ultrazvučna senzora. Pokrijte prijemnik prvog senzora i odašiljač drugog senzora. U tu svrhu upotrijebite bijelu ljepljivu traku i pobrinite se da su ove dvije potpuno prekrivene tako da nijedan signal ne napusti odašiljač drugog senzora i da signal ne uđe u prijemnik prvog senzora.
  2. Spojite dva Arduina na dvije zasebne ploče i povežite njihove odgovarajuće senzore. Spojite pin okidača na pin9 Arduina i ecoPin na pin10 Arduina. Pojačajte ultrazvučni senzor pomoću napona Arduino od 5 V i zajedničke sve osnove.
  3. Učitajte kod prijamnika u Arduino prijemnika, a kod odašiljača u Arduino odašiljača.
  4. Sada otvorite serijski monitor prijemne strane i zabilježite udaljenost koja se mjeri.

Shema spoja ovog projekta izgleda ovako:

Kružni dijagram

Korak 6: Početak rada s Arduinom

Ako već niste upoznati s Arduino IDE-om, ne brinite jer je u nastavku objašnjen korak po korak za postavljanje i upotrebu Arduino IDE-a s pločom mikrokontrolera.

  1. Preuzmite najnoviju verziju Arduino IDE sa Arduino.
  2. Spojite Arduino Nano ploču s prijenosnim računalom i otvorite upravljačku ploču. na upravljačkoj ploči kliknite na Hardver i zvuk . Sada kliknite na Uređaji i pisači. Ovdje pronađite priključak na koji je spojena vaša ploča mikrokontrolera. U mom slučaju jest COM14 ali je različito na različitim računalima.

    Pronalaženje luke

  3. Kliknite izbornik Alat. i postavite ploču na Arduino Nano s padajućeg izbornika.

    Odbor za postavljanje

  4. U istom izborniku Alata postavite port na broj porta koji ste prije primijetili u Uređaji i pisači .

    Postavka porta

  5. U istom izborniku Alata postavite procesor na ATmega328P (staro Bootloader ).

    Procesor

  6. Preuzmite dolje priloženi kôd i zalijepite ga u svoj Arduino IDE. Klikni na Učitaj gumb za snimanje koda na ploči mikrokontrolera.

    Učitaj

Da biste preuzeli kôd, kliknite ovdje.

Korak 7: Razumijevanje kodeksa

Kôd korišten u ovom projektu vrlo je jednostavan i prilično dobro komentiran. U priloženoj mapi nalaze se dvije datoteke s kodovima. Kôd za odašiljač i kod za prijemnik daju se odvojeno. Te ćemo kodove učitati na obje odgovarajuće ploče Arduino. Iako je samorazumljivo, ukratko je opisano u nastavku.

Šifra na strani odašiljača

1. Na početku se inicijaliziraju pinovi ploče Arduino koji će biti povezani s ultrazvučnim senzorom. Tada se deklariraju varijable koje će se koristiti za pohranu vrijednosti za izračunavanje vremena i udaljenosti tijekom vremena izvođenja koda.

// definira brojeve pinova const int trigPin = 9; // Spojimo klin trig ultrazvučnog senzora na pin 9 Arduino const int echoPin = 10; // ekološki pin ultrazvučnog senzora spojimo na pin 10 Arduina // definira dugotrajne varijable; // varijabla za pohranu vremena koje ultrazvučni val t putuje na udaljenost; // varijabla za pohranu izračunane udaljenosti

2. void postavljanje () je funkcija koja se pokreće samo jednom u startu kada se ploča uključi ili pritisne gumb za omogućivanje. Ovdje se proglašava da se obje pinove Arduina koriste kao ULAZNI i IZLAZ . Baudrate je postavljen u ovoj funkciji. Brzina prijenosa je brzina u bitovima u sekundi kojom mikrokontroler komunicira s ultrazvučnim senzorom.

void setup () {pinMode (trigPin, IZLAZ); // Postavlja trigPin kao izlazni pinMode (echoPin, INPUT); // Postavlja echoPin kao ulazni serijski.begin (9600); // Pokreće serijsku komunikaciju}

3. petlja void () je funkcija koja se uvijek iznova izvodi u petlji. Ovdje smo kodirali mikrokontroler tako da šalje VISOKI signal na okidački pin ultrazvučnog senzora, nestaje 20 mikrosekundi i šalje mu NISKI signal.

void loop () {// Postavlja trigPin na HIGH stanje na 10 mikro sekundi digitalWrite (trigPin, HIGH); // šalji HIGH signal na okidaču prvog senzora delayMicroseconds (10); // čekamo 10 mikro sekundi digitalWrite (trigPin, LOW); // pošalji LOW signal na okidač prvog kašnjenja senzora (2); // čekamo 0,2 sekunde}

Šifra na strani prijemnika

1. Na početku se inicijaliziraju pinovi ploče Arduino koji će biti povezani s ultrazvučnim senzorom. Tada se deklariraju varijable koje će se koristiti za pohranu vrijednosti za izračunavanje vremena i udaljenosti tijekom vremena izvođenja koda.

// definira brojeve pinova const int trigPin = 9; // Spojimo klin trig ultrazvučnog senzora na pin 9 Arduino const int echoPin = 10; // ekološki pin ultrazvučnog senzora spojimo na pin 10 Arduina // definira dugotrajne varijable; // varijabla za pohranu vremena koje ultrazvučni val t putuje na udaljenost; // varijabla za pohranu izračunane udaljenosti

2. void postavljanje () je funkcija koja se pokreće samo jednom u startu kada se ploča uključi ili pritisne gumb za omogućivanje. Ovdje se proglašava da se obje pinove Arduina koriste kao INPUT i OUTPUT. Baudrate je postavljen u ovoj funkciji. Brzina prijenosa je brzina u bitovima u sekundi kojom mikrokontroler komunicira s ultrazvučnim senzorom.

void setup () {pinMode (trigPin, IZLAZ); // Postavlja trigPin kao izlazni pinMode (echoPin, INPUT); // Postavlja echoPin kao ulazni serijski.begin (9600); // Pokreće serijsku komunikaciju}

3. void Trigger_US () je funkcija koja će se zvati za lažno okidanje okidača drugog ultrazvučnog senzora. Sinkronizirat ćemo vrijeme okidanja okidača oba senzora.

void Trigger_US () {// Lažni okidač američkog senzora digitalWrite (trigPin, HIGH); // Šalji HIGH signal na okidački pin sekunde delayMicroseconds (10); // čekamo 10 mikrosekundi digitalWrite (trigPin, LOW); // slanje NISKOG signala na drugi okidač pina okidača}

Četiri. void Calc () je funkcija koja se koristi za izračunavanje vremena koje ultrazvučnom signalu treba za putovanje od prvog senzora do drugog senzora.

void Calc () // funkcija za izračunavanje vremena koje ultrazvučnom valu važi za putovanje {trajanje = 0; // trajanje inicijalno postavljeno na nulu Trigger_US (); // pozivamo funkciju Trigger_US while (digitalRead (echoPin) == HIGH); // dok je status eo pina u velikom kašnjenju (2); // stavimo kašnjenje od 0,2 sekunde Trigger_US (); // pozivamo funkciju Trigger_US duration = pulseIn (echoPin, HIGH); // izračunavanje potrebnog vremena}

5. Ovdje u petlja void () funkciju izračunavamo udaljenost koristeći vrijeme koje ultrazvučni signal uzima za put od prvog senzora do drugog senzora.

void loop () {Pdistanca = udaljenost; Izračun (); // pozovimo udaljenost funkcije Calc () = trajanje * 0,034; // izračunavanje udaljenosti koju prelazi ultrazvučni val ako je (Pdistanca == udaljenost || Pddaljenost == udaljenost + 1 || Pddaljenost == udaljenost-1) {Serial.print ('Izmjerena udaljenost:'); // ispis na serijskom monitoru Serial.println (distance / 2); // ispis na serijskom monitoru} //Serial.print('Distance: '); //Serial.println(distancija/2); kašnjenje (500); // čekamo 0,5 sekunde}