Menu

ADK projekt – dancing wall

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.

 

Dancing wall from front

Dancing wall

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.

ADK connected

Zapojený kit

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.

Dancing wall from behind

Provedení zezadu

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. :-)

Prezentace dancing wall

Předvedení zájemcům

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.

Komentáře

Vladimir

Vladimir

28.10.2011 8:21

Zdravim. Vypada to na pekny a zajimavy projekt. Jelikoz mam doma par avr mikropocitacu a nad koupi anduirna uvazuji, tak by jsem se rad zeptal jak se ti podarilo propojit phone s anduirnem. Pripadne by jsem ocenil odkaz na nejaky sample, nebo odkaz.

Jojo

Jojo

28.10.2011 8:49

Nejake video ako to vyzera nazivo by nebolo?

Zeduaz

Zeduaz

28.10.2011 8:56

A kdyby do toho videa treba bylo mozne vlozit i par screenu z mobilu pri pripojeni s ADK a jak to celkove pak s pripojenym mobilem vypada. Dekuji moc

Plus.google.com-113467725527067709066

Michal Janoušek 0

28.10.2011 10:33

Video klidně natočím a přidám :) Podle mě by to mělo jít i s avr, ale musel by sis sám nakonfigurovat endpointy a usb spojení. Výhodou použití arduina je, že google poskytuje přímo example, který obsahuje knihovnu pro enumeraci a správu usb spojení. Jenom čteš a zapisuješ do streamu. Pokud máš nějaké zkušenosti s implementací usb na mikroprocesorech tak by to neměl být problém. Tady je popis adk, včetně použití v androidu a examplů pro použití s arduinem http://developer.android.com/guide/topics/usb/adk.html.

Mem

Roman Nepšinský 0

28.10.2011 10:36

Video mám natočené, bude ve víkendovém článku shrnujícím všechny projekty na GDD :)

Shark.jd

Jan Dolejšexternista 0

28.10.2011 10:49

Zdravím kolegu z FELu. :)

Projekt velmi zajímavý, na video se těším. Z textu jsem úplně tak nezachytil, jak to bude pracovat.

Roman Hošek

Roman Hošek

28.10.2011 15:25

Moc pekne, klobouk dolu. Tez sem nezachytil jestli se nakonec teda mavalo, nebo slapalo (na coz mi zas prijde jedna led malo aby kazda barva byla rychle a dobre viditelna pri umelem osvetleni mistnosti atd) Ale fakt pekne.

Plus.google.com-113467725527067709066

Michal Janoušek 0

28.10.2011 18:30

Mávalo bude video, viz výše od Romana :) A svítilo to pěkne neboj.

Libor Kramoliš

Libor Kramoliš

29.10.2011 23:43

Michale, Tvuj projekt se mi libil. Dobrej napad a pekne zpracovane.

A jako dalsi “vyherce” ADK se ztotoznuji se zklamanim, ktere zminujes v zaveru sveho clanku. Ja z toho mel velmi smisene pocity. Moje fontana moc nefungovala – po kazdem behu to bylo treba resetovat, coz kazilo prezentaci. Takze jsem se tim vlastne ani moc nechlubil. Na druhou stranu jsem na tom nechal nekolik dlouhych dnu prace a cekal jsem, ze treba zadavatele nejak budou vyhodnocovat, jak se nam to nakonec povedlo a jak jsme se treba odchylili od puvodniho zameru.

RSS (komentáře k článku)