Lekce 9 - Měříme vzdálenost s HC-SR04
06.03.2013 14:54V tomto díle si ukážeme, jak efektivně a celkem levně měřit vzdálenost pomocí ultrazvukového modulu HC-SR04. Jedná se o kompaktní modul o velikosti velikosti cca 44x20mm, který je již samostatně funkční a není již potřeba připojovat další součástky. Jeho cena se pohybuje okolo 100Kč. Má celkem 4 piny z čehož je jeden napájecí, druhý pro vstupní puls, další pro výstupní puls a samozřejmně také zem. Je možné ho napájet 5V.
Pokud sjte si zapojili 7-segmentový displej z minulého dílu, můžete toto zapojení využít a zobrazovat naměřenou vzdálenost na tomto displeji, nebo informace z měření do počítače a zobrazovat pomocí SerialMonitor. Samozřejmně můžete použít i jiné druhy zobrazení hodnoty na jiném druhu dipleje tak i pomocí řade LED diod připojených k Arduinu.
Nejdříve si ukážeme základní zapojení pouze s ultrazvukovým modulem. Schéma nepřikládám, je tak jednoducjé, že by byla ztráta času ho vytvářet. Modul je také hezky popsaný, takže by neměl být problém.
Program pro měření vzálenosti je opravdu jednoduchý:
#define ECHOPIN 2 // Echo pin z HC-SC04 na pin 2 #define TRIGPIN 3 // Trig pin z HC-SC04 na pin 3 void setup() { //Nastaví sériovou komunikaci Serial.begin(9600); //Nastaví pin 2 jako vstupní pinMode(ECHOPIN, INPUT); //Nastaví pin 3 jako výstupní pinMode(TRIGPIN, OUTPUT); } void loop() { // Vyšle impuls do modulu HC-SR04 digitalWrite(TRIGPIN, LOW); delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGPIN, LOW); // Spočítá vzdálenost float distance = pulseIn(ECHOPIN, HIGH); distance= distance*0.017315f; // odešle informace na sérivý port Serial.print(distance); Serial.print("cm\n"); //počká 1 sekundu delay(1000); }
Jak můžete vidět v kódu, objevila se nám tam nová funkce a to pulseIn(pin, HIGH). Tato funkce vrací počet mikrosekund od detekovaní pulsu a to buď v hodnotě LOW nebo HIGH. Takže k vysvětlení. Po vyslání impulsu do modulu program počká na zpětné odeslání pulzu od modulu, kdy funkce pulseIn() nám vrátí potřebný počet mikrosekund. S tímto číslem můžeme dále pracovat. Vezmeme v úvahu rychlost zvuku 346,3 m*s-1 a to při teplotě suchého vzduchu 25°C. To znamená, že za 1mikrosekundu urazí v metrech 346,3/1000000 což je 0,0003463 metru. Převedo na cm to je 0,03463cm/mikrosekundu. Vzhledem k tomu, že signál jde od čidla k předmětu, kde se odrazí a zase zpět, musíme tuto vzdálenost ještě vydělit číslem 2. Výsledek je. že se vzdálenost bude rovnat počtem mikrosekund násobených číslem 0,017315. Výsledek zašleme na seriový port, kde se každou vteřinu zobrazí.
Tak doufám, že Vám vše funguje. Nezapomeňte si nastavit stejnou rychlost v Serial Monitoru jako máte v programu. Návod bude stejný jako v lekci zde.
Meření je docela přesné, pouze v zapojení s displejem jsem nechal přesnost na celé centimetry. V profesionálním meření je třeba počítat, že rychlost zvuku se bude nepatrně měnit v závislosti na teplotě, vlhkosti a tlaku vzduchu.
———
ZpětDiskusní téma: Lekce 9 - Měříme vzdálenost s HC-SR04
Datum | 17.05.2015 |
---|---|
Vložil | Piter |
Titulek | Měření vzdálenosti |
Mám stejný problém jak už se tu někdo o tom zmiňoval.Na displeji místo ukazováni vzdálenosti třeba 4,5cm atd.To stále jen kolísá 0,3 a 0,12 cm.A nejde s tým nic dělat.A na tišťaku nemám žádné tranzistory ani jeden.Jen odpory a kondenzátory.
———
Datum | 12.05.2015 |
---|---|
Vložil | LuBoss |
Titulek | Zdrojový kód a Copy-Paste |
Jednoduché a funkční.
Kdyby se ještě podařilo nějak udělat, aby byl zdrojový kód při kopírování i včetně konců řádků (CR/LF) a nemusel se opravovat a doplňovat skoro všechna odřádkování, bylo by to přímo super ;-)
———
Datum | 20.04.2015 |
---|---|
Vložil | danda08 |
Titulek | AtTiny13 |
Ahoj, používám Arduino jako ISP programátor a mám k němu připojený attiny13, chci to použít jako parkovací asistent, přidělám senzor na zeď a při určité vzdálenosti se mi rozsvítí ledka. Ale když chci program nahrát do procesoru tak mi to píše pulsein is not declared in this scope. Asi je to tím že to tiny13 neumí. Nešlo by to měření udělat nějak jinak?
Děkuji za odpověď
———
Datum | 28.06.2016 |
---|---|
Vložil | PEPE |
Titulek | Re: AtTiny13 |
Asi s křížkem po funuse, ale...
chyba nejspíš bude v tom, že je rozdíl mezi pulsein a pulseIn.
Ten potvora je choulostivej na malá a velká písmena.
Prima den! :)
———
Datum | 06.04.2015 |
---|---|
Vložil | Jirka |
Titulek | Zničení HC-SR04 |
Stavím robota. Některé součástky jdou déle z Číny než jiné. Vyzkoušel jsem HC-SR04 připravil část kodu co bude třeba pro robota a uložil jsem HC-SR04 do krabice. Pravda, že bez ochranného obalu. Teď jsem ho znovu zapojil abych si oživil kod a najednou mi hlásí jen 0 cm, což je nesmysl. Co by ho mohlo zničit ? Může ho zničit špatné zapojení, elektrické pole nebo co? Jak ověřit zda je ok? Díky za rady.
———
Datum | 24.10.2016 |
---|---|
Vložil | Karel |
Titulek | Re: Zničení HC-SR04 |
Ahoj,
měl jsem stejný problém,nakonec jsem zjistil ,že jeden z kabílků není OK.Přeměř vedení kabílku.
———
Datum | 26.03.2015 |
---|---|
Vložil | Kuba |
Titulek | Víc Tx a Rx |
Zdravím mužů k jednomu arduinu připojit víc než jede ultrazvuk ?
———
Datum | 17.02.2015 |
---|---|
Vložil | Pepa |
Titulek | Náročnost na čistotu prostředí |
Zdravím,
je ultrazvukové čidlo použitelné v lehce prašnějším prostředí?
Napadá mne aplikace při zjišťování hladiny sypkého materiálu v silu, teoreticky se práší jen při nasýpání, pak materiál pozvolna ubývá .. a ještě mne napadá problém č.2 - myslíte že se bude signál uvnitř takové kovové násypky nějak zběsile odrážet a znehodnocovat měření ??
jinak co se požadované přesnosti týče +- 10cm je myslím pro tento účel optimální, netřeba ladit milimetry ;)
díky, Pepa
———
Datum | 12.05.2015 |
---|---|
Vložil | LuBoss |
Titulek | Re: Náročnost na čistotu prostředí |
Myslím si, že ultrazvukový senzor je asi jako jediný prakticky použitelný i v prašném prostředí. Já bych jej chtěl vyzkoušet pro kontrolu množství uhlí v násypce automatického kotle.
Koneckonců stejný princip se používá i u parkovacích senzorů automobilů a ty fungují v prachu, dešti i sněžení a to i když je auto zablácené ;-)
———
Datum | 19.12.2014 |
---|---|
Vložil | Miloš |
Titulek | super, ono to funguje |