ADK projekt – dancing wall

Dancing wall from front

Jako účastník soutěže Android Development Kit (dalé jen ADK) Open Call pro Google Developer Day a novopečený externí redaktor se Vám nyní pokusím popsat můj ADK projekt. Soutěž, v které jsme získali Google ADK, už popsal Roman Nepšinský v tomto článku.  Na návrh projektu jsme měli cca týden o prázdninách, ale vzhledem k mému pracovnímu vytížení to zase až tolik času nebylo. Rozmyšlení  a  sepsání projektu jsem věnoval tak 2 až 3 hodiny. Vymýšlejte něco na téma diskotéka v kontextu – Show us how your country rocks out. Já si vymyslel Android dancing wall – zde je  link na dokument v angličtině, který jsem odesílal do soutěže.  Konkrétně s arduinem jsem velké zkušenosti neměl, ale dostal jsem se už k programovaní mikroprocesorů architektury ARM (7, Cortex..), zejména v rámci studia na FEL ČVUT.  Nejdříve jsem tedy musel zběžně projít možnosti platformy arduino, a až poté jsem mohl začít něco vymýšlet. Zaujala mě knihovna CapSense (Capacitive Sense library), umožňující měřit pomocí arduina kapacitu a tím velmi jednoduše vytvořit kapacitní senzory z drátů či kousku alobalu.

 

Cíle projektu

Díky možnosti použití kapacitních senzorů, jsem se rozhodl, že udělám hru, která  vychází ze hry twister.  Hardware – plastová deska na s panelem se 4 různě barevnými LED. Svítící LED bude svojí barvou určovat barvu senzoru, před kterým bude nutné mávnout. Dojde k zhasnutí stávající LED a rozsvícení další. Vzhledem k tomu, že jsem nevěděl, jak dobře budou kapacitní senzory fungovat, tak jsem počítal i s řešením podložka – na jednotlivé senzory by se šlapalo.  Dále měla být součástí vlajka ČR vyrobená z LED, která by se po úspěšném dokončení hry rozsvítila, případně by byla napojená na servomotory z ADK a zamávala by. Cílem softwarové části bylo vyvinout aplikaci, pomocí které bude možno hru ovládat, bude obsahovat editor sekvencí blikání LED, bude měřit čas, rychlost mávání a chyby způsobené hráčem tak, aby bylo možné vypočítat skóre sloužící pro porovnání mezi jednotlivými hráči.

Co se podařilo

Z vytyčených cílů jsem se vůbec nedostal k realizaci LED vlajky. Stejně tak editor sekvencí se transformoval  na volbu 3 přednastavených obtížností (8,16,24 po sobě svítících diod). Hlavní metrikou pro skóre je čas, kde v obtížnosti medium je přičteno 5 sekund za špatné mávnutí a v obtížnosti hard svítí každá dioda pouze 2 sekundy, a když nedojde k včasnému mávnutí, hráč dostane 5 trestných sekund a rozsvítí se další následující LED ze sekvence.

Zkušenosti s vývojem

Co se týče programování, tak s Javou mám mnoho zkušeností, kromě studia pracuji jako programátor v Javě. Toto byla druhá aplikace, kterou jsem pro Android psal, a neměl jsem s vývojem žádný zásadní problém. Wiring je programovací jazyk arduina a vzhledem k tomu, že už jsem v C něco napsal, naprogramování ADK, také nebylo náročné. Problémem však bylo debugování aplikace na telefonu, protože telefon musíte připojit do kitu a máte jenom výpis z kitu ze sériového portu. Celý projekt mi trval tak 4 dny pořádné práce, s tím že nepočítám rozchození examplů a instalaci jednotlivých vývojových prostředí. Ještě bych měl tak jeden den připočíst za průběžnou práce.

Kapacitní senzor

Senzor se skládá z odporu a drátu, případně alobalu. Musíme použít 2 piny – vysílací a přijímací.  Vysílací pin změní stav a metoda čeká, než se do stejného stavu dostane i přijímací pin, respektive ve smyčce inkremetuje proměnnou, dokud není na přijímacím pinu stejné napětí jako na vysílacím. Metoda čtení stavu poté vrátí hodnotu proměnné, která odpovídá době, než došlo ke změně.  Zpoždění mezi vysílacím a přijímacím pinem je definováno časovou konstantou tau. Mezi piny tak máme RC obvod (integrační článek, elementární dolní propusť 1. řádu). V tomto konkrétním případě máme stejnosměrně napájený obvod,  využívá se tedy pouze přechodového děje, který nastává při změně napětí na vysílacím pinu. Podrobnější matematický popis přechodového jevu lze nalézt zde. Časová konstanta tau je definována jako t = R*C. Tau tedy odpovídá inkrementované proměnné, R je hodnota odporu rezistoru za vysílacím pinem, C je součet kapacity přijímacího pinu a kapacity mezi snímačem a v našem případě rukou hráče.  Z toho tedy lze určit kapacitu, nebo snímat změnu kapacity. Nastavením vhodné prahové hodnoty snadno určíme, že před senzorem někdo mávl. Tato hodnota může být závislá na konkrétní instalaci a prostředí.

Měřené hodnoty se dají stabilizovat prostřednictvím pomocných kondenzátorů o velikosti řádově stovek pF.  První kondenzátor se umístí paralelně se snímačem a druhým kondenzátorem se propojí přijímací pin se zemí. Sám jsem tyto pomocné kondenzátory nepoužil, neboť senzory fungovali dobře i bez nich. Velikost odporu R se volí řádově v jednotkách až desítkách M ohmů. A platí, že čím je větší odpor, tím je větší základ pro časovou konstantu, tedy snímání je pomalejší, ale senzor je citlivější na větší vzdálenost (má více času pro nabíjení kondenzátoru času). V mém projektu, jsem použil odpory o velikosti 10 M ohmů, což umožnilo snímání na cca 2 cm.

Problémem při použití těchto senzorů, je dobré uzemnění. Napájecí adaptér, není uzemněn, proto jsem musel ze zásuvky vyvést zemnění a připojit ho do kitu. Zkreslení měřených hodnot, způsobuje dokonce i připojení notebooku, který je napájen pouze z baterie. Drát mezi jednotlivými piny musí být krátký. V tom případě, že je drát delší, měl by být stíněný.

Alobal je velmi křehký, a jako takový by se jen těžko dal použít jako senzor v takovéto aplikaci, protože by se snadno zničil. Naštěstí přes něj lze umístit jakýkoliv nevodivý materiál, který měření kapacity buď vůbec neovlivní, nebo zvýší měřenou kapacitu(to může být dokonce žádoucí).

Provedení dancing wallu zezadu

Provedení zezadu - připojení senzorů a LED

Náklady

Co se týče jednotlivých nákladů, nebylo to tak hrozné. PVC desku s nálepkami jsem si nechal vyrobit na zakázku od kamaráda, což přišlo na nějakých 850 Kč. Součástky použité v instalaci, včetně nepájivého pole a kabelů, přišly na cca 200 Kč. Dále jsem si ještě musel pořídit redukci pro napájecí adaptér, který měl US zástrčku. Z lenosti jsem koupil velmi pěknou v Datartu, za nekřesťanských 200 Kč. Takže to máme cca 1300 Kč, což není tak hrozné. Protože se mi nepodařilo rozjet ADK, na telefonech mých vlastních android telefonech, koupil jsem si Nexus S, ale to by se asi do nákladů počítat nemělo. :-)

Závěr

Závěrem bych chtěl říct, že jsem byl trošku zklamán tím, že vlastně většina účastníků gdd nevěděla nic o soutěži a o koncepci, v rámci které jednotlivé projekty vznikali.  Ale nevadí, plyne z toho ponaučení, které nám vtloukají do hlavy už ve škole,  prezentace je nejdůležitější část práce. Příště se polepším a udělám i nějaký pořádný popis celého zařízení, to mě v zápalu vývoje ani nenapadlo. Ještě zmíním, že svůj dancing wall mám u sebe a po pár vylepšeních a opravách, které přinesl gdd ho rád zapůjčím, aby si s ním mohli případní zájemci užít legraci.

Za použité fotografie děkuji Martinu Klapetkovi a Romanu Nepšinskému.

Mohlo by vás zajímat

gdd11-062

ADK projekty ze zahraničních GDD

Články Roman Nepšinský Roman Nepšinský
2 min. uložit na později

Finále Open Call Android ADK

Blog terox terox
1 min. uložit na později
284_GDD_lowres

Android dancing wall

Blog terox terox
5 min. uložit na později

Komentáře (9)