Lekce 9 - Měříme vzdálenost s HC-SR04

06.03.2013 14:54

V 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ět

Diskusní téma: Lekce 9 - Měříme vzdálenost s HC-SR04

Datum
Vložil
Titulek

Re: Re: úrprava na měřič rychlosti

Posledni veta (a zaroven bychom radi nejak eliminovali nahodne chyby mereni, takze s) tam nepatri

Datum
Vložil
Titulek

začátečník

Supr : konečne návod s popiskama pro SR-04
Použil jsem i SR-05 a zdá se mi dle měření přesnější na 1cm :-)

Datum
Vložil
Titulek

Re: Přesnost

Dobrý den, přesnost ultrazvukového senzoru je velmi závislá na teplotě atmosféry. Konstanta je udávána při teplotě 25 °C.
Vzorec pro přepočet rychlosti zvuku
Kde: c = 331,8+0,61∙t
c = rychlost zvuku,
t = teplota v °C.
Jedna z další věcí, která mohla ovlivnit měření, je že není dostatečné napětí na napájení, tedy méně jak 5 V. Napětí ovlivňuje i maximální dosah měření.
Udávaná přesnost je +/- 0,3 cm.

Datum
Vložil
Titulek

napájení

v mém případě to začalo fungovat až při napájení senzoru 5V, při napájení 3,3V ukazoval naměřenou vzdálenost pouze 0,03cm nebo 0,05cm stále dokola

Datum
Vložil
Titulek

Re: napájení

Bohužel mám stejný problém a nevím jak ho vyřešit byl by nělkdo od té lásky a poradil mi?

Datum
Vložil
Titulek

Re: napájení

Měl jsem podobny problem, ukazoval mi pořád dokala 0,03cm a 0,05cm. Po prozkoumáni, jsme zjistil že mi chybí NPN tranzistor.

Datum
Vložil
Titulek

Re: Re: napájení

Tak to by mě zajímaly podrobnosti jaký NPN tranzistor tam chyběl a jestli byl problém vyřešen.

Datum
Vložil
Titulek

Re: Re: Re: napájení

chyběl mi na senzoru SRF05 tranzistor vlevo nahoře, z fotek jsem zjistil že tam chybí tranzistor s SMD označením Y2, tak jsem tam dal SMD tranzistor 1GW (který byl zrovna po ruce se stejnými vývody a vlastnostmi). A tím se problém vyřešil.

Datum
Vložil
Titulek

Maximální doba čekání na zpětný signál

Dobrý den, děkuji za výborné stránky. Nyní k dotazu. Jak se zachová Arduino, pokud neobdrží zpětný signál (např: vzdálenost bude příliš velká). Podle kódu mi přijde, že stále počítá čas a pokud nakonec signál obdrží, bude asi nesmyslný.
Děkuji za odpověď.

Datum
Vložil
Titulek

Re: Maximální doba čekání na zpětný signál

Ano, toto v kódu není ošetřeno. Zpětný signál by bylo vhodné napojit na pin, kde se bude detekovat přerušení a naprogramovat maximální dobu čekání.

<< 1 | 2 | 3 | 4 | 5 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.