Étiquettes : , , , , ,

Le Motor Shield V1 est une carte d’extension pour les microcontrôleurs Arduino UNO et Mega pour le pilotage de moteur CC et de moteur pas-à-pas. 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.

Prérequis : Programmer avec Arduino

Matériel

  • Ordinateur
  • Arduino UNO x1
  • câble USB pour connecter l’Arduino à l’ordinateur x1
  • Moteur CC x1
  • Moteur PP 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
  • Digital 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).

Schéma de connexion

Compatible avec les carte UNO et Mega, le shield se place directement sur la carte Arduino. L’alimentation se branche au bornier Power. Les moteurs sont branchés sur les borniers M1 à M4. Vous pourrez être amené à brancher trois types de moteur (sans compter les servomoteurs):

  • moteur à courant continu
  • moteur pas à pas unipolaire
  • moteur pas à pas bipolaire

Les branchements de ces moteurs sont détaillés dans les schémas suivants.
Attention: le shield représenté dans les schéma est le Motor Shield V2 mais les branchement au niveau des bornier reste les mêmes.

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 utiliser 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, algorithme) 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

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie