Petit Rover Arduino : Construisez Votre Propre Robot Autonome
Composants et fournitures
- 1x Arduino Nano R3
- 1x Plaque d'essai (breadboard) générique
- 1x Fils de câblage (jumper wires) génériques
- 1x Capteur ultrasonique HC-SR04
- 2x Roues pour servo à rotation continue FS90R (Adafruit)
- 2x Servos à rotation continue FS90R (Adafruit)
- 2x LED (couleur au choix, pour le fun)
- 1x Support de piles 4xAA
- 1x Roue libre métallique 3/8" (SparkFun Ball Caster)
- 1x Conteneur en plastique (type Tupperware ou boîte de margarine 500g)
- 1x Autocollants (pour la déco)
Outils et machines nécessaires
- Pistolet à colle chaude
- Cutter (carpet knife)
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Contexte
Mon neveu (9 ans) et ma nièce (7 ans) sont devenus fous d'excitation en voyant une vidéo d'un robot évitant les obstacles que j'avais construit il y a quelque temps.
Le tutoriel pour celui-ci ne verra hélas jamais le jour, mon disque dur ayant rendu l'âme avant que je ne découvre les bienfaits des sauvegardes, Dropbox, GitHub, etc. :)
J'ai donc décidé de voir si je pouvais concevoir quelque chose à la fois (un peu) éducatif et amusant. J'ai simplifié mon jouet au maximum et voici ce petit rover.
Le châssis est une boîte qui contenait à l'origine des bâtonnets de crabe. Sa taille s'est avérée parfaite. (Merci Papa d'en avoir mangé des caisses entières :D) Un pot de margarine ferait probablement aussi l'affaire.
En guise d'avertissement, je décrirai ici comment nous avons construit ces robots en laissant les enfants faire presque tout le travail eux-mêmes. Je ne recommande en aucun cas de faire de même. C'est à vous, parents responsables / tuteurs / tante / oncle / baby-sitter... de déterminer si chaque enfant peut être confié aux différentes tâches. Même si ce n'était pas strictement nécessaire, les enfants portaient des lunettes de protection lors du travail. Les boîtes étant en plastique très mou, j'ai laissé mon neveu et ma nièce les découper eux-mêmes après un briefing sur les dangers de pointer le cutter vers eux-mêmes ou leurs membres. Pour percer les trous des LED, nous avons utilisé une petite visseuse sans fil pour limiter les risques de blessures.
Heureux de signaler que la trousse de secours restée en standby n'a pas servi. :)
Mais rappelons-le : VOUS êtes l'adulte !
Circuit
J'ai rendu le circuit un peu plus complexe que nécessaire en connectant les deux servos comme je l'ai fait.

Pour les enfants... je dis "enfants" mais le groupe incluait ma sœur (35 ans) et ma mère (65 ans), toutes deux ayant apprécié l'après-midi "Robots-et-Bricolage" autant que les vrais enfants. :)

Pour mon public, j'ai imprimé l'image du circuit sur une page A4 en essayant de garder l'échelle de la breadboard 1:1 avec la réalité, et je leur ai donné tous les fils de câblage de la bonne couleur et longueur.
Une fois le circuit assemblé, il suffit de charger le programme sur l'Arduino. J'ai inclus des commentaires dans le code pour vous aider à l'ajuster si besoin. Si tout est bien connecté, les servos devraient se mettre à tourner et les LED à clignoter. Et si vous mettez la main devant le capteur, un servo s'arrête et l'autre tourne brièvement dans l'autre sens.
Tout est prêt !
Assemblage
Il est temps de prendre votre "châssis" et de percer des trous dedans.
- À l'avant, marquez la position du capteur et découpez les "trous pour les yeux".
- Sur le côté, mesurez soigneusement où placer les roues et découpez un trou sur le côté, au bord du fond de la boîte, assez grand pour y loger le servo mais assez petit pour que les équerres de fixation ne passent pas.
- Avec un petit foret, percez deux petits trous pour les LED.
- Sous la boîte, vers l'arrière, vissez (ou collez à la colle chaude) la roue libre.


Maintenant, mettez tout dans la boîte et fixez les éléments avec de la colle chaude.
Montez les roues sur les servos une fois la colle sèche.
Décorez la boîte ! (Et postez des photos ! Ce serait génial !)

Mettez les piles et regardez le petit rover se déplacer aléatoirement dans la pièce jusqu'à ce que les piles s'épuisent. Ou que vous en ayez marre du bruit. Ou que le chien s'en empare ! :D
Code
LittleRover (Arduino)
Version pour capteur ultrasonique à 4 broches :
#include <Servo.h>
/* Si votre capteur a seulement 3 broches, décommentez la ligne 6 et commentez la ligne 7 */
//int distanceR = A0; // Broche Trigger
int distance = 6; // Broche Trigger
int pingDelay = 10; // Longueur de l'impulsion du capteur ultrasonique
int distanceR = A0; // Broche Echo
int led1 = 8, led2 = 9; // LEDs
Servo leftPower;
Servo rightPower;
unsigned long flashTime;
unsigned long nextSensorTime;
float obstacleDist = 0.0f;
void setup() {
//Serial.begin(115200);
leftPower.attach(3);
rightPower.attach(5);
leftPower.write(90);
rightPower.write(90);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
delay(1000);
}
void loop() {
LEDs();
/* Cela évite que le capteur ne vide la batterie trop vite en limitant les mesures à 5 fois par seconde.
Vous pouvez augmenter ce nombre pour mesurer moins souvent, mais il risque alors de foncer dans le mur... */
if(millis() - nextSensorTime > 200){
nextSensorTime = millis();
/* Je fais 2 mesures car parfois le capteur se trompe et ne renvoie rien... */
float reading1 = TakeReading();
delay(100);
float reading2 = TakeReading();
Serial.println(reading1);
Serial.println(reading2);
// On prend la plus grande distance pour obstacleDist
obstacleDist = reading1 >= reading2 ? reading1 : reading2;
// Si distance < 10cm, on tourne, sinon on avance tout droit.
if(obstacleDist < 10.0f){
//Serial.println("turn");
turn();
}else{
//Serial.println("forward");
forward();
}
}
}
void LEDs(){
if(millis() - flashTime > 1000) flashTime = millis();
if(millis() - flashTime < 500){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}else if(millis() - flashTime > 500){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
}
void forward(){
/* Si votre robot recule, inversez le 135 et le 45. */
leftPower.write(135);
rightPower.write(45);
}
void turn(){
/* Pour tourner dans l'autre sens, décommentez lignes 92-93 et commentez 95-96 */
//leftPower.write(90);
//rightPower.write(135);
leftPower.write(45);
rightPower.write(90);
delay(350);
}
float TakeReading(){
unsigned long echo = 0;
float result = 0.0f;
pinMode(distance, OUTPUT);
digitalWrite(distance, LOW);
delayMicroseconds(2);
digitalWrite(distance, HIGH);
delayMicroseconds(pingDelay);
digitalWrite(distance, LOW);
pinMode(distanceR, INPUT);
digitalWrite(distanceR, HIGH);
echo = pulseIn(distanceR, HIGH, 38000);
result = echo / 58.138;
return result;
}
Schémas
Fichier Fritzing : littlerover_87IypZOgwm.fzz
Processus de fabrication
- Construire un Rover Windows IoT Core avec Raspberry Pi 2 – Guide débutant à avancé
- Jeu UFO Attack DIY avec Arduino UNO et Afficheur MAX7219
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Effet feu à l'eau : Projet Arduino UNO + Neopixel Stick
- Horloge 3D RGB Arduclock – Montre LED Bluetooth avec horloge temps réel
- Surveillance de la Qualité de l'Eau : Système Arduino MKR1000 pour Rivières et Lacs
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Jeu interactif joystick + LEDs avec Arduino
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth