INHOUDSOPGAWE:

Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino: 20 stappe (met foto's)
Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino: 20 stappe (met foto's)

Video: Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino: 20 stappe (met foto's)

Video: Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino: 20 stappe (met foto's)
Video: Comparison of 3 ultrasonic sensors 2024, November
Anonim
Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino
Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino
Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino
Vergelyk LV-MaxSonar-EZ en HC-SR04 Sonar Range Finders met Arduino

Ek vind dat baie projekte (veral robotte) die afstand tot 'n voorwerp in reële tyd benodig of kan baat daarby. Sonar-reekszoekers is relatief goedkoop en kan maklik gekoppel word aan 'n mikrobeheerder soos die Arduino.

Hierdie Instructable vergelyk twee maklik verkrygbare sonarafstandzoekers, wat wys hoe om dit aan die Arduino te koppel, watter kode nodig is om waardes daarvan te lees, en hoe hulle in verskillende situasies 'meet'. Hieruit hoop ek dat u insig sal kry in die voor- en nadele van die twee toestelle wat u sal help om die mees geskikte toestel in u volgende projek te gebruik.

Ek wou die uiters gewilde HC-SR04 (bug-eye) toestel vergelyk met die minder algemene LV-MaxSonar-EZ-toestel om te sien wanneer ek die een eerder as die ander wil gebruik. Ek wou my bevindings en opset deel, sodat u met die twee kan eksperimenteer en besluit wat u in u volgende projek moet gebruik.

Waarom hierdie twee…

Waarom die HC-SR04? Die 'Bug-Eye' HC-SR04 is uiters gewild-om 'n paar redes:

  • Dit is goedkoop - $ 2 of minder as dit in grootmaat gekoop word
  • Dit is relatief maklik om aan te sluit
  • Baie, baie projekte gebruik dit - dit is dus goed bekend en goed verstaan

Waarom die LV-MaxSonar-EZ?

  • Dit is baie maklik om aan te sluit
  • Dit het 'n goeie/maklike vormfaktor om in 'n projek op te neem
  • Dit het 5 weergawes wat aan verskillende meetvereistes voldoen (sien datablad)
  • Dit is (tipies) baie meer akkuraat en betroubaar as die HC-SR04
  • Dit is bekostigbaar - $ 15 tot $ 20

Boonop hoop ek dat u stukke vind in die Arduino-kode wat ek vir die vergelyking geskryf het, nuttig in u projekte, selfs buite toepassings vir afstandsondersoekers.

Aannames:

  • U is bekend met Arduino en die Arduino IDE
  • Die Arduino IDE is geïnstalleer en werk op u ontwikkelingsmasjien van voorkeur (PC/Mac/Linux)
  • U het 'n verbinding van die Arduino IDE na u Arduino om programme op te laai en uit te voer en te kommunikeer

Daar is instruksies en ander hulpbronne om u hiermee te help indien nodig.

Voorrade

  • HC-SR04 'Bug-Eye' Range Finder
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4-ek gebruik 'n '1', maar alle weergawes het dieselfde koppelvlak)
  • Arduino UNO
  • Soldeerlose broodbord
  • Speldopskrif - 7 -pen 90 ° (vir die MaxSonar -toestel, sien * hieronder vir die gebruik van 180 °)
  • Lintkabeltrui - 5 draad, manlik -manlik
  • Lintkabeltrui - 2 drade, manlik -manlik
  • Springdraad - manlik -manlik
  • Aansluitdraad - rooi en swart (vir krag van Arduino na broodbord en broodbord na toestelle)
  • Rekenaar met Arduino IDE en USB -kabel om aan te sluit op die Arduino UNO

* Die MaxSonar bevat nie 'n opskrif nie, sodat u 'n opskrif kan gebruik wat die beste by u projek pas. Vir hierdie instruksies het ek 'n 90 ° kop gebruik om dit maklik in die broodbord te plaas. In sommige projekte is 'n 180 ° (reguit) kop beter. Ek sluit 'n foto in om te wys hoe u dit kan aansluit, sodat u dit nie hoef te verander nie. As u eerder 'n 180 ° -kopstuk wil gebruik, benodig u 'n bykomende 7-draads lintkabeldraaier om aan te sluit, soos my foto toon.

Git Hub -bewaarplek: projeklêers

Stap 1: Die jaagtog …

Die jaagtog…
Die jaagtog…

Voordat ons ingaan op die besonderhede oor hoe u dinge kan aansluit, sodat u self kan eksperimenteer met hierdie twee fantastiese toestelle, wou ek 'n paar dinge beskryf wat ek hoop dat hierdie instruksie u kan help.

Omdat die MaxSonar-toestel minder gebruik en minder verstaan word in vergelyking met die HC-SR04-toestel, wou ek wys:

  • Hoe om die MaxSonar-toestel aan te sluit op 'n mikrobeheerder (in hierdie geval 'n Arduino)
  • Hoe om metings te neem vanaf die verskillende uitsette van die MaxSonar -toestel
  • Vergelyk die koppelvlak van die MaxSonar-toestel met die HC-SR04-toestel
  • Toets die vermoë om afstand van voorwerpe met verskillende oppervlaktes te meet
  • Waarom u die een toestel bo die ander kan kies (of albei saam gebruik)

Ek hoop dat hierdie Instructable u help in hierdie jaagtog …

Stap 2: Aan die gang - Opstelling van Arduino -Breadboard

Aan die gang - Opstelling van Arduino -Breadboard
Aan die gang - Opstelling van Arduino -Breadboard

As u met Arduino prototipeer het, het u waarskynlik reeds 'n Arduino-Breadboard-opstelling waarmee u gemaklik voel. As dit die geval is, is ek vol vertroue dat u dit vir hierdie instruksies kan gebruik. Indien nie, is dit hoe ek myne opgestel het - kopieer dit gerus vir hierdie en toekomstige projekte.

  1. Ek heg die Arduino UNO en 'n klein draadlose broodbord aan 'n stuk plastiek van 3-3/8 "x 4-3/4" (8,6 x 12,0 cm) met rubbervoete aan die onderkant.
  2. Ek gebruik rooi en swart 22-AWG-aansluitdraad om +5V en GND van die Arduino aan te sluit op die broodbordkragverspreidingsstrook
  3. Ek bevat 'n 10µF tantaalkondensator op die krag-grondverspreidingsstrook om kraggeluide te verminder (maar hierdie projek benodig dit nie)

Dit bied 'n goeie platform waarmee u maklik kan prototipe.

Stap 3: Verbind die LV-MaxSonar-EZ

Draai die LV-MaxSonar-EZ op
Draai die LV-MaxSonar-EZ op
Draai die LV-MaxSonar-EZ op
Draai die LV-MaxSonar-EZ op
Draai die LV-MaxSonar-EZ op
Draai die LV-MaxSonar-EZ op

Met 'n 90 ° kopstuk wat aan die MaxSonar -toestel gesoldeer is, is dit maklik om dit op die broodbord aan te sluit. Die 5 -pins lintkabel verbind dan die MaxSonar met die Arduino, soos in die diagram gesien word. Benewens die lintkabel gebruik ek kort stukke rooi en swart aansluitdraad van die kragverdeelrail om krag aan die toestel te verskaf.

Bedrading:

MaxSonar Arduino Kleur
1 (BW) Krag-GND Geel
2 (PW) Digitaal-5 Groen
3 (AN) Analoog-0 Blou
4 (RX) Digitaal-3 Pers
5 (TX) Digitaal-2 Grys
6 (+5) +5 BB-PWR Rail Rooi
7 (GND) GND BB-PWR Rail Swart

Let wel:

Moenie dat die aantal verbindings wat in hierdie instruksies gebruik word, u daarvan weerhou om die MaxSonar vir u projek te oorweeg nie. Hierdie Instructable gebruik al die MaxSonar-koppelvlakopsies om te illustreer hoe dit werk en om dit met mekaar en met die HC-SR04-toestel te vergelyk. Vir 'n gegewe gebruik (met behulp van een van die koppelvlakopsies) sal 'n projek oor die algemeen een of twee van die koppelvlakpenne gebruik (plus krag en grond).

Stap 4: Verbind die HC-SR04

Die HC-SR04 het gewoonlik 'n 90 ° -kop wat reeds aangeheg is, dus dit is maklik om dit op die broodbord aan te sluit. Die 2-pins lintkabel verbind die HC-SR04 dan met die Arduino soos gesien in die diagram. Benewens die lintkabel gebruik ek kort stukke rooi en swart aansluitdraad van die kragverdeelrail om krag aan die toestel te verskaf.

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

Stap 5: Draai die 'HC-SR04' opsie-keurder op

Toe ek met hierdie projek begin, was my bedoeling bloot om die verskillende koppelvlakopsies van die MaxSonar -toestel te toets. Nadat ek dit aan die gang gekry het, het ek besluit dat dit lekker sou wees om dit te vergelyk met die alomteenwoordige HC-SR04 (bugeye) toestel. Ek wou egter kan hardloop/toets sonder dat dit ingesluit is, so ek het 'n opsie/toets in die kode bygevoeg.

Die kode kontroleer 'n invoerpen om te sien of die HC-SR04-toestel by die metingslesing en -uitset ingesluit moet word.

In die diagram word dit as 'n skakelaar getoon, maar op die broodbord gebruik ek eenvoudig 'n jumperdraad (soos op die foto's gesien). As die draad aan GND gekoppel is, sal die HC-SR04 by die metings ingesluit word. Kode 'trek op' (maak die inset hoog/waar) in die Arduino, sodat die HC-SR04 nie gemeet word as dit nie laag getrek word nie (gekoppel aan GND).

Alhoewel hierdie instruksie 'n vergelyking van die twee toestelle was, het ek besluit om dit te laat staan om te illustreer hoe u verskillende toestelle/opsies in u projek kan insluit/uitsluit.

Broodbord Arduino Kleur
GND BB-PWR Rail Digitaal-12 Wit

Stap 6: Laat alles werk …

Laat dit alles werk …
Laat dit alles werk …
Laat dit alles werk …
Laat dit alles werk …
Laat alles werk …
Laat alles werk …

Noudat alles aangeskakel is - is dit tyd om dinge te laat werk!

Soos genoem in 'Aannames' - ek gaan nie verduidelik hoe die Arduino IDE werk of hoe om 'n Arduino (in detail) te programmeer nie.

Die volgende afdelings gee 'n uiteensetting van die Arduino -kode wat by hierdie projek ingesluit is.

Pak die volledige argief uit op 'n plek wat u gebruik vir u Arduino -ontwikkeling. Laai die 'MaxSonar-outputs.ino'-kode in u Arduino IDE en laat ons begin!

Stap 7: Projekuitleg

Die projek bevat inligting oor die LV-MaxSonar-EZ-toestel, die stroombaandiagram, 'n README en die Arduino-kode. Die kringdiagram is in Fritzing -formaat sowel as 'n-p.webp

Stap 8: Kode-inleiding …

In hierdie instruksies kan ek nie deur elke aspek van die kode gaan nie. Ek behandel 'n paar van die besonderhede op hoë vlak. Ek moedig u aan om die kommentaar op die hoogste vlak in die kode te lees en na die metodes te kyk.

Die kommentaar bied baie inligting wat ek nie hier sal herhaal nie.

Daar is 'n paar dinge waarop ek wil wys in die 'opstelling' -kode …

  • Die `_DEBUG_OUTPUT` - veranderlike en #define -stellings
  • Definisies van die Arduino 'penne' wat vir die koppelvlak gebruik word
  • Definisies van die omskakelingsfaktore wat in berekeninge gebruik word

Die ontfouting word regdeur die kode gebruik, en ek sal wys hoe dit dinamies aan/uit kan skakel.

Die 'definisies' word gebruik vir die Arduino -penne en omskakelings om dit makliker te maak om hierdie kode in ander projekte te gebruik.

Ontfout tans…

Die 'Ontfout' -afdeling definieer 'n veranderlike en 'n paar makros wat dit maklik maak om ontfoutingsinligting op aanvraag in die reeksuitset op te neem.

Die '_DEBUG_OUTPUT' -booleaanse veranderlike is in die kode op vals gestel (kan op waar gestel word) en word gebruik as 'n toets in die' DB_PRINT … 'makros. Dit kan dinamies in kode verander word (soos gesien in die 'setDebugOutputMode' -metode).

Wêreldwyd…

Na die definisies skep en initialiseer die kode 'n paar globale veranderlikes en voorwerpe.

  • SoftwareSerial (sien volgende afdeling)
  • _loopCount - Word gebruik om 'n kop op elke n rye uit te voer
  • _inputBuffer - Gebruik om seriële/terminale invoer te versamel om opsies te verwerk (ontfouting aan/uit)

Stap 9: Arduino Software-Serial …

Een van die MaxSonar -koppelvlakopsies is 'n seriële datastroom. Die Arduino UNO bied egter slegs 'n enkele seriële dataverbinding, en dit word gebruik/gedeel met die USB -poort om met die Arduino IDE (gasheerrekenaar) te kommunikeer.

Gelukkig is daar 'n biblioteekkomponent by die Arduino IDE, wat 'n paar Arduino digitale-I/O-penne gebruik om 'n serial-i/o-koppelvlak te implementeer. Aangesien die MaxSonar seriële koppelvlak 9600 BAUD gebruik, is hierdie 'sagteware' -koppelvlak perfek in staat om die kommunikasie te hanteer.

Vir diegene wat 'n Arduino-Mega (of 'n ander toestel met verskeie HW-seriële poorte) gebruik, kan u die kode aanpas om 'n fisiese seriële poort te gebruik en die behoefte aan SW-Serial uit te skakel.

Die 'opstel' -metode initialiseer die' SoftwareSerial' -koppelvlak wat saam met die MaxSonar -toestel gebruik moet word. Slegs die ontvangs (RX) is nodig. Die koppelvlak is 'omgekeer' om by die uitset van die MaxSonar te pas.

Stap 10: Kode - Opstelling

Soos hierbo beskryf, initialiseer die 'opstel' -metode die' SoftwareSerial' -koppelvlak, sowel as die fisiese seriële koppelvlak. Dit stel die Arduino I/O -penne op en stuur 'n opskrif.

Stap 11: Kode - lus

Die 'lus' -kode loop deur die volgende:

  • Laai 'n opskrif (gebruik vir ontfouting en die plotter)
  • Skakel die MaxSonar in om 'n meting te neem
  • Lees die waarde van MaxSonar Pulse-Width
  • Lees die MaxSonar Serial-Data-waarde
  • Lees die MaxSonar Analog -waarde
  • Gaan die opsie 'HC-SR04' na, en indien geaktiveer:

    Aktiveer en lees die HC-SR04-toestel

  • Stuur die data in 'n oortjie -afgebakende formaat wat deur die Serial Plotter gebruik kan word
  • Wag totdat genoeg tyd verstryk het sodat 'n ander meting gedoen kan word

Stap 12: Kode - aktiveer die MaxSonar. Lees PW -waarde

Die MaxSonar het twee modusse: 'geaktiveer' en 'deurlopend'

Hierdie instruksie gebruik die 'geaktiveerde' modus, maar baie projekte kan baat vind by die 'deurlopende' modus (sien die datablad).

As u die 'geaktiveerde' modus gebruik, is die eerste geldige uitset afkomstig van die pulsbreedte (PW) uitset. Daarna is die res van die uitsette geldig.

Die `tiggerAndReadDistanceFromPulse` pols die snellerpen op die MaxSonar-toestel en lees die gevolglike waarde van die pulswydte-afstand

Let daarop dat, in teenstelling met baie ander sonar-toestelle, die MaxSonar die heen-en-weer-omskakeling hanteer, dus die afstand wat gelees word, die afstand tot die teiken is.

Hierdie metode vertraag ook lank genoeg sodat die ander uitsette van die toestel geldig is (serieel, analoog).

Stap 13: Kode - Lees MaxSonar Serial Value

Nadat die MaxSonar geaktiveer is (of in die 'deurlopende' modus), as die reeksuitset -opsie geaktiveer is (via die 'BW - Pin -1' -kontrole), word 'n reeks datastrome in die vorm "R nnn" gestuur, gevolg deur 'n CARRIAGE-RETURN '\ r'. Die 'nnn' is die waarde van duim vir die voorwerp.

Die 'readDistanceFromSerial' -metode lees die seriële data (vanaf die sagteware -seriële poort) en skakel die' nnn' -waarde om in desimale. Dit bevat 'n foutlose time-out, net as 'n reekswaarde nie ontvang word nie.

Stap 14: Kode - Lees MaxSonar analoog waarde

Die MaxSonar analoogpoort bied voortdurend 'n uitsetspanning wat eweredig is aan die laaste afstand wat gemeet is. Hierdie waarde kan te eniger tyd gelees word nadat die toestel geïnitialiseer is. Die waarde word opgedateer binne 50 ms na die laaste afstandlesing (geaktiveerde of deurlopende modus).

Die waarde is (Vcc/512) per duim. Dus, met 'n Vcc van die Arduino van 5 volt, sal die waarde ~ 9,8mV/in wees. Die 'readDistanceFromAnalog' -metode lees die waarde van die Arduino analoog invoer en skakel dit om na 'n' duim 'waarde.

Stap 15: Kode - aktiveer en lees die HC -SR04

Alhoewel daar biblioteke is om die HC-SR04 te lees, het ek gevind dat sommige daarvan onbetroubaar is met verskillende toestelle waarmee ek getoets het. Ek het gevind dat die kode wat ek by die 'sr04ReadDistance'-metode ingesluit het, eenvoudig en betroubaarder is (soveel as wat die goedkoop HC-SR04-toestel kan wees).

Hierdie metode stel die HC-SR04-toestel in en aktiveer dit en wag dan om die terugvoerpulswydte te meet. Die meting van die polswydte bevat 'n tydsduur om die probleem van die HC-SR04 van 'n baie lang polsduur te hanteer wanneer dit nie 'n teiken kan vind nie. Daar word aanvaar dat 'n polswydte langer as 'n teikenafstand van ~ 10 voet geen voorwerp of voorwerp is wat nie herken kan word nie. As die time -out bereik is, word '0' waarde teruggegee as die afstand. Hierdie 'afstand' (pulswydte) kan aangepas word met behulp van die #definieer waardes.

Die polswydte word omgeskakel na 'n heen-en-weer-afstand voordat dit as die afstand na die voorwerp teruggestuur word.

Stap 16: Kode - Ondersteuning van Arduino IDE Serial Plotter

Kode - Ondersteuning vir Serial Plotter van Arduino IDE
Kode - Ondersteuning vir Serial Plotter van Arduino IDE

Nou vir die uitset!

Die 'lus' -metode veroorsaak dat die afstandmeting van die twee toestelle versamel word - maar wat moet ons daarmee doen?

Natuurlik stuur ons dit uit sodat dit op die konsole gesien kan word - maar ons wil meer hê!

Die Arduino IDE bied ook die Serial Plotter -koppelvlak. Ons sal dit gebruik om 'n intydse grafiek te gee van die afstand tot ons voorwerp van die uitsette van ons twee toestelle.

Die Serial Plotter aanvaar 'n opskrif wat waardetikette bevat en daarna word verskeie rye met afgebakende waardes as 'n grafiek geteken. As die waardes gereeld uitgevoer word (een keer elke 'soveel sekondes'), bied die grafiek 'n visualisering van die afstand na die voorwerp oor tyd.

Die 'lus'-metode gee die drie waardes van die MaxSonar en die waarde van die HC-SR04 af in 'n oortjie-geskeide formaat wat saam met die Serial Plotter gebruik kan word. Een keer elke 20 rye word die opskrif uitgegee (net as die seriële plotter middelstroom geaktiveer is).

Hiermee kan u die afstand tot die hindernis visualiseer en ook die verskil sien in die waardes wat deur die twee toestelle teruggestuur word.

Stap 17: Kode - ontfouting …

Kode - ontfout …
Kode - ontfout …
Kode - ontfouting…
Kode - ontfouting…

Ontfouting is 'n noodsaaklikheid. Hoe kan u 'n probleem opspoor as iets nie werk soos verwag nie?

'N Eerste begripslyn is dikwels' eenvoudige 'teksuitsette wat kan aandui wat gebeur. Dit kan by die kode gevoeg word wanneer en waar nodig om 'n probleem op te spoor, en dan verwyder sodra die probleem opgelos is. Die byvoeging en verwydering van die kode is egter tydrowend en kan op sigself tot ander probleme lei. Soms is dit beter om dit dinamies in te skakel en uit te skakel terwyl u die bronkode alleen laat.

In hierdie instruksies het ek 'n meganisme ingesluit om ontfoutingstate (seriële uitset) uit te skakel en uit te skakel, dinamies van insette wat deur die Arduino IDE Serial Monitor gelees is (in 'n komende weergawe sal die Serial Plotter ook hierdie insette lewer).

Die '_DEBUG_OUTPUT' -booleaanse word gebruik in 'n aantal #definieer drukmetodes wat binne die kode gebruik kan word. Die waarde van die _DEBUG_OUTPUT veranderlike word gebruik om afdruk (stuur uitset) moontlik te maak of nie. Die waarde kan dinamies binne die kode verander word, soos die metode 'setDebugOutputMode' doen.

Die 'setDebugOutputMode' -metode word vanuit die' lus 'gebel op grond van insette wat vanaf die reeksinvoer ontvang is. Die invoer word ontleed om te sien of dit ooreenstem met "ontfouting aan/uit | waar/onwaar" om ontfoutingsmodus in/uit te skakel.

Stap 18: Gevolgtrekking

Ek hoop dat hierdie eenvoudige hardeware-opstelling en die voorbeeldkode u kan help om die verskille tussen die HC-SR04- en die LV-MaxSonar-EZ-toestelle te verstaan. Albei is baie maklik om te gebruik, en ek glo dat elkeen sy voordele het. Om te weet wanneer om die een eerder as die ander te gebruik, kan 'n belangrike rol speel in 'n suksesvolle projek.

BTW-ek het gesinspeel op 'n baie maklike manier om die afstand na 'n voorwerp akkuraat te meet met behulp van die LV-MaxSonar-EZ … U kan die analoog uitset (een draad) en die deurlopende metingsmodus gebruik om afstand te lees indien nodig met behulp van die eenvoudige kode in 'readDistanceFromAnalog' direk vanaf die Arduino analoog invoer. Een draad en (verkorte) een reël kode!

Stap 19: Alternatiewe MaxSonar -verbinding (met 180 ° kop)

Alternatiewe MaxSonar -verbinding (met 180 ° kop)
Alternatiewe MaxSonar -verbinding (met 180 ° kop)
Alternatiewe MaxSonar -verbinding (met 180 ° kop)
Alternatiewe MaxSonar -verbinding (met 180 ° kop)
Alternatiewe MaxSonar -verbinding (met 180 ° kop)
Alternatiewe MaxSonar -verbinding (met 180 ° kop)

Soos ek genoem het, kom die MaxSonar nie met 'n gekoppelde kop nie. U kan dus die verbinding gebruik wat die beste by u projek pas. In sommige gevalle is 'n 180 ° (reguit) kop beter geskik. As dit die geval is, wou ek vinnig wys hoe u dit met hierdie instruksies kan gebruik. Hierdie illustrasie toon 'n MaxSonar met 'n reguit kop wat met die lintkabel aan die broodbord gekoppel is, en dan aan die Arduino gekoppel is soos beskryf in die res van die artikel.

Stap 20: Arduino -kode

Die Arduino-kode is in die gids 'MaxSonar-outputs' van die projek in Sonar Range-Finder Vergelyking

Aanbeveel: