Gyro Pong LED-Matrix
Nach dem Snake-Spiel sollte die LED-Matrix natürlich nicht bei nur einem Spiel bleiben. Die verwendeten WS2811-LED-Ketten waren ohnehin reichlich vorhanden und auch ein ESP32 Entwicklerboard findet sich in einem gut sortierten Bastelhaushalt meistens auch irgendwo.
Für Pong fehlte allerdings noch eine passende Steuerung. Statt klassischer Taster oder Potentiometer sollten die beiden Spieler ihre Schläger einfach durch die Bewegung eines Handcontrollers steuern. Dafür kommen zwei MPU6050-Sensormodule zum Einsatz.
Der MPU6050 enthält unter anderem einen Gyrosensor und einen Beschleunigungssensor, mit denen sich die Lage und Bewegung des Controllers erfassen lässt. Und nein: Mit Gyros hat das Ganze leider nichts zu tun – auch wenn ein Gyros in der Hand vermutlich ebenfalls eine gewisse Neigung erkennen ließe. 😉
Jeder Spieler bekommt einen eigenen Handcontroller. Durch Kippen des Controllers nach vorne oder hinten wird der zugehörige Schläger auf der LED-Matrix bewegt. Damit kommt Pong ganz ohne klassische Bedienelemente für die eigentliche Spielsteuerung aus.
Die LED-Matrix
Die verwendete LED-Matrix ist im Prinzip die gleiche Konstruktion wie bei meinem Snake-Projekt: 16 × 12 Pixel, aufgebaut aus 12-V-WS2811-LED-Ketten und schlangenförmig verdrahtet. Da ich den Aufbau dort bereits ausführlich beschrieben habe, möchte ich ihn an dieser Stelle nicht noch einmal wiederholen.
Wer die Matrix selbst nachbauen möchte, findet den kompletten Aufbau mit Bildern und Verdrahtung auf der Seite zum Snake LED-Matrix Projekt.
Die Handcontroller
Auch bei den Handcontrollern sollte der Aufbau möglichst einfach bleiben. Als Griff dient jeweils ein Stück PVC-Installationsrohr mit 25 mm Durchmesser, wie es normalerweise bei Elektroinstallationen verwendet wird.
Verschlossen werden die Rohrstücke mit 25-mm-Kunststoffkappen, die eigentlich als Endkappen für Stuhl- oder Tischbeine gedacht sind. In einer dieser Kappen sitzt jeweils das MPU6050-Sensormodul.
Ganz ohne Anpassung passten die kleinen Platinen allerdings nicht hinein. An jedem MPU6050 mussten deshalb zwei Ecken der Platine vorsichtig abgeknipst werden. Danach ließ sich das Modul passend in der Endkappe unterbringen.
Für die Verbindung der Handcontroller mit dem ESP32 habe ich ein altes USB-Verlängerungskabel zerschnitten. Die darin vorhandenen vier Adern reichen für die Stromversorgung sowie die beiden I²C-Leitungen SDA und SCL aus.
Vollständiges Schaltbild
Die beiden MPU6050-Sensoren werden über den I²C-Bus mit dem ESP32 verbunden. Dadurch bleibt die Verkabelung erfreulich übersichtlich: Neben der Spannungsversorgung werden lediglich die beiden Busleitungen SDA und SCL benötigt.
Für jeden Handcontroller werden damit insgesamt vier Leitungen benötigt: Versorgungsspannung, GND, SDA und SCL. Genau diese vier Adern standen in den von mir verwendeten alten USB-Verlängerungskabeln zur Verfügung.
Adressierung der beiden MPU6050
Da beide Sensoren gemeinsam am selben I²C-Bus betrieben werden, benötigen sie unterschiedliche Adressen. Diese wird beim MPU6050 über den Anschluss AD0 festgelegt.
Bei meinem Aufbau habe ich die Adressierung bei beiden Modulen durch eine Lötbrücke eindeutig festgelegt:
- Spieler 1: AD0 mit GND verbunden – Adresse 0x68
- Spieler 2: AD0 mit VCC verbunden – Adresse 0x69
Beide Sensoren teilen sich anschließend die Busleitungen. SDA wird mit GPIO21 und SCL mit GPIO22 des ESP32 verbunden. Durch die unterschiedlichen Adressen kann der ESP32 trotzdem beide Handcontroller getrennt auslesen.
Kalibrierung und Steuerung
Nach dem Einschalten werden zunächst beide MPU6050 automatisch kalibriert. Während dieser Kalibrierung müssen die beiden Handcontroller ruhig in ihrer vorgesehenen Ausgangsposition liegen. Sie sollten in dieser Zeit nicht bewegt werden.
Das Programm nimmt von jedem Sensor 100 Messwerte auf und ermittelt daraus die jeweilige Neutralstellung. Kleine Unterschiede beim Einbau der Sensoren oder bei der Lage der beiden Handcontroller werden dadurch automatisch berücksichtigt.
Für die Steuerung wird aus den Beschleunigungswerten des MPU6050 fortlaufend der Neigungswinkel des jeweiligen Handcontrollers berechnet. Von diesem Winkel wird die zuvor ermittelte Neutralstellung abgezogen. Entscheidend ist also nicht die absolute Lage des Sensors, sondern wie weit der Handcontroller gegenüber seiner Ausgangsposition gekippt wird.
Bewegung der Schläger
Ein Neigungsbereich von etwa -35° bis +35° wird auf die mögliche Bewegung des jeweiligen Schlägers auf der LED-Matrix umgesetzt. Die Schläger sind jeweils drei LEDs hoch und können über die gesamte nutzbare Höhe der 16 × 12 LED-Matrix bewegt werden.
Damit kleine Bewegungen oder Messwertschwankungen nicht dazu führen, dass die Schläger unruhig hin- und herspringen, werden die Messwerte zusätzlich geglättet. Dadurch folgt der Schläger der Bewegung des Handcontrollers weich und lässt sich trotzdem schnell genug bewegen.
Benötigte Bauteile
Für den Nachbau werden nur wenige Bauteile benötigt. Die später aufgeführten Bezugsquellen sind Beispiele für die von mir verwendeten beziehungsweise geeignete Bauteile. Es handelt sich nicht um Werbung oder Affiliate-Links.
-
4 × WS2811 LED-Ketten, 12 V, je 50 LEDs
Für die 16 × 12 LED-Matrix werden insgesamt 192 LEDs benötigt. Beispiel bei Amazon -
1 × ESP32 Entwicklungsboard
Der ESP32 übernimmt die Ansteuerung der LED-Matrix sowie das Auslesen der beiden MPU6050-Sensoren. Beispiel bei Roboter bausatz -
2 × MPU6050 Sensormodule
Je ein Sensor wird in einem Handcontroller eingebaut. Die beiden Module werden über den I²C-Bus gemeinsam mit dem ESP32 verbunden und auf die Adressen 0x68 und 0x69 eingestellt. Beispiel bei Roboter bausatz -
2 × vieradriges Anschlusskabel
Für die Verbindung der Handcontroller mit dem ESP32 werden vier Adern für VCC, GND, SDA und SCL benötigt. Bei meinem Aufbau habe ich dafür alte USB-Verlängerungskabel verwendet. -
1 × Steckernetzteil 12 V / 1 A
Zur Versorgung der LED-Matrix und der Elektronik.
Beispiel bei Amazon -
1 × Spannungsregler 7805
Erzeugt aus der 12-V-Versorgung die 5-V-Versorgung für das ESP32-Board. Beispiel bei Reichelt -
1 × Kondensator 330 nF
Zur Beschaltung des 7805 entsprechend dem Schaltplan. Beispiel bei Reichelt -
1 × Elektrolytkondensator 10 µF
Zur Beschaltung des 7805 entsprechend dem Schaltplan. Beispiel bei Reichelt
Außerdem benötigt
- Grundplatte für die LED-Matrix
- Gehäuse bzw. Koffer für den Aufbau
- USB-Kabel zum Programmieren des ESP32
- Litze und Verbindungsmaterial
- Lötzinn und Lötkolben
- Heißkleber und Heißklebepistole
- übliches Kleinwerkzeug
Grundplatte, PVC-Installationsrohr und weitere mechanische Teile findet man am einfachsten im Baumarkt des Vertrauens. Vieles andere stammt bei meinem Aufbau ohnehin aus der Bastelkiste.
Firmware installieren
Die fertige Firmware kann direkt über den Browser auf einen ESP32 übertragen werden. Eine Installation der Arduino IDE ist dafür nicht erforderlich.