Dans ce guide, vous allez construire votre propre voiture robot évitant les obstacles basée sur Arduino. La voiture utilise un capteur à ultrasons monté sur un servo-moteur pour détecter les objets devant et de chaque côté de la voiture et un driver moteur à courant continu L293D pour entraîner les quatre moteurs à courant continu à engrenages, un sur chaque roue. La carte Arduino Uno contrôle le driver de chaque moteur, le capteur à ultrasons et le servo-moteur.
Étant donné que les quatre roues sont motrices, nous pouvons en commander par exemple, deux d’un côté de la voiture vers l’avant et deux de l’autre côté vers l’arrière afin de faire tourner la voiture, nous n’avons donc pas besoin d’un mécanisme de direction et la voiture peut faire demi-tour sur place , au lieu d’exiger un mouvement vers l’avant.
Voici une vidéo de la construction et de la voiture en marche. Visionner la vidéo jusque la minute 5’45 » (nous aborderons la programmation de la carte Arduino dans un second temps).
Voici ce dont vous avez besoin pour construire une voiture robot évitant les obstacles
- Arduino Uno – Acheter ici
- Carte Shield moteur – Acheter ici
- Micro Servo – Acheter ici
- Module de capteur à ultrasons – Acheter ici
- 4 moteurs à courant continu à engrenages et roues – Achetez ici
- Batterie 9-12V
- 8 vis à tête creuse M3 x 15 mm – Acheter ici
- Câble ruban – Acheter ici
- Épingles d’en-tête – Achetez ici
Comment construire votre voiture robot
Avant de commencer à construire la voiture robot, jetons un coup d’œil au driver du moteur. Le contrôle des moteurs se fait via une carte shield composée des drivers moteurs qui utilise deux puces de pilote L293D. Il possède également des broches de dérivation d’alimentation, des broches pour connecter deux servos-moteurs.

Vous aurez besoin de souder des broches sur les pins 2 et 13 (demander le modèle de prototypage à l’enseignant).
Chacune des quatre roues de la voiture évitant les obstacles est entraînée par un moteur à courant continu à engrenages, vous devrez attacher un court câble d’alimentation à chacune avec des broches à visser dans les bornes du blindage.
Présentation de l’assemblage de la voiture
Un châssis simple a été conçu pour que la voiture soit imprimée en 3D. Imprimer avec les paramètres suivants (PLA buse de 0.4, buse 200°C, plateau 60°C, hauteur de couche 0.2 mm, épaisseur de paroi 0.8 mm, Nombre de ligne par paroi 4, couches supérieures et intérieures 4, densité de remplissage de l’ordre de 20%, vitesse d’impression 90 mm/s, en terme d’adhérence, prévoir une simple jupe.

Il y a trois composants imprimés, les sections de châssis supérieure et inférieure, puis un support pour le capteur à ultrasons.
Télécharger les fichiers d’impression 3D – Fichiers d’impression 3D
Une fois que vous avez réuni tous vos composants, commençons à assembler la voiture robot évitant les obstacles.
Les composants sont généralement collés en place à l’aide d’un pistolet à colle.
Le servo-moteur et le capteur à ultra-sons seront mis place et collés une fois le châssis, roues, carte Arduino et contrôleur moteur mis en place. Il faudra penser à placer le servo-moteur avec le câble ruban orienté vers l’arrière de la voiture.
Ensuite, collez les moteurs en place en veillant au bon parallélisme ! Essayez de garder le câblage des moteurs à l’extérieur afin de pouvoir y accéder en cas de détachement. Ne vous inquiétez pas des directions dans lesquelles les moteurs tournent, cela peut être changé en échangeant les fils aux bornes du blindage plus tard.
Collez chaque moteur en place sur la plaque inférieure du châssis.
Si vous utilisez une batterie rechargeable, mettez la batterie en place dans la partie centrale entre les moteurs pour libérer de l’espace sur la plaque supérieure du châssis. Une fois la plaque supérieure en place, vous ne pourrez pas accéder à la batterie sans la retirer, alors assurez-vous que tous les câbles dont vous avez besoin pour la recharger sont disponibles à l’arrière de la voiture.
Mettez une goutte de colle sur le dessus de chaque moteur, puis vissez la plaque supérieure du châssis en place.
Ensuite, vissez votre Arduino sur votre plaque de châssis supérieure.
Enficher ensuite le Shield moteur sur la carte Arduino Uno, attention à bien faire correspondre les pattes du shield moteur avec les pins Arduino et à ne pas les tordres.
Vissez maintenant vos moteurs dans chaque paire de bornes. Assurez-vous que chaque moteur est connecté à la bonne paire de bornes, les moteurs avant aux bornes avant et les moteurs arrière aux bornes arrière. Ne vous inquiétez pas encore de la polarité des moteurs, si l’un tourne dans le mauvais sens lorsque vous allumez la voiture, échangez simplement les deux fils pour ce moteur et il tournera alors dans le bon sens.
Mettez une goutte de colle sur les côtés de la voiture pour éloigner les fils des roues afin qu’ils ne se coincent pas pendant que les roues tournent.
Branchez le servo dans les broches d’en-tête du servo 1 sur le shield moteur avec le fil de signal vers l’intérieur.
Faites passer un câble d’alimentation pour votre batterie sous la carte et aux bornes d’alimentation. Si vous n’utilisez pas de batterie rechargeable, placez la batterie dans l’espace entre le servo et l’Arduino, en vous assurant qu’elle ne se coince pas dans le capteur lorsqu’elle se déplace.
Important – Ne branchez pas la batterie sur le shield moteur du moteur et une alimentation dans l’Arduino car vous endommageriez l’Arduino ou le shield moteur. N’oubliez jamais que la batterie connectée au shield moteur, alimente également l’Arduino.
Ensuite, branchez les quatre fils du capteur et sur le blindage. Branchez les fils de terre et Vcc dans les broches de terre et 5V sur le blindage, puis la broche de déclenchement sur la broche 2 et la broche d’écho sur la broche 13.
Enfin, placez les quatre roues sur les motoréducteurs et la voiture est maintenant terminée.
Phasage
Etape 1 :
Imprimer les supports fournis à l’imprimante 3D si nécessaire (ils sont tous imprimés pour cette année !). Réaliser le montage du châssis, des moteurs, des roues, de la carte Arduino et du Shield Moteur conformément à la présentation de l’assemblage de la voiture.
À présent, il s’agit de développer le code à implémenter dans la carte Arduino. Je pourrais vous donner directement le code final, mais cela ne présente aucun intérêt mis à part que ça fonctionnera directement. L’idée est d’avancer progressivement de manière à ce que vous soyez à même de comprendre le code à terme et de faire les ajustements nécessaires. Aussi plusieurs étapes vous sont présentées, phasant progressivement l’implémentation et la mise au point du code.
Étape 2 :
Le robot comme vous le savez dispose de 4 roues motrices. Pour avancer droit, il est nécessaire que toutes les roues tournent dans le même sens de rotation, (cela parait évidement mais vous verrez que ce ne sera pas forcément le cas en fonction du câblage réalisé sur la carte Shield Moteur).
Pour commencer nous allons nous intéresser à un seul moteur pour bien apprendre à le contrôler. Il sera ainsi beaucoup plus aisé par la suite de gérer les 4 moteurs (cela reviendra à du recopiage de code avec quelques aménagements, évidemment !). Pendant que vos camarades s’occupent à monter le châssis, vous pouvez faire vos essais avec un seul moto-réducteur équipé d’une roue.
Télécharger ici le premier programme Arduino et l’ouvrir dans l’IDE Arduino. Il permet la gestion d’un seul moteur, le moteur câblé sur le connecteur M1 de la carte shield moteur.
Installer la bibliothèque Adafruit Motor Shield Library (Dans l’IDE Arduino : Croquis / Inclure une bibliothèque / Gérer les bibliothèques)

Si vous n’arrivez pas à installer la bibliothèque Adafruit Motor Shield Library via le gestionnaire de bibliothèque, télécharger ici la bibliothèque et installer la par « Ajouter la bibliothèque.ZIP ».

Quelques explications sur le code :
#include <AFMotor.h> // on intègre une bibliothèque "AFMotor.h" qui va nous permettre de gérer le moteur
AF_DCMotor rightBack(1) // on crée un ojet de type AF_DCMotor que l'on nomme "rightBack" pour roue arrière droite (ce nom peut être changé). le (1) indique que l'objet rightBack pilotera le moteur raccordé sur le connecteur noté M1 de la carte shield moteur.
Cet objet rightback ainsi crée comporte des attributs et des méthodes (= fonctions en langage orienté objet)
Les deux méthodes dont vous avez besoin sont :
- nomObjet.run(paramètre) : exemple rightBack.run(RELEASE)//cette commande cesse d'alimenter le moteur
- nomObjet.setspeed(paramètre) : exemple rightBack.setspeed(100) // cette commande permet de régler la vitesse de rotation du moteur. Paramètre compris entre 0 et 255.
La méthode .run() prend les paramètres suivants :
- RELEASE : désactive le moteur
- FORWARD : alimente le moteur pour une rotation en sens AVANT
- BACKWARD : alimente le moteur pour une rotation en sens ARRIERE
- Prendre le temps de bien comprendre le code
- Faire plusieurs essais avec des paramètres différents pour les méthodes .run et .setspeed
Étape 3 :
On se propose à présent de commander les 4 moteurs en même temps. Vous devez disposer du châssis avec les moto-réducteurs de montés et équipés de roues.
- À partir du code fourni dans à l’étape 2 (1_testmoteur1.ino), enrichissez le code pour faire fonctionner les 4 moteurs.
- Vérifier les sens de rotation, sinon procéder à la modification pour inverser le sens de rotation (pour information, un moteur à courant continu change de sens de rotation lorsque l’on inverse les polarités d’alimentation).
Étape 4
À cette étape, tous les moteurs doivent tourner dans le même sens lorsqu’une commande FORWARD leur est appliquée dans le code ! Sinon, revenez à l’étape précédente.
L’objectif ici est de suivre le plus longtemps possible une trajectoire rectiligne matérialisée par un scotch noir au sol.
Pour se faire, il faut que tous les moteurs tournent à la même vitesse. Vous allez me dire, si on leur met .setspeed(200) par exemple à chacun c’est bon ! Et non malheureusement !! Pour faire varier la vitesse de rotation d’un moteur à courant continu, il suffit de faire varier sa tension d’alimentation. Cependant les moteurs ne sont pas tous identiques malgré leur apparence et la vitesse du moteur est aussi fonction des couples résistants qui s’opposent à sa rotation. Les réducteurs de vitesses composant les moto-réducteurs (sous le capot jaune) ne sont hélas pas tous identiques. Il en résulte que des vitesses de rotation différentes pour chacun des moto-réducteurs.
- Modifier le code pour obtenir des vitesses de rotation identiques de chacun des moteurs.
- Quand vous êtes prêts, faites valider l’essai le long du scotch noir par le professeur.
Étape 5
Pour vous éviter de chercher trop longtemps, nous vous proposons quelques extraits de programmes opérationnels. Prendre le temps de les comprendre et de les essayer…
Test des 4 moteurs : programme à télécharger
Test des 4 moteurs avec ajustement des vitesses (attention, les correctifs en vitesse à apporter sont forcément différents pour vos moteurs) : programme à télécharger
Test robot avec rotation à droite : programme à télécharger
Test robot avec avance de 1 seconde puis rotation à droite de 1 seconde : programme à télécharger
Réaliser un programme permettant dans l’ordre :
- une avance de 1 seconde
- une rotation à droite de 1 seconde
- une avance de 1 seconde
- une rotation à gauche de 1 seconde
Étape 6
À ce state votre programme commence à être chargé. On s’aperçoit que certains bouts de codes sont répétitifs. La solution est de créer des fonctions !
Les fonctions que nous allons utiliser seront les fonctions suivantes :
- moveForward( ) // Aller en marche avant
- stopMove( ) // Arrêter tous les moteurs
- turnLeft( ) // Tourner à gauche
- turnRight( ) // Tourner à droite
Plus en avant dans le projet nous ajouterons des fonctions supplémentaires :
- accelerate( ) // Accélérer
- decelerate( ) // Décélérer
- getDistance( ) // Obtenir la distance
- checkDirection( ) // Choisir la bonne direction d’évitement selon la position des obstacles détectés par le capteur ultra-sonore.
Prendre connaissance de la vidéo explicative ci-après (reproduire ce qui est fait pour bien comprendre) et réorganiser vos codes jusqu’ici obtenu pour faire apparaitre les fonctions fonctions moveForward, stopMove, turnLeft et turnRight.
Étape 7
Le programme téléchargé utilise les fonctions suivantes (avec paramètre « duration » correspondant à la durée de fonctionnement de l’action) :
- moveForward( duration) // Aller en marche avant
- stopMove( duration) // Arrêter tous les moteurs
- turnLeft( duration) // Tourner à gauche
- turnRight( duration) // Tourner à droite
Ouvrir le fichier dans l’IDE Arduino et prendre le temps de l’analyser.
Le téléverser dans la carte Arduino et vérifier le fonctionnement du robot.
Proposer un scenario différent et exécuter le programme et le faire valider par l’enseignant.
Étape 8
L’heure est venue de gérée la détection de distance par le capteur à ultrasons.
Le programme est partiel, il faut compléter la zone notée /* À compléter : gestion de la distance */ à la ligne 37 du programme Arduino. Le programme de gestion du capteur ultrasonore est déjà fait !
À partir du programme, définir les broches de l’Arduino à utiliser pour câbler le capteur ultrasonore. Réaliser le câblage du capteur.
Compléter le programme Arduino afin de satisfaire au fonctionnement suivant : Si la distance mesurée est supérieure à 25 cm on avance de manière continue, sinon on arrête le robot
Étape 9 : Décélération lors de la détection d’obstacle
L’objectif à présent est de créer une décélération jusqu’à l’arrêt lorsque le robot rencontre un obstacle à moins de 25 cm.
Pour ce faire vous devez pour ce faire :
- Reprendre le précédent programme complété par vos soins satisfaisant à l’arrêt du robot lors de la détection d’obstacle à moins de 25 cm
- Créer une fonction decelerate() permettant au robot de décélérer (pour ce faire, utiliser un boucle For en décrémentant la variable motorSpeedForward.
- Appeler cette fonction dans la partie de programme où le robot détecte un obstacle (au lieu de s’arrêter net, il décélèrera jusqu’à arrêt total)