Zapojení a řízení činnosti sonarových senzorů MB1220 pomocí Arduino Micro 1 Úvod Cílem této části projektu je návrh a odladění sítě šesti sonarových senzorů pro UAV (kvadrokoptéru). Vstupní parametry úlohy byly dány použitým sonarovým senzorem MB1220 [2] a možnostmi datového připojení řídící desky kvadrokoptéry (UART).
2 Použité komponenty 2.1 Arduino Micro Arduino Micro patří do rodiny vývojových mikropočítačových desek, založených na RISC mikroprocesorech ATMEL (podrobné informace viz [3]).
2.2 Sonarový senzor XL-MaxBotix-EZ2 MB1220 Sonarový senzor XL-MaxBotix-EZ2 MB1220 [2] je vysokovýkonný průmyslový kompaktní senzor s velkým výstupním výkonem, auto-kalibrací, potlačením šumu a s kalibrovaným tvarem vyzařovaného paprsku. Senzor umožňuje měření buď v automatickém kontinuálním režimu, nebo v režimu, kdy je proces měření spouštěn resp. zastavován v daném intervalu. Klíčové vlastnosti senzoru, které je nutné při dané aplikaci brát v úvahu, jsou následující: Detekce objektů je možná ve vzdálenostech od 0,2 do 7,65 m. Rozlišení vzdálenosti je 1 cm (pro objekty ve vzdálenosti větší než 20 cm). Oblast od 0 m do 0,2 m je tzv. mrtvá zóna, kdy senzor nemůže korektně určit vzdálenost k objektu a jeho odezva zpravidla odpovídá 0,2 m. Proces měření od startu do získání odezvy je 100 ms. Je to dáno vlastní režií měření senzoru, která zahrnuje autokalibraci podle okolní teploty a vlhkosti, vyslání detekčního paprsku a čekání na odraženou vlnu. Senzor je vhodný zejména pro použití v uzavřených prostorách. Čtení odezvy senzoru [2] je možné buď měřením délky kladného impulsu digitálního výstupu, měřením velikosti napětí analogového výstupu nebo příjmem informace pomocí UART (není možné v režimu sítě senzorů). 2.2.1
Práce více sonarových senzorů zapojených v jednom systému (v síti) [4]
Pokud pracuje více sonarových senzorů v jednom systému, nelze je používat v režimu kontinuálního nekoordinovaného měření. Výrobce senzorů tuto možnost výrazně nedoporučuje [4]. Proces měření senzoru by byl ovlivněn sekundárními odrazy ostatních senzorů v systému. Senzory jsou naštěstí koncipovány tak, že mohou synchronizovat svoji činnost tak, že v jednom okamžiku pracuje právě jeden senzor. V tomto zapojení budou senzory pracovat korektně, nicméně potřebná doba měření se prodlouží, protože jednotlivé senzory jsou spouštěny postupně. Další možností, která ale podle výrobce nemusí vždy fungovat korektně, je spouštění měření všech senzorů systému v jednom okamžiku. Tento způsob má tu výhodu, že lze dosáhnout vysoké četnosti
odezvy systému (téměř 10 Hz). Nicméně, při návrhu rozmístění senzorů je nutné uvážit jejich možné vzájemné ovlivňování [1]. V tomto případě lze pro měření odezvy jednotlivých senzorů využít pouze jejich analogové výstupy.
2.2.2
Zásady použití sonarových senzorů v UAV (kvadrokoptérách) [1]
a) K maximální eliminaci vlivu turbulencí od vrtulí je nutné umístit senzory co nejdále od vrtulí nebo tak, aby vyzařovaný paprsek byl co nejméně ovlivněn jejich turbulencemi. b) K eliminaci akustického šumu vrtulí je potřeba zabezpečit, aby vyzařované paprsky senzorů neprocházely skrz vrtule. Vhodné je sonar umístit pod vrtule. K zablokování rušivého směru lze použít zvuk absorbující materiál, jako je např. pěnová guma. c) Pro ochranu před vibracemi rámu kvadrokoptéry je v systému upevnění vhodné použít pružné, vibrace eliminující prvky (pryž apod.). d) Elektrické připojení napájecích vodičů senzorů v síti musí být řešeno jako „hvězda“, tj. každý senzor má vlastní dvojici zemnícího a napájecího vodiče, ideálně stejné délky. Tyto vodiče jsou připojeny k zemnění resp. napájení v jednom bodě. e) Elektrický šum vznikající v systému UAV (motory apod.) a pronikající do napájení senzorů může velmi negativně ovlivňovat jejich přesnost měření. Na napájení senzoru by proto měly být aplikovány jednoduché RC filtry (10 Ohm, 100 uF). Pro zabezpečení ochrany před elektrickým šumem z okolí je vhodné použití stíněných vodičů.
3 Návrh řešení Po analýze vstupních parametrů úlohy a dostupné dokumentace byly navrženy dvě řešení, kdy se sonary spouští buď synchronně (viz 3.2) nebo postupně (viz. 3.1). Výhody a nevýhody obou přístupů jsou stručně popsány v bodu 2.2.1. Nakonec bylo zvoleno řešení, kdy je síť sonarových senzorů spouštěna synchronně. Synchronizaci měření a detekci odezvy systému sonarů zabezpečuje mikropočítačová Arduino Micro, která také předává naměřená data do řídící desky kvadrokoptéry pomocí rozhraní UART. Toto hardwarového řešení bylo zvoleno z následujících důvodů: -
-
Použité sonarové senzory nepodporují ani řízení činnosti ani přenos dat po nějakém typu datové sběrnice a Atom board kvadrokoptéry nemá jiné dostatečné hardwarové kapacity pro řízení a čtení odezvy všech senzorů, tj. dostatečný počet volných datových vstupů/výstupů resp. vstupů s AD převodníkem. Řídící a vyhodnocovací mezičlánek ve funkci Arduina plně řeší tento problém. Přináší rychlost a spolehlivost odezvy systému sonarů, která je nezbytná v real-time aplikacích. Celý systém je hardwarově i softwarově oddělen od systému Atom boardu, jeho činnost je prakticky nezávislá a není omezena žádnými procesy Atom boardu s vyšší prioritou zpracování.
Arduino Micro bylo vybráno proto, že disponuje dostatečným počtem digitálních vstupů/výstupů a analogových vstupů (s AD převodníkem), jeho procesor je pro danou aplikaci více než dostatečně výkonný a jeho programování je poměrně jednoduché a průhledné. Je také možná další rozšiřitelnost systému sonarů a jedná o obecné řešení (tj. nejde o specifické řešení pouze pro Tyru, ale navržený systém zapojení a ovládání sonarů lze použít v jakékoliv jiné aplikaci). Další nezanedbatelnou výhodou desky Arduino Micro jsou jeho malé rozměry, nízká hmotnost a velmi nízká energetická náročnost.
3.1 Řešení s postupným spouštěním sonarů 3.1.1 -
-
3.1.2 -
Popis zapojení Použití portů na arduinu: o Port 0 (TX) – je připojen na RX UART. Data získaná sonary jsou arduinem zpracována a předána sériovou linkou UART Atomboardu. o Port 2 – je nastaven jako výstupní a posílá startovací impulz prvnímu sonaru zapojeného do řetězu (na jeho pin 4). o Port 3–8 – jsou nastaveny jako vstupní. Slouží k přijímání odezvy sonarů. Se sonary jsou spojeny pinem 2. Nastavení pinů sonarů: o Pin 1 (BW) – je nastaven na logickou úroveň low (tj. uzemněn), aby bylo možné sonary zřetězit. o Pin 2 (PW) – je propojen s Arduinem na jeho digitálních pinech 3-8. Pomocí šířky pulzu jsme schopni vypočítat, v jaké vzdálenosti od sonaru se nachází překážka (viz Výpočet vzdálenosti od překážky). o Pin 3 (AN) – v dosavadním řešení nevyužito. o Pin 4 (RX) – na tento pin je u prvního sonaru v řetězu přiveden startovací impulz. Pro ostatní sonary v řetězu platí, že je na tento pin přiveden pin 5 předchozího sonaru. Pokud je nastaven na logickou úroveň high, měří odezvu sonaru po dobu délky startovacího impulzu. Poté je opět shozen na logickou úroveň low. o Pin 5 (TX) – je přiveden na pin 4 následujícího sonaru. U posledního sonaru v řetězu není zapojen. Slouží k tomu, že posílá pulz (předává „token“) následujícímu sonaru, čímž mu signalizuje, že může začít vysílat a měřit odezvu. o Pin 6 (VCC) – na tento pin je přivedeno napětí 5 V. o Pin 7 (GND) – tento pin slouží k uzemnění. Popis měřícího cyklu Jak to funguje? [2] [3] o Arduino vždy spustí měřící cyklus nastavením portu 2 na logickou úroveň high po dobu minimálně 20 us, a potom již jen čeká na odezvy sonarů a měří délky impulzů. Odezva sonaru se může pohybovat v rozmezí 1,16 ms až 44,4 ms. Funguje to tak, že pin 2 je nastaven na logickou úroveň high, dokud není nedekován objekt. Pak je pin 2 opět shozen na logickou úroveň low. Jestliže není detekován žádný objekt, pin 2 bude držen na logické úrovni high po dobu 44,4 ms (což odpovídá 58 us * 765 cm) a poté shozen na low. Tyto hodnoty pak arduino přepočítá na vzdálenosti (vydělí je
-
-
číslem 58, jelikož 1 cm odpovídá naměřeným 58 us) a odešle do Atomboardu kvadrokoptéry přes sériové rozhraní UART. Proč zřetězení sonarů? [4] o V tomto provedení jsou sonary zapojeny sériově a čteme postupně odezvy jednoho sonaru po druhém. Hlavní výhodou zřetězení sonarů je skutečnost, že nemůže dojít k tomu, aby se vzájemně rušily. Jakmile jeden sonar vysílá a měří odezvu, ostatní jsou v klidu. Až sonar dokončí svou práci, předá „token“ dalšímu sonaru. Toto řešení je výrobcem silně doporučeno, jelikož funguje vždy a nemůže dojít k vzájemnému rušení mezi sonary. Nevýhodou tohoto řešení je, že s počtem senzorů, se zvyšuje i celková doba odezvy od všech sonarů. Tento způsob zapojení sonarů umožňuje připojit až 11 sonarů na jedno Arduino Micro.
3.1.3
Schéma zapojení
3.2 Řešení se synchronním spouštěním sonarů 3.3 Popis zapojení -
-
3.3.1 -
Použití portů na arduinu: o Port 0 (TX) – je připojen na RX UART. Data získaná sonary jsou arduinem zpracována a předána sériovou linkou UART Atomboardu. o Port 2 – je nastaven jako výstupní a posílá startovací impulz sonarům najednou (na jejich pin 4). o Port A0 – A6 – jsou nastaveny jako vstupní. Slouží k přijímání odezvy sonarů. Se sonary jsou spojeny pinem 3. Nastavení pinů sonarů: o Pin 1 (BW) – v tomto řešení nevyužito. o Pin 2 (PW) – v tomto řešení nevyužito. o Pin 3 (AN) – je propojen s Arduinem na jeho pinech A0-A6. Vzdálenosti sonarů od překážky se změří podle velikosti napětí naměřené na analogových výspech senzorů. Čtení odezvy jednoho sonaru trvá přibližně 100 us. o Pin 4 (RX) – na tento pin je přiveden startovací impulz. Po 100 ms je u něj možné přečíst odezvu (napětí), která se pak přepočítá na vzdálenost sonaru od překážky. o Pin 5 (TX) – v tomto řešení nevyužito. o Pin 6 (VCC) – na tento pin je přivedeno napětí 5 V. o Pin 7 (GND) – tento pin slouží k uzemnění. Popis měřícího cyklu Jak to funguje? [2][3] o Arduino vždy spustí měřící cyklus nastavením portu 2 na logickou úroveň high po dobu minimálně 20 us. Poté čeká 100 ms na dokončení měření sonary a přečte postupně jejich odezvy, tj. velikost napětí na jejich analogových výstupech, na kterých je hodnota napětí nastavena po skončení měření a resetována je až při zahájení dalšího měření. Odezva sonaru se může pohybovat v rozmezí 0,098 - 3,66 V. Tyto hodnoty pak arduino odešle do Atomboardu kvadrokoptéry přes sériové rozhraní UART. U tohoto typu senzoru je změřená vzdálenost rovna výstupu AD převodníku Arduina. o Tento způsob zapojení pomocí Arduina Micra umožňuje zapojit až 12 sonarů, je to dáno počtem analogových vstupů této desky. o V porovnání s řešením 3.1 je toto řešení mnohem rychlejší (jsme schopni dosáhnout frekvence měření skoro 10 Hz). Nevýhodou tohoto zapojení je menší přesnost (při testování odchylka 2-3 cm) daná způsobem čtení odezvy sonarů – tedy čtením napětí, které principiálně méně přesné resp. více náchylné na rušení oproti měření délky impulsu [4]. Odezva se počítá (viz 3.4.2) přes hodnotu referenčního napětí, které může mít menší odchylky. Odchylky mohou také vznikat vlivem vnějších podmínek (vítr), činností motorů apod. Viz 2.2.2 - v tomto řešení by se opravdu důsledně měly dodržovat zásady doporučené výrobcem sonarů. Dále není zaručeno, že za některých podmínek nemůže nastat situace, kdy se sonary budou vzájemně rušit. Další výhodou je potřeba menšího množství kabelů.
3.3.2
Schéma zapojení
3.4 Softwarová implementace -
-
-
-
3.4.1 3.4.2 -
Program běží v nekonečné smyčce. Činnost je následující: o Odstartování činnosti sonarů. o Čekání na ukončení měřícího cyklu. o Přečtení jednotlivých odezev sonarů. o Odeslání hodnot přes UART do Atomboardu. Pro řešení s postupným spouštěním sonarů platí: Řetěz sonarů je spouštěn se startovacím impulzem 1 ms. Po tom, co se v řetězu vystřídají všechny sonary, čeká arduino ještě 10 ms, než spustí další cyklus. Tato prodleva je nutná z důvodu vzniku sekundárních odrazů, jejich vlivu chceme zabránit. Tuto prodlevu je možné ladit. Pro řešení se synchronním spuštěním sonarů platí: Měření je u všech sonarů spuštěno současně startovacím impulsem délky 1 ms. Systém potom čeká 100 ms na dokončení měření všech senzorů a poté postupně přečte jejich odezvu měřením napětí na analogových výstupech. Po krátké prodlevě (viz výše) je opět spuštěn další měřící cyklus. Naměřené hodnoty v cm posílá arduino v řetězci tvaru: S1-XXX S2-XXX S3-XXX S4-XXX S5-XXX S6-XXX, kde XXX je vzdálenost měřená příslušným sonarem v cm.
Propojení desky Arduina s Atomboardem Arduino posílá data do Atomboardu prostřednictvím rozhraní UART. Je důležité propojit port TX na Arduinu s pinem RX UARTu. Dále musí být zabezpečena společná signálová zem (GND). Napájení Arduina je řešeno pomocí akumulátoru Tyry jmenovitého napětí 12V (viz [3]). Výpočet vzdálenosti od překážky [3] Měříme šířku pulzu (používáme pin 2 sonaru a digitální porty na Arduinu): o Je definované měřítko, že 1 cm odpovídá naměřené odezvě 58 us. Vyplývá to z rychlosti zvuku ve vzduchu v normálních podmínkách (čidlo se kalibruje před každým měřením) s uvážením odražené vlny [2]. Z toho plyne, že 𝑑 =
-
𝑝𝑤 58
, kde 𝑑 je
naměřená vzdálenost od překážky v cm, 𝑝𝑤 je šířka pulzu. Měříme napětí (používáme pin 3 sonaru a analogové porty na Adruinu): o Je definované měřítko, že 1 cm odpovídá Vcc/1024, kde Vcc je referenční napětí (5V).
4 Závěr Aktuální řešení nainstalované na kvadrokoptéře Tyra obsahuje čtyři sonary zapojené tak, aby se spouštěly synchronně (viz 3.3). Tento způsob zapojení byl zvolen zejména z důvodu vyšší frekvence získání odezev od sonarů. Řešení bylo otestováno. Při testování bylo zjištěno, že dochází k odchylce asi 2-3 cm v měření aktuální vzdálenosti od překážky. Podle dokumentace výrobce [1] není použitý typ sonarů, z různých důvodů, úplně vhodný pro použití na kvadrokoptérách. Pro tyto účely výrobce doporučuje sonary zmíněné ve článku [1].
Pro detekci objektů v malé blízkosti (kolizní detekci) by bylo vhodné zvážit osazení kvadrokoptéry dodatečnými infračervenými senzory, jejichž odezva je v porovnání s ultrazvukovými sonary mnohem rychlejší a jsou vhodnější pro detekci malých překážek v těsné blízkosti kvadrokoptéry.
5 Seznam použité literatury [1]
http://www.maxbotix.com/articles/067.htm
[2]
http://www.maxbotix.com/documents/XL-MaxSonar-EZ_Datasheet.pdf
[3]
http://arduino.cc/en/Main/arduinoBoardMicro
[4]
http://www.maxbotix.com/articles/031.htm