Cuprins:

Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino: 20 de pași (cu imagini)
Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino: 20 de pași (cu imagini)

Video: Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino: 20 de pași (cu imagini)

Video: Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino: 20 de pași (cu imagini)
Video: MASURARI DE LUNGIME - PARTEA I 2024, Noiembrie
Anonim
Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino
Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino
Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino
Compararea telemetrelor sonarelor LV-MaxSonar-EZ și HC-SR04 cu Arduino

Constat că multe proiecte (în special roboți) necesită sau pot beneficia de măsurarea distanței până la un obiect în timp real. Găsitoarele de sonar sunt relativ ieftine și pot fi ușor interfațate cu un microcontroler precum Arduino.

Acest instructabil compară două dispozitive de localizare a sonarelor ușor de achiziționat, arătând cum să le conectați la Arduino, ce cod este necesar pentru a citi valorile din ele și cum se „măsoară” unul față de celălalt în situații diferite. Din aceasta, sper că veți obține informații despre avantajele și dezavantajele celor două dispozitive care vă vor ajuta să utilizați cel mai potrivit dispozitiv în următorul dvs. proiect.

Am vrut să compar dispozitivul extrem de popular HC-SR04 (bug-eye), cu dispozitivul mai puțin obișnuit LV-MaxSonar-EZ pentru a vedea când aș putea dori să folosesc unul mai degrabă decât celălalt. Am vrut să împărtășesc constatările și configurarea mea, astfel încât să puteți experimenta cu cele două și să decideți pe care să le folosiți în următorul dvs. proiect.

De ce aceste două …

HC-SR04 „Bug-Eye” HC-SR04 este extrem de popular - din câteva motive:

  • Este ieftin - 2 USD sau mai puțin dacă este cumpărat în vrac
  • Este relativ ușor de interfațat cu
  • Multe, multe, proiecte îl folosesc - deci este bine cunoscut și bine înțeles

De ce LV-MaxSonar-EZ?

  • Este foarte ușor de interfațat cu
  • Are un factor de formă bun / ușor de încorporat într-un proiect
  • Are 5 versiuni care se adresează diferitelor cerințe de măsurare (vezi fișa tehnică)
  • Este (de obicei) mult mai precis și mai fiabil decât HC-SR04
  • Este accesibil - între 15 și 20 USD

În plus, sper că veți găsi bucăți în codul Arduino pe care l-am scris pentru comparație util în proiectele dvs., chiar și dincolo de aplicațiile de telemetru.

Ipoteze:

  • Sunteți familiarizați cu Arduino și Arduino IDE
  • ID-ul Arduino este instalat și funcționează pe mașina dvs. de dezvoltare preferată (PC / Mac / Linux)
  • Aveți o conexiune de la Arduino IDE la Arduino pentru a încărca și rula programe și a comunica

Există instrumente instructabile și alte resurse care să vă ajute în acest sens, dacă este necesar.

Provizii

  • HC-SR04 Range-Finder „Bug-Eye”
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - folosesc un „1”, dar toate versiunile au aceeași interfață)
  • Arduino UNO
  • Pânză fără sudură
  • Antet pin - 7 pini 90 ° (pentru dispozitivul MaxSonar, a se vedea * mai jos pentru utilizarea 180 °)
  • Jumper cablu panglică - 5 fire, tată-tată
  • Jumper cablu panglică - 2 fire, tată-tată
  • Sârmă jumper - mascul-mascul
  • Sârmă de conectare - roșu și negru (pentru alimentare de la Arduino la breadboard și breadboard la dispozitive)
  • Calculator cu Arduino IDE și cablu USB pentru conectarea la Arduino UNO

* MaxSonar nu vine cu un antet atașat, astfel încât să puteți utiliza un antet care este cel mai potrivit pentru proiectul dvs. Pentru acest instructabil, am folosit un antet de 90 ° pentru a facilita conectarea la panou. În unele proiecte, un antet de 180 ° (drept) ar putea fi mai bun. Includ o fotografie pentru a arăta cum să conectați asta, astfel încât să nu trebuie să le schimbați. Dacă preferați să utilizați un antet de 180 °, veți avea nevoie de un jumper suplimentar pentru cablu cu panglică de 7 sârmă pentru a vă conecta, așa cum arată fotografia mea.

Git Hub Repository: Project Files

Pasul 1: Urmărirea …

Urmărirea…
Urmărirea…

Înainte de a intra în detalii despre cum să conectați lucrurile, astfel încât să puteți face propriile experimente cu aceste două dispozitive fantastice, am vrut să descriu câteva lucruri cu care sper că acest instructiv vă va ajuta.

Deoarece dispozitivul MaxSonar este mai puțin utilizat și mai puțin înțeles în comparație cu dispozitivul HC-SR04, am vrut să arăt:

  • Cum se conectează dispozitivul MaxSonar la un microcontroler (în acest caz un Arduino)
  • Cum să faceți măsurători de la diferitele ieșiri ale dispozitivului MaxSonar
  • Comparați interfața dispozitivului MaxSonar cu dispozitivul HC-SR04
  • Testați capacitatea de a măsura distanța obiectelor cu diferite suprafețe
  • De ce ai putea alege un dispozitiv în locul celuilalt (sau să le folosești pe ambele în tandem)

Sper că acest Instructable vă va ajuta în această urmărire …

Pasul 2: Noțiuni introductive - Configurarea Arduino-Breadboard

Noțiuni introductive - Configurare Arduino-Breadboard
Noțiuni introductive - Configurare Arduino-Breadboard

Dacă ați făcut prototipuri cu Arduino, probabil că aveți deja o configurare Arduino-Breadboard cu care vă simțiți confortabil. Dacă da, sunt încrezător că îl puteți folosi pentru acest instructabil. Dacă nu, așa am configurat-o pe a mea - nu ezitați să o copiați pentru acest proiect și pentru proiectele viitoare.

  1. Atasez Arduino UNO și o mică placă fără fir la o bucată de plastic de 3-3 / 8 "x 4-3 / 4" (8,6 x 12,0 cm) cu picioare de cauciuc pe fund.
  2. Folosesc cablu de 22-AWG roșu și negru pentru a conecta + 5V și GND de la Arduino la banda de distribuție a energiei
  3. Includ un condensator de tantal de 10µF pe banda de distribuție a solului pentru a ajuta la reducerea zgomotului de energie (dar acest proiect nu necesită acest lucru)

Aceasta oferă o platformă frumoasă, ușor de prototipat.

Pasul 3: conectați LV-MaxSonar-EZ

Conectați LV-MaxSonar-EZ
Conectați LV-MaxSonar-EZ
Conectați LV-MaxSonar-EZ
Conectați LV-MaxSonar-EZ
Conectați LV-MaxSonar-EZ
Conectați LV-MaxSonar-EZ

Cu un antet de 90 ° lipit pe dispozitivul MaxSonar, este ușor să-l conectați la panou. Cablul cu bandă cu 5 pini conectează apoi MaxSonar la Arduino așa cum se vede în diagramă. În plus față de cablul cu bandă, folosesc bucăți scurte de sârmă de conectare roșie și neagră de pe șina de distribuție a energiei electrice pentru a furniza energie dispozitivului.

Cablare:

MaxSonar Arduino Culoare
1 (BW) Putere-GND Galben
2 (PW) Digital-5 Verde
3 (AN) Analog-0 Albastru
4 (RX) Digital-3 Violet
5 (TX) Digital-2 Gri
6 (+5) +5 Șină BB-PWR roșu
7 (GND) Sina GND BB-PWR Negru

Notă:

Nu lăsați numărul de conexiuni utilizate în acest instructabil să vă împiedice să luați în considerare MaxSonar pentru proiectul dvs. Acest instructabil folosește toate opțiunile interfeței MaxSonar pentru a ilustra modul în care funcționează și pentru a le compara între ele și cu dispozitivul HC-SR04. Pentru o anumită utilizare (folosind una dintre opțiunile de interfață), un proiect va utiliza în general unul sau doi dintre pinii de interfață (plus putere și masă).

Pasul 4: Conectați HC-SR04

HC-SR04 vine în mod obișnuit cu un antet de 90 ° deja atașat, astfel încât este ușor să-l conectați la panou. Cablul cu bandă cu 2 pini conectează apoi HC-SR04 la Arduino așa cum se vede în diagramă. În plus față de cablul cu bandă, folosesc bucăți scurte de sârmă de conectare roșie și neagră de pe șina de distribuție a energiei pentru a furniza energie dispozitivului.

HC-SR04 Arduino Culoare
1 (VCC) +5 Șină BB-PWR roșu
2 (TRIG) Digital-6 Galben
3 (ECHO) Digital-7 portocale
4 (GND) GND BB-PWR Rail Negru

Pasul 5: conectați selectorul de opțiuni „HC-SR04”

Când am început acest proiect, intenția mea a fost pur și simplu să testez diferitele opțiuni de interfață ale dispozitivului MaxSonar. După ce am pus-o în funcțiune, am decis că ar fi frumos să-l compar cu dispozitivul HC-SR04 (bugeye) omniprezent. Cu toate acestea, am vrut să pot rula / testa fără ca acesta să fie inclus, așa că am adăugat o opțiune / test în cod.

Codul verifică un pin de intrare pentru a vedea dacă dispozitivul HC-SR04 trebuie inclus în citirea și ieșirea măsurătorilor.

În diagramă, acest lucru este afișat ca un comutator, dar pe panoul de bord folosesc pur și simplu un cablu jumper (așa cum se vede în fotografii). Dacă firul este conectat la GND, HC-SR04 va fi inclus în măsurători. Codul „trage în sus” (face ca intrarea să fie ridicată / adevărată) în Arduino, astfel încât dacă nu este scăzut (conectat la GND) HC-SR04 nu va fi măsurat.

Deși acest instructabil s-a transformat într-o comparație a celor două dispozitive, am decis să las acest lucru pentru a ilustra modul în care ați putea include / exclude diferite dispozitive / opțiuni în proiect.

Pană de pâine Arduino Culoare
GND BB-PWR Rail Digital-12 alb

Pasul 6: Făcând totul să funcționeze …

Făcând totul să funcționeze …
Făcând totul să funcționeze …
Făcând totul să funcționeze …
Făcând totul să funcționeze …
Făcând totul să funcționeze …
Făcând totul să funcționeze …

Acum că totul este conectat - este timpul să facem lucrurile să funcționeze!

După cum sa menționat în „Ipoteze” - nu voi explica cum funcționează Arduino IDE sau cum se programează un Arduino (în detaliu).

Următoarele secțiuni descompun codul Arduino care este inclus în acest proiect.

Vă rugăm să dezarhivați arhiva completă într-o locație pe care o utilizați pentru dezvoltarea dvs. Arduino. Încărcați codul `MaxSonar-outputs.ino` în ID-ul dvs. Arduino și să începem!

Pasul 7: Aspectul proiectului

Proiectul conține informații despre dispozitivul LV-MaxSonar-EZ, schema circuitului, un README și codul Arduino. Diagrama circuitului este în format Fritzing, precum și o imagine PNG. README este în format Markdown.

Pasul 8: introducerea codului …

În acest instructabil, nu pot trece prin toate aspectele codului. Acoper câteva dintre detaliile la nivel înalt. Vă încurajez să citiți comentariul de nivel superior din cod și să căutați metodele.

Comentariile oferă o mulțime de informații pe care nu le voi repeta aici.

Sunt câteva lucruri pe care vreau să le subliniez în codul „setare” …

  • „_DEBUG_OUTPUT“- instrucțiuni variabile și #define
  • Definiții ale „pinilor” Arduino utilizate pentru interfață
  • Definiții ale factorilor de conversie utilizați în calcule

Depanarea este utilizată în întregul cod și voi arăta cum poate fi activat / dezactivat dinamic.

„Definițiile” sunt utilizate pentru pinii și conversiile Arduino pentru a face mai ușoară utilizarea acestui cod în alte proiecte.

Depanare …

Secțiunea „Depanare” definește o variabilă și câteva macrocomenzi care facilitează includerea informațiilor de depanare în ieșirea serială la cerere.

Variabila booleană `_DEBUG_OUTPUT` este setată la fals în cod (ar putea fi setată la adevărat) și este utilizată ca test în macro-urile` DB_PRINT … `. Poate fi modificat dinamic în cod (așa cum se vede în metoda `setDebugOutputMode`).

Globale …

După definiții, codul creează și inițializează câteva variabile globale și obiecte.

  • SoftwareSerial (vezi secțiunea următoare)
  • _loopCount - Folosit pentru a afișa un antet la fiecare „n” rând
  • _inputBuffer - Folosit pentru a colecta intrarea serială / terminală pentru procesarea opțiunilor (depanare activată / dezactivată)

Pasul 9: Arduino Software-Serial …

Una dintre opțiunile de interfață MaxSonar este un flux de date seriale. Cu toate acestea, Arduino UNO oferă doar o singură conexiune de date serială și este utilizată / partajată cu portul USB pentru a comunica cu Arduino IDE (computer gazdă).

Din fericire, există o componentă de bibliotecă inclusă cu Arduino IDE care utilizează o pereche de pini Arduino digital-I / O pentru a implementa o interfață serial-i / o. Deoarece interfața serială MaxSonar folosește 9600 BAUD, această interfață „software” este perfect capabilă să gestioneze comunicarea.

Pentru cei care utilizează un Arduino-Mega (sau alt dispozitiv care are mai multe porturi seriale HW), vă rugăm să nu ezitați să reglați codul pentru a utiliza un port serial fizic și să eliminați necesitatea SW-Serial.

Metoda „setup” inițializează interfața „SoftwareSerial” pentru a fi utilizată cu dispozitivul MaxSonar. Este nevoie doar de primire (RX). Interfața este „inversată” pentru a se potrivi cu ieșirea MaxSonar.

Pasul 10: Cod - Configurare

După cum s-a descris mai sus, metoda „setup” inițializează interfața „SoftwareSerial”, precum și interfața serială fizică. Configurează pinii I / O Arduino și trimite un antet.

Pasul 11: Cod - Buclă

Codul „buclă” rulează următoarele:

  • Afișați un antet (utilizat pentru depanare și Plotter)
  • Declanșați MaxSonar pentru a efectua o măsurare
  • Citiți valoarea MaxSonar Pulse-Width
  • Citiți valoarea MaxSonar Serial-Data
  • Citiți valoarea analogică MaxSonar
  • Verificați opțiunea „HC-SR04” și, dacă este activată:

    Declanșați și citiți dispozitivul HC-SR04

  • Trimiteți datele într-un format delimitat de tab-uri care poate fi utilizat de Serial Plotter
  • Așteptați până când a trecut suficient timp pentru a putea fi efectuată o altă măsurare

Pasul 12: Cod - Declanșați MaxSonar. Citiți Valoarea PW

MaxSonar are două moduri: „declanșat” și „continuu”

Acest instructabil folosește modul „declanșat”, dar multe proiecte pot beneficia de utilizarea modului „continuu” (vezi fișa tehnică).

Atunci când utilizați modul „declanșat”, prima ieșire validă este din ieșirea pulsului-lățime (PW). După aceea, restul ieșirilor sunt valide.

`TiggerAndReadDistanceFromPulse` pulsează pinul de declanșare de pe dispozitivul MaxSonar și citește valoarea distanței de lățime a impulsului rezultată

Rețineți că, spre deosebire de multe alte dispozitive sonar, MaxSonar gestionează conversia dus-întors, astfel încât distanța citită este distanța față de țintă.

Această metodă întârzie, de asemenea, suficient de mult pentru ca celelalte ieșiri ale dispozitivului să fie valabile (serial, analog).

Pasul 13: Cod - Citiți valoarea de serie MaxSonar

După ce MaxSonar a fost declanșat (sau când este în modul „continuu”), dacă opțiunea de ieșire serială este activată (prin controlul „BW - Pin-1”) se trimite un flux de date seriale în forma „R nnn”, urmat printr-un CARRIAGE-RETURN '\ r'. „Nnn” este valoarea de centimetri a obiectului.

Metoda `readDistanceFromSerial` citește datele seriale (de la portul Serial Software) și convertește valoarea„ nnn”în zecimal. Include un timeout sigur, în cazul în care nu se primește o valoare de serie.

Pasul 14: Cod - Citiți valoarea analogică MaxSonar

Portul analogic MaxSonar furnizează continuu o tensiune de ieșire proporțională cu ultima distanță măsurată. Această valoare poate fi citită în orice moment după inițializarea dispozitivului. Valoarea este actualizată la 50mS de la ultima citire a distanței (modul declanșat sau continuu).

Valoarea este (Vcc / 512) per inch. Deci, cu un Vcc de la Arduino de 5 volți, valoarea va fi de ~ 9.8mV / in. Metoda `readDistanceFromAnalog` citește valoarea de la intrarea analogică Arduino și o convertește într-o valoare„ inch”.

Pasul 15: Cod - Declanșați și citiți HC-SR04

Deși există biblioteci pentru a citi HC-SR04, am găsit că unele dintre ele nu sunt fiabile cu diferite dispozitive cu care am testat. Am găsit codul pe care l-am inclus în metoda `sr04ReadDistance` ca fiind simplu și mai fiabil (pe cât poate fi dispozitivul HC-SR04 ieftin).

Această metodă setează și apoi declanșează dispozitivul HC-SR04 și apoi așteaptă să măsoare lățimea impulsului de întoarcere. Măsurarea lățimii pulsului include un timeout pentru a face față problemei HC-SR04 cu o durată de impuls foarte mare atunci când nu poate găsi o țintă. Se presupune că o lățime a impulsului mai mare decât o distanță țintă de ~ 10 picioare nu este un obiect sau un obiect care nu poate fi recunoscut. Dacă timpul de expirare este atins, valoarea „0” este returnată ca distanță. Această „distanță” (lățimea impulsului) poate fi ajustată folosind valorile #define.

Lățimea impulsului este convertită la o distanță dus-întors înainte de a fi returnată ca distanță până la obiect.

Pasul 16: Cod - Suport Arduino IDE Serial Plotter

Cod - Suport Arduino IDE Serial Plotter
Cod - Suport Arduino IDE Serial Plotter

Acum pentru ieșire!

Metoda „buclă” declanșează colectarea măsurării distanței de la cele două dispozitive - dar ce facem cu ea?

Ei bine, desigur, îl vom trimite pentru a putea fi vizualizat pe consolă - dar vrem mai mult!

Arduino IDE oferă, de asemenea, interfața Serial Plotter. Vom folosi acest lucru pentru a oferi un grafic în timp real al distanței până la obiectul nostru de la ieșirile celor două dispozitive.

Serial Plotter acceptă un antet care conține etichete de valori și apoi mai multe rânduri de valori delimitate pentru a fi reprezentate grafic. Dacă valorile sunt afișate în mod regulat (o dată la „atâtea secunde”), graficul oferă o vizualizare a distanței până la obiect în timp.

Metoda „buclă” transmite cele trei valori de la MaxSonar și valoarea de la HC-SR04 într-un format separat de tab-uri care poate fi utilizat cu Serial Plotter. O dată la fiecare 20 de rânduri scoate antetul (doar în cazul în care Serial Plotter este activat în mijlocul fluxului).

Acest lucru vă permite să vizualizați distanța până la obstacol și, de asemenea, să vedeți diferența dintre valorile returnate de cele două dispozitive.

Pasul 17: Cod - Depanare …

Cod - Depanare …
Cod - Depanare …
Cod - Depanare …
Cod - Depanare …

Depanarea este o necesitate. Cum puteți depista o problemă atunci când ceva nu funcționează așa cum era de așteptat?

O primă linie de înțelegere este adesea câteva rezultate de text „simple” care pot indica ce se întâmplă. Acestea pot fi adăugate la cod când și unde este necesar pentru a depista o problemă, apoi pot fi eliminate după ce problema este rezolvată. Cu toate acestea, adăugarea și eliminarea codului necesită mult timp și, în sine, poate duce la alte probleme. Uneori este mai bine să îl puteți activa și dezactiva dinamic, lăsând singur codul sursă.

În acest Instructable am inclus un mecanism pentru a activa și dezactiva dinamic instrucțiunile de imprimare (ieșire serială) din intrarea citită de pe Arduino IDE Serial Monitor (într-o versiune viitoare, Serial Plotter este de așteptat să furnizeze și această intrare).

Booleanul `_DEBUG_OUTPUT` este utilizat într-un număr de metode de tipărire #define care pot fi utilizate în cadrul codului. Valoarea variabilei _DEBUG_OUTPUT este utilizată pentru a permite tipărirea (trimiterea ieșirii) sau nu. Valoarea poate fi modificată dinamic în cadrul codului, așa cum o face metoda `setDebugOutputMode`.

Metoda `setDebugOutputMode` este apelată din„ buclă”pe baza intrării primite de la intrarea serială. Intrarea este analizată pentru a vedea dacă se potrivește „debug on / off | true / false” pentru a activa / dezactiva modul de depanare.

Pasul 18: Concluzie

Sper că această configurare hardware simplă și codul de exemplu vă pot ajuta să înțelegeți diferențele dintre dispozitivele HC-SR04 și LV-MaxSonar-EZ. Ambele sunt foarte ușor de utilizat și cred că fiecare are beneficiile sale. Știind când să folosești unul mai degrabă decât altul poate fi esențial pentru un proiect de succes.

BTW - Am sugerat un mod foarte ușor de utilizat pentru a măsura cu precizie distanța față de un obiect folosind LV-MaxSonar-EZ … Puteți utiliza ieșirea analogică (un fir) și modul de măsurare continuă pentru a citi distanța atunci când este necesar folosind instrumentul simplu cod în `readDistanceFromAnalog` direct de la intrarea analogică Arduino. Un fir și (condensat) o linie de cod!

Pasul 19: Conexiune alternativă MaxSonar (folosind antetul 180 °)

Conexiune alternativă MaxSonar (folosind antetul 180 °)
Conexiune alternativă MaxSonar (folosind antetul 180 °)
Conexiune alternativă MaxSonar (folosind antetul 180 °)
Conexiune alternativă MaxSonar (folosind antetul 180 °)
Conexiune alternativă MaxSonar (folosind antetul 180 °)
Conexiune alternativă MaxSonar (folosind antetul 180 °)

După cum am menționat, MaxSonar nu vine cu un antet conectat. Deci, puteți utiliza orice conexiune este cea mai potrivită pentru proiectul dvs. În unele cazuri, un antet de 180 ° (drept) ar putea fi mai potrivit. Dacă acesta este cazul, am vrut să arăt rapid cum puteți utiliza acest lucru cu acest instructabil. Această ilustrație arată un MaxSonar cu un antet drept conectat la placa cu un cablu panglică bărbat-femeie, și apoi conectat la Arduino așa cum este descris în restul articolului.

Pasul 20: Cod Arduino

Codul Arduino se află în folderul „MaxSonar-outputs” al proiectului în comparația Sonar Range-Finder

Recomandat: