Robot autonome évitant les obstacles
Fiche projet détaillée pour concevoir, câbler et programmer un robot mobile qui détecte et évite les obstacles de manière autonome, en utilisant un capteur ultrason et une logique de décision simple.
Imaginez un aspirateur robot qui nettoie votre salon sans jamais heurter les meubles, ou un rover qui explore une planète inconnue en contournant les rochers. Ces machines doivent prendre des décisions en temps réel sans intervention humaine. La problématique est la suivante : comment un robot peut-il « décider » seul de changer de direction lorsqu’un obstacle se présente ? Ce projet vous permettra de construire un robot capable de détecter un obstacle avec un capteur à ultrasons et de réagir en tournant pour l’éviter, en programmant une logique de décision simple sur Arduino.
Objectifs pédagogiques
- Comprendre le principe de fonctionnement d’un capteur à ultrasons (émission d’une onde, mesure du temps de retour) et le câbler correctement sur une carte Arduino.
- Savoir utiliser un driver moteur L298N pour commander deux moteurs DC en sens et en vitesse, avec une alimentation séparée pour la logique et la puissance.
- Programmer une boucle de décision autonome (mesure de distance → comparaison → action : avancer, tourner) en langage Arduino (C++ simplifié).
- Tester, diagnostiquer et corriger les erreurs de câblage et de code pour obtenir un comportement fiable du robot.
Matériel nécessaire
- Châssis 2 roues + roue folle (type Smart Robot Car Kit, compatible Arduino)
- Arduino Uno (ou compatible, avec câble USB)
- Capteur ultrason HC-SR04 (broches VCC, Trig, Echo, GND)
- Driver moteur L298N (pont en H double, avec borniers pour moteurs et alimentation)
- 2 moteurs DC (3-6 V, avec roues adaptées au châssis)
- Support piles (6 piles AA ou batterie 7,4 V LiPo, avec interrupteur)
Étapes du projet
Assemblage mécanique du châssis
Dans cette première étape, vous allez monter le châssis en fixant les deux moteurs DC sur les supports prévus, puis en installant la roue folle à l’avant ou à l’arrière selon le modèle. Veillez à ce que les roues soient bien alignées et que les moteurs soient solidement vissés pour éviter les vibrations. Ensuite, placez la carte Arduino et le driver L298N sur le châssis à l’aide d’entretoises, en prévoyant un accès facile aux connecteurs. Enfin, fixez le capteur ultrason à l’avant du robot, idéalement sur une petite platine orientable, de manière à ce qu’il soit dirigé droit devant et ne soit pas obstrué par les roues.
Câblage de l’alimentation et du driver moteur
Le driver L298N nécessite deux alimentations distinctes : une pour la logique (5 V, souvent prélevée sur l’Arduino) et une pour les moteurs (6-12 V, fournie par le support piles). Connectez la borne +12V du driver à la borne positive du support piles, et la borne GND du driver à la fois au GND de l’Arduino et au négatif des piles (masse commune). Branchez ensuite les deux moteurs sur les sorties OUT1/OUT2 et OUT3/OUT4 du driver. Pour commander le driver, reliez ses entrées IN1, IN2, IN3, IN4 à quatre broches numériques de l’Arduino (par exemple 8, 9, 10, 11) et les broches ENA et ENB à des broches PWM (par exemple 5 et 6) pour contrôler la vitesse. Vérifiez que tous les branchements sont bien serrés et qu’aucun fil ne touche une partie métallique du châssis.
Câblage du capteur ultrason HC-SR04
Le capteur HC-SR04 possède quatre broches : VCC (5 V), Trig (émission de l’impulsion), Echo (réception de l’écho) et GND. Connectez VCC à la broche 5 V de l’Arduino, GND à une broche GND, Trig à une broche numérique (par exemple 7) et Echo à une autre broche numérique (par exemple 6). Attention : la broche Echo renvoie un signal 5 V, ce qui est compatible avec l’Arduino. Pour éviter des parasites, utilisez des fils de liaison courts et si possible torsadés. Placez le capteur de manière à ce qu’il soit orienté vers l’avant, à environ 5 cm du sol, et qu’il ne soit pas masqué par des câbles ou des supports.
Programmation de la mesure de distance
Ouvrez l’IDE Arduino et créez un nouveau sketch. Dans la fonction setup(), initialisez la communication série (Serial.begin(9600)) et définissez les broches Trig et Echo en sortie et entrée. Dans la fonction loop(), écrivez une fonction mesureDistance() qui envoie une impulsion de 10 microsecondes sur Trig, puis mesure la durée de l’écho avec pulseIn(Echo, HIGH). Convertissez cette durée en centimètres en utilisant la formule : distance = duree * 0.034 / 2 (car le son parcourt 340 m/s et fait un aller-retour). Affichez la distance dans le moniteur série et ajoutez un délai de 100 ms pour éviter des mesures trop rapprochées. Testez en plaçant un obstacle à différentes distances et vérifiez que les valeurs sont cohérentes.
Programmation de la logique d’évitement
Maintenant que vous mesurez la distance, vous allez programmer la réaction du robot. Définissez un seuil de détection, par exemple 30 cm. Dans la boucle loop(), si la distance mesurée est supérieure à ce seuil, le robot doit avancer tout droit : pour cela, activez les deux moteurs en avant (par exemple IN1=HIGH, IN2=LOW, IN3=HIGH, IN4=LOW) avec une vitesse PWM de 150 sur ENA et ENB. Si la distance est inférieure ou égale au seuil, le robot doit reculer un peu (moteurs en arrière pendant 500 ms), puis tourner à droite (moteur gauche avant, moteur droit arrêté ou en arrière) pendant 500 ms, puis recommencer à mesurer. Utilisez des fonctions comme avancer(), reculer(), tournerDroite() pour rendre le code lisible. Testez le comportement sur une surface plane et ajustez les durées et vitesses si nécessaire.
Tests, réglages et finalisation
Placez le robot sur le sol, allumez l’alimentation et observez son comportement. S’il heurte les obstacles, réduisez la vitesse ou augmentez le seuil de détection. S’il tourne trop longtemps, ajustez la durée de la rotation. Vérifiez que les moteurs ne chauffent pas excessivement et que le capteur ne donne pas de valeurs erronées à cause de reflets sur des surfaces lisses. Vous pouvez ajouter un délai après chaque action pour stabiliser le robot. Une fois le comportement satisfaisant, fixez définitivement tous les composants avec du ruban adhésif double face ou des vis, et rangez les câbles avec des colliers de serrage. Documentez votre code avec des commentaires et préparez une courte démonstration.
⚠️ Points de vigilance
- ⚠️Sécurité électrique : ne jamais brancher/débrancher les fils d’alimentation lorsque le robot est sous tension ; risque de court-circuit et d’endommagement des composants.
- ⚠️Sens des moteurs : vérifier que les deux moteurs tournent dans le même sens pour avancer ; inverser les fils d’un moteur si nécessaire (IN1/IN2 ou IN3/IN4).
- ⚠️Alimentation séparée logique/puissance : ne pas alimenter les moteurs via la broche 5V de l’Arduino ; utiliser une batterie dédiée pour les moteurs et relier les masses.
- ⚠️Distance de détection : le capteur HC-SR04 a une zone morte d’environ 2 cm ; placer l’obstacle à au moins 5 cm pour des mesures fiables.
- ⚠️Fixation du capteur : le capteur doit être solidement fixé et orienté horizontalement ; un capteur mal fixé peut donner des mesures aléatoires.
❌ Erreurs fréquentes à éviter
❌ Le robot tourne en rond sans s’arrêter.
✅ Solution : Vérifiez que la mesure de distance est correcte (affichez-la dans le moniteur série). Si elle est toujours à 0, le capteur est mal câblé ou la broche Echo n’est pas configurée en entrée. Si elle est toujours à une valeur fixe, le capteur est peut-être obstrué ou trop proche du sol.
❌ Les moteurs ne tournent pas.
✅ Solution : Vérifiez l’alimentation des moteurs (tension sur la borne +12V du L298N). Assurez-vous que les broches ENA/ENB sont connectées à des broches PWM et que la valeur de vitesse est > 0. Contrôlez aussi les connexions des moteurs sur OUT1/OUT2 et OUT3/OUT4.
❌ Le capteur renvoie toujours 0.
✅ Solution : Vérifiez que VCC est bien sur 5V et GND sur GND. Assurez-vous que les broches Trig et Echo sont correctement définies dans le code (Trig en sortie, Echo en entrée). Si le problème persiste, testez le capteur seul avec un exemple simple (exemple 'Ping' de l’IDE Arduino).
❌ Le robot avance en biais ou ne tourne pas droit.
✅ Solution : Les deux moteurs peuvent avoir des vitesses légèrement différentes. Ajustez les valeurs PWM de ENA et ENB (par exemple 150 pour un, 155 pour l’autre). Vérifiez aussi que les roues sont bien fixées et que le châssis est équilibré.
❌ Le robot ne réagit pas aux obstacles proches.
✅ Solution : Le seuil de détection est peut-être trop bas (ex : 10 cm). Augmentez-le à 30 ou 40 cm. Vérifiez aussi que le capteur est bien orienté vers l’avant et qu’il n’est pas masqué par des câbles. Si l’obstacle est très fin (ex : pied de table), le capteur peut ne pas le détecter.
💡 Conseils du prof
- 💡Commencez par tester chaque sous-ensemble séparément : d’abord le capteur seul (affichez la distance), puis les moteurs seuls (faites avancer/reculer), avant de tout intégrer.
- 💡Utilisez des couleurs de fils différentes pour l’alimentation (rouge pour VCC, noir pour GND) afin de faciliter le débogage.
- 💡Prévoyez un interrupteur sur l’alimentation des moteurs pour pouvoir couper rapidement le robot en cas de comportement inattendu.
- 💡Encouragez les élèves à noter leurs réglages (seuil, vitesses, durées) dans un cahier de laboratoire pour pouvoir reproduire un bon comportement.
- 💡Pour les groupes en difficulté, proposez un code commenté avec des fonctions prêtes à l’emploi, mais laissez-les câbler et ajuster les paramètres.
🚀 Pour aller plus loin
- 🚀Ajouter un deuxième capteur ultrason sur le côté pour détecter les obstacles latéraux et améliorer la navigation.
- 🚀Intégrer un module Bluetooth HC-05 pour commander le robot à distance depuis un smartphone (application Arduino Bluetooth Controller).
- 🚀Programmer un mode suivi de ligne en ajoutant deux capteurs infrarouges (type TCRT5000) et en modifiant la logique de décision.
