Nous avons vu comment piloter un moteur CC en utilisant un pont en H ce qui peut nécessiter beaucoup de branchement lorsqu’on utilise le circuit intégré simplement. Pour une application embarquée, comme un robot Rovy, vous serez amené à piloter plusieurs moteurs en parallèle. Ils existent pour cela des Shields qui simplifieront le montage.

Le Shield utilisé dans ce tutoriel est le Motor Shield V1 de chez Adafruit. Votre Shield peut être différent et utiliser une configuration des broches et une librairie différente.

Prérequis : Programmer avec Arduino

Matériel

  • Ordinateur
  • Arduino UNO x1
  • câble USB pour connecter l’Arduino à l’ordinateur x1
  • Moteur CC x1
  • Motor Shield V1 x1

Présentation du Motor Shield V1

Le Motor Shield utilise le pont en H L293D et le circuit intégré 74HC595N. Il utilise les broches suivantes:

  • Digital pin 11: DC Motor #1 / Stepper #1 (activation/vitesse)
  • Digital pin 3: DC Motor #2 / Stepper #1 (activation/vitesse)
  • Digital pin 5: DC Motor #3 / Stepper #2 (activation/vitesse)
  • Digital pin 6: DC Motor #4 / Stepper #2 (activation/vitesse)
  • Digital pin 4, 7, 8 et 12 pour la communication avec le 74HC595
  • Digitals pin 9 et 10 pour les servomoteurs 1 et 2

Dans le cas d’un shield, les branchements sont prédéfinis. Vérifiez bien dans la documentation technique du composant comment l’utiliser (Motor Shield V1 datasheet).

Code pour piloter des moteurs CC

Pour interagir avec le Motor Shield V1, nous utilisons la librairie AFMotor.h. Pour piloter un moteur CC, nous allons la classe AF_DCMotor dont les fonctions à connaitre sont:

  • motor.run() pour activer le moteur dans un sens ou dans l’autre (RELEASE,BACKWARD,FORWARD).
  • motor.setSpeed() pour régler la vitesse
/*----------------------------------------------------------------------
  * Summary : Permet de tester un moteur CC
  * Hardware :
   - Arduino UNO x1
   - Motor Shield V1 x1
   - Moteur CC x1
* www.aranacorp.com
----------------------------------------------------------------------*/
//Librairies
#include <AFMotor.h>
//Constants
const int motorspeed=200;
//Parameters
AF_DCMotor motorG(1);

void setup() {
  // Code d'initialisation :s'exécute une seule fois
  Serial.begin(9600);
  Serial.println("Test moteur");

  motorG.setSpeed(motorspeed);
  motorG.run(RELEASE);

}

void loop() {
  // Code principal: s'exécute de manière répétitive
  Serial.println("-------------------------------------");
  Serial.println("Avant ");
  motorG.run(FORWARD);
  delay(500);
  Serial.println("Arrière ");
  motorG.run(BACKWARD);
  delay(500);
  Serial.println("Arrêt ");
  motorG.run(RELEASE);
  delay(1000);
}

Code pour piloter des moteurs pas-à-pas

Pour piloter les moteurs pas-à-pas nous allons utiliser la classe AF_Stepper dont les fonctions à connaitre sont:

  • motor.setSpeed(vitesse) pour régler la vitesse
  • motor.step(nombre de pas, direction, algortihme) pour tourner d’un nombre de pas dans un sens ou dans l’autre

Ceci est l’exemple tiré de la librairie.

#include <AFMotor.h>
#define NB_OF_STEPS 100
// Connect a stepper motor with 48 steps per revolution (7.5 degree)
// to motor port #1 (M1 and M2)
AF_Stepper motor(48, 1);
void setup() {
 Serial.begin(9600);           // set up Serial library at 9600 bps
 Serial.println("Stepper test!");
 motor.setSpeed(10);  // 10 rpm   
}
void loop() {
 Serial.println("Single coil steps");
 motor.step(NB_OF_STEPS, FORWARD, SINGLE); 
 motor.step(NB_OF_STEPS, BACKWARD, SINGLE); 
 Serial.println("Double coil steps");
 motor.step(NB_OF_STEPS, FORWARD, DOUBLE); 
 motor.step(NB_OF_STEPS, BACKWARD, DOUBLE);
 Serial.println("Interleave coil steps");
 motor.step(NB_OF_STEPS, FORWARD, INTERLEAVE); 
 motor.step(NB_OF_STEPS, BACKWARD, INTERLEAVE); 
 Serial.println("Micrsostep steps");
 motor.step(NB_OF_STEPS, FORWARD, MICROSTEP); 
 motor.step(NB_OF_STEPS, BACKWARD, MICROSTEP); 
}

Testez et mélangez ces exemples pour obtenir les fonctionnalités que vous désirez. Si vous rencontrez un soucis pour utiliser votre Motor Shield, n’hésitez à nous laisser un commentaire ou à nous envoyer un message.

Application

Piloter un robot à 2 ou 4 roues

Source

Adafruit Motor Shield V1