Tout bon débutant en programmation Arduino a envie de passer à un projet concret mais attention, tu devras procéder par étapes. Se lancer dans un robot complexe peut être frustrant si l’on obtient pas ce que l’on souhaite mais même si celui-ci est fonctionnel, l’apprentissage peut être incomplet avec des difficultés à comprendre ce qui a été réalisé.
Dans ce sens, la réalisation d’un robot suiveur est une première étape et ne nécessitera que peu de connaissance, ce tuto est donc destiné à des novices.
Rôle du robot suiveur
Ce robot suit un itinéraire tracé au sol. Le principe est de disposer une ligne noir sur un sol clair. Les capteurs des robots détecte cette ligne et la suive.
Voici un exemple de robot suiveur :
Ce robot est bien plus pédagogique qu’utile quoi que des systèmes similaires dans des hangars peuvent permettre de transporter des cartons d’un point A à un point B, voir la seconde vidéo :
Matériels nécessaires
Pour la réalisation de ce robot (pas celui des vidéos), tu vas avoir besoin :
- 2 moteurs à courant continu 5V avec un réducteur afin de ne pas faire une sortie de piste, vers le lien Amazon.
- 1 module L298N pour le contrôle des moteurs et ne pas grillé ta carte Arduino, vers le lien Amazon.
- 1 carte Arduino UNO, vers le lien Amazon.
- 1 boitier de pile, voir le lien Amazon.
- 2 led blanche, voir le lien Amazon.
- 2 photo résistance, voir le lien Amazon.
- des résistances, voir le lien Amazon.
- 1 carte de prototypage, voir le lien Amazon.
- différents fils pour la connexion, voir le lien Amazon.
- 1 chassis, le modèle présenté sur le lien possède le boitier pour batterie ainsi que des moteurs, ceux-là risque d’être bien trop rapide pour notre projet mais pourront être réutilisés, voir le lien Amazon.
Avec tout cela, tu devrais avoir ce qu’il te faut. Si tu es amené à faire à faire d’autres projets, je t’invite à éviter les petits lots. Les liens Amazon me permettent de gagner quelques euros dans le mois (pas plus) qui me paie mon nom de domaine et l’hébergement du site.
Montage du robot suiveur
Afin de réaliser un robot suiveur, nous allons devoir assembler tous les composants.
Mise au point du capteur
Le principe du capteur est relativement simple, il est composé de deux éléments.
Emission de la lumière
2 leds émettent une lumière blanche pour bien éclairer le sol, en augmentant ainsi le contraste entre le sol et la ligne blanche.
La valeur de la résistance est à déterminer en fonction de l’alimentation (ici le 5 V de l’arduino), pour déterminer facilement quelle valeur est nécessaire, je vous laisse suivre ce lien sur http://fantaisyland.fr/. tu prendras une résistance de 140 ohms.
La photo-résistance
Pour la photo-résistance, tu devras déterminer sa valeur en prenant la valeur de la résistance lorsque la surface claire est éclairée et lorsque la bande noire est éclairée. avec les valeurs obtenues :
Rfixe = (Rmin + Rmax )1/2
Attention, la somme des deux résistances doit être divisée par 2. En fonction des valeurs Rmin et Rmax, ta résistance fixe variera.
Afin de ne pas polluer la valeur de la photo-résistance par l’émission de la led, tu as deux possibilités (que tu peux combiner) :
- mettre un écran entre la led et la photo-résistance
- faire en sorte que la led soit en arrière de la photo-résistance (pas derrière mais ne retrait)
Pour le câblage sur l’Arduino, la photo-résistance de gauche est connecté à l’entrée analogique A0 et celle de droite à l’entrée A1.
Les moteurs
Afin d’éviter que ton robot ne s’emballe, sa vitesse ne doit pas être trop rapide, d’où l’utilisation de moteur 5 V avec un réducteur.
Le pont L298N
Le module L298N permet de pouvoir fournir la puissance nécessaire au moteur sans tirer directement sur l’Arduino (dont les sorties ne supporterait certainement pas ce choc). L’Arduino commandera le pont qui lui fournira la puissance (pour plus de détails, voir sur ardwinner.jimdofree.com.
Concernant le câblage, le voici :
- 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
Alimentation
Comme je l’ai dit tout de suite, l’Arduino ne peut pas fournir la puissance nécessaire aux moteurs, il faut donc une alimentation externe adaptatée aux caractéristiques de vos moteurs.
Pour alimenter l’Arduino, tu peux passer par une alimentation sur le port USB ou te brancher sur l’alimentation externe des moteurs, si celle-ci est bien de 5V, attention cependant, la demande en courant des moteurs pourrait ne plus être suffisante.
Programme Arduino
Dans votre Arduino, tu vas saisir :
/* Robot suiveur de ligne à base d'Arduino Uno. Pus d'informations: https://electroniqueamateur.blogspot.com/2020/04/robot-suiveur-de-ligne-version-arduino.html */ // définition des broches #define capteurGauche A0 #define capteurDroite A1 #define brocheMoteur1a 3 // Premier moteur #define brocheMoteur1b 4 // Premier moteur #define brocheEnable1 9 // broche enable du L298N pour le premier moteur #define brocheMoteur2a 5 // Deuxième moteur #define brocheMoteur2b 6 // Deuxième moteur #define brocheEnable2 10 // broche enable du L298N pour le deuxième moteur const int sensibilite = 50; // écart admissible par rapport à la valeur initiale int initialDroite; // état initial du capteur de droite int initialGauche; // état initial du capteur de gauche int vitesse = 600; // 0 à 1023 PWM qui contrôle la vitesse des moteurs void setup() { // réglage des sorties pinMode(brocheMoteur1a, OUTPUT); pinMode(brocheMoteur1b, OUTPUT); pinMode(brocheEnable1, OUTPUT); pinMode(brocheMoteur2a, OUTPUT); pinMode(brocheMoteur2b, OUTPUT); pinMode(brocheEnable2, OUTPUT); // on demeure immobile pour l'instant digitalWrite(brocheEnable1, 0); digitalWrite(brocheEnable2, 0); // réglage en marche avant digitalWrite(brocheMoteur1a, HIGH); digitalWrite(brocheMoteur1b, LOW); digitalWrite(brocheMoteur2a, HIGH); digitalWrite(brocheMoteur2b, LOW); delay(2000); // on se donne le temps de placer le robot à son point de départ // lecture des valeurs initiales (on suppose que les capteurs sont de part et d'autre de la ligne) initialDroite = analogRead(capteurDroite); initialGauche = analogRead(capteurGauche); } void loop() { int valeurDroite, valeurGauche; valeurDroite = analogRead(capteurDroite); valeurGauche = analogRead(capteurGauche); if ((abs(valeurDroite - initialDroite) < sensibilite) && (abs(valeurGauche - initialGauche) < sensibilite)) { // on continue tout droit analogWrite(brocheEnable1, vitesse); analogWrite(brocheEnable2, vitesse); } else if ((abs(valeurDroite - initialDroite) < sensibilite) && (abs(valeurGauche - initialGauche) >= sensibilite)) { // on tourne à gauche digitalWrite(brocheEnable1, 0); analogWrite(brocheEnable2, vitesse); } else if ((abs(valeurDroite - initialDroite) >= sensibilite) && (abs(valeurGauche - initialGauche) < sensibilite)) { // on tourne à droite analogWrite(brocheEnable1, vitesse); digitalWrite(brocheEnable2, 0); } else { // on s'arrête digitalWrite(brocheEnable1, 0); digitalWrite(brocheEnable2, 0); } delay(100); }
Utilisation du robot suiveur
A la mise sous tension, le robot devra être bien positionné afin qu’il prenne en mémoire les valeurs initiales.
Ce tutoriel a été vu sur l’excellent electroniqueamateur.blogspot.com.