Labyrinthe à billes Arduino : jeu de plateau en carton motorisé
Composants et fournitures
- 1 × Arduino UNO (toute carte compatible)
- 2 × Micro-servos SG90 (9 g)
- 1 × Plaque d'essai (breadboard) mini
- 1 × Module joystick analogique
- Fils de raccordement
- Carton 3 mm, colle chaude, cutter, règle, crayon
- 2 vis + écrous M3×12 mm
Outils nécessaires
- Pistolet à colle chaude
- Cutter lame aiguisée
Applications et services en ligne
- Arduino IDE
À propos du projet
Je vous montre comment fabriquer un labyrinthe à billes commandé par Arduino, simple et amusant, entièrement en carton. But : guider la bille à travers le labyrinthe jusqu'à la sortie en inclinant le plateau via deux servos pilotés par un joystick. Idées d'amélioration : capteurs à la sortie, buzzer, trous dans le labyrinthe.
L'idée
Lassé des jeux électroniques, j'ai découvert le Labyrinthe (jeu d'adresse physique : plateau percé de trous, bille d'acier, inclinaison manuelle via deux boutons). Développé par BRIO (Suède) en 1946. J'ai voulu en faire une version motorisée Arduino.
Conception

Conçu sous SketchUp Pro pour visualiser, dimensionner (facile pour enfants). Fichiers de découpe fournis pour réaliser le jeu en 1 h.
Matériaux : carton 3 mm, colle chaude, cutter, règle, crayon.
Composants : Arduino, mini breadboard, fils, 2 servos 9 g, joystick, 2 vis/écrous M3×12.
Découpe des pièces
Imprimez les gabarits joints et suivez ces étapes :
- Base : carré 20×20 cm.
- Deux côtés : trapèzes isocèles 14×16 cm.
- Dans l'un, découpez l'emplacement du servo (axe X).
- Dans l'autre, percez un trou 3 mm au centre (face au servo axe X).
- Quatre renforts intérieurs : rectangles 14×4 cm.
- Percez un trou 3 mm au centre de l'un (axe Y).
- Dans l'un des quatre, découpez l'emplacement du servo (axe Y).
- Choisissez un labyrinthe (fichiers fournis), découpez un carré 12×12 cm pour le plateau de jeu.
- Collez le papier labyrinthe comme guide.
- Au moins huit bandes 1,5×12 cm pour les murs ; recoupez aux bonnes dimensions.
- Collez les murs en suivant le guide.
- Fixez les servos à leur emplacement.
- Collez les bras de servo (cornes) sur les pièces mobiles.







Câblage
- Servo axe X (fil jaune) → Pin 8 Arduino
- Servo axe Y (fil jaune) → Pin 9 Arduino
- Fils rouge/brun des servos → breadboard (alimentation)
- Joystick VRx → Pin A0 Arduino
- Joystick VRy → Pin A1 Arduino
- Joystick VCC/GND → breadboard
- Arduino 5V/GND → breadboard
Code
- Connectez l'Arduino au PC (USB).
- Ouvrez l'IDE Arduino.
- Copiez-collez le code ci-dessous dans un nouveau sketch.
- Outils > Carte > sélectionnez votre carte ; Outils > Port > port série actif.
- Cliquez sur Téléverser (flèche ronde).
- Message « Done » → prêt à jouer.
Code : contrôle du labyrinthe au joystick
#include <Servo.h>
Servo myServoX; // servo axe X
Servo myServoY; // servo axe Y
int ServoXPin = 8;
int ServoYPin = 9;
int ServoXHomePos = 90;
int ServoYHomePos = 90;
int ServoXPos = 103;
int ServoYPos = 135;
int XAxlePin = A0;
int YAxlePin = A1;
int XAxleValue = 0;
int YAxleValue = 0;
int Direction = 0;
int range = 12; // amplitude de mouvement
int center = range/2;
int threshold = range/4;
void setup() {
myServoX.attach(ServoXPin);
myServoY.attach(ServoYPin);
ServoXPos = ServoXHomePos;
ServoYPos = ServoYHomePos;
myServoX.write(ServoXPos);
myServoY.write(ServoYPos);
Serial.begin(9600);
}
void loop() {
XAxleValue = readAxis(XAxlePin);
YAxleValue = readAxis(YAxlePin);
Serial.print(XAxleValue, DEC);
Serial.print(" - ");
Serial.println(YAxleValue, DEC);
if (XAxleValue > 0) { ServoXPos++; myServoX.write(ServoXPos); delay(100*(7-XAxleValue)); }
if (XAxleValue < 0) { ServoXPos--; myServoX.write(ServoXPos); delay(100*(7+XAxleValue)); }
if (YAxleValue > 0) { ServoYPos++; myServoY.write(ServoYPos); delay(100*(7-YAxleValue)); }
if (YAxleValue < 0) { ServoYPos--; myServoY.write(ServoYPos); delay(100*(7+YAxleValue)); }
// Limites mécaniques ±20° autour de la position centrale
if (ServoXPos > ServoXHomePos + 20) ServoXPos = ServoXHomePos + 20;
if (ServoXPos < ServoXHomePos - 20) ServoXPos = ServoXHomePos - 20;
if (ServoYPos > ServoYHomePos + 20) ServoYPos = ServoYHomePos + 20;
if (ServoYPos < ServoYHomePos - 20) ServoYPos = ServoYHomePos - 20;
delay(10);
}
int readAxis(int thisAxis) {
int reading = analogRead(thisAxis);
reading = map(reading, 0, 1023, 0, range);
int distance = reading - center;
if (abs(distance) < threshold) distance = 0;
return distance;
}
Pièces personnalisées et boîtiers
Fichiers de découpe (carton) disponibles en téléchargement.
Schéma de câblage

Processus de fabrication
- Détecteur de langue TinyML avec Edge Impulse sur Arduino Nano 33 BLE Sense
- Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Mesure de distance en temps réel par sonar Arduino et visualisation Processing
- MobBob : Construisez votre propre robot Arduino, contrôlé via smartphone Android
- Construire une lampe de bureau réactive à l'audio avec Arduino Nano