dimanche 19 avril 2020

Robot suiveur de ligne, version Arduino


Il y a quelques jours, je vous ai proposé la réalisation d'un robot suiveur de ligne basé sur un Raspberry Pi.

Le robot que je vous présente aujourd'hui se comporte de la même façon: grâce à une paire de photorésistances, il peut faire la différence entre une surface claire et une surface sombre, ce qui lui permet de se déplacer en suivant fidèlement une ligne sinueuse sur le plancher­.

La version que je vous présente aujourd'hui a pour cerveau une carte Arduino Uno.




Mise au point du capteur

Le principe de fonctionnement du capteur est le suivant: une LED éclaire la surface du plancher, et une photorésistance capte la lumière réfléchie par le plancher. Si la surface éclairée est blanche, la quantité de lumière réfléchie est plus grande que si la surface est noire. La résistance de la photorésistance ne sera donc pas la même si celle-ci se trouve au-dessus d'une surface blanche ou d'une surface blanche.

Le capteur est donc constitué de deux LEDs blanches, situées de part et d'autre de la ligne qui sera suivie par le robot, et de deux photorésistances, également situées de part et d'autre de la ligne.



Les LEDs seront alimentées par une sortie 5 V de la carte Arduino. Avec une résistance de protection de 120 Ω, on obtient une bonne intensité lumineuse sans risquer de dépasser le courant maximal.

Chaque photorésistance est branchée en série avec une résistance fixe de façon à former un diviseur de tension.  Pour déterminer la valeur optimale de la résistance fixe (celle qui provoquera le plus grand écart de tension entre la surface blanche et la surface noire), mesurez la résistance de la photorésistance lorsque la LED éclaire la surface blanche (Rmin) ainsi que sa résistance lorsque la LED éclaire la surface noire (Rmax).

La valeur optimale de la résistance fixe se calcule ensuite de cette façon:

Rfixe = (Rmin + Rmax )1/2

Chacun des deux diviseurs de tension constitués d'une photorésistance et d'une résistance fixe est alimentée par la sortie 5 V de l'Arduino.

Le signal du capteur de gauche est acheminé à l'entrée analogique A0 de l'Arduino, alors que celui du capteur de droite est branché à l'entrée A1.

Ce double capteur doit être installé à l'avant du véhicule robotisé de façon à éclairer le plancher. Vous obtiendrez de meilleurs résultats en plaçant un petit écran opaque entre la LED et la photorésistance, afin que cette dernière reçoive uniquement la lumière réfléchie par le plancher (et non celle qui provient directement de la LED).





Branchement des moteurs

Le véhicule robotisé est constitué de deux roues motrices, chacune d'entre elles étant actionnée par un moteur à courant continu.  Il est très important que ces moteurs comportent une boîte d'engrenage pour diminuer leur vitesse de rotation: un moteur à courant continu directement relié à la roue, sans boîte d'engrenage, produirait un bolide beaucoup trop nerveux pour suivre la ligne.



Comme intermédiaire entre la carte Arduino et les moteurs, j'ai utilisé un module L298N. D'autres options auraient fait l'affaire, surtout que je n'ai pas besoin de mettre les moteurs en marche arrière dans ce projet (mais c'était pratique d'utiliser le même matériel et les mêmes connexions que pour mon robot préprogrammé et mon robot éviteur d'obstacles).


Le module L298N est branché de la façon suivante:

  • Sorties OUT1 et OUT2 du L298N: premier moteur
  • Sorties OUT3 et OUT4 du L298N: deuxième moteur
  • Entrées +12 V et GND du L298N: alimentation des moteurs
  • Broche ENA du L298N: broche 9 de l'Arduino
  • Broche IN1 du L298N: broche 3 de l'Arduino
  • Broche IN2 du L298N: broche 4 de l'Arduino
  • Broche IN3 du L298N: broche 5 de l'Arduino
  • Broche IN4 de L298N: broche 6 de l'Arduino
  • Broche ENB du L298N: broche 10 de l'Arduino
L'alimentation des moteurs (adaptée aux caractéristiques de vos moteurs, donc pas nécessairement 12 V) n'est pas la même que l'alimentation de l'Arduino (qui était, dans mon cas, une alimentation USB portative de 5 V).


Sketch

Au démarrage du programme, le robot doit être correctement positionné, avec un capteur de chaque côté de la ligne. Deux secondes après le démarrage du programme, la valeur initiale de chaque capteur est mise en mémoire.

On fait ensuite avancer le robot en comparant périodiquement l'état de chaque capteur à sa valeur initiale. Si la valeur mesurée par un capteur est significativement différente de la valeur initiale, on suppose qu'il se trouve au-dessus de la ligne et on le fait tourner pour éviter qu'il ne la traverse.

Il sera peut-être nécessaire de modifier la valeur des variables globales  "sensibilite" et "vitesse".

-
-

À lire aussi



Yves Pelletier (TwitterFacebook)

2 commentaires:

  1. version sur esp8266

    https://github.com/arnaudrco/festisol/blob/main/voiture/read-me-voiture.pdf

    RépondreSupprimer