Das LichterDrückSpiel – eine Wand voll Led und Schalter

Ich wollte schon länger ein Spiel bauen mit Mikrocontroller und Tastern und Lichtern und Tönen und ….
Das jetzige Spiel hatte ich schon als iOS-App angefangen aber nie fertig bekommen. Als physisches Spiel konnte ich es mir aber gut vorstellen und so fing ich mal an.

Hardware:
Probleme, Probleme, Probleme… Bisher habe ich in meinen Bastelprojekten die Led und Taster immer direkt an den Mikrocontroller angeschlossen. Bei einem anvisierten Ziel von 25 Tastern und 25 Led gehen mir auf so ziemlich allen günstigen Arduino Klonen die Pins aus.
Da in der Arduino Community alles schonmal irgendwer irgendwo zusammengeschustert hat fand ich nach etwas Recherche ein Tutorial über den Aufbau einer Led Matrix mit bis zu 8 x 8 Led mit Hilfe eines MAX 7219. Der Chip nutzt Multiplexing um die Lichter zu befeuern, das spart Strom und die Ansteuerung läuft dank entsprechender Library problemlos.

Bleiben noch die 25 Taster. Auch dafür gibt es Abhilfe in den Arduino Tutorials, die Keypad Library.
Das Tutorial arbeitet zwar mit einer Folientastatur aber anhand des Schaltbildes kann man es leicht auf die eigene Anwendung ummünzen.

Am Anfang stecke ich gerne die Schaltungen auf einem Steckbrett zusammen um zu Testen ob das was ich mir so überlege auch umzusetzen ist. Für den Test der Led Matrix und des Tastenfeldes habe ich auf zwei kleinen Lochrasterplatinen entsprechende Prototypen aufgebaut und auf dem Steckbrett mit dem Arduino verbunden.

Das schwierigste war tatsächlich die Taster mit integrierter Beleuchtung aufzutreiben.
Diese sollten entsprechend groß sein und was aushalten da während des spielens entsprechend draufgedonnert wird.
Nach etwas suchen fand ich in Ebay Taster mit Led die bei Arcade Spielautomaten eingesetzt werden die mit einem Durchmesser von ca. 60mm auch passend groß sind. Der Versand vom anderen Ende der Welt braucht ein paar Wochen aber nachdem die Taster hier waren konnte ich mit der Frontplatte anfangen.

Mit einer Lochsäge und dem Akkuschrauber wurden die Löcher ausgesägt und daneben die beiden Löcher für die Verdrehsicherung der Taster eingebracht.
Nach der Montage der Taster mit der mitgelieferten Mutter ging es ans Verkabeln. Bei der ersten Kabelserie habe ich jeweils die Isolierung auf der gesamten Länge abgezogen und dann an den Kontakten verlötetet. Zu Beginn der zweite Serie wurde mir klar dass das keine gute Idee ist da sich die Kabel kreuzen und durchaus berühren könnten.
Deshalb bin ich dazu übergegangen die Isolierung nur an den Stellen zu trennen wo gelötet wird.
Nachdem die Löterei fertig war wurden die Platinen probeweise angeschlossen und zum Glück war kein Fehler im System.

Die Platte mit den Tastern war nun soweit fertig, jetzt musste ein Gehäuse her. Wie schon bei der Wortuhr habe ich einen Ribba Rahmen von Ikea benutzt. Mit 15€ ist er zwar jetzt nicht sonderlich billig aber er ist stabil und passt vom Maß her genau zur Frontplatte.

Für die Spannungsversorgung benutze ich eine Powerbank. Dafür habe ich ein USB Kabel an den Arduino geklemmt und über eine Bohrung mit einer Gummidurchführung aus dem Gehäuse geführt. Es war auch ein Ein/Aus-Schalter vorgesehen, jedoch streikte die Powerbank wenn ich das System mit diesem Schalter einschalten wollte. Die Powerbank hat einen eigenen Schalter und so wird nun dieser benutzt.
Da der Gehäuseschalter nun schon in der Seitenwand eingebaut ist nutze ich ihn zur Auswahl der Spielmodi.

Auf der zweiten Platine ist auch noch ein Poti und Anschlussklemmen für einen Lautsprecher vorbereitet, so ein Spiel darf ja auch Töne von sich geben.

Software:
Die Steuerung des Spiels erfolgt über einen Arduino Micro und dem MAX 7219.

Der liebe Zufall..
Im Arduino ist nur ein Pseudo-Zufallsgenerator enthalten der nicht wirklich zufällige Zahlen erzeugt. Das ist natürlich für ein Spiel nicht förderlich. Es fing schon damit an das beim Start immer die selbe Led leuchtete und auch das überall beschriebene initialisieren des Zufallsgenerator z.B. mit dem Wert eines unbelegten AD Eingangs ( randomSeed(analogRead(1)); ) brachte auch nicht die gewünschte Varianz. Darum nehme ich zum initailisieren des Generators den Wert der millis()-Funktion (Millisekunden seit Systemstart) und addiere zusätzlich noch einen weiteren Zufallswert.
Beim suchen der nächsten Led wird auch geprüft ob nicht die gleiche Led betroffen wäre.

Ein Problem das ich nicht auf die schnelle lösen konnte war die Ausgabe der Keypad Library welche Taste gedrückt wurde. Die Matrix wird mit einem mehrdimensionalen Array beschrieben (char keys[ROWS][COLS] = ), hier konnte ich aber nicht einfach die Zahlen 1 – 25 verwenden und so mit meiner Zufallsnummer abgleichen. Das bin ich umgangen indem ich den Tasten keine Zahlen sondern Buchstaben zugewiesen und diese auch in ein zweites Array eingefügt habe.
Bei einem Tastendruck kommt vom Keypad der entsprechende Buchstabe und wird mit dem Array Wert verglichen.

Ansonsten werden beim Spielstart einmal alle Led der Reihe nach ein- und wieder ausgeschaltet. So kann man schnell prüfen ob alles funktioniert und es sieht auch noch nett aus.

Spielmodi:
Derzeit gibt es zwei Spielmodi:
Der erste ist reines Led an, entsprechende Taste drücken, nächstes Licht geht an. Das lässt sich auch „gegeneinander“ spielen wenn jedem Spieler z.B. Tastenreihen zugewiesen werden.

Der zweite Modus ist ähnlich dem ersten nur das nach einer vorgegebenen Anzahl richtiger Tastendrücke 9 Taster gleichzeitig aufleuchten und diese ausgedrückt werden müssen. Danach „endet“ das Spiel.

Für die Zukunft könnte man noch ein Display mit dazu nehmen und für die Spiele noch die Zeit ermittelt wer am schnellsten ist.
Zum jetzigen Zeitpunkt freut es mich das es so gut funktioniert und die Kids Spaß daran haben.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.