Sadržaj:

Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom: 20 koraka (sa slikama)
Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom: 20 koraka (sa slikama)

Video: Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom: 20 koraka (sa slikama)

Video: Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom: 20 koraka (sa slikama)
Video: Upredenica pod mikroskopom - usporedba stare i nove 2024, Srpanj
Anonim
Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom
Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom
Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom
Usporedba sonarnih daljinomera LV-MaxSonar-EZ i HC-SR04 s Arduinom

Smatram da mnogi projekti (osobito roboti) zahtijevaju ili mogu imati koristi od mjerenja udaljenosti do objekta u stvarnom vremenu. Sonarni daljinomeri relativno su jeftini i mogu se jednostavno povezati s mikrokontrolerom poput Arduina.

Ovaj Instructable uspoređuje dva uređaja za pronalaženje dometa sonara koja se lako mogu nabaviti, pokazujući kako ih spojiti na Arduino, koji je kôd potreban za čitanje vrijednosti s njih i kako se međusobno 'mjere' u različitim situacijama. Nadam se da ćete iz ovoga steći uvid u prednosti i nedostatke dva uređaja koji će vam pomoći da u svom sljedećem projektu upotrijebite najprikladniji uređaj.

Htio sam usporediti iznimno popularan uređaj HC-SR04 (bug-eye) s manje uobičajenim uređajem LV-MaxSonar-EZ da vidim kada bih mogao koristiti jedan, a ne drugi. Htio sam podijeliti svoja otkrića i postavke kako biste mogli eksperimentirati s njima i odlučiti što ćete koristiti u svom sljedećem projektu.

Zašto ovo dvoje…

Zašto HC-SR04? 'Bug-Eye' HC-SR04 je iznimno popularan-iz nekoliko razloga:

  • Jeftin je - 2 USD ili manje ako se kupi na veliko
  • Povezivanje je relativno jednostavno
  • Mnogi, mnogi projekti ga koriste - pa je dobro poznat i dobro shvaćen

Zašto LV-MaxSonar-EZ?

  • Sučelje je vrlo jednostavno
  • Ima dobar/jednostavan oblik za ugradnju u projekt
  • Ima 5 verzija koje zadovoljavaju različite zahtjeve mjerenja (pogledajte tehnički list)
  • (Tipično) je mnogo točniji i pouzdaniji od HC-SR04
  • Pristupačan je - 15 do 20 dolara

Nadalje, nadam se da će vam komadići u Arduino kodu koji sam napisao radi usporedbe biti korisni u vašim projektima, čak i izvan aplikacija za pronalaženje dometa.

Pretpostavke:

  • Poznati su vam Arduino i Arduino IDE
  • Arduino IDE je instaliran i radi na vašem razvojnom stroju (PC/Mac/Linux)
  • Imate vezu iz Arduino IDE -a sa svojim Arduinom za prijenos i pokretanje programa i komunikaciju

Postoje instrukcije i drugi izvori koji će vam pomoći u tome ako je potrebno.

Pribor

  • HC-SR04 daljinomer 'Bug-Eye'
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-koristim '1', ali sve verzije sučelja su iste)
  • Arduino UNO
  • Oplata za lemljenje
  • Pin Header - 7 -pinski 90 ° (za MaxSonar uređaj, pogledajte * dolje za upotrebu 180 °)
  • Kratkospojnik za vrpčani kabel - 5 žica, muško -muški
  • Kratkospojnik za vrpčani kabel - 2 žice, muško -muški
  • Žica za kratkospojnike - muško -muški
  • Priključna žica - crvena i crna (za napajanje od Arduina do matične ploče i matične ploče do uređaja)
  • Računalo s Arduino IDE -om i USB kabelom za spajanje na Arduino UNO

* MaxSonar nema isporučeno zaglavlje pa možete koristiti zaglavlje koje najviše odgovara vašem projektu. Za ovaj Instructable koristio sam zaglavlje od 90 ° kako bih ga jednostavno uključio u matičnu ploču. U nekim projektima zaglavlje od 180 ° (ravno) bi moglo biti bolje. Uključujem fotografiju koja pokazuje kako to spojiti tako da ih ne morate mijenjati. Ako biste radije koristili zaglavlje od 180 °, trebat će vam dodatni 7-žilni muško-ženski kratkospojnik za spajanje, kako prikazuje moja fotografija.

Spremište Git Hub: Datoteke projekta

Korak 1: Potjera …

Potjera…
Potjera…

Prije nego uđemo u detalje o tome kako spojiti stvari kako biste mogli sami eksperimentirati s ova dva fantastična uređaja, htio sam opisati nekoliko stvari u kojima će vam ovaj Instructable pomoći.

Budući da se uređaj MaxSonar manje koristi i manje razumije u usporedbi s uređajem HC-SR04, htio sam pokazati:

  • Kako spojiti MaxSonar uređaj na mikrokontroler (u ovom slučaju Arduino)
  • Kako mjeriti s različitih izlaza uređaja MaxSonar
  • Usporedite povezivanje MaxSonar uređaja s HC-SR04 uređajem
  • Testirajte sposobnost mjerenja udaljenosti objekata s različitim površinama
  • Zašto biste mogli odabrati jedan uređaj nad drugim (ili koristiti oba u tandemu)

Nadam se da će vam ovaj Instructable pomoći u ovoj potrazi …

Korak 2: Početak - Postavljanje Arduino -Breadboard -a

Početak - Postavljanje Arduino -Breadboard -a
Početak - Postavljanje Arduino -Breadboard -a

Ako ste prototipirali s Arduinom, vjerojatno već imate postavu Arduino-Breadboard koja vam odgovara. Ako je tako, uvjeren sam da ga možete koristiti za ovaj Instructable. Ako ne, ovako sam ja postavio svoj - slobodno ga kopirajte za ovaj i buduće projekte.

  1. Pričvršćujem Arduino UNO i malu bežičnu ploču na komad plastike dimenzija 3,3/8 "x 4-3/4" (8,6 x 12,0 cm) s gumenim nogama na dnu.
  2. Koristim crvenu i crnu žicu za spajanje od 22 AWG za spajanje +5V i GND iz Arduina na traku za distribuciju napajanja na matičnoj ploči
  3. Uključujem tantalni kondenzator od 10 μF na razvodnu traku za napajanje i masu kako bih pomogao u smanjenju buke (ali ovaj projekt to ne zahtijeva)

Ovo pruža lijepu platformu s kojom je lako napraviti prototip.

Korak 3: Povežite LV-MaxSonar-EZ

Povežite LV-MaxSonar-EZ
Povežite LV-MaxSonar-EZ
Povežite LV-MaxSonar-EZ
Povežite LV-MaxSonar-EZ
Povežite LV-MaxSonar-EZ
Povežite LV-MaxSonar-EZ

Sa zaglavljem od 90 ° zalemljenim na MaxSonar uređaj, lako ga je uključiti u matičnu ploču. 5 -polni vrpčani kabel tada povezuje MaxSonar s Arduinom, kako je prikazano na dijagramu. Osim vrpčnog kabela, za napajanje uređaja koristim kratke komade crvene i crne spojne žice s razvodne šine.

Ožičenje:

MaxSonar Arduino Boja
1 (ČB) Napajanje-GND Žuta boja
2 (PW) Digital-5 Zeleno
3 (AN) Analogno-0 Plava
4 (RX) Digital-3 Ljubičasta
5 (TX) Digital-2 Siva
6 (+5) +5 BB-PWR tračnica Crvena
7 (GND) GND BB-PWR Tračnica Crno

Bilješka:

Ne dopustite da vas broj veza koje se koriste u ovom Instructableu spriječi u razmišljanju o MaxSonaru za vaš projekt. Ovaj Instructable koristi sve opcije sučelja MaxSonar kako bi ilustrirao njihov rad i usporedio ih međusobno i s uređajem HC-SR04. Za određenu uporabu (koristeći jednu od opcija sučelja) projekt će općenito koristiti jedan ili dva pina sučelja (plus napajanje i uzemljenje).

Korak 4: Povežite HC-SR04

HC-SR04 obično dolazi s zaglavljem od 90 ° koje je već pričvršćeno, pa ga je lako uključiti u matičnu ploču. 2-polni vrpčani kabel zatim povezuje HC-SR04 s Arduinom, kako je prikazano na dijagramu. Osim vrpčnog kabela, za napajanje uređaja koristim kratke komade crvene i crne spojne žice s razvodne šine.

HC-SR04 Arduino Boja
1 (VCC) +5 BB-PWR tračnica Crvena
2 (TRIG) Digital-6 Žuta boja
3 (ECHO) Digital-7 naranča
4 (GND) GND BB-PWR Tračnica Crno

Korak 5: Povežite birač opcija 'HC-SR04'

Kad sam započeo ovaj projekt, namjera mi je bila jednostavno testirati različite mogućnosti sučelja uređaja MaxSonar. Nakon što sam to pokrenuo, odlučio sam da bi bilo lijepo usporediti ga sa sveprisutnim uređajem HC-SR04 (bugeye). Međutim, želio sam biti u mogućnosti pokrenuti/testirati bez toga, pa sam u kod dodao opciju/test.

Kôd provjerava ulazni pin da vidi treba li uređaj HC-SR04 biti uključen u očitanje i izlaz mjerenja.

Na dijagramu je to prikazano kao sklopka, ali na ploči jednostavno koristim kratkospojnu žicu (kao što se vidi na fotografijama). Ako je žica spojena na GND, HC-SR04 će biti uključen u mjerenja. Kod 'povlači se' (čini ulaz visokim/istinitim) u Arduinu, tako da ako se ne povuče nisko (spojen na GND) HC-SR04 se neće mjeriti.

Iako se ovaj Instructable pretvorio u usporedbu dvaju uređaja, odlučio sam ovo ostaviti na mjestu kako bih ilustrirao kako možete uključiti/isključiti različite uređaje/opcije u svoj projekt.

Oglasna ploča Arduino Boja
GND BB-PWR Tračnica Digital-12 Bijela

Korak 6: Neka sve funkcionira …

Neka sve funkcionira…
Neka sve funkcionira…
Neka sve funkcionira…
Neka sve funkcionira…
Neka sve funkcionira…
Neka sve funkcionira…

Sad kad je sve spojeno - vrijeme je da stvari funkcioniraju!

Kao što je spomenuto u 'Pretpostavkama' - neću objašnjavati kako radi Arduino IDE ili kako programirati Arduino (detaljno).

Sljedeći odjeljci razrađuju Arduino kôd koji je uključen u ovaj projekt.

Raspakirajte cijelu arhivu na mjesto koje koristite za razvoj Arduina. Učitajte `MaxSonar-outputs.ino` kod u svoj Arduino IDE i počnimo!

Korak 7: Raspored projekta

Projekt sadrži informacije o uređaju LV-MaxSonar-EZ, dijagramu kruga, README-u i Arduino kodu. Dijagram sklopa je u Fritzing formatu, kao i-p.webp

Korak 8: Uvođenje koda…

U ovom Instructable -u ne mogu proći svaki aspekt koda. Pokrivam neke detalje na visokoj razini. Potičem vas da pročitate komentar na najvišoj razini u kodu i zaronite u metode.

Komentari pružaju mnogo informacija koje ovdje neću ponavljati.

Postoji nekoliko stvari koje želim istaknuti u kodu za 'postavljanje' …

  • Naredbe `_DEBUG_OUTPUT` - varijable i #define
  • Definicije Arduino 'igle' koje se koriste za sučelje
  • Definicije faktora konverzije korištenih u izračunima

Otklanjanje pogrešaka koristi se u cijelom kodu, a ja ću pokazati kako se može dinamički uključiti/isključiti.

"Definicije" se koriste za Arduino pinove i konverzije kako bi se olakšala upotreba ovog koda u drugim projektima.

Otklanjanje pogrešaka …

Odjeljak 'Otklanjanje pogrešaka' definira varijablu i neke makronaredbe koje olakšavaju uključivanje podataka za ispravljanje pogrešaka u serijski izlaz na zahtjev.

Logička varijabla `_DEBUG_OUTPUT` postavljena je na false u kodu (može se postaviti na true) i koristi se kao test u makroima` DB_PRINT … `. Može se dinamički mijenjati u kodu (kao što se vidi u metodi `setDebugOutputMode`).

Globalni…

Nakon definicija, kôd stvara i inicijalizira nekoliko globalnih varijabli i objekata.

  • SoftwareSerial (vidi sljedeći odjeljak)
  • _loopCount - Koristi se za ispis zaglavlja u svakom 'n' retku
  • _inputBuffer - Koristi se za prikupljanje serijskog/terminalnog unosa za obradu opcija (otklanjanje pogrešaka uključeno/isključeno)

Korak 9: Arduino softver-serijski …

Jedna od opcija sučelja MaxSonar je serijski tok podataka. Međutim, Arduino UNO pruža samo jednu serijsku podatkovnu vezu, a ona se koristi/dijeli s USB priključkom za komunikaciju s Arduino IDE (glavnim računalom).

Srećom, postoji komponenta knjižnice uključena u Arduino IDE koja koristi par Arduino digitalno-I/O pinova za implementaciju serijskog-i/o sučelja. Budući da MaxSonar serijsko sučelje koristi 9600 BAUD, ovo 'softversko' sučelje savršeno je sposobno za rukovanje komunikacijom.

Za one koji koriste Arduino-Mega (ili drugi uređaj koji ima više serijskih priključaka HW), slobodno prilagodite kôd za korištenje fizičkog serijskog porta i uklonite potrebu za SW-serijskim priključkom.

Metoda `setup` inicijalizira` SoftwareSerial` sučelje koje će se koristiti s MaxSonar uređajem. Potreban je samo prijem (RX). Sučelje je 'obrnuto' kako bi odgovaralo izlazu MaxSonara.

Korak 10: Kôd - postavljanje

Kao što je gore opisano, `setup` metoda inicijalizira` SoftwareSerial` sučelje, kao i fizičko serijsko sučelje. Konfigurira Arduino I/O pinove i šalje zaglavlje.

Korak 11: Kôd - petlja

Kôd `loop 'prolazi kroz sljedeće:

  • Iznesite zaglavlje (koristi se za ispravljanje pogrešaka i ploter)
  • Pokrenite MaxSonar za mjerenje
  • Pročitajte vrijednost MaxSonar Pulse-Width
  • Pročitajte vrijednost MaxSonar serijskih podataka
  • Pročitajte MaxSonar analognu vrijednost
  • Provjerite opciju 'HC-SR04' i, ako je omogućena:

    Pokrenite i pročitajte uređaj HC-SR04

  • Ispišite podatke u formatu razgraničenom karticom koji može koristiti serijski ploter
  • Pričekajte dok ne protekne dovoljno vremena kako biste mogli izvršiti još jedno mjerenje

Korak 12: Kôd - Pokrenite MaxSonar. Očitajte vrijednost PW

MaxSonar ima dva načina rada: 'aktivirano' i 'kontinuirano'

Ovaj Instructable koristi 'aktivirani' način rada, ali mnogi projekti mogu imati koristi od 'kontinuiranog' načina rada (pogledajte podatkovnu tablicu).

Prilikom korištenja 'aktiviranog' načina rada, prvi valjani izlaz je s Pulse-Width (PW) izlaza. Nakon toga, ostali izlazi su valjani.

`TiggerAndReadDistanceFromPulse` pulsira okidač na MaxSonar uređaju i očitava rezultirajuću vrijednost udaljenosti širine impulsa

Imajte na umu da, za razliku od mnogih drugih sonarnih uređaja, MaxSonar upravlja povratnom konverzijom, pa je očitana udaljenost udaljenost do cilja.

Ova metoda također odgađa dovoljno dugo da drugi izlazi uređaja budu valjani (serijski, analogni).

Korak 13: Kôd - pročitajte MaxSonar serijsku vrijednost

Nakon što je aktiviran MaxSonar (ili kada je u 'kontinuiranom' načinu rada), ako je opcija serijskog izlaza omogućena (putem kontrole 'BW - Pin -1'), šalje se serijski tok podataka u obliku "R nnn" POVRATKOM VOZILA '\ r'. 'Nnn' je vrijednost inča prema objektu.

Metoda `readDistanceFromSerial` čita serijske podatke (s porta za programski serijski broj) i pretvara vrijednost 'nnn' u decimalnu. Uključuje vremensko ograničenje u slučaju pogreške, samo u slučaju da se ne primi serijska vrijednost.

Korak 14: Kôd - pročitajte MaxSonar analognu vrijednost

Analogni priključak MaxSonar kontinuirano daje izlazni napon proporcionalan posljednjoj izmjerenoj udaljenosti. Ova se vrijednost može pročitati u bilo kojem trenutku nakon inicijalizacije uređaja. Vrijednost se ažurira unutar 50 ms od posljednjeg očitanja udaljenosti (aktivirani ili kontinuirani način rada).

Vrijednost je (Vcc/512) po inču. Dakle, s Vcc iz Arduina od 5 volti, vrijednost će biti ~ 9,8 mV/in. Metoda `readDistanceFromAnalog` čita vrijednost s Arduino analognog ulaza i pretvara je u vrijednost" inča ".

Korak 15: Kôd - Pokrenite i pročitajte HC -SR04

Iako postoje knjižnice za čitanje HC-SR04, otkrio sam da su neke od njih nepouzdane s raznim uređajima s kojima sam testirao. Otkrio sam da je kôd koji sam uključio u `sr04ReadDistance` metodu jednostavan i pouzdaniji (koliko god jeftin uređaj HC-SR04 mogao biti).

Ova metoda postavlja, a zatim pokreće uređaj HC-SR04, a zatim čeka mjerenje širine povratnog impulsa. Mjerenje širine impulsa uključuje vremensko ograničenje za rješavanje problema HC-SR04 vrlo dugog trajanja impulsa kada ne može pronaći cilj. Pretpostavlja se da širina impulsa dulja od ciljane udaljenosti od ~ 10 stopa nije nikakav objekt ili objekt koji se ne može prepoznati. Ako je vremensko ograničenje dosegnuto, vrijednost '0' se vraća kao udaljenost. Ta se "udaljenost" (širina impulsa) može podesiti pomoću #define vrijednosti.

Širina impulsa se pretvara u kružnu udaljenost prije nego se vrati kao udaljenost do objekta.

Korak 16: Kôd - podrška za Arduino IDE serijski ploter

Kod - Arduino IDE podrška za serijski ploter
Kod - Arduino IDE podrška za serijski ploter

Sada za izlaz!

Metoda `loop 'pokreće prikupljanje mjerenja udaljenosti od dva uređaja - ali što ćemo s tim?

Pa, naravno, poslat ćemo ga tako da se može vidjeti na konzoli - ali želimo više!

Arduino IDE također nudi sučelje serijskog plotera. To ćemo upotrijebiti za prikaz grafikona udaljenosti do našeg objekta u stvarnom vremenu od izlaza naša dva uređaja.

Serijski ploter prihvaća zaglavlje koje sadrži oznake vrijednosti, a zatim više redaka razgraničenih vrijednosti koje se iscrtavaju kao grafikon. Ako se vrijednosti ispisuju redovito (jednom svakih 'toliko sekundi'), grafikon prikazuje vizualizaciju udaljenosti do objekta tijekom vremena.

Metoda `loop 'daje tri vrijednosti iz MaxSonara i vrijednost iz HC-SR04 u formatu odvojenom tabulatorima koji se može koristiti sa serijskim ploterom. Jednom svakih 20 redaka izlazi zaglavlje (samo u slučaju da je serijski ploter omogućen usred streama).

To vam omogućuje vizualizaciju udaljenosti do prepreke te uvid u razliku u vrijednostima koje su vratila dva uređaja.

Korak 17: Kôd - otklanjanje pogrešaka …

Kôd - otklanjanje pogrešaka …
Kôd - otklanjanje pogrešaka …
Kôd - otklanjanje pogrešaka …
Kôd - otklanjanje pogrešaka …

Otklanjanje pogrešaka je nužnost. Kako možete pronaći problem ako nešto ne radi kako ste očekivali?

Prva linija razumijevanja često su neki „jednostavni“izlazi teksta koji mogu ukazivati na to što se događa. Oni se mogu dodati kodu kad i gdje je potrebno za pronalaženje problema, a zatim se uklanjaju nakon što se problem riješi. Međutim, dodavanje i uklanjanje koda oduzima puno vremena i samo po sebi može dovesti do drugih problema. Ponekad je bolje omogućiti ga dinamičkim omogućavanjem i onemogućavanjem, a da izvorni kod ostane sam.

U ovaj Instructable uključio sam mehanizam za omogućavanje i onemogućavanje ispisivanja ispisa ispisa (serijski izlaz) za ispravljanje pogrešaka dinamički iz ulaza koji se čita s Arduino IDE serijskog monitora (u nadolazećem izdanju očekuje se da će serijski ploter pružiti i ovaj ulaz).

Logičko `_DEBUG_OUTPUT` koristi se u brojnim #define metodama ispisa koje se mogu koristiti unutar koda. Vrijednost varijable _DEBUG_OUTPUT koristi se za omogućavanje ispisa (slanje rezultata) ili ne. Vrijednost se može dinamički mijenjati unutar koda, kao što to čini metoda `setDebugOutputMode`.

Metoda `setDebugOutputMode` poziva se iz` petlje` na temelju ulaza primljenog iz serijskog ulaza. Ulaz se raščlanjuje kako bi se provjerilo odgovara li "debug on/off | true/false" za omogućavanje/onemogućivanje načina ispravljanja pogrešaka.

Korak 18: Zaključak

Nadam se da će vam ovo jednostavno postavljanje hardvera i primjer koda pomoći u razumijevanju razlika između uređaja HC-SR04 i LV-MaxSonar-EZ. Obje su vrlo jednostavne za korištenje i vjerujem da svaka ima svoje prednosti. Znanje kada koristiti jedan, a ne drugi može biti ključno za uspješan projekt.

BTW-Nagovijestio sam vrlo jednostavan za korištenje način preciznog mjerenja udaljenosti do objekta pomoću LV-MaxSonar-EZ … Možete koristiti analogni izlaz (jedna žica) i način kontinuiranog mjerenja za čitanje udaljenosti po potrebi pomoću jednostavnog kod u `readDistanceFromAnalog` izravno s Arduino analognog ulaza. Jedna žica i (kondenzirani) jedan redak koda!

Korak 19: Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)

Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)
Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)
Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)
Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)
Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)
Alternativna MaxSonar veza (pomoću zaglavlja od 180 °)

Kao što sam spomenuo, MaxSonar ne dolazi s povezanim zaglavljem. Dakle, možete koristiti bilo koju vezu koja je najprikladnija za vaš projekt. U nekim slučajevima zaglavlje od 180 ° (ravno) može biti prikladnije. Ako je to slučaj, htio sam brzo pokazati kako to možete koristiti s ovim Instructable -om. Ova ilustracija prikazuje MaxSonar s ravnim zaglavljem koje je spojeno na matičnu ploču muško-ženskim vrpčnim kabelom, a zatim spojeno na Arduino kako je opisano u ostatku članka.

Korak 20: Arduino kod

Arduino kôd nalazi se u mapi 'MaxSonar-outputs' projekta u usporedbi Sonar Range-Finder Comparison

Preporučeni: