Innehållsförteckning:

Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino: 20 steg (med bilder)
Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino: 20 steg (med bilder)

Video: Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino: 20 steg (med bilder)

Video: Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino: 20 steg (med bilder)
Video: GeoGebra: Jämförelse av olika versioner 2024, November
Anonim
Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino
Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino
Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino
Jämförelse av LV-MaxSonar-EZ och HC-SR04 ekolodsmätare med Arduino

Jag tycker att många projekt (särskilt robotar) kräver, eller kan dra nytta av, att mäta avståndet till ett objekt i realtid. Ekolodssökare är relativt billiga och kan enkelt kopplas till en mikrokontroller som Arduino.

Denna instruktionsbok jämför två lättillgängliga ekolodsmätare som visar hur man ansluter dem till Arduino, vilken kod som krävs för att läsa värden från dem och hur de "mäter sig" mot varandra i olika situationer. Från detta hoppas jag att du får insikt i för- och nackdelarna med de två enheterna som hjälper dig att använda den mest lämpliga enheten i ditt nästa projekt.

Jag ville jämföra den extremt populära HC-SR04-enheten (bug-eye) med den mindre vanliga LV-MaxSonar-EZ-enheten för att se när jag kanske vill använda den ena snarare än den andra. Jag ville dela med mig av mina resultat och inställningar så att du kan experimentera med de två och bestämma vilken du ska använda i ditt nästa projekt.

Varför dessa två …

Varför HC-SR04? Bug-Eye-HC-SR04 är extremt populär-av några skäl:

  • Det är billigt - $ 2 eller mindre om det köps i bulk
  • Det är relativt enkelt att ansluta till
  • Många, många projekt använder det - så det är välkänt och väl förstått

Varför LV-MaxSonar-EZ?

  • Det är väldigt enkelt att ansluta till
  • Den har en bra/enkel formfaktor att införliva i ett projekt
  • Den har 5 versioner som uppfyller olika mätningskrav (se datablad)
  • Det är (vanligtvis) mycket mer exakt och tillförlitligt än HC-SR04
  • Det är överkomligt - $ 15 till $ 20

Dessutom hoppas jag att du hittar bitar i Arduino-koden som jag skrev för jämförelsen användbar i dina projekt, även bortom räckviddsapplikationer.

Antaganden:

  • Du är bekant med Arduino och Arduino IDE
  • Arduino IDE är installerat och fungerar på din utvecklingsmaskin som föredrar (PC/Mac/Linux)
  • Du har en anslutning från Arduino IDE till din Arduino för att ladda upp och köra program och kommunicera

Det finns instruktioner och andra resurser som kan hjälpa dig med detta om det behövs.

Tillbehör

  • HC-SR04 'Bug-Eye' Range Finder
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-Jag använder en '1', men alla versioner har samma gränssnitt)
  • Arduino UNO
  • Lödfritt brödbräda
  • Pin Header - 7 pin 90 ° (för MaxSonar -enheten, se * nedan för att använda 180 °)
  • Bandkabelbygel - 5 trådar, han -hane
  • Bandkabelbygel - 2 trådar, hane -hane
  • Bygelkabel - hane -hane
  • Anslutningstråd - röd och svart (för ström från Arduino till brödbräda och brödbräda till enheter)
  • Dator med Arduino IDE och USB -kabel för anslutning till Arduino UNO

* MaxSonar levereras inte med en rubrik bifogad så att du kan använda en rubrik som är mest lämplig för ditt projekt. För denna instruerbara använde jag ett 90 ° -huvud för att göra det enkelt att ansluta till brödbrädan. I vissa projekt kan en 180 ° (rak) rubrik vara bättre. Jag inkluderar ett foto för att visa hur du kopplar ihop det så att du inte behöver byta dem. Om du hellre vill använda en 180 ° -huvud, behöver du ytterligare 7-tråds han-hona bandkabelbygel för att ansluta som mitt foto visar.

Git Hub Repository: Projektfiler

Steg 1: Jakten …

Jakten…
Jakten…

Innan vi går in på detaljerna om hur du kan koppla ihop saker så att du kan experimentera med dessa två fantastiska enheter, ville jag beskriva några saker som jag hoppas att denna instruerbara kan hjälpa dig med.

Eftersom MaxSonar-enheten är mindre använd och mindre förstått jämfört med HC-SR04-enheten ville jag visa:

  • Hur man ansluter MaxSonar-enheten till en mikrokontroller (i detta fall en Arduino)
  • Hur man tar mätningar från de olika utgångarna på MaxSonar -enheten
  • Jämför gränssnittet mellan MaxSonar-enheten och HC-SR04-enheten
  • Testa förmågan att mäta avstånd från föremål med olika ytor
  • Varför du kan välja en enhet framför den andra (eller använda båda samtidigt)

Jag hoppas att denna instruktör hjälper dig i denna jakt …

Steg 2: Komma igång - Arduino -Breadboard Setup

Komma igång - Arduino -Breadboard Setup
Komma igång - Arduino -Breadboard Setup

Om du har prototyperat med Arduino har du förmodligen redan en Arduino-Breadboard-installation som du är bekväm med. Om så är fallet är jag övertygad om att du kan använda den för denna instruerbara. Om inte, så här ställde jag upp mitt - kopiera gärna det för detta och framtida projekt.

  1. Jag fäster Arduino UNO och ett litet trådlöst brödbräda till en 3-3/8 "x 4-3/4" (8,6 x 12,0 cm) plastbit med gummifötter på botten.
  2. Jag använder röd och svart 22-AWG-anslutningstråd för att ansluta +5V och GND från Arduino till brödbrädans strömfördelningsremsa
  3. Jag inkluderar en 10µF tantalkondensator på kraftjordfördelningsremsan för att minska energibuller (men detta projekt kräver det inte)

Detta ger en trevlig plattform som är lätt att prototypa med.

Steg 3: Anslut LV-MaxSonar-EZ

Anslut LV-MaxSonar-EZ
Anslut LV-MaxSonar-EZ
Anslut LV-MaxSonar-EZ
Anslut LV-MaxSonar-EZ
Anslut LV-MaxSonar-EZ
Anslut LV-MaxSonar-EZ

Med ett 90 ° -huvud lödt på MaxSonar -enheten är det enkelt att ansluta det till brödbrädet. Den 5 -stifts bandkabeln ansluter sedan MaxSonar till Arduino enligt diagrammet. Förutom bandkabeln använder jag korta bitar av röd och svart anslutningstråd från kraftfördelningsskenan för att ge ström till enheten.

Kabeldragning:

MaxSonar Arduino Färg
1 (BW) Power-GND Gul
2 (PW) Digital-5 Grön
3 (AN) Analog-0 Blå
4 (RX) Digital-3 Lila
5 (TX) Digital-2 Grå
6 (+5) +5 BB-PWR-skena Röd
7 (GND) GND BB-PWR-skena Svart

Notera:

Låt inte antalet anslutningar som används i den här instruktionsboken hindra dig från att överväga MaxSonar för ditt projekt. Denna instruktionsbok använder alla MaxSonar-gränssnittsalternativ för att illustrera hur de fungerar och för att jämföra dem med varandra och med HC-SR04-enheten. För en viss användning (med hjälp av ett av gränssnittsalternativen) kommer ett projekt i allmänhet att använda en eller två av gränssnittsstiften (plus ström och jord).

Steg 4: Anslut HC-SR04

HC-SR04 levereras vanligtvis med ett 90 ° -huvud som redan är anslutet, så det är enkelt att ansluta det till brödbrädet. Den 2-stifts bandkabeln ansluter sedan HC-SR04 till Arduino enligt diagrammet. Förutom bandkabeln använder jag korta bitar av röd och svart anslutningstråd från kraftfördelningsskenan för att ge ström till enheten.

HC-SR04 Arduino Färg
1 (VCC) +5 BB-PWR-skena Röd
2 (TRIG) Digital-6 Gul
3 (ECHO) Digital-7 Orange
4 (GND) GND BB-PWR-skena Svart

Steg 5: Anslut alternativväljaren 'HC-SR04'

När jag startade detta projekt var min avsikt helt enkelt att testa de olika gränssnittsalternativen för MaxSonar -enheten. Efter att ha kommit igång bestämde jag mig för att det skulle vara trevligt att jämföra det med den allestädes närvarande HC-SR04 (bugeye) -enheten. Jag ville dock kunna köra/testa utan att det ingår, så jag lade till ett alternativ/test i koden.

Koden kontrollerar en ingångsstift för att se om HC-SR04-enheten ska ingå i mätvärdet och utmatningen.

I diagrammet visas detta som en omkopplare, men på brödbrädan använder jag helt enkelt en bygelkabel (som ses på bilderna). Om kabeln är ansluten till GND kommer HC-SR04 att inkluderas i mätningarna. Koden "drar upp" (gör ingången hög/sann) i Arduino, så att om den inte dras lågt (ansluten till GND) kommer HC-SR04 inte att mätas.

Även om den här instruktionsboken förvandlades till en jämförelse av de två enheterna, bestämde jag mig för att låta detta vara kvar för att illustrera hur du kan inkludera/utesluta olika enheter/alternativ i ditt projekt.

Bakbord Arduino Färg
GND BB-PWR-skena Digital-12 Vit

Steg 6: Få allt att fungera …

Få allt att fungera …
Få allt att fungera …
Få allt att fungera …
Få allt att fungera …
Få allt att fungera …
Få allt att fungera …

Nu när allt är anslutet - det är dags att få saker att fungera!

Som nämnts i 'Antaganden' - jag kommer inte att förklara hur Arduino IDE fungerar eller hur man programmerar en Arduino (i detalj).

Följande avsnitt bryter ner Arduino -koden som ingår i detta projekt.

Packa upp hela arkivet till en plats du använder för din Arduino -utveckling. Ladda "MaxSonar-outputs.ino" -koden i din Arduino IDE och låt oss komma igång!

Steg 7: Projektlayout

Projektet innehåller information om LV-MaxSonar-EZ-enheten, kretsschemat, en README och Arduino-koden. Kopplingsdiagrammet är i Fritzing -format samt en-p.webp

Steg 8: Kodinledning …

I den här instruktionsboken kan jag inte gå igenom alla aspekter av koden. Jag täcker några av detaljerna på hög nivå. Jag uppmuntrar dig att läsa kommentaren på högsta nivå i koden och gräva i metoderna.

Kommentarer ger mycket information som jag inte kommer att upprepa här.

Det finns några saker jag vill påpeka i "setup" -koden …

  • '_DEBUG_OUTPUT' - variabel och #define -satser
  • Definitioner av Arduino 'pins' som används för gränssnittet
  • Definitioner av de omvandlingsfaktorer som används vid beräkningar

Felsökningen används i hela koden, och jag kommer att visa hur den kan slås på/av dynamiskt.

'Definitionerna' används för Arduino -stiften och omvandlingarna för att göra det enklare att använda denna kod i andra projekt.

Felsöker …

Avsnittet "Debugging" definierar en variabel och några makron som gör det enkelt att inkludera felsökningsinformation i serieutmatningen på begäran.

Den booleska variabeln '_DEBUG_OUTPUT' är inställd på falsk i koden (kan ställas in på true) och används som ett test i 'DB_PRINT …' makron. Det kan ändras dynamiskt i kod (enligt metoden `setDebugOutputMode ').

Globaler…

Efter definitionerna skapar och initierar koden några globala variabler och objekt.

  • SoftwareSerial (se nästa avsnitt)
  • _loopCount - Används för att mata ut ett rubrik på varje rad
  • _inputBuffer - Används för att samla in seriell/terminal ingång för att bearbeta alternativ (felsökning på/av)

Steg 9: Arduino Software-Serial …

Ett av MaxSonar -gränssnittsalternativen är en seriell dataström. Arduino UNO tillhandahåller dock bara en enda seriell dataanslutning, som används/delas med USB -porten för att kommunicera med Arduino IDE (värddator).

Lyckligtvis finns det en bibliotekskomponent med Arduino IDE som använder ett par Arduino digital-I/O-stift för att implementera ett seriellt-i/o-gränssnitt. Eftersom MaxSonar seriellt gränssnitt använder 9600 BAUD, är detta "programvara" -gränssnitt perfekt för att hantera kommunikationen.

För dem som använder en Arduino-Mega (eller annan enhet som har flera HW-seriella portar) kan du justera koden för att använda en fysisk serieport och eliminera behovet av SW-Serial.

Metoden "setup" initierar "SoftwareSerial" -gränssnittet som ska användas med MaxSonar -enheten. Endast mottagning (RX) behövs. Gränssnittet är 'inverterat' för att matcha utmatningen från MaxSonar.

Steg 10: Kod - Inställning

Som beskrivits ovan initierar "setup" -metoden "SoftwareSerial" -gränssnittet, liksom det fysiska seriella gränssnittet. Den konfigurerar Arduino I/O -stiften och skickar ut en rubrik.

Steg 11: Kod - loop

'Loop' -koden löper genom följande:

  • Mata ut en rubrik (används för felsökning och plotter)
  • Aktivera MaxSonar för att ta en mätning
  • Läs MaxSonar Pulse-Width-värdet
  • Läs MaxSonar Serial-Data-värdet
  • Läs MaxSonar Analog -värdet
  • Kontrollera alternativet 'HC-SR04' och, om aktiverat:

    Utlös och läs HC-SR04-enheten

  • Mata ut data i ett flikavgränsat format som kan användas av seriell plotter
  • Vänta tills tillräckligt med tid har gått så att en annan mätning kan göras

Steg 12: Kod - Aktivera MaxSonar. Läs PW -värde

MaxSonar har två lägen: 'utlöst' och 'kontinuerlig'

Den här instruktionsboken använder "utlöst" -läget, men många projekt kan dra nytta av att använda "kontinuerligt" -läget (se databladet).

När du använder "utlöst" -läget är den första giltiga utsignalen från pulsbredd (PW) -utgången. Därefter är resten av utgångarna giltiga.

`TiggerAndReadDistanceFromPulse` pulserar utlösaren på MaxSonar-enheten och läser det resulterande pulsbreddavståndsvärdet

Observera att, till skillnad från många andra ekolodsenheter, hanterar MaxSonar rundturskonverteringen, så avläst avstånd är avståndet till målet.

Denna metod fördröjs också tillräckligt länge för att enhetens andra utgångar ska vara giltiga (seriella, analoga).

Steg 13: Kod - Läs MaxSonar Serial Value

Efter att MaxSonar har utlösts (eller i "kontinuerligt" -läge), om alternativet för seriell utmatning är aktiverat (via "BW - Pin -1" -kontrollen) skickas en seriell dataström i formen "R nnn", följt av en CARRIAGE-RETURN '\ r'. 'Nnn' är värdet på tum till objektet.

Metoden 'readDistanceFromSerial' läser seriell data (från programvarans seriella port) och konverterar värdet 'nnn' till decimal. Den innehåller en felsäker timeout, bara om ett seriellt värde inte tas emot.

Steg 14: Kod - Läs MaxSonar Analog Value

MaxSonar analoga port ger kontinuerligt en utspänning proportionell mot det senaste uppmätta avståndet. Detta värde kan läsas när som helst efter att enheten har initierats. Värdet uppdateras inom 50 ms efter den senaste distansavläsningen (utlöst eller kontinuerligt läge).

Värdet är (Vcc/512) per tum. Så, med en Vcc från Arduino på 5 volt, kommer värdet att vara ~ 9,8 mV/in. Metoden 'readDistanceFromAnalog' läser värdet från Arduino -analoga ingången och konverterar det till ett 'tum' värde.

Steg 15: Kod - Trigger och läs HC -SR04

Även om det finns bibliotek för att läsa HC-SR04, har jag funnit att några av dem är opålitliga med olika enheter jag har testat med. Jag har funnit att koden som jag har inkluderat i metoden 'sr04ReadDistance' är enkel och mer pålitlig (så mycket som den billiga HC-SR04-enheten kan vara).

Denna metod ställer in och utlöser sedan HC-SR04-enheten och väntar sedan på att mäta returpulsbredden. Att mäta pulsbredden inkluderar en timeout för att hantera HC-SR04-problemet med en mycket lång pulsvaraktighet när den inte kan hitta ett mål. En pulsbredd som är längre än ett målavstånd på ~ 10 fot antas vara inget objekt eller ett objekt som inte kan identifieras. Om tidsgränsen nås returneras ett '0' -värde som avståndet. Detta "avstånd" (pulsbredd) kan justeras med #define-värdena.

Pulsbredden konverteras till en tur-retursträcka innan den returneras som avståndet till objektet.

Steg 16: Kod - Arduino IDE Serial Plotter Support

Kod - Arduino IDE Serial Plotter Support
Kod - Arduino IDE Serial Plotter Support

Nu till utgången!

'Loop' -metoden utlöser insamling av avståndsmätning från de två enheterna - men vad gör vi med det?

Naturligtvis skickar vi ut det så att det kan ses på konsolen - men vi vill ha mer!

Arduino IDE tillhandahåller också Serial Plotter -gränssnittet. Vi kommer att använda det för att ge en realtidsdiagram över avståndet till vårt objekt från utgångarna från våra två enheter.

Seriell plotter accepterar en rubrik som innehåller värdetiketter och sedan flera rader med avgränsade värden som ska plottas som en graf. Om värdena matas ut regelbundet (en gång var "så många sekunder") ger grafen en visualisering av avståndet till objektet över tid.

'Loop'-metoden matar ut de tre värdena från MaxSonar och värdet från HC-SR04 i ett tabbseparerat format som kan användas med seriell plotter. En gång var 20: e rad matas det ut rubriken (om Serial Plotter är aktiverad mitt i strömmen).

Detta låter dig så visualisera avståndet till hindret och också se skillnaden i värdena som returneras av de två enheterna.

Steg 17: Kod - felsökning …

Kod - felsökning …
Kod - felsökning …
Kod - felsökning …
Kod - felsökning …

Felsökning är en nödvändighet. Hur kan du spåra ett problem när något inte fungerar som förväntat?

En första förståelse är ofta några”enkla” textutmatningar som kan indikera vad som händer. Dessa kan läggas till i koden när och där det behövs för att spåra ett problem och sedan tas bort när problemet är löst. Att lägga till och ta bort koden är dock tidskrävande och kan i sig leda till andra problem. Ibland är det bättre att kunna aktivera och inaktivera det dynamiskt samtidigt som källkoden lämnas ensam.

I denna instruktionsbok har jag inkluderat en mekanism för att aktivera och inaktivera felsökningsutskrifter (seriella utdata) uttalanden dynamiskt från ingång som läses från Arduino IDE Serial Monitor (i en kommande version förväntas Serial Plotter också tillhandahålla denna ingång).

Boolen "_DEBUG_OUTPUT" används i ett antal #define -utskriftsmetoder som kan användas inom koden. Värdet för variabeln _DEBUG_OUTPUT används för att aktivera utskrift (sändning av utdata) eller inte. Värdet kan ändras dynamiskt inom koden, som metoden `setDebugOutputMode 'gör.

Metoden `setDebugOutputMode 'anropas från` loop' baserat på ingång som tas emot från den seriella ingången. Ingången analyseras för att se om den matchade "debug on/off | true/false" för att aktivera/inaktivera felsökningsläge.

Steg 18: Slutsats

Jag hoppas att denna enkla hårdvaruinstallation och exempelkoden kan hjälpa dig att förstå skillnaderna mellan HC-SR04 och LV-MaxSonar-EZ-enheterna. Båda är mycket enkla att använda, och jag tror att var och en har sina fördelar. Att veta när man ska använda en snarare än en annan kan vara avgörande för ett framgångsrikt projekt.

BTW-Jag antydde ett mycket lättanvänt sätt att noggrant mäta avståndet till ett objekt med hjälp av LV-MaxSonar-EZ … Du kan använda den analoga utgången (en tråd) och det kontinuerliga mätläget för att läsa avstånd när det behövs med hjälp av den enkla kod i `readDistanceFromAnalog` direkt från Arduino analoga ingång. En tråd och (kondenserad) en rad kod!

Steg 19: Alternativ MaxSonar -anslutning (med 180 ° Header)

Alternativ MaxSonar -anslutning (med 180 ° Header)
Alternativ MaxSonar -anslutning (med 180 ° Header)
Alternativ MaxSonar -anslutning (med 180 ° Header)
Alternativ MaxSonar -anslutning (med 180 ° Header)
Alternativ MaxSonar -anslutning (med 180 ° Header)
Alternativ MaxSonar -anslutning (med 180 ° Header)

Som jag nämnde kommer MaxSonar inte med ett sidhuvud anslutet. Så du kan använda vilken anslutning som är mest lämplig för ditt projekt. I vissa fall kan en 180 ° (rak) rubrik vara mer lämplig. Om så är fallet ville jag snabbt visa hur du kan använda det med denna Instructable. Denna illustratation visar en MaxSonar med en rak header ansluten till brödbrädan med en man-hona bandkabel, och sedan ansluten till Arduino enligt beskrivningen i resten av artikeln.

Steg 20: Arduino -kod

Arduino-koden finns i mappen 'MaxSonar-outputs' i projektet i Sonar Range-Finder Comparison

Rekommenderad: