Indholdsfortegnelse:

Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trin (med billeder)
Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trin (med billeder)

Video: Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trin (med billeder)

Video: Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino: 20 trin (med billeder)
Video: Manual Focus Assist - Hall - Spring 2011 2024, November
Anonim
Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino
Sammenligning af LV-MaxSonar-EZ og HC-SR04 Sonar Range Finders med Arduino

Jeg oplever, at mange projekter (især robotter) kræver eller kan have fordel af at måle afstanden til et objekt i realtid. Sonar rækkevidde finder er relativt billige og kan let forbindes til en mikro-controller som Arduino.

Denne instruktør sammenligner to let tilgængelige sonarafstandsmåler, der viser, hvordan man forbinder dem med Arduino, hvilken kode der kræves for at læse værdier fra dem, og hvordan de 'måler' sig mod hinanden i forskellige situationer. Fra dette håber jeg, at du får indsigt i fordele og ulemper ved de to enheder, der hjælper dig med at bruge den mest passende enhed i dit næste projekt.

Jeg ville sammenligne den ekstremt populære HC-SR04-enhed (bug-eye) med den mindre almindelige LV-MaxSonar-EZ-enhed for at se, hvornår jeg måske vil bruge den ene frem for den anden. Jeg ville dele mine fund og opsætning, så du kan eksperimentere med de to og beslutte, hvilken du skal bruge i dit næste projekt.

Hvorfor disse to…

Hvorfor HC-SR04? 'Bug-Eye' HC-SR04 er ekstremt populær-af et par grunde:

  • Det er billigt - $ 2 eller mindre, hvis det købes i løs vægt
  • Det er relativt let at interface til
  • Mange, mange projekter bruger det - så det er velkendt og godt forstået

Hvorfor LV-MaxSonar-EZ?

  • Det er meget let at interface til
  • Det har en god/let formfaktor at indarbejde i et projekt
  • Den har 5 versioner, der opfylder forskellige målekrav (se datablad)
  • Det er (typisk) meget mere præcist og pålideligt end HC-SR04
  • Det er overkommeligt - $ 15 til $ 20

Derudover håber jeg, at du finder bit og stumper i Arduino-koden, jeg skrev til sammenligningen, nyttig i dine projekter, selv uden for rækkevidde-finder-applikationer.

Forudsætninger:

  • Du kender Arduino og Arduino IDE
  • Arduino IDE er installeret og fungerer på din foretrukne udviklingsmaskine (PC/Mac/Linux)
  • Du har en forbindelse fra Arduino IDE til din Arduino for at uploade og køre programmer og kommunikere

Der er instruktioner og andre ressourcer til at hjælpe dig med dette, hvis det er nødvendigt.

Forbrugsvarer

  • HC-SR04 'Bug-Eye' Range Finder
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-Jeg bruger en '1', men alle versioner har samme grænseflade)
  • Arduino UNO
  • Loddefri brødbræt
  • Pin Header - 7 pin 90 ° (for MaxSonar -enheden, se * nedenfor for brug af 180 °)
  • Båndkabeljumper - 5 -leder, han -han
  • Båndkabeljumper - 2 ledninger, han -han
  • Jumper wire - han -han
  • Tilslutningstråd - rød og sort (til strøm fra Arduino til brødbræt og brødbræt til enheder)
  • Computer med Arduino IDE og USB -kabel til tilslutning til Arduino UNO

* MaxSonar leveres ikke med en header vedhæftet, så du kan bruge en header, der er bedst egnet til dit projekt. Til denne Instructable brugte jeg en 90 ° header til at gøre det let at tilslutte til brødbrættet. I nogle projekter er en 180 ° (lige) header måske bedre. Jeg vedlægger et foto for at vise, hvordan du tilslutter det, så du ikke behøver at skifte dem. Hvis du hellere vil bruge en 180 ° header, skal du bruge en ekstra 7-wire han-hun båndkabeljumper til at forbinde som mit foto viser.

Git Hub -depot: Projektfiler

Trin 1: Jagten …

Jagten…
Jagten…

Inden vi går ind i detaljerne om, hvordan du får tingene tilsluttet, så du kan eksperimentere med disse to fantastiske enheder, ville jeg beskrive et par ting, som jeg håber, at denne instruktør kan hjælpe dig med.

Fordi MaxSonar-enheden er mindre brugt og mindre forstået i forhold til HC-SR04-enheden, ville jeg vise:

  • Sådan tilsluttes MaxSonar-enheden til en mikrokontroller (i dette tilfælde en Arduino)
  • Sådan foretages målinger fra de forskellige output på MaxSonar -enheden
  • Sammenlign grænsefladen mellem MaxSonar-enheden og HC-SR04-enheden
  • Test evnen til at måle afstanden mellem objekter med forskellige overflader
  • Hvorfor kan du vælge den ene enhed frem for den anden (eller bruge begge i tandem)

Jeg håber, at denne instruktive hjælper dig i denne jagt …

Trin 2: Kom godt i gang - Opsætning af Arduino -Breadboard

Kom godt i gang - Opsætning af Arduino -Breadboard
Kom godt i gang - Opsætning af Arduino -Breadboard

Hvis du har prototyper med Arduino, har du sandsynligvis allerede et Arduino-Breadboard-setup, som du er tryg ved. I så fald er jeg overbevist om, at du kan bruge den til denne Instructable. Hvis ikke, er det sådan, jeg har sat min op - kopier den gerne til dette og fremtidige projekter.

  1. Jeg fastgør Arduino UNO og et lille trådløst brødbræt til et 3-3/8 "x 4-3/4" (8,6 x 12,0 cm) stykke plast med gummifødder i bunden.
  2. Jeg bruger rød og sort 22-AWG-tilslutningstråd til at forbinde +5V og GND fra Arduino til brødbrættets strømfordelingsstrimmel
  3. Jeg inkluderer en 10µF tantal kondensator på strømjordfordelingsstrimlen for at reducere strømstøj (men dette projekt kræver det ikke)

Dette giver en dejlig platform, der er let at prototype med.

Trin 3: Tilslut LV-MaxSonar-EZ

Tråd op LV-MaxSonar-EZ
Tråd op LV-MaxSonar-EZ
Tråd op LV-MaxSonar-EZ
Tråd op LV-MaxSonar-EZ
Tråd op LV-MaxSonar-EZ
Tråd op LV-MaxSonar-EZ

Med et 90 ° header loddet på MaxSonar -enheden er det let at tilslutte det til brødbrættet. Det 5 -polede båndkabel forbinder derefter MaxSonar med Arduino som vist i diagrammet. Ud over båndkablet bruger jeg korte stykker rød og sort tilslutningstråd fra strømfordelingsskinnen til at levere strøm til enheden.

Ledninger:

MaxSonar Arduino Farve
1 (BW) Power-GND Gul
2 (PW) Digital-5 Grøn
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 Sort

Bemærk:

Lad ikke antallet af forbindelser, der bruges i denne Instructable, forhindre dig i at overveje MaxSonar til dit projekt. Denne instruktionsbog bruger alle MaxSonar-grænseflademuligheder til at illustrere, hvordan de fungerer og sammenligne dem med hinanden og med HC-SR04-enheden. Til en given anvendelse (ved hjælp af en af grænseflademulighederne) vil et projekt generelt bruge en eller to af grænsefladestifterne (plus strøm og jord).

Trin 4: Tilslut HC-SR04

HC-SR04 leveres typisk med et 90 ° header, der allerede er fastgjort, så det er let at tilslutte det til brødbrættet. Det 2-polede båndkabel forbinder derefter HC-SR04 med Arduino som vist på diagrammet. Ud over båndkablet bruger jeg korte stykker rød og sort tilslutningstråd fra strømfordelingsskinnen til at levere strøm til enheden.

HC-SR04 Arduino Farve
1 (VCC) +5 BB-PWR Skinne Rød
2 (TRIG) Digital-6 Gul
3 (ECHO) Digital-7 orange
4 (GND) GND BB-PWR Skinne Sort

Trin 5: Tilslut valgmuligheden 'HC-SR04'

Da jeg startede dette projekt, var min hensigt simpelthen at teste de forskellige grænseflademuligheder på MaxSonar -enheden. Efter at have fået det i gang, besluttede jeg, at det ville være rart at sammenligne det med den allestedsnærværende HC-SR04 (bugeye) enhed. Jeg ville dog gerne kunne køre/teste uden det inkluderet, så jeg tilføjede en mulighed/test i koden.

Koden kontrollerer en input-pin for at se, om HC-SR04-enheden skal inkluderes i målingens aflæsning og output.

I diagrammet er dette vist som en switch, men på brødbrættet bruger jeg simpelthen en jumper wire (som det ses på billederne). Hvis ledningen er tilsluttet GND, vil HC-SR04 blive inkluderet i målingerne. Koden 'trækker op' (gør indgangen høj/sand) i Arduino, så hvis den ikke trækkes lavt (forbundet til GND), må HC-SR04 ikke måles.

Selvom denne instruktør blev til en sammenligning af de to enheder, besluttede jeg at lade dette være på plads for at illustrere, hvordan du kan inkludere/ekskludere forskellige enheder/muligheder i dit projekt.

Brødbræt Arduino Farve
GND BB-PWR Skinne Digital-12 hvid

Trin 6: Få det hele til at fungere …

Få det hele til at fungere…
Få det hele til at fungere…
Få det hele til at fungere…
Få det hele til at fungere…
Få det hele til at fungere…
Få det hele til at fungere…

Nu hvor alt er tilsluttet - er det tid til at få tingene til at fungere!

Som nævnt i 'Antagelser' - jeg vil ikke forklare, hvordan Arduino IDE fungerer, eller hvordan man programmerer en Arduino (i detaljer).

De følgende afsnit nedbryder Arduino -koden, der er inkluderet i dette projekt.

Pak det fulde arkiv ud på et sted, du bruger til din Arduino -udvikling. Indlæs koden `MaxSonar-outputs.ino` i din Arduino IDE, og lad os komme i gang!

Trin 7: Projektlayout

Projektet indeholder oplysninger om LV-MaxSonar-EZ-enheden, kredsløbsdiagrammet, en README og Arduino-koden. Kredsløbsdiagrammet er i Fritzing -format samt et-p.webp

Trin 8: Kodeindledning …

I denne instruks kan jeg ikke gå igennem alle aspekter af koden. Jeg dækker nogle af detaljerne på højt niveau. Jeg opfordrer dig til at læse kommentaren på topniveau i koden og grave ind i metoderne.

Kommentarerne giver mange oplysninger, som jeg ikke vil gentage her.

Der er et par ting, jeg vil påpege i 'opsætningskoden' …

  • `_DEBUG_OUTPUT` - variabel og #define sætninger
  • Definitioner af Arduino 'pins', der bruges til grænsefladen
  • Definitioner af de omregningsfaktorer, der anvendes i beregninger

Debugging bruges i hele koden, og jeg vil vise, hvordan den kan tændes/slukkes dynamisk.

'Definitionerne' bruges til Arduino pins og konverteringer for at gøre det lettere at bruge denne kode i andre projekter.

Debugging …

Afsnittet 'Debugging' definerer en variabel og nogle makroer, der gør det let at inkludere fejlfindingsoplysninger i det serielle output on demand.

Den boolske variabel "_DEBUG_OUTPUT" er indstillet til falsk i koden (kan indstilles til sand) og bruges som en test i makroerne "DB_PRINT …". Det kan ændres dynamisk i kode (som det ses i metoden `setDebugOutputMode`).

Globaler…

Efter definitionerne opretter og initialiserer koden et par globale variabler og objekter.

  • SoftwareSerial (se næste afsnit)
  • _loopCount - bruges til at udsende et overskrift hver 'n' række
  • _inputBuffer - bruges til at indsamle seriel/terminalindgang til behandling af muligheder (fejlfinding til/fra)

Trin 9: Arduino Software-Serial …

En af MaxSonar -grænseflademulighederne er en seriel datastrøm. Arduino UNO giver dog kun en enkelt seriel dataforbindelse, og den bruges/deles med USB -porten til at kommunikere med Arduino IDE (værtscomputer).

Heldigvis er der en bibliotekskomponent inkluderet i Arduino IDE, der bruger et par af Arduino digital-I/O-benene til at implementere en seriel-i/o-grænseflade. Da MaxSonar seriel grænseflade bruger 9600 BAUD, er denne 'software' -grænseflade perfekt i stand til at håndtere kommunikationen.

For dem, der bruger en Arduino-Mega (eller en anden enhed, der har flere HW serielle porte), er du velkommen til at justere koden for at bruge en fysisk seriel port og eliminere behovet for SW-Serial.

'Opsætningsmetoden' initialiserer 'SoftwareSerial' -grænsefladen, der skal bruges med MaxSonar -enheden. Kun modtagelsen (RX) er nødvendig. Interfacet er 'inverteret' for at matche output fra MaxSonar.

Trin 10: Kode - Opsætning

Som beskrevet ovenfor initialiserer 'opsætningsmetoden' SoftwareSerial' -grænsefladen såvel som den fysiske serielle grænseflade. Det konfigurerer Arduino I/O -benene og sender et overskrift.

Trin 11: Kode - sløjfe

'Loop' -koden løber gennem følgende:

  • Send et overskrift (bruges til fejlfinding og plotteren)
  • Udløs MaxSonar for at foretage en måling
  • Læs MaxSonar Pulse-Width-værdien
  • Læs MaxSonar Serial-Data-værdien
  • Læs MaxSonar Analog -værdien
  • Kontroller indstillingen 'HC-SR04', og hvis den er aktiveret:

    Udløs og læs HC-SR04-enheden

  • Output dataene i et fanebaseret format, der kan bruges af serieplotteren
  • Vent, indtil der er gået nok tid, så der kan foretages en anden måling

Trin 12: Kode - Udløser MaxSonar. Læs PW -værdi

MaxSonar har to tilstande: 'udløst' og 'kontinuerlig'

Denne instruktør bruger tilstanden 'udløst', men mange projekter kan drage fordel af at bruge tilstanden 'kontinuerlig' (se databladet).

Når du bruger tilstanden 'udløst', er det første gyldige output fra Pulse-Width (PW) output. Herefter er resten af output gyldige.

`TiggerAndReadDistanceFromPulse` pulserer udløsertappen på MaxSonar-enheden og læser den resulterende pulsbredde-afstandsværdi

Bemærk, at MaxSonar, i modsætning til mange andre ekkolodsenheder, håndterer rundturskonverteringen, så aflæst afstand er afstanden til målet.

Denne metode forsinker også længe nok til, at de andre output på enheden er gyldige (seriel, analog).

Trin 13: Kode - Læs MaxSonar seriel værdi

Efter at MaxSonar er blevet udløst (eller når den er i 'kontinuerlig' tilstand), hvis optionen seriel output er aktiveret (via 'BW - Pin -1' -kontrollen) sendes en seriel datastrøm i formen "R nnn", fulgt ved en CARRIAGE-RETURN '\ r'. 'Nnn' er værdien af tommer til objektet.

Metoden 'readDistanceFromSerial' læser de serielle data (fra softwaren seriel port) og konverterer 'nnn' -værdien til decimal. Det inkluderer en fejlsikker timeout, bare hvis en seriel værdi ikke modtages.

Trin 14: Kode - Læs MaxSonar analog værdi

MaxSonar analoge port giver kontinuerligt en udgangsspænding, der er proportional med den sidste målte afstand. Denne værdi kan læses når som helst, efter at enheden er initialiseret. Værdien opdateres inden for 50 ms efter den sidste distanceaflæsning (udløst eller kontinuerlig tilstand).

Værdien er (Vcc/512) pr. Tomme. Så med en Vcc fra Arduino på 5 volt vil værdien være ~ 9,8 mV/in. Metoden 'readDistanceFromAnalog' læser værdien fra Arduino analoge input og konverterer den til en 'inch' værdi.

Trin 15: Kode - Trigger og læs HC -SR04

Selvom der er biblioteker til at læse HC-SR04, har jeg fundet nogle af dem upålidelige med forskellige enheder, jeg har testet med. Jeg har fundet den kode, jeg har inkluderet i metoden 'sr04ReadDistance', for at være enkel og mere pålidelig (lige så meget som den billige HC-SR04-enhed kan være).

Denne metode indstiller og udløser derefter HC-SR04-enheden og venter derefter på at måle returpulsbredden. Måling af pulsbredden inkluderer en timeout til at håndtere HC-SR04-problemet med en meget lang pulsvarighed, når den ikke kan finde et mål. En pulsbredde, der er længere end en målafstand på ~ 10 fod, antages ikke at være noget objekt eller et objekt, der ikke kan genkendes. Hvis timeout er nået, returneres en '0' -værdi som afstanden. Denne 'afstand' (pulsbredde) kan justeres ved hjælp af #define værdier.

Pulsbredden konverteres til en rundtur-afstand, før den returneres som afstanden til objektet.

Trin 16: Kode - Arduino IDE Serial Plotter Support

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

Nu til output!

`Loop' -metoden udløser opsamling af afstandsmåling fra de to enheder - men hvad gør vi med det?

Tja, selvfølgelig sender vi det ud, så det kan ses på konsollen - men vi vil have mere!

Arduino IDE giver også Serial Plotter interface. Vi vil bruge det til at give en graf i realtid over afstanden til vores objekt fra output fra vores to enheder.

Seriel plotter accepterer et overskrift, der indeholder værdimærker og derefter flere rækker med afgrænsede værdier, der skal afbildes som en graf. Hvis værdierne udskrives regelmæssigt (en gang hvert 'så mange sekunder') giver grafen en visualisering af afstanden til objektet over tid.

`Loop'-metoden udsender de tre værdier fra MaxSonar og værdien fra HC-SR04 i et faneadskilt format, der kan bruges med Serial Plotter. En gang hver 20. række udsender den headeren (bare hvis Serial Plotter er aktiveret midt i strømmen).

Dette giver dig mulighed for så at visualisere afstanden til forhindringen og også se forskellen i de værdier, der returneres af de to enheder.

Trin 17: Kode - fejlretning …

Kode - fejlretning …
Kode - fejlretning …
Kode - fejlretning …
Kode - fejlretning …

Debugging er en nødvendighed. Hvordan kan du spore et problem, når noget ikke fungerer som forventet?

En første forståelseslinje er ofte nogle 'enkle' tekstoutput, der kan indikere, hvad der sker. Disse kan føjes til koden, når og hvor det er nødvendigt for at spore et problem, og derefter fjernes, når problemet er løst. Tilføjelse og fjernelse af koden er imidlertid tidskrævende og kan i sig selv føre til andre problemer. Nogle gange er det bedre at kunne aktivere og deaktivere det dynamisk, mens kildekoden efterlades alene.

I denne instruktionsbog har jeg inkluderet en mekanisme til at aktivere og deaktivere debugging -udskrivning (serielle output) -udsagn dynamisk fra input, der er læst fra Arduino IDE Serial Monitor (i en kommende version forventes Serial Plotter også at levere dette input).

Boolen "_DEBUG_OUTPUT" bruges i en række #define udskrivningsmetoder, der kan bruges inden for koden. Værdien af variablen _DEBUG_OUTPUT bruges til at aktivere udskrivning (afsendelse af output) eller ej. Værdien kan ændres dynamisk inden for koden, som metoden `setDebugOutputMode` gør.

Metoden `setDebugOutputMode` kaldes fra` loop 'baseret på input modtaget fra den serielle input. Inputtet analyseres for at se, om det matchede "fejlfinding til/fra | sand/falsk" for at aktivere/deaktivere fejlfindingstilstand.

Trin 18: Konklusion

Jeg håber, at denne enkle hardwareopsætning og eksempelkoden kan hjælpe dig med at forstå forskellene mellem HC-SR04 og LV-MaxSonar-EZ-enhederne. Begge er meget nemme at bruge, og jeg tror, at hver har sine fordele. At vide, hvornår man skal bruge en frem for en anden, kan være medvirkende til et vellykket projekt.

BTW-jeg antydede en meget let at bruge til nøjagtigt at måle afstanden til et objekt ved hjælp af LV-MaxSonar-EZ … Du kan bruge den analoge udgang (en ledning) og den kontinuerlige målingstilstand til at aflæse afstand, når det er nødvendigt ved hjælp af den enkle kode i 'readDistanceFromAnalog' direkte fra den analoge Arduino -indgang. Én ledning og (kondenseret) en kodelinje!

Trin 19: Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)

Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)
Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)
Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)
Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)
Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)
Alternativ MaxSonar -forbindelse (ved hjælp af 180 ° Header)

Som jeg nævnte, kommer MaxSonar ikke med et header tilsluttet. Så du kan bruge den forbindelse, der er bedst egnet til dit projekt. I nogle tilfælde kan en 180 ° (lige) header være mere passende. Hvis det er tilfældet, ville jeg hurtigt vise, hvordan du kan bruge det med denne Instructable. Denne illustatration viser en MaxSonar med et lige hoved, der er forbundet til brødbrættet med et mand-hun-båndkabel, og derefter er forbundet til Arduino som beskrevet i resten af artiklen.

Trin 20: Arduino -kode

Arduino-koden er i projektets mappe 'MaxSonar-outputs' i Sonar Range-Finder Comparison

Anbefalede: