Make 4/2023
S. 38
Make
Projekt

Galagino

Galaga und Co. haben auch nach 40 Jahren nichts von ihrem Charme verloren. Wir erwecken diese und andere Arcade-Klassiker aus den 80er Jahren des vorigen Jahrhunderts auf einem ESP32 und im stilechten Mini-Gehäuse noch einmal zum Leben.

von Dr. Till Harbaum

Mini-Retro-Arcades gibt es viele. Unsere Variante auf ESP32-Basis besticht durch alltagstaugliche Robustheit, unkomplizierte Bedienung, geringen Stromverbrauch und macht als unterhaltsames Schreibtisch-Gadget mit Pac-Man, Galaga und Donkey Kong eine gute Figur.

Mini-Arcades als Bastelprojekte basieren in der Regel auf dem Raspberry Pi. Mich haben dabei immer die langen Bootzeiten, der Zwang zum sauberen Herunterfahren und der hohe Stromverbrauch des Raspis etwas gestört. Inzwischen sind auch die enormen Preise für diesen Einplatinen-Computer eher abschreckend. Stattdessen einen ESP32 zu nutzen, sollte diese Probleme lösen. Neben einem handelsüblichen ESP32-Bastelboard werden lediglich ein ILI9341-basiertes Display, sieben Taster, ein Audioverstärker und ein Lautsprecher benötigt. Optional ist ein Abschnitt eines gängigen LED-Streifens (WS2812b mit 144 LED/m) für die Marquee-Beleuchtung. Bild 1 zeigt den Schaltplan.

Bild 1: Da es in Fritzing kein Symbol für ein 2,8-Zoll-Display gibt, wurde hier ein anderes benutzt, das aber dieselben Anschlüsse hat.
Bild 1: Da es in Fritzing kein Symbol für ein 2,8-Zoll-Display gibt, wurde hier ein anderes benutzt, das aber dieselben Anschlüsse hat.

Im nationalen Versandhandel kosten diese Teile ca. 30 Euro, in Fernost gut die Hälfte. Für einen ersten Testaufbau empfehlen wir, alle Komponenten zunächst auf einem Steckbrett zu montieren, wie in Bild 1 dargestellt.

Software

Zur Entstehung der Firmware gibt es einen eigenen Online-Artikel auf heise+. Die Software wird mithilfe der Arduino-IDE auf den ESP32 übertragen. Zuvor muss sie allerdings erst vervollständigt werden, denn der auf dem Galagino-Repositiory auf Github liegende Sketch enthält aus rechtlichen Gründen nicht die eigentlichen Spiele und den Prozessor-Emulator. Z80-CPU-Emulator und Spiele-ROMs sind jedoch über die Webseite des Autors separat herunterzuladen.

Einige Python-Skripte im romconv-Verzeichnis des Repositories konvertieren die diversen Code-, Grafik- und Audio-ROMs in C-Quellcode, der sich mit dem Sketch übersetzen lässt. Auch die Z80-Emulation benötigt ein paar Patches, die per Python-Skript erledigt werden. Alle nötigen Schritte sind im README des romconv-Verzeichnisses zusammengefasst. Falls es dabei unter Windows zu Problemen kommt, deinstallieren Sie das Python, das eventuell zusammen mit Windows installiert wurde, und installieren Sie von python.org die aktuelle Version.

Sind alle nötigen Dateien erzeugt (bei voller Ausstattung sind es über 70 Dateien im Sketch-Verzeichnis), dann bleibt lediglich, den Sketch mit Hilfe der Arduino-IDE auf den ESP32 zu übertragen. Eventuell bemängelt die IDE noch die fehlende Bibliothek FASTLED. Die kann über Sketch/Bibliothek einbinden/Bibliotheken verwalten gesucht, gefunden und installiert werden.

Nach dem Hochladen auf den ESP32 sollte das Galaga-Auswahlmenü auf dem Display erscheinen und die Softwareinstallation ist abgeschlossen. Falls die Anzeige nun auf dem Kopf steht (oben auf dem Display ist beim Einbau ins Gehäuse die Seite mit den Kontaktpins, auf dem Breadboard ist es umgekehrt), kann das im Sketch in der Datei config.h durch TFT_VFLIP korrigiert werden. Hier kann man auch diverse weitere Anpassungen vornehmen, wenn man zum Beispiel von der vorgegebenen Pin-Zuordnung abweichen möchte.

Die Bedienung der Spiele erfordert keine weitere Erklärung, sie entspricht ihren Vorbildern. Neu ist lediglich, dass ein langer Druck auf den Münzeinwurf-Taster ins Hauptmenü zurückkehrt. Im Hauptmenü verbleibt das Spiel etwa 20 Sekunden, falls man keine Taste drückt, bevor automatisch ein zufällig ausgewähltes Demo-Spiel startet. Wie das Vorbild weckt unser kleiner Automat so im Attract-Modus die Aufmerksamkeit potenzieller Spieler.

Für den Alltagseinsatz und die nötige Retro-Ästhetik verlangt die Hardware aber nach einem stabilen Gehäuse und auch der zunächst lose zusammengesteckten Elektronik mangelt es auf Dauer doch an der für den temperamentvollen Spielbetrieb notwendigen Robustheit. Wir haben uns für eine Kombination aus Laser-Cut und 3D-Druck entschieden. Die laser-geschnittenen Teile aus 3mm-Sperrholz eignen sich gut für die wesentlichen Teile des Gehäuses. Auf 3D-Druck greifen wir für das transparente Marquee-Element oben vorne am Automatengehäuse zurück sowie für die Mechanik des Joysticks bzw. für die Befestigung des Münzeinwurf-Tasters. Falls Sie keinen Lasercutter verfügbar haben, gibt es als Download auch Dateien für ein komplett 3D-gedrucktes Behältnis.

Joystick

Als erstes wird die Joystick-Einheit (im Repository unter galagino/hardware/controlboard) zusammengebaut. Sie besteht aus vier 3D-Druckteilen, sowie den vier 4,3mm-hohen 6 x 6mm-Tastern für die vier Richtungen und den zwei 9mm-Tastern für Start und Feuer. Die Taster werden zunächst auf das Oberteil gesteckt und dort mit Kabeln versehen. Die Beinchen der Richtungstaster müssen etwas gekürzt oder umgebogen werden. Alle sechs Taster verbindet die gemeinsame Masseverbindung und von jedem Taster geht ein eigenes Steuersignal aus, sodass am Ende sieben Adern aus der Joystick-Einheit ragen (Bild 2).

Bild 2: Beim Löten muss man aufpassen, dass das 3D-Druckteil nicht durch die Wärme beschädigt wird.
Bild 2: Beim Löten muss man aufpassen, dass das 3D-Druckteil nicht durch die Wärme beschädigt wird.

Der eigentliche Joystick besteht im Kern aus einer 16mm langen M2-Schraube, die zunächst durch das Unterteil gesteckt und dann mit dem Aktuator und einer M2-Unterlegscheibe versehen wird. Nachdem beide Teile zusammensteckt wurden, sollte der Joystick beweglich sein und alle vier Richtungstaster hörbar klicken. Die gesamte Einheit wird schließlich mit sechs M2 x 12-Schrauben und passenden Muttern zusammengeschraubt. Zum Abschluss wird der Joystick-Knopf mit einer weiteren Unterlegscheibe aufgeschraubt (Bild 3).

Bild 3: Falls der Joystick nach der Montage schwergängig ist, hilft es, die lange Schraube etwas nach unten herauszudrehen. Ihr Kopf sollte etwas Platz zur Unterseite des Gehäuses haben.
Bild 3: Falls der Joystick nach der Montage schwergängig ist, hilft es, die lange Schraube etwas nach unten herauszudrehen. Ihr Kopf sollte etwas Platz zur Unterseite des Gehäuses haben.

Der Joystick sollte zunächst auch mit dem Steckbrettaufbau verbunden und auf zuverlässige Funktion getestet werden. Durch Nachjustieren z.B. der Aktuatorposition auf der Schraube kann die präzise Funktion justiert werden. Wurden keine selbsthemmenden Muttern verwendet, dann empfiehlt sich jeweils ein Tropfen Kleber, um deren Losrütteln im Betrieb zu verhindern. Mehr Details zum Zusammenbau finden sich auf Github.

Marquee

Den oberen Vorderteil des Gehäuses bildet das sogenannte Marquee, ein bei Arcade-Automaten üblicherweise beleuchteter Teil, der das Spielelogo darstellt. Auch bei unserem Mini-Arcade kann dieser Teil beleuchtet werden. Statt des Holzteiles wird dann ein aus transparentem Filament gedrucktes 3D-Teil eingesetzt und direkt dahinter der LED-Streifen positioniert (Bild 4). Die Firmware steuert die sieben Leuchtdioden im Spielverlauf dynamisch an und erzeugt zum Spielgeschehen passende Lichteffekte.

Bild 4: Später sitzt die Beleuchtung des Marquees so im Gehäuse. Aber zuvor nicht die Verdrahtung vergessen, da kommt man sonst schlecht dran.
Bild 4: Später sitzt die Beleuchtung des Marquees so im Gehäuse. Aber zuvor nicht die Verdrahtung vergessen, da kommt man sonst schlecht dran.

Löten

Funktionieren auch Joystick und LEDs am Steckbrett, dann ist es Zeit, die gesamte Elektronik dauerhaft zu verlöten. Der Zusammenbau orientiert sich an der Anordnung der Teile im Gehäuse. Die Joystick-Einheit befindet sich im Gerät direkt neben dem ESP32 und wird deswegen als erstes verlötet. Es folgt das Display, bei dem beachtet werden muss, dass seine Anschlüsse im Gehäuse oben liegen und entsprechend weit vom ESP32 entfernt sind, sodass die Kabel ausreichend lang sein müssen. Zu lang sollten Sie aber auch nicht sein, sonst erschweren Sie später den Zusammenbau. Der Münzeinwurf-Taster liegt wiederum in der Nähe des ESP32 und benötigt nur ein kurzes Kabel.

Sind ESP32, Display, Münz-Taster und Joystick-Einheit verlötet, muss die Hardware nach wie vor funktionieren. Die Kontrollen nach jedem Schritt sind sinnvoll, weil sich später im winzigen Gehäuse Korrekturen kaum noch durchführen lassen.

Der kleine Verstärker wird mit doppelseitigem Klebeband hinten auf das Gehäuse des Lautsprechers geklebt und mit dem Lautsprecher verdrahtet. Der Anschluss des Verstärkers und ggf. des kurzen LED-Streifens für den Marquee vervollständigt die Hardware.

Zusammenbau des Gehäuses

Das Gehäuse besteht aus 15 Teilen, die per Lasercut aus 3mm Sperrholz geschnitten wurden (Bild 5).

Bild 5: Die 15 Teile des Gehäuses. Falls Sie kein beleuchtetes Marquee möchten, gibt es für das transparente 3D-Druck-Teil (3. Reihe, 2. von unten) auch ein entsprechendes Holzteil.
Bild 5: Die 15 Teile des Gehäuses. Falls Sie kein beleuchtetes Marquee möchten, gibt es für das transparente 3D-Druck-Teil (3. Reihe, 2. von unten) auch ein entsprechendes Holzteil.

Der Zusammenbau beginnt mit dem Befestigen der Elektronikteile an den entsprechenden Sperrholzteilen. Der LED-Streifen wird auf sein Trägerstück geklebt, das Display auf seinen oberen Träger gesteckt. Der Münzeinwurf und der Lautsprecher werden mit ihren Holzteilen verschraubt und das ESP32-Board auf sein Trägerstück geschoben (Bild 6).

Bild 6: Falls die Elektronikteile sich gegen ihre Holzhalter wehren, können kleine(!) Tropfen Heißkleber helfen.
Bild 6: Falls die Elektronikteile sich gegen ihre Holzhalter wehren, können kleine(!) Tropfen Heißkleber helfen.

Der finale Zusammenbau geschieht liegend auf der Seite. Alle Holzteile sowie die Joystick-Einheit und das Marquee-Element werden in das liegende Seitenteil gesteckt. Zur Orientierung dient die Skizze in Bild 7. Boden und Deckel werden mit je einer Schraube und Mutter am ersten Seitenteil befestigt. Das hintere Teil mit dem Lautsprecher kann zunächst weggelassen werden, so bleiben die internen Teile erreichbar und können für das Aufsetzen der zweiten Gehäuseseite in die richtige Position gerückt werden.

Bild 7: Hier können Sie die zum Teil recht ähnlichen Gehäuseteile identifizieren und ihrem Einbauort zuordnen.
Bild 7: Hier können Sie die zum Teil recht ähnlichen Gehäuseteile identifizieren und ihrem Einbauort zuordnen.

Ist die zweite Seite montiert, dann kann vorsichtig der hintere Teil mit dem Lautsprecher eingesetzt werden (Bild 8). Auch die zweite Seite wird nun mit zwei Schrauben an Boden und Deckel befestigt.

Bild 8: Vor dem Aufsetzen des zweiten Seitenteils sollte alles so im Gehäuse verstaut sein.
Bild 8: Vor dem Aufsetzen des zweiten Seitenteils sollte alles so im Gehäuse verstaut sein.

Der Galagino-Automat ist fertig. Da der ESP32 nicht wie ein Raspberry Pi unter Linux läuft, sondern nur ein marginales FreeRTOS-Betriebssystem nutzt, bootet er ungleich schneller als ein Pi und zwischen Anlegen der Versorgungsspannung und dem Erscheinen des Bootmenüs vergeht nur eine knappe Sekunde. Auch beim Ausschalten ist nichts zu beachten. Der ESP32 nimmt ein spontanes Ein- und Ausschalten nicht übel. Der geringe Stromverbrauch erlaubt mehrstündigen Betrieb auch an einer kleinen USB-Powerbank. Wer mag, installiert einen kleinen Akku und einen billigen USB-Ladecontroller, wie er üblicherweise in Powerbanks verwendet wird. Selbst mit einem kleinen 550mA-Akku, wie man ihn in manchen E-Zigaretten findet, lässt sich unser Automat über drei Stunden drahtlos betreiben (Bild 9). Mehr dazu gibt es online (siehe Kurzinfo-Link).

Bild 9: Akku, Lade- und Spannungsregler haben Platz im unteren Teil des Gehäuses
Bild 9: Akku, Lade- und Spannungsregler haben Platz im unteren Teil des Gehäuses

Der Code-Speicher des ESP32 ist bisher nur zu einem Bruchteil genutzt und weitere Automaten mit Bildschirm im aufrechten Portrait-Format der frühen 80er wie zum Beispiel Frogger lassen sich problemlos integrieren. Oder wie wäre es mit Centipede? Den dafür nötigen Trackball per 3D-Druck umzusetzen ist sicher eine interessante Herausforderung. —hgb