Accueil > Arduino, Matériel > Test de virages avec le Robot 2WD et l’Arduino

Test de virages avec le Robot 2WD et l’Arduino

Aujourd’hui, j’ai testé la possibilité d’effectuer des virages à 90, 180 et 360° de mon robot 2WD. N’ayant pas de codeurs installés sur les roues, mon programme joue sur le délai en ms. Je sais cela manque de précision car pleins de paramètres ne sont pas pris en compte (différentiel moteur gauche et droite, état de la batterie, état du terrain…). Mais il n’y a pas besoin de précision pour créer un robot autonome.

Voici le programme documenté :

/* Programme pour la gestion des virages à
   90°, 180° et 360° pour 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;

int caractere_clavier;

void virage (int angle, boolean sens)
{
  // on va toujours garder une valeur PWM à 200
  // et on va jouer sur la durée en ms pour effectuer le virage souhaité
  // sens à HIGH pour gauche, LOW pour droite
  switch(angle)
  {
    case 90:
              digitalWrite(direction_moteur_gauche, sens);
              digitalWrite(direction_moteur_droite, !sens);
              analogWrite(controle_moteur_gauche, 200);
              analogWrite(controle_moteur_droite, 200);
              delay(480);
              break;
    case 180: digitalWrite(direction_moteur_gauche, sens);
              digitalWrite(direction_moteur_droite, !sens);
              analogWrite(controle_moteur_gauche, 200);
              analogWrite(controle_moteur_droite, 200);
              delay(960);
              break;
    case 360: digitalWrite(direction_moteur_gauche, sens);
              digitalWrite(direction_moteur_droite, !sens);
              analogWrite(controle_moteur_gauche, 200);
              analogWrite(controle_moteur_droite, 200);
              delay(1920);
              break;
           
  }
  analogWrite(controle_moteur_gauche, 0);
  analogWrite(controle_moteur_droite, 0);       
}

void setup()
{
  int i;
  for (i=4;i<=7;i++)
    pinMode(i, OUTPUT); //définit les port 4 à 7 en sortie
  analogWrite(controle_moteur_gauche, 0); // arrêt moteur gauche
  analogWrite(controle_moteur_droite, 0); // arrêt moteur droite
  Serial.begin(9600);
  delay(2000);
  Serial.println("Attente commande :");
}

void loop()
{
  if (Serial.available() > 0)
  {
    caractere_clavier = Serial.read();
    if (caractere_clavier == ‘g’)
    {
      // virage 90° à gauche
      virage(90, HIGH);
    }
    if (caractere_clavier == ‘d’)
    {
      // virage 90° à droite
      virage(90, LOW);
    }
    if (caractere_clavier == ‘a’)
    {
      // virage 180° à gauche
      virage(180, HIGH);
    }
    if (caractere_clavier == ‘p’)
    {
      // virage 180° à droite
      virage(180, LOW);
    }
    if (caractere_clavier == ‘w’)
    {
      // virage 360° à gauche
      virage(360, HIGH);
    }
    if (caractere_clavier == ‘n’)
    {
      // virage 360° à doite
      virage(360, LOW);
    }
  }
}

Bien sûr le délai est à adapter en fonction du type de robot utilisé.

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 :