Robot biphasique auto-équilibrant basé sur Arduino. Il utilise le DMP (Digital Motion Processor) du MPU6050 pour extraire l'angle de tangage avec précision, et un contrôleur PID pour corriger en temps réel la vitesse des moteurs et maintenir l'équilibre.
Le robot dispose de 3 modes de fonctionnement commutables via un bouton physique ou une télécommande IR.
🎬
▶️ Cliquez ici pour voir le robot en action sur YouTube
Démonstration des 3 modes : équilibre autonome, télécommande IR, et suivi de ligne.
| Mode | LED | Description |
|---|---|---|
| 0 — Balance | Jaune | Équilibre autonome, le robot reste sur place |
| 1 — Remote Control | Verte | Contrôle directionnel par télécommande IR |
| 2 — Line Tracking | Rouge | Suivi de ligne autonome par capteurs IR |
Le bouton physique sur PIN 2 démarre/arrête le robot. La télécommande peut également changer de mode à distance.
| Composant | Quantité | Rôle |
|---|---|---|
| Arduino Uno / Nano | 1 | MicrocontrĂ´leur principal |
| MPU6050 | 1 | IMU 6 axes (accéléromètre + gyroscope) |
| Moteurs DC + encodeurs | 2 | Propulsion |
| Driver moteur (L298N ou similaire) | 1 | Commande PWM des moteurs |
| Récepteur IR | 1 | Télécommande |
| Capteurs de suivi de ligne IR | 2 | Mode Line Tracking |
| LED bicolore (rouge/vert) | 1 | Indicateur de mode |
| Bouton poussoir | 1 | Démarrage / arrêt |
| Batterie LiPo ou 18650 | 1 | Alimentation |
Arduino Pin │ Composant
─────────────┼─────────────────────────────────
2 │ Bouton mode (INPUT_PULLUP + interruption)
3 │ MPU6050 INT (interruption DMP)
4 │ Récepteur IR
5 │ Moteur Droit PWM1
6 │ Moteur Droit PWM2
7 │ Capteur de ligne GAUCHE
8 │ Capteur de ligne DROIT
9 │ Moteur Gauche PWM1
10 │ Moteur Gauche PWM2
11 │ LED Rouge
12 │ LED Verte
A4 (SDA) │ MPU6050 SDA
A5 (SCL) │ MPU6050 SCL
Installer via le Library Manager de l'IDE Arduino :
| Bibliothèque | Source |
|---|---|
IRremote |
Arduino Library Manager |
PID_v1 |
br3ttb/Arduino-PID-Library |
I2Cdev |
jrowberg/i2cdevlib |
MPU6050_6Axis_MotionApps20 |
Incluse dans i2cdevlib |
-
Cloner le repo
git clone https://github.com/SALLAH-JP/Self-Balancing-Robot.git
-
Installer les dépendances via le Library Manager de l'IDE Arduino
-
Ouvrir
Stage.inodans l'IDE Arduino (les 3 fichiers doivent ĂŞtre dans le mĂŞme dossier) -
Calibrer le MPU6050 — modifier les offsets dans
Fonctions.inoselon ton module :mpu.setXGyroOffset(-76); mpu.setYGyroOffset(-54); mpu.setZGyroOffset(2); mpu.setZAccelOffset(1384);
-
Flasher sur l'Arduino et ouvrir le Serial Monitor Ă
115200 baudpour vérifier l'angle de tangage
Les constantes PID sont définies dans header.h :
double Kp_angle = 15; // Gain proportionnel
double Ki_angle = 150; // Gain intégral
double Kd_angle = 0.8; // Gain dérivé
#define EQUILIBRE 0.1 // Angle d'équilibre (en degrés)- Mettre
KietKdĂ0, augmenterKpjusqu'Ă ce que le robot oscille - Augmenter
Kdpour amortir les oscillations - Augmenter
Kipour corriger l'erreur statique (drift) - Ajuster
EQUILIBREsi le robot avance ou recule naturellement au repos
Le cutoff de sécurité est fixé à ±40° — au-delà , les moteurs sont coupés.
Codes IR utilisés (protocole NEC) :
| Bouton | Code HEX | Action |
|---|---|---|
| Haut | 0x18 |
Avancer |
| Bas | 0x52 |
Reculer |
| Gauche | 0x08 |
Tourner gauche |
| Droite | 0x5A |
Tourner droite |
| OK | 0x45 |
Démarrer / Arrêter |
* |
0x46 |
Cycle mode (0→1→2) |
1 |
0x44 |
Mode Remote Control |
2 |
0x19 |
Mode Line Tracking |
3 |
0x07 |
Mode Balance |
Self-Balancing-Robot/
├── header.h # Includes, pins, variables, constantes PID
├── Stage.ino # setup(), loop(), logique des 3 modes
└── Fonctions.ino # IMU, moteurs, modes, télécommande
| Fichier | RĂ´le |
|---|---|
header.h |
Déclarations globales, configuration PID, broches |
Stage.ino |
Boucle principale, balancing(), lineTracking(), directionRemoteControl() |
Fonctions.ino |
initIMU(), getPitchIMU(), driveMotors(), changeMode() |
Ce projet est distribué sous licence MIT — voir le fichier LICENSE.
Jean-Paul SALLAH Étudiant en 3ème année — Licence Informatique Appliquée 🎓 Université des Mascareignes (Maurice)
