Innholdsfortegnelse:

Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trinn (med bilder)
Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trinn (med bilder)

Video: Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trinn (med bilder)

Video: Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trinn (med bilder)
Video: КАК НАСТРОИТЬ L4D2 2024, November
Anonim
Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning av LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino

Jeg opplever at mange prosjekter (spesielt roboter) krever, eller kan ha nytte av, å måle avstanden til et objekt i sanntid. Sonar-avstandsfindere er relativt rimelige og kan enkelt kobles til en mikrokontroller som Arduino.

Denne instruksen sammenligner to lett tilgjengelige sonar-avstandssøkere, som viser hvordan du kobler dem til Arduino, hvilken kode som kreves for å lese verdier fra dem, og hvordan de måler seg mot hverandre i forskjellige situasjoner. Fra dette håper jeg at du får innsikt i fordeler og ulemper med de to enhetene som vil hjelpe deg med å bruke den mest passende enheten i ditt neste prosjekt.

Jeg ønsket å sammenligne den ekstremt populære HC-SR04-enheten (bug-eye) med den mindre vanlige LV-MaxSonar-EZ-enheten for å se når jeg kanskje vil bruke den ene i stedet for den andre. Jeg ønsket å dele mine funn og oppsett, slik at du kan eksperimentere med de to og bestemme hva du skal bruke i ditt neste prosjekt.

Hvorfor disse to …

Hvorfor HC-SR04? 'Bug-Eye' HC-SR04 er ekstremt populær-av flere grunner:

  • Det er billig - $ 2 eller mindre hvis det kjøpes i bulk
  • Det er relativt enkelt å koble til
  • Mange, mange prosjekter bruker det - så det er velkjent og godt forstått

Hvorfor LV-MaxSonar-EZ?

  • Det er veldig enkelt å koble til
  • Den har en god/enkel formfaktor å innlemme i et prosjekt
  • Den har 5 versjoner som adresserer forskjellige målekrav (se datablad)
  • Det er (vanligvis) mye mer nøyaktig og pålitelig enn HC-SR04
  • Det er rimelig - $ 15 til $ 20

I tillegg håper jeg at du finner biter og stykker i Arduino-koden jeg skrev for sammenligningen nyttig i prosjektene dine, selv utenfor avstandsmålerprogrammer.

Antagelser:

  • Du er kjent med Arduino og Arduino IDE
  • Arduino IDE er installert og fungerer på din foretrukne utviklingsmaskin (PC/Mac/Linux)
  • Du har en forbindelse fra Arduino IDE til Arduino for å laste opp og kjøre programmer og kommunisere

Det er instrukser og andre ressurser som kan hjelpe deg med dette om nødvendig.

Rekvisita

  • HC-SR04 'Bug-Eye' Range Finder
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-Jeg bruker en '1', men alle versjoner grensesnitt det samme)
  • Arduino UNO
  • Loddefritt brødbrett
  • Pin Header - 7 pins 90 ° (for MaxSonar -enheten, se * nedenfor for bruk av 180 °)
  • Båndkabelhopper - 5 -leder, hann -hann
  • Båndkabelhopper - 2 ledere, hann -hann
  • Jumper wire - hann -hann
  • Tilkoblingstråd - rød og svart (for strøm fra Arduino til brødbrett og brødbrett til enheter)
  • Datamaskin med Arduino IDE og USB -kabel for tilkobling til Arduino UNO

* MaxSonar kommer ikke med en topptekst, så du kan bruke en topptekst som er best egnet for prosjektet ditt. Til denne Instructable brukte jeg en 90 ° header for å gjøre det enkelt å koble til brødbrettet. I noen prosjekter kan en 180 ° (rett) overskrift være bedre. Jeg inkluderer et bilde for å vise hvordan du kobler det til, slik at du ikke trenger å bytte dem. Hvis du heller vil bruke en 180 ° topptekst, trenger du en ekstra 7-leder mann-hun-båndkabelhopper for å koble til som bildet mitt viser.

Git Hub Repository: Prosjektfiler

Trinn 1: Jakten …

Jakten…
Jakten…

Før vi går inn på detaljene om hvordan du kan få ting til å koble til slik at du kan eksperimentere med disse to fantastiske enhetene, ville jeg beskrive noen få ting som jeg håper at denne instruksen kan hjelpe deg med.

Fordi MaxSonar-enheten er mindre brukt og mindre forstått sammenlignet med HC-SR04-enheten, ønsket jeg å vise:

  • Slik kobler du MaxSonar-enheten til en mikrokontroller (i dette tilfellet en Arduino)
  • Hvordan ta målinger fra de forskjellige utgangene til MaxSonar -enheten
  • Sammenlign grensesnittet mellom MaxSonar-enheten og HC-SR04-enheten
  • Test evnen til å måle avstanden til objekter med forskjellige overflater
  • Hvorfor du kan velge en enhet fremfor den andre (eller bruke begge samtidig)

Jeg håper denne instruksjonsboken hjelper deg i denne jakten …

Trinn 2: Komme i gang - Oppsett av Arduino -Breadboard

Komme i gang - Oppsett av Arduino -Breadboard
Komme i gang - Oppsett av Arduino -Breadboard

Hvis du har prototypet med Arduino, har du sannsynligvis allerede et Arduino-Breadboard-oppsett som du er komfortabel med. I så fall er jeg sikker på at du kan bruke den til denne instruksjonsboken. Hvis ikke, er det slik jeg satte opp mitt - kopier det gjerne for dette og fremtidige prosjekter.

  1. Jeg fester Arduino UNO og et lite trådløst brødbrett til en 3-3/8 "x 4-3/4" (8,6 x 12,0 cm) plastbit med gummiføtter på bunnen.
  2. Jeg bruker rød og svart 22-AWG-tilkoblingstråd for å koble +5V og GND fra Arduino til strømfordelingslisten til brødbrettet
  3. Jeg inkluderer en 10µF tantalkondensator på fordelingsstrimmelen for jord for å redusere strømstøy (men dette prosjektet krever det ikke)

Dette gir en fin plattform som er lett å prototype med.

Trinn 3: Koble opp LV-MaxSonar-EZ

Koble opp LV-MaxSonar-EZ
Koble opp LV-MaxSonar-EZ
Koble opp LV-MaxSonar-EZ
Koble opp LV-MaxSonar-EZ
Koble opp LV-MaxSonar-EZ
Koble opp LV-MaxSonar-EZ

Med en 90 ° header loddet på MaxSonar -enheten er det enkelt å koble den til brødbrettet. Den 5 -pins båndkabelen kobler deretter MaxSonar til Arduino som vist på diagrammet. I tillegg til båndkabelen bruker jeg korte biter av rød og svart tilkoblingstråd fra strømfordelingsskinnen for å gi enheten strøm.

Kabling:

MaxSonar Arduino Farge
1 (BW) Power-GND Gul
2 (PW) Digital-5 Grønn
3 (AN) Analog-0 Blå
4 (RX) Digital-3 Lilla
5 (TX) Digital-2 Grå
6 (+5) +5 BB-PWR-skinne rød
7 (GND) GND BB-PWR-skinne Svart

Merk:

Ikke la antall tilkoblinger som brukes i denne instruksjonsboken hindre deg i å vurdere MaxSonar for prosjektet ditt. Denne instruksjonsboken bruker alle MaxSonar-grensesnittalternativene for å illustrere hvordan de fungerer og sammenligne dem med hverandre og med HC-SR04-enheten. For en gitt bruk (ved hjelp av et av grensesnittalternativene) vil et prosjekt vanligvis bruke en eller to av grensesnittpinnene (pluss strøm og jord).

Trinn 4: Koble opp HC-SR04

HC-SR04 leveres vanligvis med en 90 ° topptekst som allerede er festet, så det er enkelt å koble den til brødbrettet. Den 2-pins båndkabelen kobler deretter HC-SR04 til Arduino som vist på diagrammet. I tillegg til båndkabelen bruker jeg korte biter av rød og svart tilkoblingstråd fra strømfordelingsskinnen for å gi enheten strøm.

HC-SR04 Arduino Farge
1 (VCC) +5 BB-PWR-skinne rød
2 (TRIG) Digital-6 Gul
3 (ECHO) Digital-7 oransje
4 (GND) GND BB-PWR-skinne Svart

Trinn 5: Koble opp valgvelgeren 'HC-SR04'

Da jeg startet dette prosjektet var hensikten min ganske enkelt å teste de forskjellige grensesnittalternativene til MaxSonar -enheten. Etter å ha fått det i gang, bestemte jeg meg for at det ville være fint å sammenligne det med den allestedsnærværende HC-SR04 (bugeye) enheten. Imidlertid ønsket jeg å kunne kjøre/teste uten at det er inkludert, så jeg la til et alternativ/test i koden.

Koden sjekker en inngangspinne for å se om HC-SR04-enheten skal inkluderes i måling og utgang.

I diagrammet er dette vist som en bryter, men på brødbrettet bruker jeg ganske enkelt en startkabel (som sett på bildene). Hvis ledningen er koblet til GND, vil HC-SR04 bli inkludert i målingene. Koden 'trekker opp' (gjør inngangen høy/sann) i Arduino, slik at hvis den ikke trekkes lavt (koblet til GND), vil HC-SR04 ikke bli målt.

Selv om denne instruksen ble til en sammenligning av de to enhetene, bestemte jeg meg for å la dette være på plass for å illustrere hvordan du kan inkludere/ekskludere forskjellige enheter/alternativer i prosjektet ditt.

Brødbrett Arduino Farge
GND BB-PWR-skinne Digital-12 Hvit

Trinn 6: Få det til å fungere …

Få alt til å fungere…
Få alt til å fungere…
Få alt til å fungere…
Få alt til å fungere…
Få alt til å fungere…
Få alt til å fungere…

Nå som alt er koblet til - er det på tide å få ting til å fungere!

Som nevnt i 'Forutsetninger' - jeg skal ikke forklare hvordan Arduino IDE fungerer eller hvordan man programmerer en Arduino (i detalj).

Følgende seksjoner bryter ned Arduino -koden som er inkludert i dette prosjektet.

Pakk ut hele arkivet til et sted du bruker for din Arduino -utvikling. Last inn `MaxSonar-outputs.ino`-koden i Arduino IDE, og la oss komme i gang!

Trinn 7: Prosjektoppsett

Prosjektet inneholder informasjon om LV-MaxSonar-EZ-enheten, kretsdiagrammet, en README og Arduino-koden. Kretsdiagrammet er i Fritzing -format samt et-p.webp

Trinn 8: Kodeinnføring …

I denne instruksen kan jeg ikke gå gjennom alle aspekter av koden. Jeg dekker noen av detaljene på høyt nivå. Jeg oppfordrer deg til å lese kommentaren på toppnivå i koden og grave deg ned i metodene.

Kommentarene gir mye informasjon som jeg ikke vil gjenta her.

Det er et par ting jeg vil påpeke i "oppsett" -koden …

  • `_DEBUG_OUTPUT` - variabel og #define setninger
  • Definisjoner av Arduino 'pins' som brukes for grensesnittet
  • Definisjoner av konverteringsfaktorene som brukes i beregninger

Debugging brukes i hele koden, og jeg skal vise hvordan den kan slås av/på dynamisk.

'Definisjonene' brukes for Arduino -pinnene og -konverteringene for å gjøre det enklere å bruke denne koden i andre prosjekter.

Feilsøker …

"Debugging" -delen definerer en variabel og noen makroer som gjør det enkelt å inkludere feilsøkingsinformasjon i serieutgangen på forespørsel.

Den boolske variabelen "_DEBUG_OUTPUT" er satt til falsk i koden (kan settes til sann) og brukes som en test i makroene "DB_PRINT …". Den kan endres dynamisk i kode (sett i metoden `setDebugOutputMode`).

Globals…

Etter definisjonene oppretter og initialiserer koden noen få globale variabler og objekter.

  • SoftwareSerial (se neste avsnitt)
  • _loopCount - Brukes til å sende ut en topptekst på hver rad
  • _inputBuffer - Brukes til å samle seriell/terminalinngang for å behandle alternativer (feilsøking på/av)

Trinn 9: Arduino Software-Serial …

Et av MaxSonar -grensesnittalternativene er en seriell datastrøm. Arduino UNO gir imidlertid bare en enkelt seriell datatilkobling, og den brukes/deles med USB -porten for å kommunisere med Arduino IDE (vertsmaskin).

Heldigvis er det en bibliotekskomponent som følger med Arduino IDE som bruker et par Arduino digital-I/O-pinner for å implementere et seriell-i/o-grensesnitt. Siden MaxSonar serielt grensesnitt bruker 9600 BAUD, er dette "programvare" -grensesnittet perfekt i stand til å håndtere kommunikasjonen.

For de som bruker en Arduino-Mega (eller annen enhet som har flere HW serielle porter) kan du justere koden for å bruke en fysisk serieport og eliminere behovet for SW-serien.

`Oppsett` -metoden initialiserer` SoftwareSerial` -grensesnittet som skal brukes med MaxSonar -enheten. Bare mottak (RX) er nødvendig. Grensesnittet er 'invertert' for å matche utgangen til MaxSonar.

Trinn 10: Kode - Oppsett

Som beskrevet ovenfor initialiserer `oppsett` -metoden grensesnittet` SoftwareSerial`, så vel som det fysiske serielle grensesnittet. Den konfigurerer Arduino I/O -pinnene og sender ut en overskrift.

Trinn 11: Kode - sløyfe

`Loop` -koden går gjennom følgende:

  • Send ut en overskrift (brukes til feilsøking og plotteren)
  • Utløs MaxSonar for å ta en måling
  • Les MaxSonar Pulse-Width-verdien
  • Les MaxSonar Serial-Data-verdien
  • Les MaxSonar Analog -verdien
  • Sjekk alternativet 'HC-SR04', og hvis det er aktivert:

    Utløs og les HC-SR04-enheten

  • Send dataene ut i et tabulatoravgrenset format som kan brukes av serieplotteren
  • Vent til nok tid har gått, slik at en ny måling kan tas

Trinn 12: Kode - Trigger MaxSonar. Les PW -verdi

MaxSonar har to moduser: 'utløst' og 'kontinuerlig'

Denne instruksjonsboken bruker 'utløst' modus, men mange prosjekter kan ha fordeler av å bruke 'kontinuerlig' modus (se databladet).

Når du bruker 'utløst' modus, er den første gyldige utgangen fra pulsbredde (PW). Etter det er resten av utgangene gyldige.

`TiggerAndReadDistanceFromPulse` pulserer utløserpinnen på MaxSonar-enheten og leser den resulterende verdien for pulsbreddeavstand

Vær oppmerksom på at MaxSonar, i motsetning til mange andre sonar-enheter, håndterer rundturskonverteringen, slik at avstanden som leses er avstanden til målet.

Denne metoden forsinker også lenge nok til at de andre utgangene på enheten er gyldige (serielle, analoge).

Trinn 13: Kode - Les MaxSonar seriell verdi

Etter at MaxSonar er utløst (eller i "kontinuerlig" modus), hvis alternativet for seriell utgang er aktivert (via "BW - Pin -1" -kontrollen) sendes en seriell datastrøm i formen "R nnn", fulgt av en CARRIAGE-RETURN '\ r'. 'Nnn' er verdien av tommer til objektet.

Metoden `readDistanceFromSerial` leser serielle data (fra programvareserialporten) og konverterer verdien 'nnn' til desimal. Den inkluderer en feilsikker tidsavbrudd, bare hvis en seriell verdi ikke mottas.

Trinn 14: Kode - Les MaxSonar Analog Value

MaxSonar analoge port gir kontinuerlig en utgangsspenning proporsjonal med den siste målte avstanden. Denne verdien kan leses når som helst etter at enheten er initialisert. Verdien oppdateres innen 50 ms av den siste avstandsmåling (utløst eller kontinuerlig modus).

Verdien er (Vcc/512) per tomme. Så, med en Vcc fra Arduino på 5 volt, vil verdien være ~ 9,8 mV/in. Metoden `readDistanceFromAnalog` leser verdien fra den analoge inngangen til Arduino og konverterer den til en` `tommer '' verdi.

Trinn 15: Kode - utløser og les HC -SR04

Selv om det er biblioteker for å lese HC-SR04, har jeg funnet ut at noen av dem er upålitelige med forskjellige enheter jeg har testet med. Jeg har funnet koden jeg har inkludert i metoden `sr04ReadDistance` for å være enkel og mer pålitelig (så mye som den billige HC-SR04-enheten kan være).

Denne metoden angir og utløser deretter HC-SR04-enheten og venter deretter på å måle returpulsbredden. Måling av pulsbredden inkluderer en timeout for å håndtere HC-SR04-problemet med en veldig lang pulsvarighet når den ikke finner et mål. En pulsbredde som er lengre enn en målavstand på ~ 10 fot antas å være ingen gjenstand eller et objekt som ikke kan gjenkjennes. Hvis tidsavbruddet er nådd, returneres verdien '0' som avstanden. Denne "avstanden" (pulsbredde) kan justeres ved hjelp av #define verdier.

Pulsbredden konverteres til en rundtur-avstand før den returneres som avstanden til objektet.

Trinn 16: Kode - Arduino IDE Serial Plotter Support

Kode - Arduino IDE Serial Plotter Support
Kode - Arduino IDE Serial Plotter Support

Nå for utgangen!

`Loop` -metoden utløser innsamling av avstandsmåling fra de to enhetene - men hva gjør vi med det?

Selvfølgelig sender vi den ut, så den kan sees på konsollen - men vi vil ha mer!

Arduino IDE gir også Serial Plotter -grensesnittet. Vi vil bruke det til å gi en sanntidsgraf over avstanden til objektet vårt fra utgangene til våre to enheter.

Seriell plotter godtar en overskrift som inneholder verdimerkninger og deretter flere rader med avgrensede verdier som skal plottes som en graf. Hvis verdiene sendes ut regelmessig (en gang hvert "så mange sekund") gir grafen en visualisering av avstanden til objektet over tid.

Metoden `loop 'sender ut de tre verdiene fra MaxSonar og verdien fra HC-SR04 i et faneadskilt format som kan brukes med Serial Plotter. En gang hver 20. rad sender den ut overskriften (bare i tilfelle Serial Plotter er aktivert midtstrømmen).

Dette lar deg visualisere avstanden til hindringen og også se forskjellen i verdiene som returneres av de to enhetene.

Trinn 17: Kode - feilsøking …

Kode - feilsøking …
Kode - feilsøking …
Kode - feilsøking …
Kode - feilsøking …

Debugging er en nødvendighet. Hvordan kan du spore et problem når noe ikke fungerer som forventet?

En første forståelseslinje er ofte noen "enkle" tekstutdata som kan indikere hva som skjer. Disse kan legges til koden når og hvor det er nødvendig for å spore et problem, og deretter fjernes når problemet er løst. Å legge til og fjerne koden er imidlertid tidkrevende og kan i seg selv føre til andre problemer. Noen ganger er det bedre å kunne aktivere og deaktivere det dynamisk mens du lar kildekoden være i fred.

I denne instruksjonsboken har jeg inkludert en mekanisme for å aktivere og deaktivere feilsøkingsutskrift (seriell utgang) uttalelser dynamisk fra inngang som er lest fra Arduino IDE Serial Monitor (i en kommende utgave forventes Serial Plotter også å gi denne inngangen).

Boolean `_DEBUG_OUTPUT` brukes i en rekke #define utskriftsmetoder som kan brukes i koden. Verdien av variabelen _DEBUG_OUTPUT brukes til å aktivere utskrift (sending av utdata) eller ikke. Verdien kan endres dynamisk i koden, slik metoden `setDebugOutputMode 'gjør.

Metoden `setDebugOutputMode` kalles fra` loop 'basert på input mottatt fra den serielle inngangen. Inngangen analyseres for å se om den matchet "feilsøking på/av | sann/usann" for å aktivere/deaktivere feilsøkingsmodus.

Trinn 18: Konklusjon

Jeg håper dette enkle maskinvareoppsettet og eksempelkoden kan hjelpe deg med å forstå forskjellene mellom HC-SR04 og LV-MaxSonar-EZ-enhetene. Begge er veldig enkle å bruke, og jeg tror at hver har sine fordeler. Å vite når du skal bruke en i stedet for en annen, kan være avgjørende for et vellykket prosjekt.

BTW-Jeg antydet en veldig enkel å bruke for å måle avstanden til et objekt nøyaktig ved hjelp av LV-MaxSonar-EZ … Du kan bruke den analoge utgangen (en ledning) og den kontinuerlige målemodusen til å lese avstand når det er nødvendig ved hjelp av den enkle kode i `readDistanceFromAnalog` direkte fra den analoge Arduino -inngangen. Én ledning og (kondensert) én kodelinje!

Trinn 19: Alternativ MaxSonar -tilkobling (med 180 ° topptekst)

Alternativ MaxSonar -tilkobling (med 180 ° topptekst)
Alternativ MaxSonar -tilkobling (med 180 ° topptekst)
Alternativ MaxSonar -tilkobling (med 180 ° topptekst)
Alternativ MaxSonar -tilkobling (med 180 ° topptekst)
Alternativ MaxSonar -tilkobling (med 180 ° topptekst)
Alternativ MaxSonar -tilkobling (med 180 ° topptekst)

Som jeg nevnte, kommer ikke MaxSonar med tilkoblet topptekst. Så du kan bruke den tilkoblingen som er best egnet for prosjektet ditt. I noen tilfeller kan en 180 ° (rett) overskrift være mer passende. Hvis det er tilfelle, ville jeg raskt vise hvordan du kan bruke det med denne Instructable. Denne illustrasjonen viser en MaxSonar med et rett topptekst koblet til brødbrettet med en mann-hunn-båndkabel, og deretter koblet til Arduino som beskrevet i resten av artikkelen.

Trinn 20: Arduino -kode

Arduino-koden er i mappen 'MaxSonar-outputs' i prosjektet i Sonar Range-Finder Comparison

Anbefalt: