ROBOT éVITEUR D'obstacles
L'objectif de ce projet d'électronique est de créer un robot détecteur de présence qui se déplace dans une pièce et évite les obstacles lorsqu'il en rencontre. Les “yeux” du robot sont un capteur à ultrasons (par exemple HC-SR04). Ce capteur est connecté à une carte Arduino. Lorsque le capteur envoie l'information à l'Arduino qu'il y a un obstacle devant lui, l'Arduino doit envoyer une instruction aux moteurs qui contrôlent les roues pour éviter l'obstacle.
|
Matériel nécessaire
L'idée est d'utiliser une carte Arduino pour lire les données reçues par un, ou plusieurs, capteur(s) à ultrasons. Lorsque le capteur détecte un obstacle devant lui, l'Arduino doit envoyer des instructions aux moteurs qui pilotent les roues du robot pour l'éviter. Le chassis du robot serait en partie constitué de LEGO Technic et l'électronique (Arduino, capteur à ultrasons, moteurs,…) serait fixé au chassis à l'aide de pièces imprimées en 3D qui s'adaptent aux LEGOs.
- 1 Arduino Uno ou similaire
- 1 ou plusieurs capteurs à ultrasons HC-SR04
- Des moteurs DC pour piloter les roues du robot
- Un driver de moteurs DC (par exemple, Dual TB6612FNG (1A))
- Un petit servo-moteur pour faire pivoter le capteur à ultrasons (la tête du robot)
- Une pile de 9V et des connecteurs pour alimenter les moteurs DC.
- des câbles jumper, résistances, LED, une breadboard pour tester le circuit électronique.
- des LEGO Technic ou du carton rigide pour construire le chassis du robot.
- Une imprimante 3D pour imprimer des pièces qui permettront d'adapter les moteurs DC à des LEGO Technic. Les fichiers des pièces à imprimer sont disponibles sur Thingverse
CONSTRUCTION
Partie 1 : Test du capteur à Ultrasons
On va commencer par tester le capteur à ultrasons. On écrit un petit programme pour allumer une LED lorsque le capteur voit un obstacle à moins de 2 mètres.
Pour comprendre comment mesurer une distance à l'aide du capteur HC-SR04, vous pouvez suivre ce petit tutoriel
Pour comprendre comment mesurer une distance à l'aide du capteur HC-SR04, vous pouvez suivre ce petit tutoriel
La LED doit s'allumer lorsque le capteur “voit” un obstacle à moins de 2 mètre (ou n'importe quelle distance entre 10 cm et 4 m fixée dans le programme).
CODE ARDUINO
capteur_ultrasons_site.ino | |
File Size: | 1 kb |
File Type: | ino |
Partie 2 : Apprendre à piloter des moteurs DC avec Arduino et une carte TB6612FNG
A l'aide d'une carte électronique Dual TB6612FNG (1A) (motor driver), on peut piloter deux moteurs DC avec la carte Arduino et leur envoyer des instructions de vitesse et de sens de rotation.
La puce en question, dispo par exemple sur SparksFun : |
- Les ports GND doivent être connectés au GND de l'Arduino
- Le port VCC est connecté au port 5V de l'Arduino pour alimenter la puce.
- Pour piloter les moteurs, on utilise une pile de 9V, le + de la pile est connecté à VM et le - au GND de l'Arduino.
- Les deux connecteurs des moteurs DC doivent branchés sur A01 et A02 pour le moteur A et B01 et B02 pour le moteur B.
- Les ports de gauche sont les ports qui permettent de contrôler la vitesse et le sens de rotation des moteurs. Ils sont connectés à des ports digitaux en sortie de l'Arduino. Notez que les ports PWMA et PWMB contrôlent la vitesse des moteurs en envoyant une valeur entre 0 et 255 (0 pour une vitesse nulle et 255 pour une vitesse maximale). Ces ports de sortie doivent donc être des ports PWM de l'Arduino (avec un ~). Les ports AIN1, AIN2, BIN1 et BIN2 contrôlent le sens de rotation des moteurs (voir le code ci-dessous).
CODE ARDUINO
controle_moteurs_dc_carte_tb6612fng.ino | |
File Size: | 2 kb |
File Type: | ino |
PARTIE 3 : Instructions pour les moteurs
Maintenant que l'on sait comment lire les données de distance du capteur à ultrasons et comment piloter les moteurs, nous pouvons maintenant combiner les scripts précédents pour donner les instructions aux moteurs du robot. Il faut aussi modifier le montage pour incorporer le capteur à ultrasons et les moteurs.
- Lorsqu'il ne voit pas d'obstacles devant lui, c'est-à-dire si le capteur à ultrasons retourne une distance supérieure à 20 cm (par exemple), le robot avance tout droit. Les instructions à lui donner sont donc :
move(1, 100, 1); //motor 1, full speed, left
move(0, 100, 1); //motor 2, full speed, left
move(0, 100, 1); //motor 2, full speed, left
- Lorsque le robot voir un obstacle, on le fait s'arrêter avec l'instruction stop, puis reculer pendant 3s en faisant tourner les moteurs dans le sens opposé :
move(1, 50, 0); //motor 1, recule
move(0, 50, 0); //motor 2, recule
delay(3000); // recule pendant 2s
move(0, 50, 0); //motor 2, recule
delay(3000); // recule pendant 2s
- Enfin, on fait tourner le robot en faisant tourner ses deux roues dans un sens opposé pendant 1.5s, avant de s'arrêter et de repartir tout droit. Pour chaque manoeuvre, on calcule un nombre aléatoire entre 0 et 100. Si le nombre est inférieur à 50, on tourne à gauche sinon on tourne à droite.
randNumber = random(100.0); // On fait tourner le robot dans une direction aléatoire
if (randNumber < 50.0) {
move(1, 100, 1); //motor 1, tourne à gauche
move(0, 100, 0); //motor 2, tourne
} else {
move(1, 100, 0); //motor 1, tourne à droite
move(0, 100, 1); //motor 2, tourne
}
delay(1500); // tourne pendant 1s
stop(); // Stopper les moteurs
Voilà le code complet ci-dessous :
CODE ARDUINO
if (randNumber < 50.0) {
move(1, 100, 1); //motor 1, tourne à gauche
move(0, 100, 0); //motor 2, tourne
} else {
move(1, 100, 0); //motor 1, tourne à droite
move(0, 100, 1); //motor 2, tourne
}
delay(1500); // tourne pendant 1s
stop(); // Stopper les moteurs
Voilà le code complet ci-dessous :
CODE ARDUINO
robot_eviteur_d_obstacles.ino | |
File Size: | 5 kb |
File Type: | ino |
La partie programmation est maintenant presque terminée. On peut à l'avenir rajouter un servo-moteur sur lequel on fixe le capteur à ultrasons pour balayer une zone plus large de vision devant le robot. On peut aussi rajouter un capteur à ultrasons derrière le robot pour éviter que le robot ne recule sur un mur. En effet, tel que le code est maintenant écrit, le robot ne “regarde” pas lorsqu'il manoeuvre.
Il faut maintenant construire le chassis du robot.
Il faut maintenant construire le chassis du robot.
PARTIE 4 : CONSTRUCTION DU CHASSIS : PREMIER PROTOTYPE DE ROBOT !
Il faut ensuite construire un chassis pour porter notre électronique.
Il y a pas de chassis type mais voici quelques astuces pour le construire:
Il y a pas de chassis type mais voici quelques astuces pour le construire:
- Placer le capteur à ultrasons en hauteur par rapport au sol (au moins 10 cm) sinon le capteur verra le sol comme un obstacle.
- Les deux roues motrices du robot sont situées à l'avant du robot. Pour la stabilité, il faut mettre au moins une roue à l'arrière. Il est en fait plus judicieux de ne mettre qu'une seule roue et avec une petite surface de contact avec le sol pour qu'il y ait peu de frottement lorsque le robot fait une manoeuvre. S'il y a trop de frottement, le robot risque de mal tourner, voire de ne pas tourner du tout…
- J'ai utilisé des LEGO Technic pour construire le chassis. On peut imprimer des pièces en 3D pour adapter les moteurs aux LEGO; les pièces sont en noir sur la photo (cf le fichier donné dans la section “Matériel Nécessaire”). Ça fonctionne plutôt bien !
- J'ai utilisé un module d'alimentation 5V pour Arduino que l'on peut alimenter avec une pile 9V, ce qui permet au robot d'être indépendant (sans connection avec l'ordinateur).