Projet de Robot Suiveur de Ligne
1. Objectif du projet
Le projet consistait à développer un robot capable de suivre une trajectoire prédéfinie à l’aide de capteurs infrarouges détectant une ligne blanche réfléchissante sur un sol gris. Le robot devait maintenir une vitesse constante tout en suivant la ligne de manière autonome.
2. Cahier des charges
L'objectif était de concevoir un robot répondant aux spécifications suivantes :
- Vitesse constante : 10 cm/s.
- Précision de suivi de trajectoire : ±5 cm.
- Contrôle des moteurs : Utilisation de la modulation de largeur d’impulsion (PWM) avec une fréquence de 1 kHz.
3. Présentation du robot - Hardware
Le robot est équipé de plusieurs composants essentiels :
- Carte microcontrôleur Nucleo L476RG : Cette carte a été utilisée pour contrôler les différents éléments du robot.
- Capteurs infrarouges : Deux capteurs infrarouges sont placés à l’avant du robot pour détecter la réflexion de la lumière sur une ligne blanche. Ces capteurs permettent au robot de suivre la ligne en temps réel.
- Moteurs à chenilles : Le robot se déplace grâce à deux moteurs à chenilles contrôlés via une modulation de largeur d’impulsion (PWM).
- Batterie : Le robot est alimenté par une batterie surveillée en permanence pour éviter les pannes dues à une décharge excessive.
4. Surveillance de la batterie via ADC avec un analog watchdog
Le système utilise un ADC pour convertir la tension de la batterie en une valeur numérique que le microcontrôleur peut lire et surveiller. Un analog watchdog est configuré pour déclencher une alerte si la tension de la batterie dépasse les seuils prédéfinis hauts ou bas. Ce qui protège le robot contre les conditions de batterie faible ou surchargée, évitant ainsi les arrêts inattendus ou les dommages au système.
5. Développement du code
Le développement du code a été réalisé avec l’environnement de développement intégré (IDE) STM32CubeIDE, utilisant le langage C. Voici les principaux composants du développement du code :
Boucle Principale
Initialement, les LEDs émettrices des capteurs sont activées, suivies par le lancement du timer 6 (Le timer 6 génère des interruptions à intervalles réguliers pour initier les conversions ADC qui mesurent les valeurs des capteurs et de la batterie du robot). Les moteurs sont ensuite mis en marche avec un rapport cyclique ajusté à 23000, basé sur des mesures expérimentales effectuées avec un chronomètre et un mètre. La logique de traitement des signaux captés par les capteurs 3 et 4 est mise en œuvre comme suit :
- Lorsque la valeur détectée par le capteur 3 (capteur gauche) est inférieure au seuil établi, indiquant la présence de gris, le moteur gauche recule tandis que le moteur droit avance, permettant ainsi au robot de se réaligner correctement avec la ligne.
- Si c’est le capteur 4 (capteur droit) qui détecte une valeur inférieure au seuil, les moteurs ajustent leurs mouvements de façon inverse : le moteur gauche avance et le moteur droit recule.
- Si les deux capteurs détectent le blanc, cela indique que le robot doit continuer à avancer sans ajustement.
- En cas de détection du gris par les deux capteurs, le robot s’arrête, jusqu’à ce que l’un des capteurs détecte la trajectoire à nouveau.
Ces opérations sont effectuées à condition que la variable start
soit activée (valeur de 1). Si start
est désactivée (valeur de 0), les moteurs s’arrêtent, plaçant le robot en état de pause.
Les interruptions du projet
Dans notre projet, quatre callbacks principaux ont été implémentés :
- Callback de l’analog watchdog : Ce callback est activé lorsque la tension de la batterie descend en dessous d’un seuil prédéfini. Il a pour rôle d’allumer la LED LD2 (configurée en sortie GPIO), servant ainsi d’indicateur visuel pour prévenir l’utilisateur que la batterie est faible.
- Callback du timer6 : Déclenché toutes les 10 millisecondes, ce callback est essentiel pour initier les conversions ADC à intervalles réguliers, garantissant ainsi une surveillance continue des capteurs et de la batterie.
- Callback lié au bouton start : Ce callback est exécuté à chaque pression sur le bouton bleu. Il modifie l’état de la variable
start
en utilisant un XOR avec 1, permettant ainsi de basculer entre l’état actif et inactif du robot.
- Callback de fin de conversion ADC : Il est appelé après chaque conversion complète par l’ADC : il incrémente le compteur
cpt
, stocke la valeur de l’ADC en fonction de ce compteur, et réinitialise le compteur après trois conversions pour préparer le cycle suivant.
6. Options supplémentaires
Filtre anti-rebond : Un filtre anti-rebond a été ajouté pour éviter que des interruptions multiples soient déclenchées lors de l’appui sur le bouton de démarrage. Ce filtre empêche les erreurs en ne prenant en compte que la première pression.
Learn more about this project here