LE MODULE ME INTERFACE MOTEUR + ENCODEUR
Le module "Me Interface moteur + encodeur" comporte un double pont en H, le TB6612 (comme le module "Me Interface Moteur") et un régulateur PID (Proportionnel Intégral Dérivé) qui gèrent la vitesse et la direction de deux moteurs à courant continu associés à deux encodeurs.
La tension d'alimentation des moteurs doit être comprise entre 6 et 12 V et le courant admissible est de 1 A.
Les fonctions contenues dans la bibliothèque Makeblock sont :
-
MeEncoderMotor moteur(adresse_I2C, SLOTX) où adresse_I2C est l'adresse I2C du module, SLOTX (SLOT1 ou SLOT2) le connecteur sur lequel est branché le moteur. Cette fonction permet de créer l'objet.
-
moteur.begin() permet d'initialiser le moteur.
-
moteur.reset() permet de réinitialiser la position du moteur à 0.
-
moteur.move(angle, vitesse) où angle représente l'angle de rotation en degré (positif ou négatif) et vitesse (comprise entre -200 et 200) la vitesse du moteur. Cette fonction permet de faire tourner l'axe du moteur d'un angle donné à une vitesse donnée.
-
moteur.moveTo(angle, vitesse) où angle représente l'angle de rotation en degré (positif ou négatif) et vitesse (comprise entre -200 et 200) la vitesse du moteur. Cette fonction permet de faire tourner l'axe du moteur jusqu'à l'angle donné à une vitesse donnée.
-
moteur.runTurns(tour, vitesse) où tour représente le nombre de tours et vitesse (comprise entre -200 et 200) la vitesse du moteur. Cette fonction permet de faire tourner l'axe du moteur d'un nombre de tours donné à une vitesse donnée.
-
moteur.runSpeed(vitesse) où vitesse (comprise entre -200 et 200) représente la vitesse du moteur. Cette fonction permet de faire tourner l'axe du moteur à une vitesse donnée.
-
moteur.runSpeedAndTime(vitesse, temps) où vitesse (comprise entre -200 et 200) représente la vitesse du moteur et temps la durée de rotation en milliseconde. Cette fonction permet de faire tourner l'axe du moteur à une vitesse donnée pendant une durée donnée.
-
float variable=getCurrentSpeed() permet de stocker dans la variable la valeur de la vitesse du moteur.
-
float variable=getCurrentPosition() permet de stocker dans la variable la valeur de la position du moteur.
Le tableau ci- dessous donne les ports des cartes "Me Orion" et "Me Auriga" pouvant être connectés à ce module.
Remarque :
Cette interface doit être utilisée avec des moteurs équipés d'encodeurs.
Exemple :
Nous souhaitons faire tourner un moteur en fonction de consignes reçues depuis le moniteur série.
Liste du matériel :
Programme :
/*Encodeur_Makeblock est un programme qui, grâce à un module "Me Interface Moteur + Encodeur", commande un moteur en fonction des consignes envoyées depuis le moniteur série.
La trame est de la forme angle,vitesse,tour,durée,fonctionE
Si fonction=1 alors le moteur est arrêté.
Si la fonction=2 alors le moteur tourne à la vitesse donnée.
Si la fonction=3 alors le moteur tourne d'un angle donné à la vitesse donnée.
Si la fonction=4 alors le moteur tourne d'un nombre de tours donné à la vitesse donnée.
Si la fonction=5 alors le moteur tourne à la vitesse donnée pendant une durée donnée.
*/
#include "MeOrion.h" // appel des bibliothèques
#include <Wire.h>
int angle;
int vitesse;
int tour;
int duree;
int fonction=0;
MeEncoderMotor moteur(0x09, SLOT1); // création de l'objet moteur
void setup()
{
Serial.begin(115200); // initilisation de la liaison série (moniteur)
moteur.begin();
}
void loop()
{
Serial.println("Entrer la trame : angle,vitesse,tour,duree,fonctionE");
while (Serial.available()==0); // attente d'une trame
while (Serial.available()>0) // lorsqu'une trame est émise
{
angle = Serial.parseInt(); // stockage du premier nombre dans la variable angle
vitesse = Serial.parseInt(); // stockage du second nombre dans la variable vitesse
tour = Serial.parseInt(); // stockage du troisième nombre dans la variable tours
duree = Serial.parseInt(); // stockage du quatrième nombre dans la variable duree
fonction = Serial.parseInt(); // stockage du cinquième nombre dans la variable fonction
if (Serial.read() == 'E') // lorsque les 5 nombres ont été transmis
{
Serial.print("Angle:");
Serial.println(angle);
Serial.print("Vitesse:");
Serial.println(vitesse);
Serial.print("Tours:");
Serial.println(tour);
Serial.print("Duree:");
Serial.println(duree);
Serial.print("Fonction:");
Serial.println(fonction);
}
}
delay(3000);
Serial.println("");
switch (fonction) // selon la valeur de la variable fonction
{
case 1: // on arrête le moteur
Serial.println("Le moteur est arrete");
moteur.runSpeed(0);
break;
case 2: // on fait tourner le moteur
Serial.print("Le moteur tourne avec une vitesse de ");
Serial.println(vitesse);
moteur.runSpeed(vitesse);
break;
case 3: // on fait tourner le moteur d'un angle
Serial.print("Le moteur tourne d un angle de ");
Serial.print(angle);
Serial.print(" avec une vitesse de ");
Serial.println(vitesse);
moteur.move(angle, vitesse);
break;
case 4: // on fait tourner le moteur d'un nombre de tour
Serial.print("Le moteur tourne d un nombre de tour de ");
Serial.print(tour);
Serial.print(" avec une vitesse de ");
Serial.println(vitesse);
moteur.runTurns(tour, vitesse);
break;
case 5: // on fait tourner le moteur pendant une durée
Serial.print("Le moteur tourne avec une vitesse de ");
Serial.print(vitesse);
Serial.print(" pendant une duree de ");
Serial.println(duree);
moteur.runSpeedAndTime(vitesse, duree);
break;
default:
break;
}
Serial.println("");
}