Contrôlez votre Roomba Create 2 avec Arduino et Android – Guide pas à pas
Composants et fournitures
| Composant | Quantité |
|---|---|
| iRobot Roomba Create 2 | 1 |
| Arduino UNO | 1 |
| Module Bluetooth HC-06 | 1 |
| Bouton poussoir | 1 |
Application Android
- MJRoBot BT Remote Control (gratuit, Google Play) – Développé avec MIT App Inventor 2.
À propos du projet
Projet lauréat Instructables Robotics Contest 2016. Le Roomba Create 2 (~200 $) est une plateforme robotique abordable et programmable. Ce tutoriel couvre : connexion série Arduino↔Roomba, commande moteurs, LEDs, sons, contrôle Bluetooth via application Android. Prochaines étapes prévues : capteurs, Raspberry Pi + IoT.
Étape 1 : Matériel
Voir tableau. Le Create 2 est un robot à entraînement différentiel (2 roues + roue libre), vitesse max 500 mm/s.
Étape 2 : Le Roomba Create 2 – Interface ouverte (OI)
Document de référence : iRobot® Create® 2 Open Interface (OI).
- **Affichage** : 4 × 7 segments + 5 LEDs (Clean, Spot, Dock, Warning, Dirt/Debris).
- **Capteurs internes** : 4 détecteurs de falaise, 2 capteurs de choc, encodeurs roues.
- **Modes OI** :
| Mode | Description |
|---|---|
| Passif | Lecture capteurs seulement, pas de contrôle actionneurs |
| Sûr (Safe) | Contrôle complet sauf sécurités : chargeur branché, roue levée, falaise détectée en avant → stop + retour Passif |
| Plein (Full) | Contrôle total, toutes sécurités désactivées (prudence !) |
Étape 3 : Connexion série
Roomba communique par défaut à **115 200 bauds** – trop rapide pour SoftwareSerial fiable. Deux méthodes pour le passer à **19 200 bauds** :
- Hors tension, maintenez **Clean/Power** 10 s après extinction → tune descendante = 19 200 bauds jusqu'à perte alimentation.
- Pulsez 3 fois la broche **Baud Rate Change (broche 5 Mini-DIN)** : 50–500 ms par pulse, 2 s après mise sous tension.
Câblage Mini-DIN (vue broches) :
- Broche 3 (TX Roomba) → Arduino D10 (SoftwareSerial RX)
- Broche 4 (RX Roomba) → Arduino D11 (SoftwareSerial TX) via diviseur de tension (Roomba 5V → Arduino 5V OK, mais protection recommandée)
- Broche 5 (DD / Device Detect) → Arduino D12 (réveil)
- Broche 7 (GND) → GND Arduino
Étape 4 : Réveil et démarrage
void wakeUp() {
digitalWrite(ddPin, HIGH); delay(100);
digitalWrite(ddPin, LOW); delay(500);
digitalWrite(ddPin, HIGH); delay(2000);
}
void startSafe() {
Roomba.write(128); // START
Roomba.write(131); // SAFE MODE
delay(1000);
}
Étape 5 : Contrôle LEDs et afficheur 7 segments
- **LED Power/Clean** (bicolore, intensité variable) : commande
139+ couleur (0=vert, 128=orange, 255=rouge) + intensité (0–255). - **4 LEDs fixes** (Spot, Dock, Warning, Debris) : bits dans même commande
139. - **Afficheur 7 segments** :
// Mode numérique brut (code 163)
void setDigitLEDs(byte d1, byte d2, byte d3, byte d4) {
Roomba.write(163); Roomba.write(d1); Roomba.write(d2); Roomba.write(d3); Roomba.write(d4);
}
// Mode ASCII approx (code 164)
void writeLEDs(char a, char b, char c, char d) { /* ... */ }
// Ex: writeLEDs('s','t','o','p') → "STOP"
Étape 6 : Mouvement
Trois commandes principales :
137 Drive: vitesse (mm/s) + rayon (mm)145 Drive Direct: vitesse gauche/droite (mm/s) – **recommandé146 Drive PWM: PWM direct (-255..255)
void driveWheels(int right, int left) {
clamp(right, -500, 500); clamp(left, -500, 500);
Roomba.write(145);
Roomba.write(highByte(right)); Roomba.write(lowByte(right));
Roomba.write(highByte(left)); Roomba.write(lowByte(left));
}
// Fonctions dérivées : forward, backward, left, right, stop, turnCW, turnCCW
Étape 7 : Contrôle Bluetooth (HC-06 + App Android)
- HC-06 configuré à **19 200 bauds** (commande AT :
AT+BAUD5). - Câblage : HC-06 TX → Arduino D2, RX → D3 (SoftwareSerial), VCC/GND → 5V/GND.
- Application **MJRoBot BT Remote Control** : interface boutons + zone texte.
Commandes envoyées par l'app (1 caractère par bouton) :
| Touche | Action |
|---|---|
| w | Avant |
| s | Arrière |
| a | Gauche |
| d | Droite |
| f | Stop |
| m | Redémarrage Safe Mode (après sécurité) |
| + / - | Vitesse + / - (mode avant seulement) |
Boucle principale Arduino :
void loop() {
checkBTcmd(); // Lit commande Bluetooth
manualCmd(); // Exécute action
}
void checkBTcmd() {
if (BT1.available()) { command = BT1.read(); BT1.flush(); }
}
void manualCmd() {
switch(command) {
case 'm': startSafe(); BT1.println("Roomba BT Ctrl OK - Safe mode"); command='f'; playSound(3); break;
case 'f': driveStop(); writeLEDs('s','t','o','p'); break;
case 'w': drive(motorSpeed, 0); writeLEDs(' ','g','o',' '); break;
case 'd': driveRight(motorSpeed); writeLEDs('r','i','g','h'); break;
case 'a': driveLeft(motorSpeed); writeLEDs('l','e','f','t'); break;
case 's': drive(-motorSpeed, 0); writeLEDs('b','a','c','k'); break;
case '+': if(motorSpeedMIN) motorSpeed-=10; command=state; break;
}
}
Étape 8 : Conclusion
Code complet et documents sur GitHub : github.com/Mjrovai/Roomba_BT_Ctrl. Basé en partie sur la bibliothèque Create2 de Dom Amato (brinnLabs/Create2). Projet base pour futures extensions (Raspberry Pi, capteurs, IoT).
Blog de l'auteur (portugais) : MJRoBot.org.
Processus de fabrication
- Créer des effets audio pilotés par capteurs avec le kit Satellite CCRMA
- Construire un système de détection d'incendie rapide et fiable avec Samsung SAMI, Arduino UNO et Raspberry Pi
- Construire un robot piloté par Internet avec streaming vidéo Arduino & Raspberry Pi
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Robot Évitement d'Obstacles Piloté par Servomoteur : Construction avec Arduino et HC-SR04
- Thermomètre portable DIY low-cost avec intégration Android
- Arduino et MPU6050 : Contrôle précis de servo-moteur avec SG90 et MG996R
- Contrôle fluide de la luminosité LED avec Bolt IoT et Arduino UNO
- Module GPS u-blox LEA‑6H 02 : guide d'intégration Arduino et Python