Warning: Constant WP_PLUGIN_URL already defined in /home/.sites/338/site1783/web/blog/wp-content/plugins/ios-icons-for-wordpress/ios-icons.php on line 31 Juni | 2013 | blog.nitsch.me

Die Forderungs-Pyramide – Teil 2

techik : hardware : techik : microcontroller
Donnerstag, 27. Juni 2013

Wie versprochen hier der zweite Teil über das Forderungs-Pyramiden Projekt. Diesmal möchte ich etwas näher auf die Hardware eingehen, aus der das Eingabepanel für die Steuerung des Rapsberry Pi besteht.
Den Kern bildet ein Arduino Micro, ein Mikrocontroller Board basierend auf Atmels ATMega32U4.
Es bietet 20 I/O Pins, 32kByte Speicher und 2,5 kByte SRAM, 1 KByte EEPROM, sowie einen Micro-USB-Anschluss, der eine direkte serielle Kommunikation mit einem verbundenen Computer ermöglicht.
Die Stromversorgung kann entweder über den Micro-USB-Anschluss erfolgen oder über ein externes Netzteil. In diesem Fall wähle ich die Versorgung via USB durch den Raspberry Pi, an dem das Micro-Board angeschlossen wird, und der das Board mit 5 V versorgt. Sehr praktisch ist in diesem Zusammenhang auch der 3.3 V Ausgang des Arduino Micro, bereitgestellt über einen internen Spannungsregler des Boards. Er ermöglicht mir ohne Verwendung weiterer Komponenten (Spannungsregler) den Anschluss des RFID Breakout Boards, welches mit 3.3 V versorgt werden möchte. Einzig ein Levelshifter (Pegelwandler) wird notwendig. Dazu aber mehr in Teil 3.

Die Interaktion mit dem Panel erfolgt über ein numerisches 3×4 Keypad. Diese werden als Matrix Keypads ausgeführt. Das hat den Vorteil, dass man nur Zeilen und Spalten Pins benötigt, anstelle für jede Taste einen Pin. Man benötigt also nur 7 Pins für das Matrix Keypad, im Gegensatz zu 12 Pins, wenn jede Taste gesondert verdrahten wäre.
Wenn man kein Datenblatt zu dem Keypad hat, ist ein wenig Herumprobieren notwendig. Mit dem Durchgangsprüfer des Multimeters testet man die verschiedenen Kontaktkombinationen durch, während man die Tasten drückt und notiert sich, welche Taste welche Kontakte verbunden hat. Dadurch erhält man Aufschluss darüber, welche Kontakte für die Reihen und Spalten zuständig sind.

Schema eines Matrix Keypad sowie ein rudimentärer Arduino Sketch um gedrückte Tasten via Serial auszugeben

Schema eines Matrix Keypad sowie ein rudimentärer Arduino Sketch um gedrückte Tasten via Serial auszugeben

Zu Beginn werden alle Pins, die an den Zeilen hängen, als Eingang mit Pullup Widerstand konfiguriert. Dies sorgt dafür, dass die Eingänge einen definierten Zustand haben. Es liegen +5V an und beim Auslesen würde man HIGH zurück bekommen. Die Pins für die Spalten werden zunächst ebenfalls als Eingang mit Pullup definiert. Nun wird in Reihenfolge jeweils ein  Spalten-Pin kurz als Ausgang und auf LOW geschaltet und überprüft, ob einer der Zeilen-Pins beim Auslesen LOW zurück gibt. Aus der Information welche Spalte man gerade als Ausgang auf LOW gesetzt hat und der Zeile des Eingangs-Pins, der LOW zurück liefert, weiß man, welche der 12 Tasten gerade gedrückt ist.
Natürlich müsste man sich auch noch um das Entprellen der Tasten kümmern, eine kleine State Machine (Endlicher Automat) bauen um besser mit den wechselnden Zuständen der Tasten zurecht zu kommen, etc…
Wenn man so eine Abfrage von Matrix Keypads noch nie gebaut hat ist das sicherlich eine interessante Erfahrung und ein Spaß, aber Gott sei Dank gibt es im Arduino Playground eine Library die all diese Dinge bereits erledigt.

In Teil 3 geht es dann um das LCD Display und das RFID Break Out Board.

 

 

 

Warning: Attempt to read property "comment_content" on null in /home/.sites/338/site1783/web/blog/wp-includes/comment-template.php on line 1024
Kommentare deaktiviert für Die Forderungs-Pyramide – Teil 2

Die Forderungs-Pyramide – Teil 1

darts : techik : hardware : techik : microcontroller
Dienstag, 25. Juni 2013

Nach längerer Abstinenz bedingt durch einigen Freizeitstress (Go-Live der Seite des Österreichischen Darts Verband, Nova Rock, Geburtstagsfeiern und Feste, etc…) hier nun wieder ein etwas längerer Eintrag über ein Thema, das mir in den letzten Wochen untergekommen ist.
Es geht um die elektronische Unterstützung einer Forderungs-Pyramide für den Darts Verein An Sporran, basierend auf einem Raspberry Pi und einem Eingabepanel mit Tastenfeld und RFID Reader, das über ein Arduino Micro gesteuert wird. Im ersten Teil möchte ich ein wenig über die Hintergründe und Überlegungen schreiben, die zum aktuellen Aufbau und der Komponentenauswahl geführt haben.

Prolog

Forderungs-PyramideIn dem Darts Verein in dem ich Mitglied bin und regelmäßig Zeit verbringe, gibt es eine Forderungs-Pyramide, die aufgrund des bisherigen Regelwerks und mangelndem Interesse der Mitglieder leider seit langer Zeit nicht mehr “bespielt” wurde.
Das Regelwerk sah vor, dass man jemanden über sich fordern kann, diese Forderung kann, muss aber nicht angenommen werden und wenn man das Spiel gewonnen hat, wurde einfach Platz getauscht. Dabei kam es nur zu punktuellen Veränderungen in der Reihung der Mitglieder und es war überhaupt keine Bewegung im Ranking vorhanden.
Nun hat sich der Vorstand dazu entschlossen das Regelwerk der Pyramide zu überarbeiten und hat dazu – Wer errät es? Genau! – eine Arbeitsgruppe bestehend aus 4 Vereinsmitglieder nominiert diese Aufgabe zu übernehmen. ;)
Da ich nun zu den eher Langsameren gehöre, die sich zu spät ducken wenn Arbeit verteilt wird, hatte ich das Vergnügen dieser Arbeitsgruppe anzugehören.
Das Regelwerk wurde radikal überarbeitet und soll für deutlich mehr Bewegung in der Pyramide sorgen. Bei gewonnen Forderungen wird nicht mehr einfach nur Platz getauscht, nein, man reiht sich, so wie es eigentlich gehört, vor dem geforderten Spieler ein und alle nachfolgenden Spieler rücken um einen Platz hinunter. Auch sollen inaktive Spieler nach einem Zeitraum von zwei Monaten automatisch hinter allen aktiven Spielern angereiht werden, etc…
Ein relativ aufwendiges Regelwerk wenn es darum geht die Foto-Steine, die die Spieler auf der Pyramide repräsentieren, umzuhängen. Relativ schnell kam mir die Idee, den Prozess elektronisch zu unterstützen. Nur dies hat so seine Tücken, sollte das System doch robust sein und auch von weniger technikaffinen Spielern benutzt werden können.

 

Versuch und Irrtum

Am Anfang stand die Idee einen Raspberry Pi einzusetzen, diesen mit einem entsprechend großen Bildschirm versehen und in geschützter Lage gut einsehbar zu positionieren. Unser Klublokal ist ein Pub, das auch von Nichtmitgliedern frequentiert wird, daher sollte es unmöglich gemacht werden das System ohne entsprechende Berechtigung zu bedienen.
Am besten sollte die Bedienung berührungslos geschehen, als mögliche Eingabeinstrumente kamen mir SMS oder eMail in den Sinn. Auch eine Smartphone App wäre eine Möglichkeit, nur müsste man hier sowohl Android als auch iOS unterstützen. Besitzer herkömmlicher Telefone hätten aber immernoch ein Problem.

Dieser erste gedankliche Entwurf gefiel mir nach längerer Überlegung immer weniger, wie sollen Bedien-Fehler via SMS verhindert werden, der Aufwand zur Administration der Telefonnummern welche Befehle an das System senden dürfen, etc…

Als nächstes kam mir der Gedanke einfach die Spielerfotos auf der bestehenden Pyramide (siehe Foto oben) durch touch-empfindliche LCD-Displays in der selben Größe zu ersetzten, welche die Bilder der Spieler auf den entsprechenden Positionen darstellen. Man tippt auf sein eigenes Foto, tippt auf den Gegner und die Forderung ist im System hinterlegt. Dazu bräuchte man dann noch ein numerisches Tastenfeld um das Ergebnis zu erfassen, und wie von Zauberhand würden die Spieler nach erfolgter Forderung entsprechend neu gereiht werden.  Was für eine geniale Idee… bis auf: Die Sicherheit des Systems wäre durch das Schloss vor der Vitrine gegeben, so wie es jetzt schon vorhanden ist. Die bestehende Regelung funktioniert zwar nicht perfekt aber meistens lässt sich der Schlüssel auffinden. Viel schwerer aber wiegen die Kosten. Selbst wenn man die Displays direkt beim Chinesen bestellt, wäre der Betrag doch zu hoch für den Verein. Aber das Konzept bleibt in der Schublade, vielleicht findet sich ja mal ein Sponsor dafür. ;)

Einzig der Einsatz eines Tastenfeldes aus der vorangegangenen Idee erschien brauchbar, es kostet nicht viel, ist halbwegs robust und jeder kann damit umgehen. Man könnte sich mittels eines Pin anmelden um danach einzugeben wen man gerne fordern möchte (Nummer des Gegners im aktuellen Ranking). Allerdings widersprach der Pin einer weiteren Forderung, die ich mir für das System gestellt habe, nämlich einen möglichst geringen administrativen Aufwand. Bei ca. 50 Mitglieder werden so einige regelmäßig ihren Pin vergessen. Keine gute Idee. Auch könnte so ein Pin ausgespäht werden und dann damit Schindluder betrieben werden. Und nein, ich bin nicht übermäßig paranoid.

Und nur den Zugang zum Tastenfeld physisch einzuschränken, indem man es in der Glasvitrine anbringt, in der jetzt die Fotos in Pyramiden-Form hängen, bedeutet wieder, dass der Schlüssel zu der Vitrine zugänglich sein muss, ein Problem dass auch bei dem Konzept mit der LCD-Display Pyramide bestanden hätte.

RFID Karte und Schlüsselanhänger

RFID Karte und Schlüsselanhänger

Die Lösung für das Authentifizierungs-dilemma bot sich im Einsatz von RFID Karten bzw. Schlüsselanhängern. Diese sind relativ günstig zu bekommen, robust, einfach zu handhaben und können jederzeit mitgeführt werden. Einfach die Karte oder den Schlüsselanhänger an das Lesefeld halten und über das Tastenfeld die Forderung oder das Ergebnis einer Forderung eingeben. Einfacher ginge es nur noch mit implantierten RFID Chips. ;)
Die Entscheidung ob Karten oder Schlüsselanhänger benutzt werden muss noch getroffen werden. Karten könnte man bedrucken, Schlüsselanhänger könnten mit dem Vereins Logo versehen werden und wären sicher auch nicht schlecht.

 

Ein brauchbarer Kompromiss

Aus allen vorangegangenen Überlegungen ist ein, so wie ich denke, brauchbarer Kompromiss herausgekommen, der in Sachen Robustheit und Einfachheit den Anforderungen an so ein System im “öffentlichen Raum” gewachsen sein sollte.

Das Herz des Systems bildet ein Raspberry Pi. Dieser kann einfach via HDMI an einen beliebigen Monitor/Fernseher angeschlossen werden und bietet Full HD Auflösung zur Darstellung der Pyramide bzw. Rangliste. Die Software dafür wird in Python entwickelt, für die einfache Funktionalität ist das vollkommen ausreichend. Weiters können neben der Rangliste auch noch Termine und Ankündigungen des Vereins darüber angezeigt werden.

Verbunden wird der Raspberry Pi via WLAN USB Dongle mit dem Internet und ist so in der Lage, die aktuelle Rangliste auch mit der Homepage des Darts Vereins abzugleichen. Ebenso sollen neue Spieler über die Benutzerverwaltung der Homepage erstellt werden und automatisch auf das Ranglistensystem übertragen werden können.

Breadboard Aufbau

Breadboard Aufbau

Das Tastaturfeld und der RFID Reader werden in einem extra Gehäuse zusammen mit einem Arduino Micro und einem einfachen LCD-Display verbaut und mittels USB mit dem Raspberry Pi verbunden. Im Moment existiert nur ein auf einem Breadboard aufgebauter Prototyp der als Entwicklungsplattform herhalten muss.
Wird ein autorisierter RFID Chip erkannt wird das Tastenfeld freigeschaltet und am LCD-Display erscheint ein Menü mit möglichen Aktionen, wie zum Beispiel eine Forderung eingeben oder das Ergebnis der Forderung bekannt machen. Die Eingaben werden an den Raspberry Pi übertragen und dieser aktualisiert die Pyramiden-Rangliste entsprechend.
Nachdem bei einer Forderung auch ein Euro an die Vereinskasse zu entrichten ist, welcher als Guthaben auf das Nenngeld des jährlich stattfindenden großen Turniers der Vereins wieder rückerstattet wird, wäre es eventuell auch eine Überlegung wert, diese Transaktionen ebenfalls über RFID abzuhandeln. Zum Beispiel könnte ich mir beim Kassier 10 € Guthaben auf mein “Vereinskonto” buchen lassen, und davon gleich beim Eingeben der Forderung den notwendigen Euro wieder abziehen lassen. Dies wäre aber erst in einer späteren Phase sinnvoll, wenn sich das Forderungssystem bewährt hat und auch häufig genutzt wird.

Als RFID Reader nutze ich das PN532 NFC/RFID controller breakout board von Adafruit, eine brauchbare, fertige Lösung mit Libraries für Arduino und eingebauter Antenne. Das Board kann über SPI, I2C oder UART angesprochen werden.
Das Tastaturfeld und das 4×20 LCD Display stammen von Conrad, wobei ich das LCD Display eventuell noch gegen eines mit LED Beleuchtung austauschen möchte.

In meinem nächsten Blogeintrag werde ich ein wenig mehr über Aufbau und Ansteuerung der Hardware erzählen.

Warning: Attempt to read property "comment_content" on null in /home/.sites/338/site1783/web/blog/wp-includes/comment-template.php on line 1024