Arduino Uno et moteurs (partie 4)

On veut utiliser un moteur courant continu avec un Arduino Uno et on n’a pas de contrôleur moteur…

La meilleure solution que je connaisse est celle-ci : http://atelierjcm.com/arduino/arduino-et-mofset/

Cela permet d’entraîner même un gros moteur et de faire varier sa vitesse. Par contre on ne sait pas avec ce simple montage inverser le sens de rotation.

Attention, la solution Mosfet est une solution basique qui fonctionne bien mais elle n’a pas toutes les fonctionnalités d’un vrai contrôleur moteur. Pour aller plus loin je vous recommande la lecture de cet article vraiment très complet.

Une autre piste intéressante est celle des relais. Voir par exemple http://atelierjcm.com/arduino/shield-relais-partie-1/

Enfin si vous utilisez votre Uno essentiellement pour commander des moteurs, il faut aussi jeter un coup d’oeil aux excellentes cartes Romeo de DFRobot qui possèdent deux sorties moteurs intégrées et aussi une connectique très pratique pour connecter boutons, capteurs et même modules sans-fil Xbee.

Arduino Uno et moteurs (partie 3)

Cette troisième partie n’est pas autre chose que le rassemblement des deux parties précédentes. On utilise deux contrôleurs moteur, un pour le moteur pas à pas et un autre pour le moteur à courant continu. (on aurait d’ailleurs de quoi alimenter un deuxième moteur de ce type).

Avec ce type de montage on peut envisager, par exemple, de construire un ascenseur (moteur pas à pas) avec la porte qui s’ouvre et se ferme (moteur courant continu).

Si on fait le point sur les différentes alimentations électriques :

– la carte Arduino est alimentée par le port USB qui la relie au PC

– on a une alim 6v qui alimente les connecteurs VD de chaque contrôleur (alimentation de la partie logique de la carte)

– on a une alim 12v qui alimente les connecteurs VS de chaque contrôleur (alimentation des moteurs eux-mêmes)

– le GND de l’arduino, les – des deux alim précédentes, les GND des contrôleurs sont reliés entre eux.


/*
 Controle moteur pas à pas

 Ok pour Uno + controleur moteur DF-MD V1.3

 L298 M1 : vert (-) rouge, M2 : jaune (-), bleu
 
 Avec un deuxième controleur, controle d'un moteur 
 courant continu

 */

// moteur pas à pas//////////////////

#include <Stepper.h>

#define nb_pas_tour 200     // nombre de pas pour un tour
#define M1 8
#define M2  12


int E1=9;  // pin pwm
int E2=10; // pin pwm

// Initialisation de la librairie stepper

Stepper myStepper(nb_pas_tour, M1,M2); 

// moteur courant continu ////////////////

int EE1 = 4 ;
int MM1 = 5 ;

void marche(int a)          
{
  analogWrite (MM1,a);      
  digitalWrite(EE1,HIGH);  
} 

void arret(int a)          
{     
  digitalWrite(EE1,LOW); 
  delay(a); 
} 

//////////////////////////////////////////

void setup() {
  

  pinMode (E1, OUTPUT);
  pinMode (E2,OUTPUT);
  
  pinMode (EE1,OUTPUT);
  pinMode (MM1,OUTPUT);
  
  digitalWrite(E1,HIGH);
  digitalWrite(E2, HIGH);
  digitalWrite(EE1, HIGH);

}

void loop() {
  
  // moteur pas à pas ////////////
  
  // Fixer vitesse à 3 
  myStepper.setSpeed(3);
  
  // avancer de 100 pas
  myStepper.step(100);
  
  // attendre 2 secondes
  delay(2000);

  // Fixer vitesse à 60 
  myStepper.setSpeed(60);
  
  // reculer de 100 pas
  myStepper.step(-100);
  
  // attendre 2 secondes
  delay(2000); 
  
  // moteur courant continu /////////////
  
    marche(160); // en avant vitesse reduite
    
    delay(2000); //attendre 3 secondes
    
    marche(255); // en avant vitesse maxi
    
    delay(2000);
    
    arret(5000); // arret pendant 5 secondes
    
    marche(-160); // on part en marche arrière vitesse réduite
     
    delay(3000);
    
    marche(-255); // marche arrière vitesse maxi
     
    delay(2000);
    
    arret(3000); // arret pendant 5 secondes 
  

}

Arduino Uno et moteurs (partie 2)

On va utiliser un montage similaire au précédent mais, cette fois-ci, on va utiliser les deux sorties moteurs du contrôleur. Le type de moteur n’est plus le même, c’est un moteur pas à pas.


/*
 Controle moteur pas à pas

 Ok pour Uno + controleur moteur DF-MD V1.3  L298 

 On connecte un moteur pas à pas 4 fils sur 
 les sorties M1 et M2

 M1 : vert (-) rouge, M2 : jaune (-), bleu

 */


#include <Stepper.h>

#define nb_pas_tour 200     // nombre de pas pour un tour
#define M1  8
#define M2 12


int E1=9;  // pin pwm
int E2=10; // pin pwm

// Initialisation de la librairie stepper

Stepper myStepper(nb_pas_tour, M1,M2); 

void setup() {
  

  pinMode (E1, OUTPUT);
  pinMode (E2,OUTPUT);
  
  digitalWrite(E1,HIGH);
  digitalWrite(E2, HIGH);

}

void loop() {
  
  // Fixer vitesse à 3 
  myStepper.setSpeed(3);
  
  // avancer de 100 pas
  myStepper.step(100);
  
  // attendre 2 secondes
  delay(2000);

  // Fixer vitesse à 60 
  myStepper.setSpeed(60);
  
  // reculer de 100 pas
  myStepper.step(-100);
  
  // attendre 2 secondes
  delay(2000); 

}

Arduino Uno et moteurs (partie 1)

L’Arduino Uno n’est pas conçu pour alimenter à lui tout seul des moteurs. La raison est que l’intensité en sortie disponible pour une pin est de l’ordre de 20 mA et ça ne fait vraiment pas beaucoup pour alimenter un petit moteur électrique.

Mais, heureusement, il y a de très nombreuses solutions pour compléter l’Arduino et le faire piloter toutes sortes de moteurs.

En voici une première : utiliser un module de contrôle moteur tel le module DF-MD 1.3 de DFRobot (Ref DRI0002). Ce module ajoute 2 sorties moteurs à la carte Uno.

Fichier hébergé par Archive-Host.com

Voilà un petit programme abondamment commenté qui commande un moteur courant continu 12 volts en faisant varier sa vitesse et son sens.


// programme pour Arduino UNO + L298 Dfrobot DF-MD V-1.3
// controle vitesse et sens d'un moteur à courant continu


int E1 = 4;     // enable : interrupteur marche/arret

int M1 = 5;    //  controle vitesse et sens avec pwm


// A T T E N T I O N
// Première chose à faire : retirer le cavalier VD=VS du
// controleur moteur et ne jamais le remettre 
// S'il est mis cela veut dire que la carte n'a pas besoin 
// de sa propre alimentation, 
// qu'elle peut se servir de l'alimentation du moteur 
// Il est vraiment préférable de séparer alim moteur et alim
// logique de la carte.
// j'ai grillé un module pour avoir ignoré ce conseil...


// Alim de la carte Arduino : par ex par le port USB

// Alim du controleur moteur VD : par une alim 5v ;
// VD est le +, GND le moins

// Alim du moteur VS : par une alim 12v ou un peu plus 
// (le controleur provoque
// une chute de tension d'environ 2v ;
// si on veut 12v en sortie, il faut mieux 14v en entrée). 
// VS est le +, GND le moins

// Les masses des deux alim carte controleur et moteur 
// sont reliées sur la carte controleur (GND)
// La masse de la carte Arduino est aussi reliée aux masses
// précédentes

// Connexions logiques : 

// Arduino Pin 4 reliée à E1 
// C'est un interrupteur de mise en marche du moteur
// a l'état haut le moteur est alimenté
// à l'état bas il est arreté


// Arduino Pin 5 reliée à M1 
// la pin 5 peut generer des signaux pwm 
// elle est repérée par un signe ~ sur l'Arduino
// elle  va permettre de faire varier la vitesse du moteur
// mais aussi le sens de rotation




void marche(int a)          
{
  analogWrite (M1,a);      
  digitalWrite(E1,HIGH);  
} 

void arret(int a)          
{     
  digitalWrite(E1,LOW); 
  delay(a); 
} 


void setup() // executée une seule fois
{
    pinMode(E1, OUTPUT); 
    pinMode(M1, OUTPUT);     
    
}


void loop() // executée en boucle
{
  
          
    marche(150); // en avant vitesse reduite
    
    delay(3000); //attendre 3 secondes
    
    marche(255); // en avant vitesse maxi
    
    delay(3000);
    
    arret(5000); // arret pendant 5 secondes
    
    marche(-150); // on part en marche arrière vitesse réduite
     
    delay(3000);
    
    marche(-255); // marche arrière vitesse maxi
     
    delay(3000);
    
    arret(5000); // arret pendant 5 secondes
       
}