Würfelspiele habe ich auch schon einige gemacht bisher. Und sie machen immer wieder Spaß. 😀
Deshalb habe ich dieses Thema wieder aufgegriffen.
Als Erweiterung zu den bisherigen Würfeln gibt es dieses Mal eine Bewegungserkennung, um den Würfelvorgang zu starten. Mit einem leichten Kippen fangt dieser an zu würfeln. Außerdem dienen als Anzeige nun RGB-LEDs, um die Animation noch spannender zu gestalten.
Der Würfel eignet sich super als „aktives Dekorationselement“. Er macht sich gut im Flur und wird gerne in die Hand genommen, um zu würfeln.
Hier mal ein Video davon:
Zur Steuerung wird ein Arduino-Nano-Clone verwendet. Als LEDs werden reguläre 5mm-RGB-LEDs mit gemeinsamer Kathode verwendet. Als Bewegungssensor kommt ein MPU6050-Board für wenige € aus China zum Einsatz.
Das Programm ist in PlatformIO und Arduino erstellt.
LED-Würfelnummerierung:
1 5 2 4 6 3 7
Das Programm ist in die einzelnen Funktions-Einheiten gegliedert. Die Pinzuordnung findet über die pindef.h statt.
Das Programm initialisiert den Bewegungssensor (im Energiesparmodus) und den Timer. Dann findet der Würfelvorgang statt. Nachdem dieser abgeschlossen ist geht der Arduino in einen Tiefschlaf-Modus und wacht durch einen Interrupt des Bewegungssensors auf, woraufhin erneut ein Würfelvorgang stattfindet.
Die Ansteuerung der LEDs erfolgt im Timer. Da die LEDs in einer Matrix angeordnet sind, war es notwendig diese im Multiplex-Betrieb anzusteuern. Damit auch mehr Farben dargestellt werden können wurde dieser mit einer 4-Bit-PWM je Farbe kombiniert, damit in einem gewissen Rahmen auch Helligkeiten geändert werden können. Außerdem wird im Interrupt mit der „pinModeFast/pinModeFast“-Funktion gearbeitet, da die regulären Arduino-Funktionen zu langsam sind.
Die Würfel-Zuordnung wird über eine Mapping-Funktion in „dice-decoder.c“ gemacht. Das langsame Auslaufen des Würfels wird mit einer Wartezeit, die dynamisch einer Exponentialfunktion $\mathcal{f}(x) = 1,15^x$ folgt ermöglicht. Der Startwert und die Startfarbe wird mit einer Zufallsfunktion ermittelt. Die verschiedenen Farben werden über einen HSV-Farbraum (und dessen Hue-Wert als Variable) erzeugt.
Da die Schaltung ja ständig am Strom hängt ist natürlich der Stromverbrauch ein wichtiges Kriterium. Sehr wichtig ist es deshalb den Stromverbrauch im Standby-Betrieb möglichst gering zu halten. Mit den beiden AAA-Batterien. Ich habe versucht mit meinem tinycurrent-Messwandler und Oszi/Multimeter den Stromverbrauch im Standby zu ermitteln. Im Mittel bin ich auf ca. 100μA gekommen. Damit sollte die Schaltung rein rechnerisch über ein Jahr durchhalten. Mal schauen, ob das auch nur annähernd stimmt. 😅
Berechnung: $\frac{1200mAh}{0,1mA} = 12000h \ \widehat{=} \ 500d$
Anmerkung: Die Batterien waren nun einmal leer. 140 Tage haben sie gehalten. Das ist halt der Unterschied zwischen Theorie und Praxis. 😅 Wobei man sagen muss, dass in der Berechnung ja auch rein der Leerlauf berücksichtigt wurde. Der Würfel war seither mehrfach täglich (schätzungsweise 5-10x) in Verwendung (durch prominente Platzierung im Gang 😁).