Notice: Use of undefined constant CONTENT_MODEL_CSS - assumed 'CONTENT_MODEL_CSS' in /home/arobose/domains/arobose.com/public_html/wiki/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php on line 75 Notice: Use of undefined constant CONTENT_MODEL_JAVASCRIPT - assumed 'CONTENT_MODEL_JAVASCRIPT' in /home/arobose/domains/arobose.com/public_html/wiki/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php on line 76 Robot suiveur de ligne - Wiki Arobose

Robot suiveur de ligne

De Wiki Arobose

Un robot suiveur de ligne est un robot mobile qui va se déplacer en suivant une ligne (par exemple une ligne noire sur fond blanc). C'est un robot autonome très simple à concevoir.

Sommaire

Matériel

Pour réaliser ce robot, nous avons besoin d'un chassis, d'une carte de commande et de capteurs :

Principe général

Le robot doit suivre la ligne noire grâce aux capteurs niveau de gris. Si le capteur détecte du noir, le robot va tout droit. Si le capteur détecte du blanc, le robot a dévié de la ligne et doit donc corriger sa trajectoire.

Tests

Robot avec un seul capteur

Pour commencer, nous allons installer un seul capteur sur notre robot.

Principe

Avec un seul capteur, il faut placer le robot à cheval sur la ligne (blanc à gauche et noir à droite). Si le capteur détecte du blanc, le robot doit corriger en allant à droite et inversement si le capteur détecte du noir, le robot doit corriger en allant sur la gauche. Si le capteur détecte une nuance entre les deux, le robot va tout droit.

Programme

Les fonctions sur le convertisseur analogique / numérique et le déplacement du robot sont expliqués ici. La valeur du blanc est 55 et celle du noir est 260. On estime que la nuance de gris pour aller tout droit se situe entre 130 et 170. En dessous de cette nuance (inférieur à 130), le robot se dirige vers le blanc et doit tourner vers la droite en ralentissant son moteur droit. Au dessus de cette nuance (supérieur à 170), le robot se dirige vers le noir et doit tourner vers la gauche en ralentissant son moteur gauche.

void
setup(void)
{
  adc_setup();
  motor_setup();
}
 
int
main(void)
{
  setup();
 
  while (1)
    {
      int niveau_gris = adc_read(0);
 
      if ((niveau_gris >= 130) && (niveau_gris <= 170))
        {
          // avance
          advance(100, 100);
        }
      else if (niveau_gris < 130)      // blanc
        {
          // corrige a droite
          advance(50, 100);
        }
      else      // noir (gris > 170)
        {
          // corrige a gauche
          advance(100, 50);
        }
    }
}

Conclusion

Cette solution fonctionne très bien mais si le robot perd le bord de la ligne, il va tourner en rond sans jamais la retrouver. Pour éviter ce problème, il faut placer plusieurs capteurs en ligne.

Outils personnels
Catégories