Es gibt Projekte, die entstehen aus einer spontanen Idee, und dann gibt es solche, die sich über Monate hinweg entwickeln. Unser Mini-Arcade-Automat gehört definitiv zur zweiten Kategorie. Alles begann an einem kalten Wintertag, als mein Sohn und ich uns an den Küchentisch setzten, um wieder einmal ein kleines Bastelprojekt zu starten. Damals ahnten wir noch nicht, dass aus einem einfachen Papiermodell irgendwann ein funktionierender Mini-Arcade-Automat werden würde. Doch genau das ist passiert – und in diesem Beitrag möchte ich euch Schritt für Schritt mitnehmen, wie wir dieses Projekt umgesetzt haben.
Die Inspiration: Ein Arcade-Automat aus Papier Die Idee, einen Mini Arcade-Automaten zu bauen, kam uns ganz spontan. Ich habe ja schon vor einigen Jahren einen Tabletop- bzw. Bartop Arcade Automaten gebaut, den mein Sohn immer wieder einmal in Beschlag nimmt und damit spielt. Irgendwann einmal hat er eine ganz kleine „Mini Arcade Machine“ (die man in Fernost für unter 10 Euros kaufen kann) bekommen. Die bereitet aber aufgrund der sehr kleinen Abmessungen und dem Bildschirm von knapp 5 cm nur kurz Vergnügen. Auch die Qualität der fix eingebauten Spiele ist etwas grenzwertig. Als er wieder einmal mit dem kleinen Teil spielte kam die Frage: „Können wir so etwas aus Papier basteln?“, fragte er. Natürlich konnten wir! Also suchten wir uns eine alte Verpackungsschachtel, die von einer Lieferung eines großen Onlineversenders übrig geblieben war, und begannen, die ersten Entwürfe zu zeichnen.
Schritt 1: Skizzen und Planung Mit einem Lineal, einem Bleistift zeichneten wir die Umrisse des Automaten direkt auf die Kartonage. Wir orientierten uns dabei an den Massen des kleinen Arcade-Automaten: ein leicht nach hinten geneigtes Display, ein breiter Sockel und eine Frontplatte mit Platz für Tasten und Hebel. Die Proportionen wurden einfach hochskaliert… Sohnemann musste abmessen und seine in der Schule erwobenen Multiplikationsfähigkeiten praktisch anwenden …
Schritt 2: Ausschneiden und Zusammenkleben Mit einer Schiene und einem Teppichmesser schnitten wir die einzelnen Teile aus. Das war gar nicht so einfach, denn der Karton war dicker, als wir gedacht hatten, und die Kanten sollten möglichst sauber sein. Nachdem alle Teile ausgeschnitten waren, klebten wir sie mit Schmelzkleber zusammen. Der Schmelzkleber war ideal, da er schnell abkühlt und eine stabile Verbindung schafft.
die ausgeschnittenen Kartonteileund so sind sie angeordnetmit Schmelzkleber werden die Teile aneinandergeklebt
Schritt 3: Bemalen und Dekorieren
Der fertige Papierautomat sah schon ganz gut aus, aber er war noch etwas langweilig. Also bemalten er ihn mit seinen Filzstiften en und verpasste ihm ein klassisches Design in Schwarz. Für die Tasten und Hebel bastelten er kleine Knöpfe aus Papier, die er auf die Frontplatte klebte. Das Ergebnis war ein kleiner, aber detailreicher Arcade-Automat aus Papier.
der fertig zusammengeklebte Papier Arcadedas fast fertig bemalte Papiermodell
Die Idee wächst: Vom Papiermodell zum fuktionstüchtigen Automaten Das Papiermodell war ein voller Erfolg, und wir hatten viel Spaß beim Basteln. Doch irgendwann kam mir der Gedanke: Was wäre, wenn wir das Ganze aus Holz bauen und mit echten Tasten, einem Bildschirm und einem kleinen Computer, zum Beispiel einen alten Raspberry PI ausstatten würden? So könnte er einen schönen Arcade Automaten haben und auch tatsächlich darauf spielen. Die schlechteren Tage der Sommerferien boten sich dafür an und so begann die Planung für den Bau eines echten Mini-Arcade-Automaten.
Materialwahl: MDF-Platten und Lasercutter Für den Bau des Automaten entschied ich mich für MDF-Platten mit einer Dicke von 6 mm. MDF ist ein ideales Material für solche Projekte: Es ist stabil, leicht zu bearbeiten und hat eine glatte Oberfläche, die sich gut lackieren lässt. Außerdem ist es relativ günstig, was bei einem Hobbyprojekt natürlich ein großer Vorteil ist.
Schritt 1: Digitalisieren der Skizzen Die Skizzen des Papierautomaten dienten als Vorlage für die Holzkonstruktion. Mit der Software Inkscape zeichnete ich die Entwürfe und passte sie an die Maße der MDF-Platten an. Dabei achtete ich darauf, dass die Proportionen stimmten und die einzelnen Teile später gut zusammenpassen würden. Die endgültigen Maße des Automaten sollten etwa 25 x 30 cm betragen – klein genug, um handlich zu sein, aber groß genug, um ein authentisches Arcade-Gefühl zu vermitteln.
die in den Lasercutter importierten inkscape files
Schritt 2: Zuschnitt mit dem Lasercutter Der nächste Schritt war der Zuschnitt der MDF-Platten. Hier kam ein Lasercutter zum Einsatz, der die Teile mit hoher Präzision ausschneiden konnte. Die Möglichkeit, Nuten in die Platten zu schneiden, war hier besonders praktisch: Diese Nuten ermöglichten es, die Teile später passgenau rechtwinklig zusammenzusetzen und zu verkleben.
der Lasercutter bei der Arbeit
Nachdem alle Teile ausgeschnitten waren, begann der Zusammenbau. Zunächst prüfte ich die Passform der einzelnen Teile. Dank der präzisen Arbeit des Lasercutters passte alles perfekt zusammen. Die Nuten erleichterten den Aufbau enorm, da sie die Platten in der richtigen Position hielten, während der Kleber trocknete.
alles passt zusammenauch das Bedienpanel wird bedienbar sein
Schritt 3: Lackierung Nachdem der „Rohbau“ fertig war, ging es an die Lackierung. Ich entschied mich für einen schwarzen Acryllack, der dem Automaten ein etwas professionelleres Finish verleihen sollte. Die glatte Oberfläche der MDF-Platten war ideal für die Lackierung, und nach zwei Schichten sah der Automat fast aus wie ein echtes Arcade-Gerät in klein.
Das Frontglas, das den LCD-Bildschirm schützt, besteht aus Acrylglas. Um den Rand der Schutzabdeckung gleichmäßig schwarz lackieren zu können, wird die Schutzfolie, die sich auf dem Acrylglas befindet, im Randbereich entfernt. Anschließend wird der freigelegte Randbereich des Acrylglases schwarz lackiert, um eine saubere und gleichmäßige Optik zu erzielen.
Ausschneiden der Schutzfolie des Acrylglases um den Rahmen zu maskieren
Das Frontglas, das den LCD-Bildschirm schützt, besteht aus Acrylglas. Um den Rand der Schutzabdeckung gleichmäßig schwarz lackieren zu können, wird die Schutzfolie, die sich auf dem Acrylglas befindet, im Randbereich entfernt. Anschließend wird der freigelegte Randbereich des Acrylglases schwarz lackiert, um eine saubere und gleichmäßige Optik zu erzielen. So nach und nach nahm das Gehäuse Formen an und es war an der Zeit die technischen Komponenten einzubauen.
der Aufbau nimm langsam Formen an
Das Herzstück des Innenlebens ist ein alter Raspberry PI 3 mit einem Retropie – SD Karten Image. Für die Bedienung und Steuerung entschied ich mich für farbige Drucktaster mit 16mm Durchmesser. Davon finden zehn Stück auf dem Bedienpanel Platz. Auf der linke und der rechten Seite ist je ein Taster platziert. Aus Bequemlichkeit und auch aus Kostengründen bastelte ich keinen eigenen Controller für die Tastenbedienung des Raspberry, sondern nahm einen fertigen USB-HID Controller, der nur ein paar Euro teuer war. Der Bildschirm ist ein 5 Zoll 800×600 Pixel LC-Display und um die PCM Soundausgabe des Raspberry auf einem kleinen Lautsprecher hörbar zu machen, kam ein fertiges „superlowcost“ Class D Verstärkerboard zum Einsatz.
die Innenkanten des Monitorrahmens müssen geschwärzt werden, damit es später keine Reflexionen in der Acrylscheibe gibt
Nachdem nun alle Gehäuseteile fertig lackiert waren und auch alle Komponenten für den Innenausbau vorbereitet waren, begann schlussendlich der Zusammenbau. Da alle Gehäuseteile verklebt sind, aber die Technik natürlich zugänglich bleiben soll, haben wir auf der Rückseite eine Revisionstüre eingeplant…
Tastenfeld mit Farbbestückung nach Juniors Wunschder HID Tasencontroller findet seinen Platzder Bildschirm mit dem Raspberry PI wird eingesetzthier sind alle Kompnenten fertig eingebaut
Jetzt fehlt nur mehr der Revisionsdeckel auf der Rückseite. Um die Abwärme des Raspberry Pi loszuwerden haben wir ein paar Lüftungsschlitze in den Deckel geschnitten. (genauer gesagt der Laser hat geschnitten 🙂 )
Deckel an der Rückseite
Zur Stromversorgung dient ein 5V / 20W Netzteil, das an einer hinten angebrachten Netzteilbuchse angesteckt wird. Es versorgt sämtliche Baugruppen (Raspberry, Audioverstärker und Monitor).
Die verbaute Technik hier nochmal in der Übersicht:
Raspberry Pi 3 mit 32GB SD Karte
5-Zoll-LCD-Bildschirm: Waveshare 5inch 800×480
HID-Controller: USB noname Joystickcontroller (Onlineversand)
Tasten: 16 mm Momentary Push Button (30Stk Set im Onlineversand)
Audioverstärker: DollaTek 3W DC 5V PAM8403 (Onlineversand)
Stromversorgung: 5V/20W-Netzteil
vom Papiermodell zum bespielbaren MiniArcade
Da mir für´s Ende des Blogbeitrags kein vernünftiger Text einfällt, hat die KI für mich nachgedacht und den folgenden Absatz erzeugt:
Nach Wochen harter Arbeit war es endlich soweit: Der Mini-Arcade-Automat war fertig. Mit seinem schwarzen Gehäuse, den farbigen Tasten und dem kleinen Bildschirm sieht er nicht nur aus wie ein echter Arcade-Automat, sondern spielt sich auch so. Mein Sohn war begeistert – und ich auch. Es ist ein Projekt, das uns nicht nur viel Spaß gemacht hat, sondern auch zeigt, wie aus einer einfachen Idee etwas Großartiges entstehen kann.
Fazit: Manchmal braucht es nicht viel, um etwas Besonderes zu schaffen: ein bisschen Karton, ein paar MDF-Platten und eine große Portion Begeisterung. Unser Mini-Arcade-Automat ist der beste Beweis dafür, dass Basteln nicht nur kreativ, sondern auch unglaublich erfüllend sein kann. Wer weiß, vielleicht ist das ja der Anfang einer ganzen Serie von Mini-Projekten? 😊
Nach schon einigen Projekten und Versuchen mit dem Raspberry PI, bin ich immer wieder einmal auf die Problematik mit der schlechten, verrauschten Tonqualität des Raspi-Audioausgangs gestoßen. Der analoge Ton besteht ja nur aus einem einfachen PWM (PulseWidthModulation) Signal, das über ein paar Filtercaps direkt an die Klinkenbuchse des Raspberry geschaltet ist. Für viele Anwendungen reicht das sicherlich, wenn man nur eben einmal ein paar Töne ausgeben will. Soll´s aber Musik sein, oder wie in meinem Fall ein vernünftiger Ton bei der Retro-Gamestation, die mit „retropie und der EmulationStation“ läuft, so reicht die Qualität einfach nicht aus.
Hier sollte man dem Raspberry PI einen richtigen Soundchip, also Soundkarte verpassen. Im Internet wird man schnell fündig und so habe ich mir bei einem Onlineshop um gerade einmal 2,90 Euro eine USB – Soundkarte bestellt. Die Karte, oder besser, der USB Dongle besitzt zwei 3,5mm Klinkenbuchsen. (einen Audio-Ausgang und einen Mikrofon-Eingang)
Die Installation ist schnell durchgeführt. Will man ein bestehendes System umrüsten, so ist einfach der Klinkenstecker der Lautsprecherzuleitung vom Raspberry abzuziehen und in den Audioausgang des Raspberry einzustöpseln. Der USB Stecker kommt in einen freien Port des Raspberry.
Der Hardwareteil ist somit erledigt und es kann mit dem Anpassen der Software begonnen werden. Nach dem Booten der Retropi-Maschine und dem Einloggen in die Konsole kann man überprüfen, welche Geräte am USB-Bus erkannt wurden. Nach der Eingabe von:
pi@retropie:~ $ lsusb
werden alle am USB-Bus angeschlossenen Geräte gelistet:
Bus 001 Device 007: ID 1516:1603 CompUSA Flash Drive
Bus 001 Device 006: ID 03f0:034a Hewlett-Packard
Bus 001 Device 005: ID 16c0:05e1 Van Ooijen Technische Informatica Free shared USB VID/PID pair for CDC devices
Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
In diesem Fall ist der C-Media Electronics, Inc. CM108 Audio Controller unsere USB – Soundkarte. Als nächsten Schritt überprüft man die Reihenfolge (Priorität) der geladenen Soundmodule.
pi@retropie:~ $ cat /proc/asound/modules
Als Ergebnis kommt:
0 snd_bcm2835
1 snd_usb_audio
Das bedeutet die Soundausgabe des BCM2835 ist als erstes gelistet. Wir wollen jedoch alle Tonausgaben über den USB-Ausgang hören. Dazu muss die Datei „alsa-base.conf“ wie folgt angelegt werden. (auf einigen Systemen ist sie bereits vorhanden – hier sind dann nur die Prioritäten anzupassen)
Mit „control+O“ wird gespeichert und mit „control+X“ kann der Editor beendet werden. Jetzt ist das System zu rebooten. Nach dem Neustart kann in der Konsole nochmals mit:
pi@retropie:~ $ cat /proc/asound/modules
die Reihenfolge der Module überprüft werden. Die sollte jetzt so aussehen:
0 snd_usb_audio
1 snd_bcm2835
Jetzt sollten in der Emulationstation wieder Töne zu hören sein. Diesmal aber ohne Rauschen und kristallklar 😀
Ein schon lange in meinem Kopf herumirrender Gedanke war, einmal einen Videospielautomaten zu bauen. Diese Teile haben mich als Kind magisch angezogen, wenn es mit den Eltern in den Sommerurlaub an die Adria ging. Dort gab es und gibt es auch heute noch die Spielhallen. Die Faszination hat aber seit Erscheinen der Heimkonsolen und der Möglichkeit, vor dem heimischen TV-Gerät zu zocken, stark nachgelassen, und die Automaten wurden rar. Auch die einfache Pixelwelt, der 8Bit und 16Bit Spiele ist schon lange verschwunden. Dabei, so finde ich zumindest, haben die alten, einfachen 8Bit Pixelspiele mehr Reiz, als die modernen High-End-Games mit fotorealistischer 3D-Rendergrafik. Vielleicht ist auch aus dem Grund der „Retroboom“ der letzten Zeit entstanden. Nun ja – mein erster Kontakt zu den Videospielautomaten war eben als Kind im Urlaub und dann erstmals am heimischen TV, Ende der siebziger Jahre an einer geliehenen Atari 2600 Konsole. In den letzten Jahren, auch Dank des Internets, habe ich immer wieder mal die Zeit gefunden in Foren und auf Websites zu schmökern und so die Faszination aufrecht zu erhalten. Auch die Vielzahl an Emulatoren (Mame, Vice, etc.) die ganz leicht und schnell auf jedem PC eingerichtet werden können, lässt schnell die alten Gefühle wieder aufkommen.
Nun ja, dieses Jahr habe ich mich überwunden und das Projekt endlich begonnen. Dank Internet und elektronischer Bucht ist es jetzt auch einfach, die benötigten Materialen zu bekommen. Die Basis des Videospielautomaten „Arcade – Station“ soll ein Raspberry Pie sein. Den kleinen Einplatinenrechner gibt es mittlerweile schon in der 3. Generation und der hat auch mächtig Leistung um die alten Homecomputer und Spielekonsolen wie Commodore C64, Amiga, Atari, Nintendo 64 etc. in der Emulation zum Laufen zu bekommen. Als Softwarebasis nutze ich das Projekt retropie , das mittlerweile als DAS Projekt für die Umsetzung von Retrospielekonsolen und -computern bezeichnet wird. RetroPie wird als Image für alle Raspberry Pi Modelle angeboten und ständig weiterentwickelt. Es ist einfach einzurichten und man hat schnell wieder das „feeling“ der guten alten 8 Bit Zeit 🙂
Folgende Dinge benötige ich für den Bau der Retro-Arcade Maschine:
Rasperry Pi als Zentrale Recheneinheit
Ein Interface, das die Microschalter der Joysticks und Tasten in ein USB-HID umsetzt (hier kommt mein Arduino HID Projekt zum Einsatz) es gibt aber auch etliche Controller (XinMo und GPIO Controller etc.)
Tasten und Joysticks für die Bedienkonsole
Ein Gehäuse passend im Stil einer Arcademaschine . (Hier habe ich einen Tischler beauftragt, beschichtete MDF-Platten zu s chneiden und mit der Oberfräse die Kanten zu bearbeiten)
Eine Bemalung des Gehäuses (in meinem Fall schwarzer Mattlack und ein auf Klebefolie gedrucktes Design.)
Adapterkabel für den Anschluss des Monitors an den Raspberry
Lautsprecher und einen Audioverstärker
Eine Hintergrundbeleuchtung für den Ledkasten
Zeit und Geduld, Werkzeug und ein bisschen Geschick
Die folgenden Bilder sollen den Auf- und Zusammenbau der Arcadestation ein wenig dokumentieren:
Die Gehäuseteile sind geliefert und werden erstmal auf Passgenauigkeit und Vollständigkeit überprüft.
Alles passt zusammen.
Das sind die Dekor-Klebefolien
Die Joysticks …
… und die Tasten
Im Garten werden die Teile zum Lackieren vorbereitet. Ja, jetzt vor Beginn der Blütezeit klappt das mit dem Outdoorlackieren noch ganz gut.
Schon bald sind die Teile mit einer matten, schwarzen Lackschicht überzogen.
Mit Klarlack wird dann nochmals übergesprüht.
Jetzt ist der Cutter dran, die Dekorfolien müssen zugeschnitten werden.
auch alle Löcher für Tasten und Joysticks
und natürlich sollen auch die Kanten schön aussehen
nach dem Bekleben mit den Folien wird wieder probiert. Passt perfekt…
Nachdem jetzt alle Teile vorbereitet sind, kann der Zusammenbau beginnen
Tasten einbauen und Microschalter/-taster bestücken
Joystickmodul einbauen und verschrauben
Ansicht von oben (sieht ja schon mal nicht schlecht aus)
Jetzt kann mit der Verkabelung begonnen werden. Es empfiehlt sich, alle Drähte zu beschriften 😉
Nach dem Verkabeln der Tasten wird wieder provisorisch zusammengesteckt und ein erster rein informeller Funktionstest gemacht.
und schon kann mit der Monitorhalterung begonnen werden. Ich habe einen 19″ Monitor mit vier M4 x 20 Schrauben am Brett befestigt. Zwischen Brett und Rückseite des Monitors sind noch 4mm Abstandhalter unterlegt, um die Löcher im Blechkasten des Bildschirmes nicht durch das Bett abzudecken.
So ist der Bildschirm mit dem Brett verschraubt.
Die Monitorhalterung samt Monitor wird jetzt in Position gebracht, die weiteren Montagelöcher gebohrt und dann mit einer Seitenwange verschraubt. Auch das bestückte Bedienpanel sowie das Lautsprecherpanel und die restlichen Gehäuseteile werden mit der Seitenwange verleimt.
Das soll dann so aussehen. Passt alles, dann kann die andere Seitenwange vorbereitet werden. Ist alles gebohrt, wird wieder geleimt und das Gehäuse bekommt seine zweite Seite.
Das Seitenteil liegt perfekt in der Nut. Mit Winkeln wird jetzt alles zusätzlich noch verschraubt.
Jetzt kann der Kasten erst einmal ruhen und der Leim aushärten.
In der Zwischenzeit kann ich eine Montageplatte anfertigen, die den Raspberry und den Controller für die Joysticks tragen soll. Die Platte besteht aus einer 2mm dicken Aluminiumplatte an der ich 20mm lange Sechskant-Abstandhalter schraube. Festgemacht werden die mit M3x10 Senkkopfschrauben.
So sieht die fertige Trägerplatte aus
Sie wird jetzt am Boden des Arcade-Gehäuses angeschraubt
Und hier sind die Platinen auch schon befestigt
Im nächsten Schritt wird die Bildschirmfrontverkleidung, eine 2mm Plexiglasplatte vorbereitet.
Die Ränder der Plexiplatte werde ich von der Rückseite schwarz lackieren. Praktischerweise kann ich die Schutzfolie auch gleich zum Maskieren für die Lackierung verwenden. Mit dem Cutter wird die nicht benötigte Schutzfolie ausgeschnitten und entfernt. Jetzt kann lackiert werden.
Nach dem Lackieren und Entfernen der Schutzfolie habe ich die Ränder mit 9x3mm Unterlegeband (Dichtband) beklebt, das dann auf dem Monitor aufliegen soll und gleichzeitig vor Kratzern in der Plexiplatte und Staub zwischen den Scheiben schützen soll.
Für die seitliche Auflage der Plexischeibe habe ich links und rechts je eine Alukante ans Gehäuse geschraubt.
auch auf die Aluleisten kommt das Dichtband. Jetzt kann die Plexiplatte eingesetzt werden.
Auch innen ist es jetzt ein wenig mehr aufgeräumter. Alle Buttons sind am Controller angeschlossen. Die Innereien eines PC-Speakersets dienen als Audioversorgungseinheit. Ein Led-Streifen soll den „Lichtkasten“ später beleuchten.
Wie der ganze „Automat“ dann im fertigen Zustand aussieht ist im folgenden Video zu sehen:
Die große Welt der kleinen Microcontroller und vor allem der sehr günstigen Microcontroller und deren Vielfältigkeit, hat mich beim folgenden ‚Projektchen‘ wieder motiviert sie zu verwenden. Für die eher weniger outdoorlastigen kalten Wintertage habe ich mir ein Projekt vorgenommen, dass das Thema Retrocomputer betrifft. Zum einen habe geplant, die Website um die Rubrik der alten Computer zu erweitern (zumindest sollen die paar wenigen aus meiner Sammlung vorgestellt und in Betrieb genommen werden…) und zum anderen will ich mir eine Arcade-Station bauen, deren Kern das neue RaspBerry2 Modell ist . Auf dem soll die Emulatorplattform Retropie aus dem gleichnamigen Projekt zu Einsatz kommen. Die ersten Versuche mit den Images aus dem Projekt sehen sehr gut aus. Die alten 8-Bit und 16-Bit Computer laufen in der Emulation ausgezeichnet (C64, Atari, Amiga usw…). Was die Anbindung von Eingabegeräten betrifft, kann man natürlich Maus und Keyboard vom PC an den Raspberry anschliessen und alles steuern. Die Jungs aus dem Projekt haben auch selbst einige Boards entwickelt, die die Anbindung von Joysticks und co an des Raspberry ermöglichen. (zB. den GPIO Adapter). Aber da ich ein paar Arduino Unos herumliegen habe, dachte ich mir, warum nicht diese verwenden. Da es beim Arduino möglich ist, den Mega 16U2 zu flashen (der Chip wird als Programmer für den Atmega 328 auf dem Uno – Board verwendet) und aus dem Uno-Board so zum Beispiel ein USB-HID (Human Interface Device) zu machen -sprich Keyboard, Mouse, was auch immer, bot sich der als ideale Plattform an.
Tutorials, den Arduino zu einem HID-Interface zu flashen, gibt es mittlerweile schon sehr viele. Zum Beispiel findet man hier eine schöne Anleitung. Je nach dem welche Arduino-Uno Boardversion man hat, kann man sich den zusätzlichen Widerstand fürs DFU-Flashen sparen. (z.Bsp. bei meinen Boardversionen R3 ist der Widerstand nicht nötig.) Auf den neuen Boards ist auch nicht mehr der Atmega 8U2 verbaut, sondern der 16U2. Man muß einfach im Atmega Flash-Tool „ATMEL-FLIP“ den entsprechenden Chip auswählen. Die entsprechenden Firmwarefiles findet man im Netz…
Arduino-keyboard-0.3.hex
Arduino-mouse-0.1.hex
Ist der Arduino dann geflasht, so wird er beim Anschluss an den PC eben als Keyboard oder Maus erkannt. Jetzt braucht man nur mehr den gewünschten Code in den Atmega328 zu schreiben und die Arduino UNO Eingänge führen z.Bsp. Tastaturbefehle aus. Um die Firmware jetzt nicht jedes Mal zwischen Programmer und USB-HID zu ändern, verwende ich einfach einen zweiten UNO der als Programmer dient und stecke einfach den geflashten Chip immer um (ist viel einfacher beim Testen).
Da das Interface jetzt soweit passt, habe ich mich mit dem HID-Codetable beschäftigt und die entsprechenden Tasten, die die Joystickbewegungen an den PC senden sollen herausgesucht.
Hier der sehr einfache Code der momentan die alten Commodore Joystickbewegungen umsetzt:)
/* HID Joystickinterface für Arduino UNO im HID Modus
Jun2015 by I.Bihlo
Die Tasten brauch i Taste/Hexcode/Dec-Code
KEY_LEFT_CTRL 0x01 //01
KEY_LEFT_SHIFT 0x02 //02
KEY_LEFT_ALT 0x04 //04
KEY_LEFT_GUI 0x08 //08
KEY_RIGHT_CTRL 0x10 //16
KEY_RIGHT_SHIFT 0x20 //32
KEY_RIGHT_ALT 0x40 //64
KEY_RIGHT_GUI 0x80 //128
KEY_RIGHT_ARROW 0x4F //79
KEY_LEFT_ARROW 0x50 //80
KEY_DOWN_ARROW 0x51 //81
KEY_UP_ARROW 0x52 //82
KEY_TAB 0x2B //43
KEY_ENTER 0x28 //40
KEY_SPC 0x2C //44
*/
uint8_t keyNone[8] = { 0, 0, 0, 0, 0, 0, 0 };
uint8_t keyA[8] = { 0, 0, 4, 0, 0, 0, 0 }; //left
uint8_t keyD[8] = { 0, 0, 7, 0, 0, 0, 0 }; //right
uint8_t keyW[8] = { 0, 0, 26, 0, 0, 0, 0 }; //up
uint8_t keyS[8] = { 0, 0, 22, 0, 0, 0, 0 }; //down
uint8_t keySPACE[8] = { 0, 0, 44, 0, 0, 0, 0 }; //space
uint8_t keyLEFT[8] = { 0, 0, 80, 0, 0, 0, 0 }; //left
uint8_t keyRIGHT[8] = { 0, 0, 79, 0, 0, 0, 0 }; //right
uint8_t keyUP[8] = { 0, 0, 82, 0, 0, 0, 0 }; //up
uint8_t keyDOWN[8] = { 0, 0, 81, 0, 0, 0, 0 }; //down
uint8_t keyENTER[8] = { 0, 0, 40, 0, 0, 0, 0 }; //enter
// DEFINE inputs
const int UPA = 12;
const int DOWNA = 13;
const int LEFTA = 2;
const int RIGHTA = 3;
const int UPB = 4;
const int DOWNB = 5;
const int LEFTB = 6;
const int RIGHTB = 7;
int out=0; //fürs Testen am Serial Monitor im Programmermodus
void setup() {
// Die Pins als Eingang definieren (Intern PullUP setzen - ist bei mir nötig da actice Low geschaltet wird
pinMode(UPA, INPUT_PULLUP); pinMode(DOWNA, INPUT_PULLUP); pinMode(LEFTA, INPUT_PULLUP); pinMode(RIGHTA, INPUT_PULLUP);
pinMode(A0, INPUT);
pinMode(UPB, INPUT_PULLUP); pinMode(DOWNB, INPUT_PULLUP); pinMode(LEFTB, INPUT_PULLUP); pinMode(RIGHTB, INPUT_PULLUP);
pinMode(A1, INPUT);
Serial.begin(9600);
}
void loop() {
// Joystickbewegungen abfragen und senden
// Da das Interface einen Invert-Schmitt Trigger verpasst bekommen hat, werden die Ausgänge auf active LOW abgefragt - wenn nix passiert sind alles Eingänge HIGH
if (digitalRead(UPA)==LOW) {out=120; Serial.write(keyW, 8);}
if (digitalRead(DOWNA)==LOW) {out=121; Serial.write(keyS, 8);}
if (digitalRead(LEFTA)==LOW) {out=122; Serial.write(keyA, 8);}
if (digitalRead(RIGHTA)==LOW) {out=123; Serial.write(keyD, 8);}
if (digitalRead(A0)==LOW) {out=124; Serial.write(keySPACE, 8);}
if (digitalRead(UPB)==LOW) {out=130; Serial.write(keyUP, 8);}
if (digitalRead(DOWNB)==LOW) {out=131; Serial.write(keyDOWN, 8);}
if (digitalRead(LEFTB)==LOW) {out=132; Serial.write(keyLEFT, 8);}
if (digitalRead(RIGHTB)==LOW) {out=133; Serial.write(keyRIGHT, 8);}
if (digitalRead(A1)==LOW) {out=134; Serial.write(keyENTER, 8);}
delay(20);
//Serial.println(out); //des is nur fürs debuggen im serial monitor
Serial.write(keyNone, 8); // den Tastendruck beenden
delay(20);
}
Lochrasterplatine am Arduino
Als nächstes habe ich ein Interfaceboard (eine einfache Lochrasterplatine) mit zwei 9-poligen SUB-D-Buchsen für den Anschluss der Joysticks gebastelt. Da der Arduino genügend Ports besitzt, habe ich auf ein Multiplexen oder Matrixverschalten der insgesamt zehn Steuerleitungen verzichtet und jeden Joystickkontakt direkt auf einen Port gelegt. Das funktioniert schon einmal ganz gut. Aber das Prellen der Federkontakte und Microtaster in den Joysticks muss natürlich softwaremäßig entfernt werden. Um jetzt nicht in jeder Softwareversion einen debounce-code mitzuführen entschloss ich mich das Entprellen in der Hardware zu machen. Einfach ein RC-Glied (10k – 1uF) an einen Schmitt-Trigger und gut ist´s. Also schnell ein Board gelayoutet (das geht schneller als am Lochrasterprint zu löten), geätzt und bestückt… und heraus kam das Board hier:
Board geätzt und gebohrt
fertig bestückt am Arduino
Der Funktionstest verlief positiv. Die Bewegungen des Sticks werden sauber umgesetzt. Ein schneller Test mit WinVice ließ sofort das Zockergefühl von vor 30 Jahren aufkommen 😉