Modul s prodejním názvem HC-SR04 funguje jako ultrazvukový měřič vzdálenosti pro Arduino a další desky. Na desce samotné se nachází jeden ultrazvukový vysílač, jeden přijímač a dále integrované obvody, které zajišťují správnou funkci. Tento ultrazvukový měřič vzdálenosti se používá často u robotů a obecně tam, kde potřebujeme s poměrně velkou přesností zkoumat prostor před senzorem.
Tento modul umožňuje spolehlivou detekci v rozmezí 2 centimetrů až 4 metrů, nejpřesnější je však cca první 2 metry od modulu. Musíme také brát v potaz pracovní úhel detekce, který je okolo 15 stupňů. Dalším důležitým parametrem je také konstanta pro převod naměřené odezvy na vzdálenost.
Celá funkce tohoto modulu spočívá v tom, že pomocí Arduino desky sepneme vstup modulu Trig po dobu 5 mikrosekund, ultrazvukový vysílač vyšle vysokofrekvenční pulz a my poté čekáme na jeho zachycení ultrazvukovým přijímačem. Poté přečteme délku impulzu z výstupu modulu Echo a tu převedeme pomocí zmíněné konstanty na vzdálenost v centimetrech. Tato konstanta se počítá tak, že vezmeme rychlost zvuku při 20° C (343 m/s), podělíme ji 10 000, abychom dostali cm/us a poté ještě podělíme 2, protože naměřená vzdálenost odpovídá délce k překážce a zpět. Z obracené hodnoty výsledku dostaneme po zaokrouhlení číslo 58,31, kterým vždy vydělíme získaný čas. Pokud budete chtít měřit vzdálenost v jiné teplotě či dokonce atmosféře, budete si muset dohledat rychlost zvuku pro váš případ například pomocí fyzikálních tabulek.
Tento modul s ultrazvukovým měřičem vzdálenosti má celkem 4 propojovací piny. Připojíme VCC na napájecí napětí +5V, GND na zem, Trig na D4 a Echo na D5. Využít však můžeme samozřejmě i jiné datové piny.
Níže uvedený ukázkový kód obsahuje nejprve nastavení čísel pinů pro připojení modulu, dále inicializaci proměnných pro uložení dat a poté podprogram setup s nastavením směru připojených pinů a rychlosti sériové linky. V nekonečné smyčce loop pak vždy připojíme Trig na zem, poté pošleme po dobu 5 mikrosekund kladný pulz a znovu připojíme na zem. Následně na pinu Echo načteme délku pulzu odezvy a přes výše vypočtenou konstantu získáme vzdálenost v centimetrech a tu si vytiskneme po sériové lince.
// Arduino Měřič vzdálenosti ultrazvukový // piny pro připojení Trig a Echo z modulu int pTrig = 4; int pEcho = 5; // inicializace proměnných, do kterých se uloží data long odezva, vzdalenost; void setup() { // nastavení pinů modulu jako výstup a vstup pinMode(pTrig, OUTPUT); pinMode(pEcho, INPUT); // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); } void loop() { // nastavíme na 2 mikrosekundy výstup na GND (pro jistotu) // poté nastavíme na 5 mikrosekund výstup rovný napájení // a poté opět na GND digitalWrite(pTrig, LOW); delayMicroseconds(2); digitalWrite(pTrig, HIGH); delayMicroseconds(5); digitalWrite(pTrig, LOW); // pomocí funkce pulseIn získáme následně // délku pulzu v mikrosekundách (us) odezva = pulseIn(pEcho, HIGH); // přepočet získaného času na vzdálenost v cm vzdalenost = odezva / 58.31; Serial.print("Vzdalenost je "); Serial.print(vzdalenost); Serial.println(" cm."); // pauza 0.5 s pro přehledné čtení delay(500); }
Jako výsledek tedy dostáváme například tento výpis:
Vzdalenost je 8 cm. Vzdalenost je 55 cm. Vzdalenost je 58 cm. Vzdalenost je 18 cm. Vzdalenost je 3271 cm. Vzdalenost je 3 cm. Vzdalenost je 3247 cm. Vzdalenost je 4 cm.
Jak jsem již zmínil v úvodu, tento modul není příliš přesný u vzdáleností větších jak 2 metry a může se stát, že při velké vzdálenosti dostaneme hned po sobě informaci o velké a malé vzdálenosti, jak si můžete všimnout na konci ukázky výpisu. S tímto jevem je tedy nutné počítat a případně ho programově ošetřit.
Seznam použitých komponent:
http://dratek.cz/arduino/846-arduino-meric-vzdalenosti-ultrazvukovy.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1424-nepajive-kontaktni-pole-zy-170-w.html
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html