Site icon La programmation sur le web

Robot suiveur de ligne, version Arduino

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

Robot suiveur sous Arduino

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 :

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

Photo du dessus de la partie capteur du robot suiveur

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) :

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 :

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.

Quitter la version mobile