Alimentation
Il est conseillé de séparer les alimentations d’Arduino et des moteurs.
On placera donc les jumpers d’alimentation sur PWRIN.
E1, M1, E2, M2
| Commande | Pin Arduino | Siginification |
| M1 | 4 | Contrôle du sens de rotation |
| E1 | 5 | Contrôle de la vitesse de rotation |
| M2 | 7 | Contrôle du sens de rotation |
| E2 | 6 | Contrôle de la vitesse de rotation |
PWM ou PLL
La tension de commande des moteurs se fera en PWM.
On placera donc les jumpers en conséquence.
Exemple de code basique
//////////////////////////////////////////
// Branchements
//////////////////////////////////////////
//Moteur A
int E1 = 5; // Vitesse (PWM)
int M1 = 4; // Direction
//Motor B
int E2 = 6; // Vitesse (PWM)
int M2 = 7; // Direction
//////////////////////////////////////////
// Constantes
//////////////////////////////////////////
const int MOTEUR_A=0;
const int MOTEUR_B=1;
const int AVANT=0;
const int ARRIERE=1;
//////////////////////////////////////////
// Setup
//////////////////////////////////////////
void setup()
{
pinMode(E1, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(M2, OUTPUT);
}
//////////////////////////////////////////
// Loop
//////////////////////////////////////////
void loop(){
activer(MOTEUR_A, AVANT, 128);
activer(MOTEUR_B, AVANT, 128);
delay(3000);
arreter_tout();
delay(1000);
activer(MOTEUR_A, ARRIERE, 128);
activer(MOTEUR_B, ARRIERE, 128);
delay(3000);
arreter_tout();
delay(1000);
activer(MOTEUR_A, AVANT, 128);
arreter(MOTEUR_B);
delay(3000);
arreter_tout();
delay(1000);
arreter(MOTEUR_A);
activer(MOTEUR_B, AVANT, 128);
delay(3000);
arreter_tout();
delay(1000);
}
//////////////////////////////////////////
// Fonction activer
//////////////////////////////////////////
void activer(int moteur, int sens, int vitesse)
// moteur : MOTEUR_A ou MOTEUR_B
// sens : AVANT ou ARRIERE
// vitesse : entre 0 et 255
{
switch (moteur)
{
case MOTEUR_A :
if (sens==AVANT)
{
digitalWrite(M1, HIGH);
analogWrite(E1, vitesse);
}
else
{
digitalWrite(M1, LOW);
analogWrite(E1, vitesse);
}
break;
case MOTEUR_B :
if (sens==AVANT)
{
digitalWrite(M2, HIGH);
analogWrite(E2, vitesse);
}
else
{
digitalWrite(M2, LOW);
analogWrite(E2, vitesse);
}
break;
}
}
//////////////////////////////////////////
// Fonction arreter_tout
//////////////////////////////////////////
void arreter_tout()
{
analogWrite(E1, 0);
analogWrite(E2, 0);
}
//////////////////////////////////////////
// Fonction arreter
//////////////////////////////////////////
void arreter(int moteur)
{
switch (moteur)
{
case MOTEUR_A :
analogWrite(E1, 0);
case MOTEUR_B :
analogWrite(E2, 0);
}
}