Arduino-Murmellabyrinth aus Pappe: Selbstbau-Brettspiel mit Joystick-Steuerung
Komponenten und Zubehör
- Arduino UNO (oder beliebiges Board) × 1
- 2× SG90 Mikro-Servo (9 g) × 1
- 1× Breadboard (Mini) × 1
- 1× Joystick-Modul (2-Achsen) × 1
- Jumper-Kabel × 1
- Pappe 3 mm, Heißkleber, Cuttermesser, Lineal, Bleistift
- 2× Schraube M3×12 mm + Mutter (für Servohebel)
Benötigte Werkzeuge
- Heißklebepistole
- Scharfes Cuttermesser
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Ein klassisches Geschicklichkeitsspiel (Labyrinth) neu interpretiert: Statt manueller Kippknöpfe steuern zwei Servos die Neigung der Spielfläche (X- und Y-Achse) per Joystick. Das gesamte Gehäuse besteht aus Pappe – in ca. 1 Stunde gebaut.
Design & Zuschnitt
- Basis: 20 × 20 cm Quadrat.
- Zwei Seitenwände: 14 × 16 cm gleichschenklige Trapeze. Eines mit rechteckiger Aussparung für Servo X, das andere mit 3-mm-Loch mittig für Servowelle X.
- Vier Innenstreben: 14 × 4 cm. Eine mit Servoaussparung Y, eine mit 3-mm-Loch für Servowelle Y.
- Spielfeld: 12 × 12 cm, Labyrinthvorlage aufkleben, Wände (1,5 × 12 cm Streifen) ausschneiden und aufkleben.
- Servos in den Aussparungen fixieren, Servohebel an den beweglichen Streben befestigen (Schrauben).
Verdrahtung
- Servo X (gelb) → Pin 8
- Servo Y (gelb) → Pin 9
- Servo rot/braun → Breadboard (+5 V / GND)
- Joystick VRx → A0, VRy → A1, VCC/GND → Breadboard
- Arduino 5 V / GND → Breadboard
Code
Der Sketch nutzt die Servo.h-Bibliothek. Der Joystick-Wert (0–1023) wird auf einen Bereich von 0–12 gemappt, Mittelposition = 6. Eine Totzone (Schwellenwert 3) verhindert Zittern. Die Servos bewegen sich stufenweise mit verzögerter Geschwindigkeit (je weiter der Joystick gedrückt, desto schneller). Endlagen auf ±20° um Mittelposition begrenzt.
#include <Servo.h>
Servo servoX, servoY;
const int pinX = 8, pinY = 9;
const int joyX = A0, joyY = A1;
int homeX = 90, homeY = 90;
int posX = 103, posY = 135;
const int range = 12, center = range/2, threshold = range/4;
void setup() {
servoX.attach(pinX); servoY.attach(pinY);
servoX.write(homeX); servoY.write(homeY);
posX = homeX; posY = homeY;
Serial.begin(9600);
}
int readAxis(int pin) {
int reading = analogRead(pin);
reading = map(reading, 0, 1023, 0, range);
int dist = reading - center;
if (abs(dist) < threshold) dist = 0;
return dist;
}
void loop() {
int xVal = readAxis(joyX);
int yVal = readAxis(joyY);
Serial.print(xVal); Serial.print(" - "); Serial.println(yVal);
if (xVal > 0) { posX++; servoX.write(posX); delay(100*(7-xVal)); }
if (xVal < 0) { posX--; servoX.write(posX); delay(100*(7+xVal)); }
if (yVal > 0) { posY++; servoY.write(posY); delay(100*(7-yVal)); }
if (yVal < 0) { posY--; servoY.write(posY); delay(100*(7+yVal)); }
posX = constrain(posX, homeX-20, homeX+20);
posY = constrain(posY, homeY-20, homeY+20);
delay(10);
}
Ideen für Erweiterungen
- Lichtschranken im Ziel → Buzzer/Fanfare.
- Löcher im Labyrinth als „Fallgruben“ mit Sensoren.
- Zeitmessung, Highscore-Liste auf OLED.
- Mehrere Labyrinth-Einlagen zum Austauschen.
Fazit
Ein tolles Wochenendprojekt für Groß und Klein: Mechanik, Elektronik und Code verbinden sich zu einem spielbaren Gerät, das zum Weiterentwickeln einlädt.
Herstellungsprozess
- TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- MobBob: Eigenen Arduino-Roboter bauen, per Android-Smartphone steuern
- Audio-reaktive Schreibtischlampe mit Arduino Nano bauen
- NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen