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: Usporedba veličina planeta i zvijezda u svemiru 2024, Juli
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 (posebno roboti) zahtijevaju ili mogu imati koristi od mjerenja udaljenosti do objekta u stvarnom vremenu. Sonarni daljinomeri relativno su jeftini i mogu se lako povezati s mikrokontrolerom poput Arduina.

Ovaj Instructable uspoređuje dva uređaja za pronalaženje sonara koji se lako mogu nabaviti, pokazujući kako ih spojiti na Arduino, koji je kod potreban za čitanje vrijednosti s njih i kako se oni "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 koristite sljedeći uređaj u svom sljedećem projektu.

Želeo sam da uporedim izuzetno popularan uređaj HC-SR04 (bug-eye) sa manje uobičajenim LV-MaxSonar-EZ uređajem da vidim kada bih mogao da koristim 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 izuzetno popularan-iz nekoliko razloga:

  • Jeftin je - 2 USD ili manje ako se kupi na veliko
  • Relativno je jednostavno za povezivanje
  • Mnogi, mnogi projekti ga koriste - tako da je dobro poznat i dobro shvaćen

Zašto LV-MaxSonar-EZ?

  • Veoma je jednostavno za povezivanje
  • Ima dobru/laku formu za uključivanje u projekat
  • Ima 5 verzija koje zadovoljavaju različite zahtjeve mjerenja (pogledajte tehnički list)
  • (Tipično) je mnogo precizniji i pouzdaniji od HC-SR04
  • Pristupačan je - 15 do 20 dolara

Nadalje, nadam se da ćete u Arduino kodu koji sam napisao za usporedbu pronaći dijelove korisne 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šoj razvojnoj mašini (PC/Mac/Linux)
  • Imate vezu iz Arduino IDE -a sa svojim Arduinom za učitavanje i pokretanje programa i komunikaciju

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

Supplies

  • HC-SR04 "Bug-Eye" daljinomer
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-koristim '1', ali sve verzije imaju isto sučelje)
  • Arduino UNO
  • Lemna ploča
  • Pin Header - 7 pin 90 ° (za MaxSonar uređaj, pogledajte * dolje za upotrebu 180 °)
  • Premosnik za vrpčani kabel - 5 žica, muško - muško
  • Kratkospojnik za vrpčani kabel - 2 žice, muško - muško
  • Žica za spajanje - muško -muško
  • 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-žični muško-ženski kratkospojnik za spajanje, kako pokazuje moja fotografija.

Git Hub spremište: projektne datoteke

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 se, nadam se, ovaj Instructable pomoći.

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

  • Kako spojiti MaxSonar uređaj na mikrokontroler (u ovom slučaju Arduino)
  • Kako mjeriti s različitih izlaza MaxSonar uređaja
  • Uporedite povezivanje MaxSonar uređaja sa 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 postavku Arduino-Breadboard koja vam odgovara. Ako je tako, siguran sam da ga možete koristiti za ovaj Instructable. Ako ne, evo kako 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 priključnu žicu od 22 AWG za spajanje +5V i GND iz Arduina na razvodnu ploču za matičnu ploču
  3. Uključujem tantalni kondenzator od 10 μF na razvodnu traku za napajanje i masu kako bih smanjio buku energije (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 sa razvodne šine.

Ožičenje:

MaxSonar Arduino Boja
1 (ČB) Napajanje-GND Žuta
2 (PW) Digital-5 Zeleno
3 (AN) Analog-0 Plava
4 (RX) Digital-3 Ljubičasta
5 (TX) Digital-2 Siva
6 (+5) +5 BB-PWR šina Crveno
7 (GND) GND BB-PWR Šina Crna

Bilješka:

Ne dopustite da vas broj veza korištenih u ovom Instructableu spriječi da uzmete u obzir MaxSonar 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 datu upotrebu (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, koristim kratke komade crvene i crne spojne žice sa razvodne šine za napajanje uređaja.

HC-SR04 Arduino Boja
1 (VCC) +5 BB-PWR šina Crveno
2 (TRIG) Digital-6 Žuta
3 (ECHO) Digital-7 Narandžasta
4 (GND) GND BB-PWR Šina Crna

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

Kada sam započeo ovaj projekt, namjera mi je bila jednostavno testirati različite mogućnosti sučelja MaxSonar uređaja. Nakon što sam to pokrenuo, odlučio sam da bi bilo lijepo uporediti 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 ovo prikazano kao prekidač, ali na matičnoj ploči jednostavno koristim kratkospojnik (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 dva uređaja, odlučio sam ovo ostaviti na mjestu radi ilustracije kako možete uključiti/isključiti različite uređaje/opcije u svoj projekt.

Breadboard Arduino Boja
GND BB-PWR Šina 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…

Sada kada 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 raščlanjuju Arduino kôd koji je uključen u ovaj projekt.

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

Korak 7: Izgled projekta

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

Korak 8: Uvođenje koda…

U ovom Instructable -u ne mogu proći kroz svaki aspekt koda. Pokrivam neke detalje na visokom nivou. Predlažem vam da pročitate komentar na najvišem nivou u kodu i istražite metode.

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

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

  • "_DEBUG_OUTPUT" - varijable i #define izrazi
  • Definicije Arduino 'pinova' koji se koriste za sučelje
  • Definicije faktora konverzije korištenih u proračunima

Otklanjanje greš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 grešaka…

Odjeljak 'Otklanjanje grešaka' definira varijablu i neke makroe koji olakšavaju uključivanje informacija o otklanjanju grešaka u serijski izlaz na zahtjev.

Logička logička varijabla `_DEBUG_OUTPUT` postavljena je na false (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 (pogledajte sljedeći odjeljak)
  • _loopCount - Koristi se za ispis zaglavlja u svim 'n' redovima
  • _inputBuffer - Koristi se za prikupljanje serijskog/terminalnog unosa za obradu opcija (otklanjanje greš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 vezu za prijenos podataka, a ona se koristi/dijeli s USB priključkom za komunikaciju s Arduino IDE -om (računalom domaćinom).

Srećom, postoji komponenta biblioteke 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 portova 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: Kod - Petlja

Kod `petlje` prolazi kroz sljedeće:

  • Iznesite zaglavlje (koristi se za otklanjanje greš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

  • Iznesite 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: 'aktiviran' i 'kontinuirani'

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

Kada se koristi 'aktivirani' način rada, prvi valjani izlaz je iz 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 odlaže dovoljno dugo da drugi izlazi uređaja budu valjani (serijski, analogni).

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

Nakon što je MaxSonar aktiviran (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" po POVRATAK NOSAČA '\ r'. 'Nnn' je vrijednost inča prema objektu.

Metoda `readDistanceFromSerial` čita serijske podatke (sa softverskog serijskog porta) i pretvara vrijednost 'nnn' u decimalnu. Uključuje vremensko ograničenje u slučaju kvara, samo u slučaju da se ne primi serijska vrijednost.

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

Analogni port MaxSonar kontinuirano daje izlazni napon proporcionalan posljednjoj izmjerenoj udaljenosti. Ova vrijednost se 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 iz Arduino analognog ulaza i pretvara je u vrijednost 'inča'.

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

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

Ova metoda postavlja, a zatim pokreće uređaj HC-SR04, a zatim čeka da izmjeri širinu 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. Ova 'udaljenost' (širina impulsa) može se podesiti pomoću vrijednosti #define.

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

Korak 16: Kod - Arduino IDE podrška za serijski ploter

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

A sada 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 pruža sučelje za serijski ploter. Koristit ćemo to za pružanje 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 redova razgraničenih vrijednosti koje se iscrtavaju kao grafikon. Ako se vrijednosti ispisuju redovito (jednom svakih 'toliko sekundi'), grafikon prikazuje vizualizaciju udaljenosti do objekta tokom 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 na svakih 20 redova izlazi zaglavlje (samo u slučaju da je serijski ploter omogućen u sredini toka).

To vam omogućava da vizualizirate udaljenost do prepreke, a također i da vidite razliku u vrijednostima koje su vratila dva uređaja.

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

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

Otklanjanje grešaka je neophodnost. 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 kada i gdje je potrebno za pronalaženje problema, a zatim se uklanjaju kada se problem riješi. Međutim, dodavanje i uklanjanje koda oduzima mnogo vremena i samo po sebi može dovesti do drugih problema. Ponekad je bolje biti u mogućnosti omogućiti ga i onemogućiti dinamički, a da izvorni kod ostane sam.

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

Logičko `_DEBUG_OUTPUT` se koristi 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 radi metoda `setDebugOutputMode`.

Metoda `setDebugOutputMode` poziva se iz` petlje` na osnovu ulaza primljenog iz serijskog ulaza. Ulaz se raščlanjuje kako bi se vidjelo da li se podudara sa "debug on/off | true/false" za omogućavanje/onemogućavanje načina otklanjanja grešaka.

Korak 18: Zaključak

Nadam se da će vam ovo jednostavno hardversko postavljanje i primjer koda pomoći da razumijete razlike između HC-SR04 i LV-MaxSonar-EZ uređaja. Obje su vrlo jednostavne za upotrebu i vjerujem da svaka ima svoje prednosti. Znanje kada koristiti jednu umjesto druge može biti od pomoći uspješnom projektu.

BTW-Nagovijestio sam vrlo jednostavan za korištenje način za precizno mjerenje 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 koda u `readDistanceFromAnalog` direktno iz Arduino analognog ulaza. Jedna žica i (kondenzovani) jedan red 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 sa 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 se nalazi u mapi 'MaxSonar-outputs' projekta u usporedbi Sonar Range-Finder Comparison

Preporučuje se: