Micro:bit a sonar

Ultrazvukový dálkoměr (sonar) je jedním z nejpopulárnějších senzorů, protože je levný, poměrně přesný a k micro:bitu celkem snadno připojitelný.

Rozsah měření vzdáleností od tří centimetrů do dvou metrů je ideální například pro detekci překážek u malých a středních robotů, bezpečnostních zařízení a alarmů nebo pro automatické spouštění různých efektů a poutačů.

Princip detekce překážek ultrazvukem

Základním principem sonaru je generování akustického impulsu a následné naslouchání ozvěnám, vytvořeným odrazem zvukové vlny od překážky. Měřením doby, za kterou se vrátí odražená zvuková vlna, můžeme získat poměrně přesný odhad vzdálenosti k překážce. Akustický impuls je ultrazvukový, jeho frekvence je mimo slyšitelný rozsah lidského ucha.

Obr. 1: Princip detekce překážek ultrazvukem

Většinu funkcí, které jsou potřebné pro měření vzdálenosti, si zajišťuje senzor sám. Používá dva ultrazvukové měniče, jeden je určen pro vysílání (reproduktor) a jeden pro příjem (mikrofon). Činnost modulu řídí mikrokontrolér PIC.

Vzdálenost detekovaného objektu je určena obdélníkovým napěťovým pulsem, jehož délka je přímo úměrná vzdálenosti od detekovaného objektu; čím dále je objekt, tím je impuls delší.

Neurčitost některých fyzikálních proměnných může zkomplikovat absolutní hodnoty měření. Rychlost šíření zvuku ve vzduchu není konstantní a mírně se liší v závislosti na jeho teplotě a vlhkosti. Změřená délka pulzu by proto vždy měla být považována nikoli za absolutní, ale jen přibližnou hodnotu.

Existuje mnoho dalších faktorů, které ovlivňují přesnost měření jakéhokoliv ultrazvukového dálkoměru. Velikost, tvarová složitost a orientace překážky mohou ovlivňovat přesnost detekce. Ultrazvukový dálkoměr nemusí vůbec detekovat měkký objekt, protože akustický impuls se neodrazí, ale jeho energie je  objektem pohlcena.

Obr. 2: Detekce měkkého objektu

Objekt natočený velkou odraznou plochou směrem od senzoru také nemusí být detekován, protože akustický impuls může být odražen jiným směrem, a nebude tedy senzorem přijat.

Obr. 3: Detekce šikmé plochy

Kromě případů, kdy senzor nedetekuje překážku vůbec, také může nastat situace, kdy bude senzor překážku detekovat chybně, zejména v prostředí s více objekty. Velmi častou příčinou chybné detekce je nedostatečná prodleva mezi jednotlivými měřeními, kdy může senzor zachytit ještě doznívající ozvěnu impulsu předchozího měření. Podobná situace může nastat, když používáte více sonarů a spouštíte je buď současně, nebo velmi krátce po sobě.

Ovládání sonaru

Obr. 4: Ovládání sonaru

Sonar se spouští sestupnou hranou impulsu, přivedeného na pin Trig. Po přijetí tohoto pulsu vyšle sonar několik impulsů ultrazvukového signálu (Ping), nastaví pin Echo na log. 1 a začne „naslouchat“ odraženému signálu. Jakmile je toto echo (ozvěna) přijato, nastaví se pin Echo na log.0. Délka tohoto impulsu tedy přímo úměrně odpovídá vzdálenosti překážky.

Sonar HC-SR04

Tento sonar je možno koupit v mnoha různých tuzemských i zahraničních obchodech s elektronikou, ale vyskytuje se v různých rozměrech a bohužel i v různé kvalitě.

Vstupy a výstupy micro:bitu a sonaru není možno propojit přímo, protože sonar pracuje až od napětí 4,5 V a micro:bit naopak může být napájen nejvýše napětím 3,3 V. V sonaru jsou navíc oba komunikační piny (Trig a Echo) připojeny přes pull-up rezistory 10k k napětí 5 V, takže přímé propojení by mohlo micro:bit poškodit.

Proto je použit převodník úrovní. Tento obvod spolehlivě (ale pozor! nikoli galvanicky) oddělí obě napájecí napětí a umožní správnou a bezpečnou spolupráci micro:bitu a sonaru.

Na webu je sice možno nalézt několik příkladů, kde je spojen sonar přímo s micro:bitem, ale pokud si chcete takové zapojení vyzkoušet, pak  tak činíte výhradně na vlastní nebezpečí!

Obr. 5: Schéma připojení HC-SR04 k micro:bitu

Piezoelektrický měnič na pinu 8 je použit jako výstup zvukového signálu v demonstračním programu, ale pro vlastní funkci sonaru není nutný.

Micro:bit je možno napájet buď z rozhraní USB nebo z 3 V baterie, nepřehlédněte ale, že záporné póly obou zdrojů musí být propojeny.

Obr. 6: Zapojení sonaru na nepájivém poli

 

Obr. 7: Program pro obsluhu sonaru HC-SR04

Program napodobuje zrychlující se pípání sonaru, které nesmí chybět v žádném dobrodružném filmu o ponorkách.

Nejprve si z stáhněte blok pxt-sonar a nahrajte ho do prostředí Microsoft MakeCode volbou [Add Package]. V seznamu kategorií se objeví nová s názvem sonar, která obsahuje jediný blok, určený pro obsluhu sonaru. V tomto bloku můžeme nastavit číslo pinu, kterým sonar spouštíme (trig, v našem případě pin 16), číslo pinu, na který přichází puls (echo, v našem případě pin 12) a také si můžeme zvolit jednotky, ve kterých bude blok předávat vzdálenost pro další zpracování. Na výběr jsou mikrosekundy (μs), centimetry (cm) a palce (inches).

V bloku [on start] je nastaven blokem [analog set pitch pin] ten pin micro:bitu, na který bude připojen piezoelektrický reproduktorek (v příkladu je to pin 8).

Ve smyčce [forever] nejprve načteme do proměnné distance aktuální vzdálenost překážky. Protože nám jde jen o zvukový efekt a nikoli o měření vzdálenosti, jednotky (unit) ponecháme nastavené na mikrosekundy (μs). Pomocí funkce if .. then omezíme rozsah měření na 1000 μs, aby se zbytečně nezpomalovala odezva sonaru při změně vzdálenosti. Blokem [analog pitch .. for (ms)]  nastavíme frekvenci zvukového signálu na 3 kHz a čas trvání na 50 ms. A jako poslední vložíme blok [pause (ms)], jejíž doba trvání a tím i prodleva mezi jednotlivými pípnutími se bude měnit podle obsahu proměnné distance, tedy se podle vzdálenosti překážky od sonaru.

Sonar SRF05

Kromě nejrozšířenějšího sonaru HC-SR04 se také dosti často vyskytuje sonar SRF05 firmy Devantech. Tento sonar je možno zapojit dvěma různými způsoby.

První varianta zapojení

je shodná se sonarem HC‑SR04, takže schéma je uvedeno jen pro úplnost. Výstup OUT ponechte nezapojený. Obslužný program je také stejný jako u HC-SR04.

Obr. 8: Schéma připojení sonaru SRF05 k micro:bitu, 1. varianta

Druhá varianta zapojení

V tomto případě je jak pro spouštění měření (trig) tak i pro výstup signálu (echo) použit jen jeden pin sonaru (echo), připojený (v tomto případě) na pin 16 micro:bitu. Tento mód je aktivován spojením pinu OUT se zemí (GND).

Obr. 9: Schéma připojení sonaru SRF05 k micro:bitu, 2. varianta

 

Obr. 10: Zapojení sonaru na nepájivém poli

V této variantě zapojení nefunguje blok[1] [ping], takže si musíme vytvořit vlastní funkci, kterou pro jednoduchost též pojmenujeme ping. Úkolem funkce je generovat spouštěcí pulsu délky 10 μs[2] a následně změřit délku pulsu echo pomocí bloku [pulse in (μs)].

Ve smyčce [forever] opakovaně voláme funkci ping, která do proměnné distance uloží trvání pulsu echo v mikrosekundách. Zbytek programu už je shodný s předchozím.

Výstupem programu je pípání, které je tím rychlejší, čím je překážka blíž.

Vzdálenost překážky

Abychom pro vážnější práci získali údaj o zdálenosti překážky v centimetrech, musíme ještě přepočítat délku pulsu v mikrosekundách na délkovou míru.

Vzorec je celkem jednoduchý, ale přesnost výpočtu závisí na rychlosti šíření zvuku ve vzduchu, která je zhruba 343 m/s (neboli 0,0343 centimetru za mikrosekundu) a kterou nemůžeme ovlivnit.

Vynásobením doby trvání pulsu echo v mikrosekundách číslem 0,0343 dostaneme vzdálenost v centimetrech, kterou zvuk urazil. Výsledek musí být ještě dělen dvěma, protože akustický impuls ve skutečnosti urazí dráhu k překážce a zase zpět.

Vzorec pro výpočet vzdálenosti od překážky tedy bude:

vzdálenost = distance * 0,0343 / 2; [cm, μs]

Protože víme, že doba trvání výstupního impulsu je udávána v mikrosekundách, postačí ji vydělit číslem 58, abychom dostali přibližnou vzdálenost překážky v centimetrech:

vzdálenost = distance / 58; [cm]

Vzorec se lépe pamatuje, je dostatečně přesný a v programu se rychleji a výhodněji zpracovává. Ve vzorovém programu je proto použita právě tahle metoda.

Spustíme měření délky pulsu blokem [pulse in (μs)], výsledek měření podělíme 58 a do proměnné distance uložíme číslo, odpovídající vzdálenosti překážky v centimetrech.

Obr. 12: Funkce ultra s výstupem kalibrovaným v centimetrech

Jen pro úplnost dodejme, že pokud bychom chtěli měřit vzdálenost překážky v imperiálních mírách (palcích – inch), pak by přepočet byl:

vzdálenost = distance / 148; [inch]

[1] Důvod nefunkčnosti prozatím není znám a vyžaduje bližší rozbor kódu.

[2] Micro:bit je ve skutečnosti schopen generovat nejkratší pauzu o délce 27 μs, ale v tomto případě to nevadí, neboť měření se spouští až sestupnou hranou pulsu.