M1 Rover : Robot autonome d'extérieur pour terrains accidentés
Composants et fournitures
| Pilote de moteur double pont en H SparkFun L298 | × | 1 |
| Moteur DC (générique) | × | 4 |
| Arduino UNO | × | 1 |
| LED (générique) | × | 8 |
| Résistance 221 Ω | × | 8 |
| Servomoteur Tower Pro MG996R | × | 1 |
| Capteur ultrasons HC-SR04 | × | 1 |
Applications et services en ligne
- Arduino IDE
- Microsoft Visual Studio 2015
- Microsoft Windows 10 IoT Core
À propos du projet
Après avoir construit plusieurs robots d'intérieur, j'ai décidé de créer un robot d'extérieur capable d'évoluer sur des terrains accidentés. Je l'ai nommé « M1-Robot ».
Le M1-Robot pilote aisément quatre moteurs DC via Arduino, ce qui en fait une base idéale pour des projets robotiques plus puissants. J'ai donc conçu de zéro ce robot 4 roues motrices tout-terrain.
Ce n'est pas une simple voiture radiocommandée : il peut être programmé pour suivre de manière autonome un ensemble d'instructions, être contrôlé depuis un ordinateur distant, ou être piloté via des manettes de jeu et joysticks personnalisés comme une voiture télécommandée classique.
Étape 1 : Conception
Concevoir son propre produit ou prototype est passionnant, mais la complexité augmente lorsqu'on passe à l'échelle réelle. J'ai choisi Google SketchUp 2017 comme outil de conception puissant et accessible, permettant d'exporter les plans vers une découpe laser ou une imprimante 3D.
J'ai passé les trois premières semaines à concevoir et construire la coque du robot. Pour les matériaux, j'ai utilisé une planche de bois de 3 mm d'épaisseur.
Le câblage final, réalisé dans l'urgence, consistait à loger l'ensemble des composants dans la coque.
J'ai nommé mon robot M1Rover, dans l'optique de développer une série M2, M3, etc. Il est conçu comme un kit : il suffit de l'assembler à l'aide de vis.
Étape 2 : Composants et fonctionnalités
- Jusqu'à 3 heures d'autonomie !
- Compatible Arduino Uno, Mega et Nano
- Tension de fonctionnement : 5V-9V DC
- Châssis en bois de 3 mm d'épaisseur
- Roues de 68 mm de diamètre
- Pont en H double L298N pour moteur/pas à pas
- Piles 9V pour alimenter les moteurs DC
- Piles 9V pour alimenter l'Arduino
- 7 LED pour l'éclairage avant et arrière
- Module Bluetooth HC-06
- Shield capteur Arduino v5.0
- Transducteur ultrasons HC-SR04
Étape 3 : Le contrôleur de moteur
Les ponts en H sont généralement utilisés pour contrôler la vitesse et le sens des moteurs, mais peuvent aussi piloter la luminosité de projets d'éclairage comme des matrices de LED haute puissance.
- Assurez-vous que toutes les masses sont reliées : Arduino, source d'alimentation et contrôleur de moteur.
- Les broches PWM sont inutiles si vous ne souhaitez pas contrôler les fonctionnalités PWM.
Étape 4 : Assemblage du châssis
Le châssis a été découpé au laser en plusieurs pièces. Comme mentionné, le modèle est conçu en kit pour un assemblage facile : il suffit de suivre les instructions.
Le design intègre des feux avant et arrière. À l'avant, 4 LED blanches avec résistances de 220 Ω chacune ; à l'arrière, 2 LED rouges avec résistances de 220 Ω. Ces LED sont contrôlables via la même application.
Étape 5 : Circuits
Le câblage est délicat car le contrôle simultané de nombreux composants électroniques exige une attention particulière à la séquence de chaque élément.
- Shield capteur Arduino 5.0
- Arduino Uno R3 + L298N double pont en H
- Pile 9V pour les moteurs DC
- 7 LED (2 arrière, 4 avant)
- Module Bluetooth HC-06
- Transducteur ultrasons HC-SR04
- Servomoteur 9g
- Buzzer actif
- 4 moteurs DC avec roues
Étape 6 : Logiciel
J'ai pris en compte de nombreux aspects lors de l'écriture du code du M1-Robot. Avec un logiciel GUI, vous obtenez plus d'informations sur l'état du robot.
Code de base pour le kit de démarrage, contrôlable par mobile ou ordinateur portable via Bluetooth :
int frontled = 3;
int rearled = 4;
int outPin1 = 5;
int outPin2 = 6;
int outPin4 = 11;
int outPin3 = 12;
char bt = 0;
int buzzerPin = 2;
const int pingPin = 9;
const int echoPin = 8;
void setup() {
Serial.begin(9600);
pinMode(outPin1, OUTPUT);
pinMode(outPin2, OUTPUT);
pinMode(outPin3, OUTPUT);
pinMode(outPin4, OUTPUT);
pinMode(frontled, OUTPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
bt = Serial.read();
digitalWrite(frontled, HIGH);
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
if (cm > 10) {
if (bt == 'F') {
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
} else if (bt == 'B') {
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, HIGH);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
} else if (bt == 'S') {
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
} else if (bt == 'R') {
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
} else if (bt == 'L') {
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
} else if (bt == 'I') {
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
} else if (bt == 'G') {
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, HIGH);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
}
} else {
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(500);
}
}
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
Le code Arduino est compatible avec tout type de contrôleur car tous les composants électroniques sont programmés pour fonctionner via des ordres sur port série : module Bluetooth émetteur/récepteur, PC, téléphone portable.
- Application Windows C# (capture d'écran fournie)
Étape 7 : Packs
PACK STARTER
Ce pack M1-Robot inclut les composants de base tandis que la plaque supérieure permet le montage aisé de tout matériel de détection, manipulation ou informatique. Il suffit de connecter les capteurs aux alimentations embarquées et du Rover pour démarrer.
PACK EXPLORER
Le pack Explorer permet une fonctionnalité autonome basique en intérieur et extérieur. Au lieu d'une caméra IP, j'ai utilisé la caméra d'un téléphone portable connectée à Internet via adresse IP.
PACK MAPPING
Le pack Explorer inclut un suivi GPS basique, bien sûr uniquement en extérieur. C'est très pratique de visualiser les parcours de coordonnées en temps réel.
PACK MANIPULATION
Interaction avec le monde via un bras robotique et une pince à deux doigts de 50 mm.
Astuce importante : Tous les servomoteurs n'ont pas une rotation complète de 180 degrés. Vous pouvez écrire un test pour déterminer les limites mécaniques. Préférez servo.writeMicroseconds à servo.write car cela permet d'utiliser 1000-2000 comme plage de base. Beaucoup de servos supportent une plage plus large, de 600 à 2400.
Testez différentes valeurs et repérez le bourdonnement indiquant la limite atteinte. Restez ensuite dans ces limites. Vous pouvez les définir avec servo.attach(pin, min, max).
Si vous le souhaitez, définissez les min/max en microsecondes dans l'attache, puis utilisez simplement servo.write. La fonction map() convertira la valeur 0-180 degrés en microsecondes.
Attention : Maintenir le servo en butée fait monter le courant et la température rapidement – il est facile de « griller » un servo ainsi.
Trouvez la vraie plage de mouvement et assurez-vous que le code ne tente pas de la dépasser. La fonction Arduino constrain() est utile :
servo.write(constrain(angle, 10, 160)); // contraindre l'angle entre 10 et 160
Pièces personnalisées et boîtiers
m1rover_dxf_hackaday_4o7WTGHUGE.dxf
Schémas

Processus de fabrication
- Moteurs à réluctance variable : types, fonctionnement et applications
- Raspoulette : Prototype de système autonome de porte de poulailler à énergie solaire
- Construire un Rover Windows IoT Core avec Raspberry Pi 2 – Guide débutant à avancé
- Simple Pi Robot – Construire un rover autonome 2 roues motrices avec Raspberry Pi
- Jeu UFO Attack DIY avec Arduino UNO et Afficheur MAX7219
- Horloge 3D RGB Arduclock – Montre LED Bluetooth avec horloge temps réel
- Médiator Motorisé et Pédale d'Effet DIY – Impression 3D et Arduino
- Comprendre les moteurs linéaires : de l'énergie électrique au mouvement linéaire précis
- Servomoteurs expliqués : fonctionnement et importance