Jeffrey Cross
Jeffrey Cross

VinoShade: Hipster Stack-Powered Glasovanje Gizmo za O'Reilly's Strata konferenci

Na konferenci O'Reilly Strata, ki je potekala v Santa Clari konec februarja 2012, so me prosili, da naredim nekaj. Potrebovali smo nekaj naprav za zajem glasov udeležencev, ki so sodelovali v Data Crushu Coco Krumme: Where Wine and Data Srečati:

Ta nov dogodek v Strati bo gostil degustacije za udeležence, katerih povratne informacije bodo zbrane in analizirane za ekstrapolacijo vedenjskih trendov in dejavnikov, ki vplivajo na njihove odzive.

Na prireditvi smo imeli več postaj z različnimi vrstami vina. To je bil vaš osnovni test okusa, kjer so bile blagovne znamke prikrite, in arhitekt eksperimenta (Coco) je uporabil različne metode za vplivanje na odzive. Ko so udeleženci popili vino, jim je bilo naročeno, naj nadaljujejo z glasovalno postajo WineShade in pritisnejo gumb, katerega etiketa je ustrezala vinu, ki so ga pravkar popili. Ko je eksperiment potekal, bi se glasovi prikazovali na osrednjem strežniku.

Odločil sem se, da je najboljši način, da naredim ta sistem, da v projekt vstavimo veliko novih tehnologij: MakerBot, XBee, Arduino, Node.js. Verjamem, da je Alasdair Allan to poimenoval hipster. Mislim, da je bil Alex Howard tisti, ki ga je poimenoval WineShade. Toda med vinom in spajkanjem je moj spomin sumljiv!

MakerBot Če bom naredil nekaj fizičnega, sem vedel, da bi lahko moj MakerBot Thing-O-Matic olajšal moje življenje. Najprej sem mislil, da bom z orodjem MakerBot natisnil nekaj, kar bi držalo gumbe in indikatorje na mestu, vendar sem se odločila, da bom za to uporabila nekaj pene. Za vsako postajo sem se odločil, da uporabljam senčila za svetilke, zato sem potreboval nekaj, da bi ga zapreti. Torej sem naredil majhen stolp, da bi šel na vrh vsakega. Končno sem šla z nečim manjšim od tistega, kar vidite tukaj.

Arduino Mega Vedel sem, da bom potreboval veliko I / O, saj bi vsaka postaja imela tri bargrame in tri gumbe (čeprav smo uporabili le po dva). Nisem želel v to vključiti preveč komponent, ker bi jih moral zgraditi, zato sem se odločil voziti bargrafe neposredno iz zatičnikov Arduino. Da bi zmanjšali število tranzistorjev, sem se odločil izkoristiti vztrajnost vida in multipleksirati bargraf. Za to sem napisal majhno knjižnico za LED grafične tabele Adafruit in jo objavil na GitHubu. Uporabljam samo eno barvo, vendar jo je mogoče zlahka razširiti, da bi lahko upravljala barve obeh stolpcev.

Digi's XBee Te glasovalne postaje bi bile razporejene po vsem mestu in potrebovale so način za pogovor z osrednjim strežnikom. Z Digi-jevimi moduli XBee sem imel veliko izkušenj in vedno sem hotel uporabljati projekt XBee Internet Gateway (XIG). XIG živi na Digi ConnectPort X in deluje kot prehod med omrežjem XBee in spletnimi strežniki (XIG se lahko pogovarja tudi z oblakom IDigi). Obiskal sem Roba Faludija, avtorja gradnje brezžičnih omrežij senzorjev, in mi je naročil, da mi izposodi ConnectPort X2 Industrial in štiri module XBee Pro. Hvala, Rob (in Digi)! Všeč mi je bilo XIG toliko, da sem kupil ConnectPort X2 Commercial (manj RAM-a kot Industrial, vendar deluje dobro zame).

Node.js Če bom imel XBees, ki bo govoril z omrežjem, bo bolje imeti strežnik za pogovor. Za tovrstne stvari ponavadi najdem PHP ali Perl, vendar sem se odločil, da sem dovolj slišal o tem, da me je Node.js (sprejetje Beagle Bonea resnično zanimal), da ga bolje preučim. Odlično je delovalo. Daljše bi mi bilo potrebno, da bi to napisal v PHP (ali katerem koli od mojih običajnih jezikov), kot sem ga naučil Node.js in ga izvajal. Ko sem se oklepal asinhronega norosti, sem lahko v nekaj minutah dodal katerokoli funkcijo, ki mi je bila všeč (OK, zato so nekatere funkcije potrebovale več minut kot druge).

Najtežji del gradnje vsake enote je povezoval Arduino Mega z vsemi zatiči na gumbih in LED zaslonih. Odločil sem se, da vzamem plošče Adafruit perma-proto, nekaj dolgih moških zatikov spajam z njimi in jih oblikujem, da se priključijo v dvojno vrsto glav na Arduino Mega. Bila je nekakšen improviziran Arduino Mega repni ščit, vendar deluje. Vsak del vrvnega kabla sem vtaknil v luknjo v mizo in jo spustil, preden sem jo spustil, kar mi je prineslo precej nenaklonjenosti.

V teku je neka dokumentacija v obliki skladišča GitHub, ki vključuje kodo Arduino. To je precej preprost sistem: ko se Arduino zažene, pošlje URL preko serijskih vrat, s katerimi je povezan XBee (želite spremeniti strežnik v viru Arduino), XIG pa to posreduje strežniku in pošlje odgovor Arduinu preko XBee omrežja. Strežnik je strežnik Node.js, ki obravnava zahteve Arduino: pritisnite gumb in glasovanje je registrirano. Pri vsakem zagonu (in po vsakem pritisku na tipko) dobi Arduino trenutno število glasov od strežnika Node. Tako Arduino sploh ni treba shraniti nobenega stanja! Obstaja tudi primitivni uporabniški vmesnik (/ dash na strežniku), ki omogoča ogled glasov in manipulacijo z njimi ali njihovo ponastavitev, če je to potrebno. The index.js Datoteka vsebuje seznam vseh rokovnikov in ustrezna koda upravljalnika requestHandlers.js.

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

Delež

Pustite Komentar