Accueil > Arduino, Matériel > Robot 2WD en tant que suiveur de ligne

Robot 2WD en tant que suiveur de ligne

Aujourd’hui, j’ai finalisé mon petit projet de configuration de mon robot 2WD suiveur de ligne.

Pour cela j’y ai installé 3 capteurs suiveur de ligne SEN0017 dont voici la photo :

2013-03-14 08.36.41

Afin de pouvoir y effectuer les branchements, j’ai également un petit breadboard noir :

2013-03-14 08.36.15

Le programme qui permet de piloter l’ensemble est le suivant :

/* Programme suiveur de ligne utilisant le robot 2WD */

// définition des broches utilisées sur le shield contrôle moteur DRI0001
int direction_moteur_droite = 7;
int controle_moteur_droite = 6;
int direction_moteur_gauche = 4;
int controle_moteur_gauche = 5;

// définition des 3 capteurs suiveurs de ligne SEN0017
int capteurgauche = 10;
int capteurcentre = 9;
int capteurdroite = 8;
boolean gauche;
boolean centre;
boolean droite;

void moteur (int moteur_gauche, boolean sens_moteur_gauche, int moteur_droite, boolean sens_moteur_droite)
{
  // définition sens moteur LOW avance, HIGH recule
  digitalWrite(direction_moteur_gauche, sens_moteur_gauche);
  analogWrite(controle_moteur_gauche, moteur_gauche);
  digitalWrite(direction_moteur_droite, sens_moteur_droite);
  analogWrite(controle_moteur_droite, moteur_droite);
}

void lecture_capteur ()
{
  // noir = false, blanc = true
  gauche = digitalRead(capteurgauche);
  centre = digitalRead(capteurcentre);
  droite = digitalRead(capteurdroite);
}

void setup ()
{
  int i;
  for (i=4;i<=7;i++)
    pinMode(i, OUTPUT); //définit les port 4 à 7 en sortie
  for (i=8;i<=10;i++)
    pinMode(i, INPUT); //définit les port 8 à 10 en entrée
  moteur(0,LOW, 0, LOW);
  delay(2000);
}

void loop ()
{
  lecture_capteur();
  while (gauche==true && centre==false && droite==true)
  {
    // le capteur central uniquement capte le noir, on avance
    moteur(150, LOW, 150, LOW);
    lecture_capteur();
  }
  if (gauche==false && centre==false && droite==false)
  {
    // c’est un croisement, on continue à avancer
    moteur(150, LOW, 150, LOW);
  }
  if ((gauche==false && centre==false && droite==true) || (gauche==false && centre==true && droite==true))
  {
    // virage à gauche
    centre = true;
    while (centre==true)
    {
      moteur(150, HIGH, 150, LOW);
      lecture_capteur();
    }
    moteur(150, LOW, 150, LOW);
  }
  if ((gauche==true && centre==false && droite==false) || (gauche==true && centre==true && droite==false))
  {
    // virage à droite
    centre = true;
    while (centre==true)
    {
      moteur(150, LOW, 150, HIGH);
      lecture_capteur();
    }
    moteur(150, LOW, 150, LOW);
  }
}

 

Bien sûr le code peut être amélioré mais il fonctionne dans son ensemble; attention à la lumière ambiante et à la vitesse des moteurs.

Le résultat en vidéo est le suivant :

Publicités
Catégories :Arduino, Matériel Étiquettes : , ,
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :