Jeffrey Cross
Jeffrey Cross

WineShade: Hipster Stack-Powered Vizing Gizmo für O'Reillys Strata-Konferenz

Ich wurde gebeten, etwas für die O'Reilly Strata-Konferenz zu machen, die Ende Februar 2012 in Santa Clara stattfand. Wir brauchten ein paar Geräte, um Stimmen von Teilnehmern zu sammeln, die an Coco Krums Data Crush teilgenommen haben: Where Wine and Data Treffen:

Bei dieser neuen Veranstaltung in Strata werden Weinproben für die Teilnehmer veranstaltet, deren Feedbackdaten gesammelt und analysiert werden, um Verhaltenstrends und Einflussfaktoren auf ihre Reaktionen zu extrapolieren.

Bei der Veranstaltung hatten wir mehrere Stationen mit verschiedenen Weinsorten eingerichtet. Es war Ihr grundlegender Geschmackstest, bei dem die Marken verborgen wurden und der Architekt des Experiments (Coco) verschiedene Methoden verwendete, um die Reaktionen zu beeinflussen. Nachdem die Teilnehmer den Wein getrunken hatten, wurden sie angewiesen, zur WineShade-Abstimmungsstation zu gehen und den Knopf zu drücken, dessen Etikett mit dem Wein übereinstimmte, den sie gerade getrunken hatten. Im weiteren Verlauf des Versuchs würden die Stimmen auf einem zentralen Server gezählt.

Ich entschied mich für die beste Methode, dieses System zu entwickeln, indem ich eine Reihe neuer Technologien in das Projekt schaufeln würde: MakerBot, XBee, Arduino, Node.js. Ich glaube, es war Alasdair Allan, der den Hipster-Stack genannt hat. Ich glaube, es war Alex Howard, der es WineShade genannt hat. Aber zwischen Wein und Lötdämpfen ist mein Gedächtnis verdächtig!

MakerBot Wenn ich etwas Körperliches machen möchte, wusste ich, dass mein MakerBot Thing-O-Matic mein Leben erleichtern kann. Zuerst dachte ich, ich würde den MakerBot verwenden, um etwas auszudrucken, um Knöpfe und Indikatoren an Ort und Stelle zu halten, aber ich entschied mich für einen Schaumkern. Ich hatte mich entschlossen, Lampenschirme als Chassis für jede Station zu verwenden, und ich brauchte etwas, um sie abzuschließen. Also habe ich einen kleinen Turm gebaut, um auf jeden einzelnen zu kommen. Irgendwann ging ich mit etwas kleinerem als dem, was Sie hier sehen.

Arduino Mega Ich wusste, ich brauche viel I / O, da jede Station drei Bargraphen und drei Tasten haben würde (obwohl wir nur jeweils zwei verwendet hatten). Ich wollte nicht zu viele Komponenten hinzufügen, da ich sie erst bauen musste, also entschloss ich mich, die Bargraphs direkt von den Arduino-Pins zu entfernen. Um die Anzahl der Transistoren zu minimieren, entschied ich mich, die Persistenz des Sehens zu nutzen und den Bargraph zu multiplexen. Ich habe dazu eine kleine Bibliothek für die Adafruit LED-Balkendiagramme geschrieben und diese bei GitHub veröffentlicht. Ich verwende nur eine Farbe, aber die Bibliothek kann leicht erweitert werden, um beide Farben des Balkendiagramms zu verarbeiten.

XBee von Digi Diese Abstimmungsstationen waren überall verteilt und benötigten eine Möglichkeit, mit einem zentralen Server zu kommunizieren. Ich hatte viel Erfahrung mit den XBee-Modulen von Digi und wollte das XBee Internet Gateway (XIG) schon immer in einem Projekt verwenden. XIG lebt auf einem Digi ConnectPort X und fungiert als Gateway zwischen dem XBee-Netzwerk und Webservern (XIG kann auch mit der IDigi-Cloud kommunizieren). Ich wandte mich an Rob Faludi, Autor von Building Wireless Sensor Networks, und er arrangierte, mir ein ConnectPort X2 Industrial und vier XBee Pro-Module zu leihen. Danke, Rob (und Digi)! Ich mochte XIG so sehr, dass ich einen ConnectPort X2 Commercial gekauft habe (weniger RAM als der Industrial, aber es funktioniert gut für mich).

Node.js Wenn die XBees mit dem Netzwerk kommunizieren sollen, haben sie besser einen Server, mit dem sie sich unterhalten können. Normalerweise greife ich nach PHP oder Perl, aber ich habe genug von Node.js gehört (Beagle Bones Annahme, was mich wirklich interessiert hat), dass ich es genauer untersuchen sollte. Es hat super funktioniert. Ich hätte länger gebraucht, um dies in PHP (oder einer meiner üblichen Sprachen) zu schreiben, als Node.js zu lernen und zu implementieren. Sobald ich mich mit dem asynchronen Wahnsinn auseinandergesetzt hatte, konnte ich innerhalb weniger Minuten alles hinzufügen, was mir einfiel (OK, einige Funktionen benötigten mehr Minuten als andere).

Der schwierigste Teil des Aufbaus jeder Einheit bestand darin, den Arduino Mega mit allen Pins der Tasten und LED-Anzeigen zu verbinden. Ich entschied mich für ein Adafruit Perma-Proto-Steckbrett, löte ein paar lange Stecknadeln und formte sie so, dass sie in die doppelte Reihe von Kopfzeilen des Arduino Mega stecken würden. Es war eine Art provisorischer Arduino Mega-Heckschild, aber es funktioniert. Ich habe jeden Strang des Flachbandkabels in ein Loch des Lochbrettes eingefädelt, bevor ich ihn gelötet habe, was mich ziemlich entlastet hat.

Ich habe eine Dokumentation in Form eines GitHub-Repositorys, das den Arduino-Code enthält. Es ist ein recht einfaches System: Wenn das Arduino hochfährt, sendet es eine URL über den seriellen Port, mit dem die XBee verbunden ist (Sie möchten den Server Zeichenkette in der Arduino-Quelle), und XIG leitet diese an den Server weiter und sendet die Antwort über das XBee-Netzwerk an Arduino zurück. Der Server ist ein Node.js-Server, der die Anforderungen des Arduino bearbeitet: Drücken Sie eine Taste, und eine Abstimmung wird registriert. Bei jedem Start (und nach jedem Tastendruck) erhält der Arduino die aktuelle Stimmenzahl vom Knotenserver. Auf diese Weise muss das Arduino überhaupt keinen Zustand speichern! Es gibt auch eine einfache Benutzeroberfläche (/ dash auf dem Server), mit der Sie die Stimmen anzeigen und bearbeiten oder bei Bedarf zurücksetzen können. Das index.js file listet alle Handler auf und der entsprechende Handlercode ist in requestHandlers.js.

Flick-Set: WineShade für Strata GitHub-Repo: bjepson / WineShade

Aktie

Leave A Comment