Inhoudsopgave:

LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino - Ajarnpa
LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino - Ajarnpa

Video: LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino - Ajarnpa

Video: LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino - Ajarnpa
Video: How to program arduino for making SONAR (HC-SR04 Ultrasonic sensor) 2024, November
Anonim
LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino
LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino
LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino
LV-MaxSonar-EZ en HC-SR04 sonar-afstandsmeters vergelijken met Arduino

Ik merk dat veel projecten (vooral robots) vereisen, of kunnen profiteren van, het in realtime meten van de afstand tot een object. Sonar-afstandsmeters zijn relatief goedkoop en kunnen eenvoudig worden aangesloten op een microcontroller zoals de Arduino.

Deze Instructable vergelijkt twee eenvoudig te verkrijgen sonar-afstandsmeter-apparaten, laat zien hoe ze op de Arduino kunnen worden aangesloten, welke code nodig is om waarden van hen te lezen en hoe ze in verschillende situaties tegen elkaar 'meten'. Hieruit hoop ik dat u inzicht krijgt in de voor- en nadelen van de twee apparaten die u zullen helpen het meest geschikte apparaat in uw volgende project te gebruiken.

Ik wilde het extreem populaire HC-SR04-apparaat (bug-eye) vergelijken met het minder gebruikelijke LV-MaxSonar-EZ-apparaat om te zien wanneer ik het ene zou willen gebruiken in plaats van het andere. Ik wilde mijn bevindingen en instellingen delen, zodat je met de twee kunt experimenteren en kunt beslissen welke je in je volgende project wilt gebruiken.

Waarom deze twee…

Waarom de HC-SR04? De 'Bug-Eye' HC-SR04 is enorm populair - om een paar redenen:

  • Het is niet duur - $ 2 of minder als het in bulk wordt gekocht
  • Het is relatief eenvoudig om te communiceren met
  • Vele, vele projecten gebruiken het - dus het is bekend en goed begrepen

Waarom de LV-MaxSonar-EZ?

  • Het is heel gemakkelijk om te communiceren met
  • Het heeft een goede/gemakkelijke vormfactor om in een project op te nemen
  • Het heeft 5 versies die voldoen aan verschillende meetvereisten (zie datasheet)
  • Het is (meestal) veel nauwkeuriger en betrouwbaarder dan de HC-SR04
  • Het is betaalbaar - $ 15 tot $ 20

Bovendien hoop ik dat je stukjes en beetjes vindt in de Arduino-code die ik heb geschreven voor de vergelijking die nuttig is in je projecten, zelfs buiten bereikzoeker-toepassingen.

Veronderstellingen:

  • Je bent bekend met Arduino en de Arduino IDE
  • De Arduino IDE is geïnstalleerd en werkt op uw ontwikkelmachine van voorkeur (PC/Mac/Linux)
  • Je hebt een verbinding van de Arduino IDE naar je Arduino om programma's te uploaden en uit te voeren en te communiceren

Er zijn Instructables en andere bronnen om u hierbij te helpen indien nodig.

Benodigdheden

  • HC-SR04 'Bug-Eye' afstandsmeter
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - ik gebruik een '1', maar alle versies hebben dezelfde interface)
  • Arduino UNO
  • Soldeerloze Breadboard
  • Pin Header - 7-pins 90° (voor het MaxSonar-apparaat, zie * hieronder voor gebruik van 180°)
  • Jumper lintkabel - 5 draads, mannelijk-mannelijk
  • Jumper lintkabel - 2-draads, mannelijk-mannelijk
  • Doorverbindingsdraad - mannelijk-mannelijk
  • Aansluitdraad - rood en zwart (voor stroom van Arduino naar breadboard en breadboard naar apparaten)
  • Computer met Arduino IDE en USB-kabel om verbinding te maken met de Arduino UNO

* De MaxSonar wordt niet geleverd met een aangesloten header, dus u kunt een header gebruiken die het meest geschikt is voor uw project. Voor deze Instructable heb ik een header van 90 ° gebruikt om het gemakkelijk in het breadboard te kunnen steken. In sommige projecten is een 180° (rechte) kop misschien beter. Ik voeg een foto bij om te laten zien hoe je dat kunt aansluiten, zodat je ze niet hoeft te verwisselen. Als je liever een 180°-header gebruikt, heb je een extra 7-aderige mannelijke-vrouwelijke lintkabeljumper nodig om aan te sluiten, zoals mijn foto laat zien.

Git Hub-opslagplaats: projectbestanden

Stap 1: De jacht…

De achtervolging…
De achtervolging…

Voordat we ingaan op de details over hoe je dingen kunt aansluiten, zodat je zelf kunt experimenteren met deze twee fantastische apparaten, wilde ik een paar dingen beschrijven waarvan ik hoop dat deze Instructable je zal helpen.

Omdat het MaxSonar-apparaat minder wordt gebruikt en minder wordt begrepen in vergelijking met het HC-SR04-apparaat, wilde ik laten zien:

  • Het MaxSonar-apparaat aansluiten op een microcontroller (in dit geval een Arduino)
  • Hoe metingen te doen vanaf de verschillende uitgangen van het MaxSonar-apparaat
  • Vergelijk de interface van het MaxSonar-apparaat met het HC-SR04-apparaat
  • Test de mogelijkheid om afstanden van objecten met verschillende oppervlakken te meten
  • Waarom u het ene apparaat boven het andere zou kunnen kiezen (of beide tegelijk zou gebruiken)

Ik hoop dat deze Instructable je helpt bij deze achtervolging…

Stap 2: Aan de slag - Arduino-Breadboard Setup

Aan de slag - Arduino-Breadboard Setup
Aan de slag - Arduino-Breadboard Setup

Als je prototyping hebt gemaakt met Arduino, heb je waarschijnlijk al een Arduino-Breadboard-setup waar je vertrouwd mee bent. Als dat zo is, ben ik er zeker van dat je het kunt gebruiken voor deze Instructable. Zo niet, dan is dit hoe ik de mijne heb opgezet - voel je vrij om het te kopiëren voor dit en toekomstige projecten.

  1. Ik bevestig de Arduino UNO en een klein draadloos breadboard aan een stuk plastic van 3-3/8" x 4-3/4" (8,6 x 12,0 cm) met rubberen voetjes aan de onderkant.
  2. Ik gebruik rode en zwarte 22-AWG-aansluitdraad om +5V en GND van de Arduino aan te sluiten op de breadboard-stroomverdelingsstrip
  3. Ik voeg een 10µF tantaalcondensator toe aan de stroom-aarde-distributiestrip om stroomruis te verminderen (maar dit project heeft dit niet nodig)

Dit levert een mooi platform op waar eenvoudig een prototype mee te maken is.

Stap 3: Sluit de LV-MaxSonar-EZ. aan

Sluit de LV-MaxSonar-EZ. aan
Sluit de LV-MaxSonar-EZ. aan
Sluit de LV-MaxSonar-EZ. aan
Sluit de LV-MaxSonar-EZ. aan
Sluit de LV-MaxSonar-EZ. aan
Sluit de LV-MaxSonar-EZ. aan

Met een header van 90° die op het MaxSonar-apparaat is gesoldeerd, is het eenvoudig om het in het breadboard te steken. De 5-pins lintkabel verbindt vervolgens de MaxSonar met de Arduino, zoals te zien is in het diagram. Naast de lintkabel gebruik ik korte stukjes rood en zwart aansluitdraad van de stroomverdeelrail om het apparaat van stroom te voorzien.

bedrading:

MaxSonar Arduino Kleur
1 (zwart-wit) Vermogen-GND Geel
2 (PW) Digitaal-5 Groente
3 (AN) Analoog-0 Blauw
4 (RX) Digitaal-3 Paars
5 (TX) Digitaal-2 Grijs
6 (+5) +5 BB-PWR-rail rood
7 (GND) GND BB-PWR-rail zwart

Opmerking:

Laat het aantal verbindingen dat in deze Instructable wordt gebruikt u er niet van weerhouden de MaxSonar voor uw project te overwegen. Deze Instructable gebruikt alle MaxSonar-interface-opties om te illustreren hoe ze werken en om ze met elkaar en met het HC-SR04-apparaat te vergelijken. Voor een bepaald gebruik (met behulp van een van de interface-opties) zal een project over het algemeen een of twee van de interface-pinnen gebruiken (plus voeding en aarde).

Stap 4: Sluit de HC-SR04 aan

De HC-SR04 wordt meestal geleverd met een header van 90° die al is bevestigd, dus het is gemakkelijk om hem op het breadboard aan te sluiten. De 2-pins lintkabel verbindt vervolgens de HC-SR04 met de Arduino, zoals te zien is in het diagram. Naast de lintkabel gebruik ik korte stukjes rood en zwart aansluitdraad van de stroomverdeelrail om het apparaat van stroom te voorzien.

HC-SR04 Arduino Kleur
1 (VCC) +5 BB-PWR-rail rood
2 (TRIG) Digitaal-6 Geel
3 (ECHO) Digitaal-7 Oranje
4 (GND) GND BB-PWR-rail zwart

Stap 5: Sluit de 'HC-SR04' optiekiezer aan

Toen ik aan dit project begon, was het gewoon mijn bedoeling om de verschillende interface-opties van het MaxSonar-apparaat te testen. Nadat ik dat in gebruik had genomen, besloot ik dat het leuk zou zijn om het te vergelijken met het alomtegenwoordige HC-SR04 (bugeye) apparaat. Ik wilde echter kunnen uitvoeren/testen zonder inbegrepen, dus heb ik een optie/test in de code toegevoegd.

De code controleert een invoerpin om te zien of het HC-SR04-apparaat moet worden opgenomen in de meetwaarde en -uitvoer.

In het schema wordt dit weergegeven als een schakelaar, maar op het breadboard gebruik ik gewoon een jumperdraad (zoals te zien op de foto's). Als de draad is aangesloten op GND, wordt de HC-SR04 in de metingen opgenomen. Code 'trekt omhoog' (maakt de invoer hoog/waar) in de Arduino, zodat als deze niet laag wordt getrokken (verbonden met GND) de HC-SR04 niet wordt gemeten.

Hoewel dit Instructable veranderde in een vergelijking van de twee apparaten, heb ik besloten dit te laten staan om te illustreren hoe je verschillende apparaten/opties in je project zou kunnen opnemen/uitsluiten.

Breadboard Arduino Kleur
GND BB-PWR-rail Digitaal-12 wit

Stap 6: Alles laten werken…

Alles laten werken…
Alles laten werken…
Alles laten werken…
Alles laten werken…
Alles laten werken…
Alles laten werken…

Nu alles is aangesloten, is het tijd om dingen te laten werken!

Zoals vermeld in 'Aannames' - ik ga niet uitleggen hoe de Arduino IDE werkt of hoe je een Arduino programmeert (in detail).

In de volgende secties wordt de Arduino-code beschreven die in dit project is opgenomen.

Pak het volledige archief uit op een locatie die u gebruikt voor uw Arduino-ontwikkeling. Laad de `MaxSonar-outputs.ino` code in je Arduino IDE en laten we beginnen!

Stap 7: Projectlay-out

Het project bevat informatie over het LV-MaxSonar-EZ-apparaat, het schakelschema, een README en de Arduino-code. Het schakelschema is in Fritzing-formaat, evenals een PNG-afbeelding. De README is in Markdown-formaat.

Stap 8: Code-inloop…

In deze Instructable kan ik niet elk aspect van de code doorlopen. Ik behandel enkele details op hoog niveau. Ik moedig je aan om de opmerking op het hoogste niveau in de code te lezen en in de methoden te graven.

De opmerkingen geven veel informatie die ik hier niet zal herhalen.

Er zijn een paar dingen waar ik op wil wijzen in de 'setup'-code …

  • De `_DEBUG_OUTPUT` - variabele en #define statements
  • Definities van de Arduino 'pinnen' die worden gebruikt voor de interface
  • Definities van de conversiefactoren die in berekeningen worden gebruikt

De foutopsporing wordt in de hele code gebruikt en ik zal laten zien hoe het dynamisch kan worden in- of uitgeschakeld.

De 'definities' worden gebruikt voor de Arduino-pinnen en -conversies om het gemakkelijker te maken om deze code in andere projecten te gebruiken.

Debuggen…

De sectie 'Debugging' definieert een variabele en enkele macro's die het gemakkelijk maken om debugging-informatie op te nemen in de seriële uitvoer op aanvraag.

De boolean-variabele `_DEBUG_OUTPUT` is ingesteld op false in de code (kan worden ingesteld op true) en wordt gebruikt als een test in de `DB_PRINT…`-macro's. Het kan dynamisch in code worden gewijzigd (zoals te zien is in de `setDebugOutputMode`-methode).

Globalen…

Na de definities maakt en initialiseert de code enkele globale variabelen en objecten.

  • SoftwareSerial (zie volgende sectie)
  • _loopCount - Wordt gebruikt om elke 'n' rij een koptekst uit te voeren
  • _inputBuffer - Wordt gebruikt om seriële/terminal-invoer te verzamelen om opties te verwerken (foutopsporing aan/uit)

Stap 9: Arduino-software-serieel…

Een van de MaxSonar-interface-opties is een seriële datastroom. De Arduino UNO biedt echter slechts een enkele seriële dataverbinding en die wordt gebruikt/gedeeld met de USB-poort om te communiceren met de Arduino IDE (hostcomputer).

Gelukkig is er een bibliotheekcomponent meegeleverd met de Arduino IDE die een paar Arduino digitale I/O-pinnen gebruikt om een seriële i/o-interface te implementeren. Aangezien de MaxSonar seriële interface 9600 BAUD gebruikt, is deze 'software'-interface perfect in staat om de communicatie af te handelen.

Voor degenen die een Arduino-Mega (of ander apparaat met meerdere HW seriële poorten) gebruiken, voel je vrij om de code aan te passen om een fysieke seriële poort te gebruiken en de noodzaak voor de SW-Serial te elimineren.

De `setup`-methode initialiseert de `SoftwareSerial`-interface voor gebruik met het MaxSonar-apparaat. Alleen de ontvangst (RX) is nodig. De interface is 'omgekeerd' om overeen te komen met de output van de MaxSonar.

Stap 10: Code - Setup

Zoals hierboven beschreven, initialiseert de `setup`-methode de `SoftwareSerial`-interface, evenals de fysieke seriële interface. Het configureert de Arduino I/O-pinnen en stuurt een header.

Stap 11: Code - Loop

De `loop`-code doorloopt het volgende:

  • Voer een header uit (gebruikt voor debuggen en de plotter)
  • Activeer de MaxSonar om een meting uit te voeren
  • Lees de MaxSonar Pulse-Width-waarde
  • Lees de MaxSonar Serial-Data-waarde
  • Lees de MaxSonar Analog-waarde
  • Vink de optie 'HC-SR04' aan en, indien ingeschakeld:

    Activeer en lees het HC-SR04-apparaat

  • Voer de gegevens uit in een door tabs gescheiden formaat dat kan worden gebruikt door de seriële plotter
  • Wacht tot er voldoende tijd is verstreken zodat een nieuwe meting kan worden uitgevoerd

Stap 12: Code - Activeer de MaxSonar. PW-waarde lezen

De MaxSonar heeft twee standen: 'triggered' en 'continuous'

Deze Instructable gebruikt de 'getriggerde' modus, maar veel projecten kunnen profiteren van het gebruik van de 'continue' modus (zie de datasheet).

Bij gebruik van de 'getriggerde' modus is de eerste geldige uitgang van de Pulsbreedte (PW) uitgang. Daarna zijn de rest van de uitgangen geldig.

De `tiggerAndReadDistanceFromPulse` pulseert de triggerpin op het MaxSonar-apparaat en leest de resulterende pulsbreedte-afstandswaarde

Merk op dat, in tegenstelling tot veel andere sonarapparaten, de MaxSonar de conversie van heen en terug afhandelt, dus de afgelezen afstand is de afstand tot het doel.

Deze methode vertraagt ook lang genoeg om de andere uitgangen van het apparaat geldig te laten zijn (serieel, analoog).

Stap 13: Code - Lees MaxSonar Serial Value

Nadat de MaxSonar is getriggerd (of in de 'continue' modus), wordt als de seriële uitvoeroptie is ingeschakeld (via de 'BW - Pin-1'-besturing), een seriële datastroom in de vorm "R nnn" verzonden, gevolgd door een CARRIAGE-RETURN '\r'. De ' nnn ' is de waarde van inches aan het object.

De `readDistanceFromSerial`-methode leest de seriële gegevens (van de Software Serial-poort) en converteert de ' nnn '-waarde naar decimaal. Het bevat een fail-safe time-out, voor het geval er geen seriële waarde wordt ontvangen.

Stap 14: Code - Lees MaxSonar Analoge Waarde

De analoge MaxSonar-poort levert continu een uitgangsspanning die evenredig is met de laatst gemeten afstand. Deze waarde kan op elk moment worden gelezen nadat het apparaat is geïnitialiseerd. De waarde wordt binnen 50 mS na de laatste afstandsmeting bijgewerkt (geactiveerde of continue modus).

De waarde is (Vcc/512) per inch. Dus met een Vcc van de Arduino van 5 volt, zal de waarde ~9,8mV/in zijn. De `readDistanceFromAnalog`-methode leest de waarde van de Arduino analoge ingang en converteert deze naar een 'inch'-waarde.

Stap 15: Code - Activeer en lees de HC-SR04

Hoewel er bibliotheken zijn om de HC-SR04 te lezen, heb ik ontdekt dat sommige daarvan onbetrouwbaar zijn met verschillende apparaten waarmee ik heb getest. Ik heb gemerkt dat de code die ik heb opgenomen in de `sr04ReadDistance`-methode eenvoudig en betrouwbaarder is (zoveel als het goedkope HC-SR04-apparaat kan zijn).

Deze methode stelt het HC-SR04-apparaat in, activeert het en wacht vervolgens met het meten van de retourpulsbreedte. Het meten van de pulsbreedte omvat een time-out om het HC-SR04-probleem met een zeer lange pulsduur op te lossen wanneer het geen doel kan vinden. Een pulsbreedte langer dan een doelafstand van ~10 voet wordt verondersteld geen object te zijn of een object dat niet kan worden herkend. Als de time-out is bereikt, wordt een '0'-waarde geretourneerd als de afstand. Deze 'afstand' (pulsbreedte) kan worden aangepast met behulp van de #define-waarden.

De pulsbreedte wordt geconverteerd naar een retourafstand voordat deze wordt geretourneerd als de afstand tot het object.

Stap 16: Code - Ondersteuning voor Arduino IDE seriële plotter

Code - Ondersteuning voor Arduino IDE seriële plotter
Code - Ondersteuning voor Arduino IDE seriële plotter

Nu voor de uitvoer!

De `loop`-methode activeert het verzamelen van de afstandsmeting van de twee apparaten - maar wat doen we ermee?

Natuurlijk sturen we het op zodat het op de console kan worden bekeken - maar we willen meer!

De Arduino IDE biedt ook de Serial Plotter-interface. We zullen dat gebruiken om een realtime grafiek te maken van de afstand tot ons object vanaf de uitgangen van onze twee apparaten.

De seriële plotter accepteert een koptekst die waardelabels bevat en vervolgens meerdere rijen met gescheiden waarden die als grafiek worden uitgezet. Als de waarden regelmatig worden uitgevoerd (eenmaal per 'zoveel seconden'), geeft de grafiek een visualisatie van de afstand tot het object in de tijd.

De `loop`-methode geeft de drie waarden van de MaxSonar en de waarde van de HC-SR04 weer in een door tabs gescheiden formaat dat kan worden gebruikt met de seriële plotter. Eens in de 20 rijen voert het de header uit (voor het geval de seriële plotter mid-stream is ingeschakeld).

Hierdoor kunt u de afstand tot het obstakel visualiseren en ook het verschil zien in de waarden die door de twee apparaten worden geretourneerd.

Stap 17: Code - Foutopsporing…

Code - Foutopsporing…
Code - Foutopsporing…
Code - Foutopsporing…
Code - Foutopsporing…

Debuggen is een noodzaak. Hoe kun je een probleem opsporen als iets niet werkt zoals verwacht?

Een eerste begrip is vaak wat 'eenvoudige' tekstuitvoer die kan aangeven wat er aan de hand is. Deze kunnen waar en wanneer nodig aan de code worden toegevoegd om een probleem op te sporen en vervolgens worden verwijderd zodra het probleem is opgelost. Het toevoegen en verwijderen van de code is echter tijdrovend en kan op zich tot andere problemen leiden. Soms is het beter om het dynamisch in en uit te schakelen terwijl u de broncode met rust laat.

In deze Instructable heb ik een mechanisme opgenomen om debugging print (seriële uitvoer) verklaringen dynamisch in en uit te schakelen van invoer die wordt gelezen van de Arduino IDE seriële monitor (in een aanstaande release wordt verwacht dat de seriële plotter deze invoer ook zal leveren).

De `_DEBUG_OUTPUT` boolean wordt gebruikt in een aantal #define afdrukmethoden die binnen de code kunnen worden gebruikt. De waarde van de variabele _DEBUG_OUTPUT wordt gebruikt om wel of niet afdrukken (uitvoer verzenden) mogelijk te maken. De waarde kan dynamisch worden gewijzigd binnen de code, zoals de `setDebugOutputMode`-methode doet.

De `setDebugOutputMode`-methode wordt aangeroepen vanuit de `loop` op basis van invoer die is ontvangen van de seriële invoer. De invoer wordt geparseerd om te zien of deze overeenkomt met "foutopsporing aan/uit | waar/onwaar" om de foutopsporingsmodus in/uit te schakelen.

Stap 18: Conclusie

Ik hoop dat deze eenvoudige hardwareconfiguratie en de voorbeeldcode u kunnen helpen de verschillen tussen de HC-SR04- en de LV-MaxSonar-EZ-apparaten te begrijpen. Beide zijn heel gemakkelijk te gebruiken en ik geloof dat elk zijn voordelen heeft. Weten wanneer u de ene in plaats van de andere moet gebruiken, kan van groot belang zijn voor een succesvol project.

Tussen haakjes - ik heb gesuggereerd op een zeer gebruiksvriendelijke manier om de afstand tot een object nauwkeurig te meten met behulp van de LV-MaxSonar-EZ … U kunt de analoge uitgang (één draad) en de continue meetmodus gebruiken om de afstand indien nodig te lezen met behulp van de code in `readDistanceFromAnalog` direct vanaf de Arduino analoge ingang. Eén draad en (verkorte) één regel code!

Stap 19: Alternatieve MaxSonar-verbinding (met 180°-header)

Alternatieve MaxSonar-verbinding (met 180°-header)
Alternatieve MaxSonar-verbinding (met 180°-header)
Alternatieve MaxSonar-verbinding (met 180°-header)
Alternatieve MaxSonar-verbinding (met 180°-header)
Alternatieve MaxSonar-verbinding (met 180°-header)
Alternatieve MaxSonar-verbinding (met 180°-header)

Zoals ik al zei, wordt de MaxSonar niet geleverd met een aangesloten kop. U kunt dus elke aansluiting gebruiken die het meest geschikt is voor uw project. In sommige gevallen kan een 180° (recht) kopstuk geschikter zijn. Als dat het geval is, wilde ik snel laten zien hoe je dat kunt gebruiken met deze Instructable. Deze illustratie toont een MaxSonar met een rechte header die met een mannelijk-vrouwelijke lintkabel op het breadboard is aangesloten en vervolgens is aangesloten op de Arduino zoals beschreven in de rest van het artikel.

Stap 20: Arduino-code

De Arduino-code bevindt zich in de map 'MaxSonar-outputs' van het project in Sonar Range-Finder Comparison

Aanbevolen: