Elektronischer Zauberwuerfel

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Der "Elektronische Zauberwürfel" ist die elektronische Variante des aus den 80er-Jahren bekannten Rubik's Magic Zauberwürfels. Es entsteht zunächst eine Studie/Prototyp, die zeigen soll,  ob die Spielidee des mechanischen Zauberwürfels auf eine elektronische Variante übertragbar ist und durch zusätzliche Features sinnvoll ergänzt werden kann.

Rubiks Zauberwürfel




Idee und Motivation

Die gängigen Rubiks Zauberwürfel haben 3x3x3 Steine. Neben dem Rubiks Revenge (4x4x4) und dem Rubiks Professor (5x5x5) gibt es auch Zauberwürfel bis 7x7x7 käuflich zu erwerben. Die virtuellen Würfel (PC-Software) lassen sich nicht in die Hand nehmen und auf natürliche Weise begreifen und lösen. Daher dachte ich zunächst einen 8x8x8 Würfel zu bauen, der ähnlich wie ein mechanischer Zauberwürfel lösbar sein sollte (In die Hand nehmen, drehen und die Farben suchen...). Nach kurzer Überlegung, wie viele Lampen und Taster ich dazu brauchen würde, habe ich die Idee gaaanz schnell aufgegeben und mich auf einen 3x3x3er konzentriert. (8x8x8: 512Felder zu je 6LEDs -> 3000LEDs)

Nachtrag: 8x8x6(Seiten)zu je 6 LEDs sind "nur" 2304LEDs!

Der Reiz den mechanischen Zauberwürfel überhaupt lösen zu können, verfliegt nach ein paar Tagen und es stellt sich die Frage: "Wie schnell kann ich den Zauberwürfel lösen?". Aus dem anfänglichen neugierigen Spiel wird eine technische Sportart, die auf folgende Punkte Wert legt:

  • zeiteffizientes und/oder zugeffizientes Lösungsverfahren (Lösen mit möglichst wenigen Drehungen)
  • definiertes Verdrehen vor dem eigentlichen Lösungsvorgang
  • Zeitmessung des Lösungsvorgangs
  • Protokollierung des Lernfortschritts (Lösungszeiten aufzeichnen und auswerten)

Der Elektronische Zauberwürfel soll diese Dinge vereinfachen.


Features

Folgende Funktionen sollen umgesetzt werden:

  • Auto-Scramble (Verdrehen des Zauberwürfels auf Knopfdruck)
  • Automatische Zeitmessung (Competition Mode)
    • Die LEDs des verdrehten Würfels werden erst nach Tastendruck freigegeben. Damit beginnt die Einprägungsphase.
    • Nach Ablauf der Einprägungsphase (typisch 15s) beginnt die eigentliche Lösungszeit zu laufen. Dies kann vorgezogen werden, indem schon vor Ablauf der Einprägungsphase eine Taste gedrückt wird.
  • Abspeichern der erzielten Zeiten zur Auswertung am PC
  • mechanisches Drehen entfällt. Dadurch soll sich die Lösungszeit verringern lassen, da keine "Verklemmer" die Zeit beeinflussen. (Muss noch ausprobiert werden, ob nicht gerade das dann letztendlich den Reiz ausmacht)
  • Tutorialfunktion zum Erlernen von Zugfolgen; schnelles Rücksetzen auf abgespeicherte Ausgangspositionen (Rückdrehen oder langwieriges Wiederherstellen der Position entfällt)
  • Lösungsvorschläge; Würfel macht Vorschlag, wie er aus aktueller Situation gelöst werden kann (das dürfte die anspruchvollste Aufgabe sein)


Mechanik

Beim elektronischen Zauberwürfel gibt es keine beweglichen Teile. Jede der sechs Seiten des Würfels besteht aus einem feststehenden 3x3-Feld aus LEDs. An allen Kanten sind Taster, die die gedachten beweglichen Teile in der gewünschten Drehrichtung weiterdrehen, d.h. die angezeigten Felder ändern ihre Farben. Übertragen auf einen mechanischen Würfel, würde sich diese Ebene bei einem Tastendruck dann um 90° in die gedrückte Richtung drehen.


Die folgenden Bilder zeigen den bereits gefrästen, aber noch nicht verleimten Holzrahmen.

In der Mitte jeder Seite ist das 3x3-LED-Feld. Jedes Feld besteht aus 6 farbigen EinzelLEDs, von denen immer nur eine leuchtet.
Neben jeder Spalte und Zeile sitzen Taster. Pro Seite werden somit 12 Taster verbaut.

geplante Würfeloberseite
Damit die Außenkante des Würfels höher ist als die verwendeten Taster (Schurter LSH SMD-Taster; Reichelt: TASTER 9315; Bauhöhe 5mm; Taster sollen nicht überstehen), müssen die Platinen 8mm tief liegen. -> Außenprofiltiefe der Kante: 8mm. Die Platinen sind mit einem umlaufenden Rand von 6mm entworfen. Damit ergibt sich die gewählte Profilform der Kantenteile.



Holzrahmen
An einem Holzrahmen werden die Seitenplatinen befestigt. Kantenlänge des Holzwürfels: 10cm (möglicherweise etwas zu groß?!). Auf diesem Foto fehlen noch die Ausfräsungen der langen Kantenteile, damit die Platine (hier: links vorne) plan aufliegt und keine Aussparungen braucht)
Einzelteile des Holzrahmens
Der Holzrahmen besteht aus zwei verschiedenen Profilteilen:
  • 4x Kantenteil -lang- (98mm)
  • 8x Kantenteil -kurz- (70mm)
gefräste Kantenteile
Die Profile haben die Kantenmaße: 20x20mm.
Profilschnittbogen
Um mir die Sache vor dem Fräsen besser vorstellen zu können, habe ich mir die Kantenteile aus Papier gebastelt. :-)
Profilquerschnitt
Fräszeichnung


Elektronik

Konzept mit dimmbaren RGB-LEDs (verworfen)

Zunächst habe ich versucht die Anzahl der LEDs gering zu halten, und für jedes Feld eine RGB-TrueColor-LED vorgesehen. Der Vorteil dabei ist, es ist nur eine LED zu bestücken und es müssen nur 3 Ausgangskanäle (statt 6) verwendet werden - aber diese müssen dann auch dimmbar sein. Und da fing das Problem an...

Kurze Überschlagsrechnung für 162 dimmbare Kanäle (= 6 Seiten x 9 Felder x 3 LEDs) über 8Bit-SPI-Schieberegister (andere Ansteuermöglichkeit sehe ich nicht):

PWM-Konzept zur Ermittlung des zu versendenden Bytes aus der Tabelle der Helligkeitswerte
  • 162 Kanäle verteilt auf 6 Platinen (nur "ganze" Schieberegister pro Platine) -> 27Kanäle pro Würfelseite/Platine -> 4 Schieberegister pro Seite -> Summe: 24 Schieberegister für den gesamten Würfel (wären theoretisch dann sogar 192 dimmbare Kanäle)
  • damit die LEDs nicht flimmern sollten 200Hz Wiederholrate gewählt werden (= 5ms Periodendauer).
  • um vernünftige Farben mischen zu können, müssen diese mit 10% Helligkeitsauflösung (lineare, zeitliche Auflösung der Periode; Wert 10% experimentell ermittelt) ansteuerbar sein.
  • somit muss jede LED alle 500µs aktualisiert werden (5ms/10Steps=500µs). Bei 24 in Reihe geschalteten Schieberegistern, bleibt somit 20.8µs pro Schieberegister Zeit. (das entspricht also auch der Zeit pro rauszuschickendem Byte).
  • -> SPI-Baudrate: 500µs/24Byte -> 2.6µs/Bit -> 384kBit/s (das wäre noch problemlos machbar)

Ergebnis: D.h. es bleibt dem System genau 20µs, um zu berechnen, welches Byte als nächstes per SPI zu verschicken ist. In dieser Zeit müssen die Helligkeitswerte von 8LEDs in eine binäre Information umgesetzt werden (z. B. LED0: 80%; LED1: 100%...). Die hierfür entwickelte Testroutine (Lookuptable, zur Erhöhung der Ausgabegeschwindigkeit...) benögte dafür 45µs auf dem Zielsystem (HCS12C32@50MHz) und ist damit um den Faktor 2.25 zu langsam. Nebenbei sollte ja noch andere Dinge erledigt werden, wie z. B. Züge berechnen usw. Damit ist das Konzept erst mal auf Eis gelegt.


Konzept mit sechs Einzel-LEDs pro Feld

Nachdem das DimmKonzept aus Timinggründen nicht umsetzbar war, plante ich die Umsetzung von 6 Einzel-LEDs pro Feld. Jede Seite hat 9x6 EinzelLEDs -> pro Würfel sind das dann 324 zu verbauende LEDs, die über Schieberegister angesteuert werden und statisch leuchten sollen.

Elektrische Features:

  • statische Ansteuerung der LEDs (kein Dimmen); LED Typ: Osram SmartLED 0603, da ausreichende Helligkeit bei kleinem Strom (1..5mA)
  • Verwendung von 7 handelsüblichen 8Bit-Schieberegistern HC595 pro Seite (keine separate Treiberstufen oder spezielle LED-Treiberbausteine notwendig); der HC595 erlaubt an seinem EnableEingang durch eine PWM-Ansteuerung auch das Dimmen der angeschlossenen LEDs - allerdings alle auf einmal, so dass hiermit die Gesamthelligkeit des Würfels verringert werden kann.
  • die 72 Taster werden ebenfalls über SPI-Schieberegister eingelesen (zeitgleich mit der Ausgabe der LED-Daten); HC165
  • Piezopiepser zum Erzeugen von Hinweistönen
  • es soll nur 1 Layout für alle 6 Seiten geben
  • Kabelverbindung zwischen den 6 Seiten über Verbindung zur "Vorgängerseite" und "Nachfolgerseite". Damit ergibt sich eine Kette über die 6 Seiten.
  • Stromversorgung über Kabel; Anbindung von Akkus (über Step-up/-down-Konverter) bereits über Lötpads vorgesehen.
  • Datenanbindung an PC über RS232-Schnittstelle (Zeitmessung; Darstellung auf PC)
  • Eeprom zum Abspeichern der erzielten Zeiten
  • ausgesuchter Prozessor: HCS12C32 @50MHz, da Gehäuse mit LQFP48 relativ klein ist (verglichen mit anderen HCS12-Derivaten) und hierfür bereits eine Entwicklungsumgebung und ein Referenzdesign vorlag; Die Realisierung ist natürlich ebenso mit anderen Controllern möglich.


Schaltplan/Layout

Schaltplan
Layout (top)
Layout (bottom)


Technische Daten

Prozessor: Freescale HCS12C32 (50MHz); 5V; 32k Flash (12k benutzt); 2k RAM (600Bytes benutzt)
Schieberegister: 42x 74HC595 zur LED-Ansteuerung; 12x 74HC165 zum Einlesen der Taster
LEDs: Gesamt: 324 Stück (54Stück von jeder Farbe: weiß, blau, rot, orange, grün, gelb); Gehäuse: 0603
Taster: 72 Stück (12 auf jeder Seite)
Gesamtstromaufnahme: 50mA (LEDs auf 1% gedimmt)... 320mA (LEDs auf 100% gedimmt) bei 5V




Fertige Hardware

Fotos der Elektronik

Platine: LED-Seite
Jede Seite des Würfels besteht aus einer dieser Platinen. Die Außenseite ist mit Tastern und LEDs bestückt...
Platine: Prozessor-Seite
... auf der Innenseite sitzt die Elektronik. Nur eine der sechs Platinen ist mit einem eigenen Prozessor ausgestattet - alle anderen tragen nur die Schieberegister.
Gesamtansicht
So sieht der Würfel aus, wenn er zusammengebaut ist.
Gesamtansicht



Ausblick/Verbesserungsideen

Statt der Verwendung von RGB-LEDs könnten auch 6 Einzel-LEDs verbaut werden, die allerdings nicht gedimmt werden, sondern mit verschiedenen zuschaltbaren Vorwiderständen angesteuert werden. Vorteil: LED in einem Gehäuse; kein "Versatz" bei unterschiedlichen Farben; zu prüfen, ob RGB-LED auch ohne Streuscheibe verwendet werden kann; sind Farben noch als solche erkennbar oder nur die 3 LED-Grundfarben?
Als Tasteralternative könnten eventuell auch Sensortasten in Frage kommen?! QT1106 (Datenblatt) (3,55€ bei Farnell); evtl. zwischen den LEDs angeordnet...


Mikrocontroller-Software/Firmware

Die Software besteht aus den Modulen/Teilen für:

  • RS232-Kommunikation (zum PC)
  • SPI-Kommunikation (zu Tastern und LEDs)
  • Menü- und Ausgabefunktionen des Würfels (Set/Restore waypoint; History; Mischen; Prüfen ob Würfel gelöst ist; Animation beim Drehen; ShowCube)
  • Funktionen zum Drehen des Würfels (L, R, U, D, F, B); "L" bedeutet z. B., dass die linke Seite des Würfels im Uhrzeigersinn gedreht werden soll; 
    • Welche Steine werden durch die Drehbewegung an welche Position gebracht? Um den Überblick zu behalten, helfen die unten aufgeführten Einteilungen/Nummerierungen der Steine/Seiten/Stickers.
Anordnung der Felder (oben, vorne, rechts); (unten, hinten, links)
EZW Cube AufteilungFelder.png


Zusammengehalten wird die Software von einem Scheduler, der einen 10ms-Task und einen 100ms-Task zyklisch bedient. Der 100ms-Task wird als 500ms-Task benutzt (nur jeden 5.Durchgang ausführen), um folgende Aufgaben abwechselnd auszuführen:

  • aktuelle Konstellation (wie ist der Würfel aktuell angeordnet; alle Stickerfarben) zum PC senden
  • Zustand aller Taster zum PC senden
  • Im CompetitionMode die aktuell laufende Lösungszeit an PC senden (Zeitmessung findet ja im Würfel selbst statt).

Der 10ms-Task erledigt folgende Aufgaben:

  • Einlesen und Entprellen der Taster
  • "Umordnen" des Würfels in Folge der erkannten Tastendrücke (das erfordert relativ viel Aufwand, um die ganzen Sticker auf die neue Position zu "kleben"; kann durch Verwendung von Const-Arrays und generischen Funktionen sicher noch deutlich optimiert werden)
  • Menübehandlung (Brightness +/-; StartCompetition; Scramble; AnimationMode on/off; Undo/Redo; Set/Restore Waypoint; ResetCube)
  • Auswerten der vom PC empfangenen Kommandos (Grundhelligkeit; vom PC ausgelöste Drehbewegung...)
  • Animation der Drehbewegung/Drehrichtungsanzeige (abschaltbar; LEDs nacheinander einschalten, um dem Benutzer optisch die Drehrichtung anzuzeigen); hierzu ist hinterlegt, wie und wann jede LED für jede mögliche Bewegung geschaltet werden muss.
  • Ausgabe der SPI-Daten zum Schalten der LEDs

Download der Sourcen Sourcen Rev.111




PC-Software

Die PC-Software dient nur zur Kontrolle und Simulation des elektronischen Würfels. Es können Drehbewegungen an den realen Würfel gesendet werden, die dieser dann ausführt und seine aktualisierten Aufkleberfarben zurückschickt. Zudem zeigt die PC-Software die Lösungszeit an.

Screenshot PC-Software



Autosolver

Als zusätzliches Feature war geplant eine Tutoriumsfunktion in die Hardware einzubauen. Nachdem ich mich etwas intensiver mit Konzept/Implementierung beschäftigt hatte, wurde mir schnell klar, dass das aus Ressourcengründen nicht autark in der Würfelelektronik abgehandelt werden kann (Laufzeit und/oder ROM/RAM-Bedarf). Darum beschäftige ich mich derzeit mit der Implementierung eines Autosolving-Algorithmus im PC, der aus jeder Situation heraus, den Zug vorschlägt, der einen Schritt in Richtung gelöster Würfel führt.

Es gibt Lösungsalgorithmen, die versuchen mit möglichst wenig Zügen den Würfel zu lösen. Es ist inzwischen bewiesen, dass jede Würfelpermutation in 20 Zügen gelöst werden kann. Das ist aber alles sehr theoretisch und die vorgeschlagenen Züge sind vom Menschen unmöglich nachzuvollziehen. (Zunächst kommen einem die ersten 12..15 Züge vollkommen willkürlich vor, danach "fallen" dann alle Steine innerhalb weniger Züge in ihre richtige Lage).

Um auch einen praktischen Nutzen aus dem Autosolver zu ziehen, habe ich mich entschieden die "Spiegelmethode" (erstmalig im Spiegel 1981 veröffentlicht) als Tutorium zu implementieren. Beschreibung der Methoden auf Mathematische Basteleien und Kantenkreuz. Oder für diejenigen, die sich das lieber als Youtube-Video reinziehen: Teil1, Teil2, Teil3.

Der Vorteil dieser Methode ist, dass es viele Zwischenstationen gibt, die der Reihe nach zu erreichen sind, und die nur ein paar wenige Züge auseinander liegen. Dabei sind intuitive Züge (die jeder mehr oder weniger intuitiv durchführen kann, ohne genau zu wissen, was er tut) mit "vorgefertigten" Zugfolgen zu kombinieren. Die vorgefertigten Zugfolgen sollen ja hiermit eingeübt werden. Für einen Autosolver stellen die, für Menschen intuitiven Züge, natürlich ein Problem dar. Irgendwie müssen diese in einen Algorithmus gepackt werden. Der einfachste Algorithmus hierfür ist "God's algorithm", der stur alle Möglichkeiten durchprobiert. Bei 1019 verschiedenen Permutationen (beim 3x3x3 Würfel) ist dies natürlich in endlicher Rechenzeit nicht möglich. Aber wenn nur 4..6 Züge in die Zukunft gerechnet werden soll, so kann das in <1s errechnet werden (Werte meiner Implementierung). Und das reicht dann auch meist aus, um zur nächsten Zwischenstation zu kommen und hierfür Zugvorschläge zu machen.
Um die Zugfolgen dann mechanisch/motorisch einzuüben, wird ein Wegpunkt gesetzt, von dem aus dann die Folge geübt werden kann. Auf Knopfdruck springt dann der Würfel wieder in die abgespeicherte Stellung zurück. Mit dem mechanischen Zauberwürfel ist das "geringfügig" aufwendiger.


Ausblick/Verbesserungsideen

Zusätzlich zur "Spiegel-Methode" könnte man auch ein Blind-Folding-Tutorium einbauen. Blind-folding kann ich nämlich selbst (noch?) nicht.
Beim Blind-Folding wird der Würfel verdreht, anschliessend darf der Würfel eine beliebig lange Zeit betrachtet werden und muss dann blind gelöst werden. Während des Lösungsvorganges darf der Würfel nicht mehr betrachtet werden (Augenbinde). Die Lösezeit ist die Summe aus Einprägephase und anschliessender Drehzeit. Beschreibung eines Blind-folding-Verfahrens auf CubeFreak. (Beispiel-Video)



Probleme bei Planung und Durchführung

Folgende Probleme sind bei der Planung/Erstellung aufgetreten:

  • mechanische Trägerkonstruktion für Würfel; wie halten die Platinen zusammen?; kann auf ein Gehäuse evtl. verzichtet werden? Wie wird vermieden, dass die überstehenden Taster beim Hinlegen des Würfels alle gedrückt werden? Wie kann der Würfel angefasst werden, ohne dass die Taster versehentlich betätigt werden?
  • Liegen die Kanten- und Eck-LEDs nahe genug beisammen, so dass man diese auch als solche erkennt?
  • Platzbedarf für Bauteile ist sehr hoch
    • Bauteile dürfen nur auf der Unterseite platziert werden
    • Platine muss umlaufenden Rand von 6mm zur Befestigung haben, in dem keine Bauteile (Unterseite) platziert werden dürfen
  • Stromversorgungs- und Kommunikationskabel stören beim Lösen... muss in der nächsten Musterphase durch Akkus und Funk (Zigbee/XBee ersetzt werden)
  • das räumliche Vorstellungsvermögen wird gut geschult... besonders bei der Umrechnung der PC-internen Datendarstellung (Würfel ist beschrieben durch Position und Orientierung der Steine) in die Aufkleberdarstellung (Farben der einzelnen LEDs).


Fazit

Der größte Nachteil an diesem Prototypen ist die schwierige Erkennung wo die Farben liegen, da diese zu weit im "Innern" entfernt von den Kanten liegen und somit nicht (ohne längere Übungszeit) auf einen Blick erkannt werden können. Beim mechanischen Zauberwürfel grenzen die farbigen Aufkleber direkt aneinander. Hier ist ein Abstand von 35mm bis zur Würfelkante.
Beim "normalen" Speedcubing werden Zugfolgen trainiert, die dann nur noch mechanisch/motorisch abgerufen werden, ohne bewusst darüber nachzudenken. Gleiches konnte ich nach einiger Zeit auch in Bezug auf das Drücken der Tastenfolgen beobachten - das geschieht ebenso "natürlich" wie beim mechanischen Würfel - hätte ich so nicht unbedingt erwartet.
Die Idee mit dem elektronischen Zauberwürfel habe ich zuvor im Internet noch nicht gesehen... naja, also wohl gute Idee gehabt, dachte ich mir. Bis ich zwei Monate nach Fertigstellung des Projekts, dieses Video fand (Fentix) - aber das spielt auch in einer ganz anderen Liga. :-)

Der elektronische Zauberwürfel in Aktion: {{#ev:youtube|G6SVoK5OG90}} http://www.youtube.com/watch?v=G6SVoK5OG90

Interessante Details zum Zauberwürfel/Speedcubing/Links:

  • Anzahl der verschiedenen Stellungen beim 3x3x3-Würfel: 4.3x1019; beim 4x4x4-Würfel: 1043; beim 5x5x5-Würfel: 1078.
  • Der Weltrekord im Lösen des 3x3 Würfels liegt bei knapp unter 9s! (Video)
  • Optimal AutoSolver (Webseite von H.Kociemba)
  • virtueller Würfel zum Selbstausprobieren (Win-Software)


Kontakt: André;  and_ref (at) canathome.de