[Partage] Mise en oeuvre Moteur Shield Arduino V3

Salut à tous,

Voici un petit exemple très basique de mise en œuvre du Moteur Shield Arduino V3 ( version Arduino), pour la mise en œuvre je suis parti sur la gestion d'un petit robot qui doit suivre une ligne noir au sol, un grand classique (cela fait parti d"un projet un peut plus complexe qui sera exposé plus tard).

Au niveau du matos :

  • une carte Arduino uno.
  • un moteur shield Arduino V3.
  • un châssis avec moteur CC 4.5 V (banggood)
  • un bloc 4 piles AA 1.5 V
  • deux capteurs Infra rouge avec carte de contrôle (voir photos plus bas)
  • un bouton poussoir
  • câbles de liaisons.

Photos du robot :

Le robot :


Le câblage des moteurs et alimentation du shield et carte Uno

Capteurs suivi de ligne

Capteurs suivi de ligne et module de connexion

J'ai une seule alimentation pour le moteur shield et la carte Arduino du fait que mes moteurs fonctionnent entre 3 et 4.5 V, sinon il faudrait séparer alimentation Arduino et celle de Puissance pour les moteurs.

Voici le code qui gère la rotation des deux moteurs du robot via la carte moteur shield, et le suivi de ligne via les capteurs ci-dessus, ils retournent un signal T.O.R en fonction de la réflexion ou pas des IR sur ligne noir.

J'utilise des procédures pour la gestion des différents commandes des moteurs, cela facilite la lecture du code dans la boucle loop, je limite aussi le temps de fonctionnement du robot à 10s voir le code.

//Programme commande Robot Ballons Avril 2016 //
 

//Déclraration des varaiables

// Gestion carte moteurs CC
const int vitesseMotA=3; // Constante pour la broche 3
const int sensMotA=12; // Constante pour la broche 12
const int freinMotA=9; // Constante pour la broche 9

const int vitesseMotB=11; // Constante pour la broche 11
const int sensMotB=13; // Constante pour la broche 13
const int freinMotB=8; // Constante pour la broche 8

// Capteurs suivi de ligne
int suivi_G;
int suivi_D;

bool boucle=false;
long temps1;
long temps2;

void setup()
{
 pinMode (vitesseMotA,OUTPUT); // Broche vitesseMotA configurée en sortie
 pinMode (freinMotA,OUTPUT); // Broche freinMotA configurée en sortie
 pinMode (sensMotA,OUTPUT); // Broche sensMotA configurée en sortie
 pinMode (vitesseMotB,OUTPUT); // Broche vitesseMotA configurée en sortie
 pinMode (freinMotB,OUTPUT); // Broche freinMotA configurée en sortie
 pinMode (sensMotB,OUTPUT); // Broche sensMotA configurée en sortie
 pinMode (2, INPUT_PULLUP); // Bonton poussoir de mise en route du robot
 pinMode (4,INPUT);// capteur suivi de ligne gauche broche 4
 pinMode (5,INPUT);// capteur suivi de ligne droite broche 5
 Serial.begin(9600);
 temps1=millis();
  
}

void loop()
{
  int sensorVal = !digitalRead(2); //inversion de la logique du BP du fait du Pullup interne
  suivi_G=digitalRead(4);
  suivi_D=digitalRead(5);
  if (((temps2-temps1) > 10000))
    {
    boucle=false;
    arret();
    }
  
  if ((sensorVal == HIGH || boucle==true) )
  {
    digitalWrite(freinMotA, LOW);// desactivation frein
    digitalWrite(freinMotB, LOW);// desactivation frein
      if (suivi_G==1)
       {
        Serial.println("Gauche");
        gauche(150);
       }
      else if (suivi_D==1)
       {
        Serial.println("Droite");
        droite(150);
       }
      else
       {
        avant(200);
       } 
    boucle=true;
    temps2=millis();
  }
  
   
}

void avant (int PWM)
{
digitalWrite(sensMotA,LOW); // sens 1
analogWrite(vitesseMotA, PWM); 
digitalWrite(sensMotB,LOW); // sens 1
analogWrite(vitesseMotB, PWM); // 
}

void arret()
{
 digitalWrite(freinMotA, HIGH);
 digitalWrite(freinMotB, HIGH);
}

void droite (int PWM)
{
digitalWrite(sensMotA,LOW); // sens 1
analogWrite(vitesseMotA, PWM); 
digitalWrite(sensMotB,HIGH); // sens 2
analogWrite(vitesseMotB, PWM);  
}

void gauche (int PWM)
{
digitalWrite(sensMotA,HIGH); // sens 2
analogWrite(vitesseMotA, PWM); 
digitalWrite(sensMotB,LOW); // sens 1
analogWrite(vitesseMotB, PWM); 
}

Voila, dit moi ce que vous en pensez.
@+