Roulette-Spiel (gekürzte Fassung)
Beim Aufräumen "Ausmisten" fand ich eines Tages eine Bastelei aus der Ausbildungszeit - ein kreisförmiges Lauflicht mit 30 LEDs. Leider hatte ich damals einen blöden Fehler in der Schaltung (vier 4017 Johnson-Zähler mit etwas Logik): eine der LEDs konnte nie leuchten. Da ich recht schnell der Meinung war, die Schaltung "in hübsch" zu korrigieren lohne sich nicht fiel genauso schnell die Entscheidung zum Wegwerfen. Vielleicht hätte ich es wenigstens fotografieren sollen. Das Ding kam aber nicht im Elektroschrott an; statt dessen baute kurzerhand einer meiner Auszubildenden einen Taster zwischen den Taktgeber und das "Zählergrab" und gab dem Objekt den Namen "lazy Roulette" - was MICH wiederum zu dem im Folgenden beschriebenen Roulette-Spiel inspirierte.
Danke F#####! ← wegen Datenschutz
Mit (recht groben) Eckdaten im Kopf machte ich mich auf die Suche nach einem passenden Microcontroller aus der AVR Familie. Ursprünglich sollte das Ganze so simpel wie möglich werden, um es als Einstiegsprojekt für die Ausbildung nutzen zu können. Das Leiterplattenlayout sollte einfach und vor Allem einseitig werden, der uC sollte ohne zusätzliche Hardware (z.B. Schieberegister) auskommen und ein "schönes" Pinout haben, d.h. die IO-Pins nicht so blöd "verstreut" - daher fiel die Wahl auf den ATtiny828. Recht schnell war ein Bibliotheks-Symbol und -Device in EAGLE angelegt, danach die recht überschaubare Schaltung "zusammengeklickt".
Das Platinenlayout ließ sich dank des geschickt ausgewählten ATtiny828 ziemlich schnell erstellen. Erst beim Programmieren entstand die Idee zur Nutzung des ADC (normalerweise lasse ich entgegen der Empfehlung von Atmel bzw. Microchip den AVCC Pin weg), so dass in dem einseitigen Layout nun doch eine Drahtbrücke nötig ist (und ein dünnes Kabel zum Piezo-Piepser). Die Platine ist so ausgelegt, dass sie entweder rund sein kann und den Taster zum Kugel "einwerfen" in der Mitte hat oder quadratisch, dann kann der Taster (und ein "Hauptschalter") an den Rand.
Nachdem die Platine bestückt war (viel ist es ja nicht), ging's ans Programmieren; ausnahmsweise mal ganz ohne Hilfe von Thorsten. Mit dem Lauflicht (Kugel-rollt-Simulation) war ich recht schnell, die Nachbildung des Ausrollens brauchte aber ziemlich lange. Das Resultat erinnert zwar leider eher an ein Glücksrad als an ein Roulette, aber das ist meinen lausigen Programmierkenntnissen geschuldet. Das Zweite, was gefühlt ewig dauerte, war der Zufall - denn ich wollte es "so zufällig wie möglich" haben und berechnete Pseuso-Zufallszahlen sind irgendwie doch nicht so richtig zufällig. Im Endeffekt "füttere" (seed) ich die random-Funktion mehrfach mit einem Wert aus dem ADC, der die Spannung (bzw. das Rauschen) an einem offenen Pin misst. Zusätzlich läuft die Kugel zunächst unsichtbar während man den Taster drückt und wird erst mit Loslassen desselben sichtbar. Nach einigen Runden setzt dann das Bremsen ein bis die Kugel(nachbildung) irgendwann stehen bleibt; falls der Piezo bestückt ist wird das durch ein Piepsen signalisiert. Jetzt ist für ca. 15 Sekunden das erneute "Einwerfen der Kugel" blockiert, damit das Schummeln erschwert wird.
Eigentlich sollte das Ganze ja nur eine Art Nachfolger für das damals missglückte Lauflicht sein; aber eben richtig (also ohne Fehler) funktionieren und mit deutlich weniger Bauteilen auskommen - deswegen auch die ursprünglich quadratisch geplante Leiterplatte, auf die der Zahlenkranz direkt hätte aufgeklebt werden sollen. Schon während der Layout-Erstellung hatte ich aber die Idee, die Platine (dann rund) in ein schickes Gehäuse zu bauen.
Das Gehäuse brauchte wegen des großen Aufwandes aufgrund recht spezieller Teile schon recht lange: Unterteil "aus dem Vollen" gedreht, Oberplatte von einem Kollegen mit "seiner" CNC-Fräsmaschine herstellen lassen (vielen Dank nochmal!), Aufkleber für den Kessel detailverliebt mit Inkscape gezeichnet und das Drehkreuz (welches gleichzeitig den Start-Taster beherbergt) auch aus Drehteilen gefertigt.
Das Gehäuse bescherte mir ein paar Probleme: erstens fand ich es blöd, beim Spielen ein Kabel auf dem Tisch zu haben und wollte deswegen Akkubetrieb haben, zweitens musste selbiger auch geladen werden und drittens wurde dadurch ein Ein-/Ausschalter nötig. Und natürlich mussten diese neu hinzugekommenen Dinge mit ins Gehäuse passen. Einen passenden LiPo-Akku (3,7V/330mAh) nebst geeigneter Ladeelektronik fand ich preisgünstig auf ebay. Die Geschichte mit dem Schalter gestaltete sich als schwieriger als gedacht, denn ich fand einfach nichts Passendes. Relativ schnell kam der Wunsch, es modernen Geräten (z.B. Smartphone) gleich zu tun: ein Taster. Das dauerte jedoch sehr viel länger als erwartet, denn obwohl es etliche Ideen und sogar dedizierte ICs für sowas gab, wollte (und konnte, weil recht "tricky") ich die eigentliche Roulette-Platine nicht "umbauen", außerdem musste es wegen des knappen Gehäuses auch klein werden. Der erste Versuch scheiterte und danach war mangels Ideen, Lust und Zeit fast ein Jahr lang Pause.
Irgendwann gesellten sich eine neue Idee zur benötigten "Ein/Aus Schaltung", Zeit und Lust gleichzeitig (!) zum Herstellen selbiger sowie der Wunsch, das Ding endlich mal fertig zu bekommen zusammen. Für die neue Schaltung ätzte ich eine kleine Platine, lötete sie zusammen und passte die Firmware im Roulette-Controller an. "Natürlich" funktionierte es erstmal nicht, das war aber nur ein Programmfehler. Nachdem der ausgemerzt war, baute ich alles endgültig zusammen - und stellte es in die Vitrine. Da steht es nun und wird vermutlich (leider!) nie benutzt.
Das aufwändige Gehäuse und den Kram für Akkubetrieb wird sich in der Form niemand nachbauen wollen (falls doch: EMail); aber hier noch die EAGLE-Dateien der Roulette-Platine, Inkscape-Datei für den Kessel und den AVR-GCC Code für den tiny828: [download]