Jeffrey Cross
Jeffrey Cross

WineShade: Hipster Stack-poháněl hlasování Gizmo pro O'Reilly je Strata konference

Byl jsem požádán, abych udělal něco pro konferenci O'Reilly Strata, která se konala koncem února 2012 v Santa Claře. Potřebovali jsme některá zařízení k zachycení hlasů od účastníků, kteří se zúčastnili datového rozpadu Coco Krumme: Kde víno a data Setkat:

Tato nová akce ve Strata bude hostit ochutnávky vín pro účastníky, jejichž zpětná data budou sestavena a analyzována za účelem extrapolace trendů chování a faktorů ovlivňujících jejich reakce.

Na akci jsme měli několik stanic s různými druhy vín. Byla to vaše základní chuťová zkouška, kde byly značky skryty, a architekt experimentu (Coco) použil různé metody k ovlivnění odpovědí. Poté, co účastníci vypili víno, byli instruováni, aby pokračovali do hlasovací stanice WineShade a stiskněte tlačítko, jehož etiketa odpovídala vínu, které právě pili. Jak experiment pokračoval, hlasy budou sčítány na centrálním serveru.

Rozhodl jsem se, že nejlepším způsobem, jak tento systém udělat, bylo vložit do projektu spoustu nových technologií: MakerBot, XBee, Arduino, Node.js. Věřím, že to byl Alasdair Allan, který daboval tento bederní stack. Věřím, že to byl Alex Howard, který ji nazval WineShade. Ale mezi výpary vína a pájky je moje paměť podezřelá!

MakerBot Pokud budu dělat něco fyzického, věděl jsem, že můj MakerBot Thing-O-Matic by mi mohl usnadnit život. Zpočátku jsem si myslel, že budu používat MakerBot, abych vytiskl něco, co by držet tlačítka a indikátory na místě, ale rozhodl jsem se pro to udělat nějaké pěnové jádro. Rozhodl jsem se použít stínítka jako podvozek pro každou stanici a potřeboval jsem něco, abych to zavřel. Tak jsem udělal malou věž, abych šla na vrchol každého. Nakonec jsem šel s něčím menším, než co vidíte zde.

Arduino Mega Věděl jsem, že budu potřebovat hodně I / O, protože každá stanice bude mít tři sloupcové grafy a tři tlačítka (i když jsme skončili s použitím pouze dvou). Nechtěl jsem do toho vkládat příliš mnoho komponent, protože je budu potřebovat, takže jsem se rozhodl řídit sloupcové grafy přímo z pinů Arduino. Aby se minimalizoval počet tranzistorů, rozhodl jsem se využít vytrvalosti vidění a multiplexovat bargraf. Napsal jsem malou knihovnu pro Adafruit LED sloupcové grafy, aby to udělal, a poslal ji do GitHub. Používám pouze jednu barvu, ale knihovnu lze snadno rozšířit tak, aby zvládla obě barvy sloupcového grafu.

Digi's XBee Tyto hlasovací stanice by byly rozloženy po celém místě a potřebovaly způsob, jak si promluvit s centrálním serverem. Měla jsem spoustu zkušeností s moduly XBee od Digi a vždy jsem chtěla použít XBee Internet Gateway (XIG) v projektu. XIG žije na Digi ConnectPort X a funguje jako brána mezi sítí XBee a webovými servery (XIG může také hovořit s cloudem IDigi). Natáhl jsem se k Robovi Faludimu, autorovi Building Wireless Sensor Networks, a zařídil mi půjčit si moduly ConnectPort X2 Industrial a čtyři moduly XBee Pro. Díky, Robe (a Digi)! Líbí se mi XIG tolik, že jsem si koupil ConnectPort X2 Commercial (méně RAM než průmyslový, ale funguje to dobře pro mě).

Node.js Pokud si přeji, aby XBees mluvil se sítí, je lepší mít k dispozici server, se kterým by bylo možné hovořit. Obvykle se dostávám za PHP nebo Perl za takové věci, ale rozhodl jsem se, že jsem o Node.js slyšel dost (přijetí Beagle Bone mě to opravdu zajímalo), že se do toho raději podívám. Fungovalo to skvěle. Trvalo mi déle, než jsem to napsal v PHP (nebo některém z mých obvyklých jazyků), než abych se naučil Node.js a implementoval jej. Jakmile jsem si hlavu kolem asynchronní šílenství, mohl bych přidat cokoliv, co se mi přihodilo v několika minutách (OK, takže některé funkce potřebovaly více minut než jiné).

Nejtěžší součástí každé jednotky bylo připojení Arduino Mega ke všem pinům na tlačítkách a LED displejech. Rozhodl jsem se, že vezmu Adafruit perma-proto chléb, pájím nějaké dlouhé mužské špendlíky a tvaruji je tak, aby se zapojily do dvojité řady záhlaví na Arduino Mega. Byl to jakýsi provizorní Arduino Mega ocasní štít, ale funguje to. Navlékl jsem každý pramen páskového kabelu do díry na prkénko a nahoru, než jsem ho pájel dolů, což mi dodalo dost odlehčení.

Mám zpracovanou dokumentaci ve formě úložiště GitHub, které obsahuje kód Arduino. Je to velmi jednoduchý systém: když se Arduino spustí, odešle adresu URL přes sériový port, ke kterému je XBee připojena (budete chtít upravit serveru řetězec ve zdroji Arduino) a XIG předá tuto zprávu serveru a odešle odpověď zpět do Arduina přes síť XBee. Server je server Node.js, který zpracovává požadavky z Arduina: stiskněte tlačítko a je zaregistrováno hlasování. Při každém startu (a po každém stisknutí tlačítka), Arduino dostane aktuální hlasování od serveru uzlu. Arduino tak nemusí vůbec ukládat žádný stav! K dispozici je také primitivní uživatelské rozhraní (/ pomlčka na serveru), které umožňuje zobrazit hlasy a manipulovat s nimi nebo je v případě potřeby resetovat. index.js seznam obsahuje všechny obslužné rutiny a odpovídající kód obsluhy je v requestHandlers.js.

Flick set: WineShade pro Strata GitHub repo: bjepson / WineShade

Podíl

Zanechat Komentář