View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Contrôle du sens de rotation d'un moteur CC (courant continu) à l'aide d'un bouton poussoir

ARDUINO - EXPERT - MOTORISATIONS
Par X. HINAULT - Créé le 10/02/2010 - Mis à jour le : 10/02/2010

1.  Présentation

Ce programme contrôle le sens de rotation d'un moteur CC à l'aide d'un bouton poussoir : un appui sur un BP inverse le sens de rotation du moteur.

Ce programme utilise une interface moteur de puissance double driver (basée sur un ci tb6612)
Plus d'infos ici : Carte double driver de moteur 1A basé sur le CI tb6612fng
Disponible par exemple ici (6 Euros) : http://www.watterott.com/Motor-Driver-1A-Dual-TB6612FNG_1

2.  Matériel Nécessaire

2.1  L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

2.2  Le matériel suivant pour réaliser le montage associé

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • un bouton poussoir pour CI,
  • un moto-réducteur CC
  • ou un moteur cc
  • une interface moteur de puissance double driver (basée sur un ci tb6612)

Disponible ici (6 Euros) : http://www.watterott.com/Motor-Driver-1A-Dual-TB6612FNG_1
Plus d'infos ici : Carte double driver de moteur 1A basé sur le CI tb6612fng

3.  Instructions de montage

  • Connecter sur la broche 2 (configurée en entrée) un Bouton Poussoir connecté à la masse (0V)
  • Connecter sur la broche 5 (configurée en sortie) la broche IN1 de l'interface moteur
  • Connecter sur la broche 4 (configurée en sortie) la broche IN2 de l'interface moteur
  • Connecter sur la broche 3 (configurée en sortie) la broche PWM de l'interface moteur

4.  Le schéma théorique du montage


Le schéma théorique du montage

5.  Le circuit du montage


Le schéma du montage à réaliser

Pour mémoire, le brochage du double driver basé sur le ci TB6612:

6.  Explication du programme

6.1  Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu'une fois (fonction setup( ) )
  • une partie constituée d'une boucle sans fin que le programme répètera à l'infini ( fonction loop( ) ) : c'est le coeur du programme.

6.2  Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme

7.  Au niveau de la partie déclarative :

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :
    • Déclaration des constantes utiles pour l'utilisation des boutons poussoirs :
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :
const int BP=2; //declaration constante de broche 
const int SENS_AR=5; //declaration constante de broche 
const int SENS_AV=4; //declaration constante de broche 
const int VITESSE=3; //declaration constante de broche 

Déclaration des variables globales

  • Déclaration des variables globales du programmes :
    • Déclaration d'une variable globale utile pour l'utilisation des boutons poussoirs :
int ETAT_BP=0; // variable témoin de l'état du BP
  • Déclaration d'une variable pour le comptage du nombre d'appui sur le bouton poussoir :
int compt=0; // variable pour comptage du nombre d'appui

8.  Au niveau de la fonction d'initialisation setup( ) :

configuration des broches utilisées :

  • Configuration des broches en sortie :
pinMode(SENS_AR, OUTPUT); //met la broche en sortie 
pinMode(SENS_AV, OUTPUT); //met la broche en sortie 
pinMode(VITESSE, OUTPUT); //met la broche en sortie 
  • Configuration des broches en entrée :
pinMode(BP, INPUT); //met la broche en entree 
  • Activation du rappel au + interne des broches en entrée si nécessaire :
digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée
  • Initialisation des broches utilisées en sortie pour la commande du moteur CC :
// moteur à l'arrêt au démarrage
digitalWrite(SENS_AR, LOW) ; // controle sens AR
digitalWrite(SENS_AV, LOW) ; // controle sens AV

// mode simplifié avec PWM vitesse pas utilisée 
digitalWrite(VITESSE, HIGH) ; // vitesse maximale - PWM non utilisée

9.  Au niveau de la boucle principale, la fonction loop ( ) :

  • On teste l'état du BP et on incrémente une variable qui compte le nombre d'appui
  • En fonction du nombre d'appui, on réalise soit la marche avant, soit l'arrêt soit la marche arrière
  • Une pause permet d'éviter que le même appui soit pris en compte à 2 reprises

if (digitalRead(BP)==APPUI) { // test état du BP

 compt=compt+1; // incrémente la variable compt
 if (compt==4) compt=0; // RAZ variable compt de 3=>0

 if (compt==0){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==1){ 
  // moteur en marche arrière 
  digitalWrite(SENS_AR, HIGH) ; // sens AR en marche
  digitalWrite(SENS_AV, LOW) ; // sens AV à l'arrêt
 }

 if (compt==2){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==3){ 
  // moteur en marche avant 
  digitalWrite(SENS_AR, LOW) ; // sens AR à l'arrêt
  digitalWrite(SENS_AV, HIGH) ; // sens AV en marche
 }


 delay(300); // pause anti-rebond entre 2 appuis

}

10.  Mise en oeuvre du programme

10.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d'expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

10.2  Fonctionnement

  • Au démarrage, le moteur ne tourne pas
  • Au premier appui, le moteur tourne dans un sens
  • Au second appui, le moteur s'arrête
  • Au troisième appui, le moteur tourne dans l'autre sens
  • Au quatrième appui, le moteur s'arrête et ainsi de suite...

11.  Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - 02/2010 

// --- Que fait ce programme ? ---
/* contrôle le sens de rotation d'un moteur CC à l'aide d'un bouton poussoir : 
un appui sur un BP inverse le sens de rotation du moteur*/

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter  sur la broche 2 (configurée en entrée) un Bouton Poussoir connecté à la masse (0V)
// Connecter  sur la broche 5 (configurée en sortie) la broche IN1 de l'interface moteur
// Connecter  sur la broche 4 (configurée en sortie) la broche IN2 de l'interface moteur
// Connecter  sur la broche 3 (configurée en sortie) la broche PWM de l'interface moteur

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut


// --- constantes des broches ---

const int BP=2; //declaration constante de broche 

const int SENS_AR=5; //declaration constante de broche - controle sens ARRIERE
const int SENS_AV=4; //declaration constante de broche - controle sens AVANT
const int VITESSE=3; //declaration constante de broche - controle vitesse

// --- Déclaration des variables globales ---
int ETAT_BP=0; // variable témoin de l'état du BP

int compt=0; // variable pour comptage du nombre d'appui

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 


// ------- Broches en sortie -------  

pinMode(SENS_AR, OUTPUT); //met la broche en sortie 
pinMode(SENS_AV, OUTPUT); //met la broche en sortie 
pinMode(VITESSE, OUTPUT); //met la broche en sortie 

// ------- Broches en entrée -------  

pinMode(BP, INPUT); //met la broche en entree 

// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------  

digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

// ---- Initialisation de broches utilisées ---

// moteur à l'arrêt au démarrage
digitalWrite(SENS_AR, LOW) ; // controle sens AR
digitalWrite(SENS_AV, LOW) ; // controle sens AV

// mode simplifié avec PWM vitesse pas utilisée 
digitalWrite(VITESSE, HIGH) ; // vitesse maximale - PWM non utilisée


} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 

if (digitalRead(BP)==APPUI) { // test état du BP

 compt=compt+1; // incrémente la variable compt
 if (compt==4) compt=0; // RAZ variable compt de 3=>0

 if (compt==0){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==1){ 
  // moteur en marche arrière 
  digitalWrite(SENS_AR, HIGH) ; // sens AR en marche
  digitalWrite(SENS_AV, LOW) ; // sens AV à l'arrêt
 }

 if (compt==2){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==3){ 
  // moteur en marche avant 
  digitalWrite(SENS_AR, LOW) ; // sens AR à l'arrêt
  digitalWrite(SENS_AV, HIGH) ; // sens AV en marche
 }


 delay(300); // pause anti-rebond entre 2 appuis

}


} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

// --- Mémo instructions ---

// var_int = digitalRead(Pin); //lit état de la broche indiquée et renvoie valeur HIGH ou LOW 
// digitalWrite(pin, value) ; // met la valeur HIGH ou LOW sur la broche indiquée
// digitalRead(pin) ; // lit l'état d'une broche numérique en entrée et renvoie la valeur HIGH ou LOW présente sur la broche
// --- Impulsions ---
// analogWrite(broche,largeur); // génère une impulsion PWM sur la broche de largeur 0 (0%) à 255 (100%)

// tone(broche, frequence, +/-duree); // produit son de fréquence indiquée sur la broche
// noTone(broche); // stoppe la production de son sur la broche
// à noter : une seule broche peut générer un son à la fois... 

// --- mémo boucle -- 
//for (int i=0; i <= 10; i++); // boucle simple 
//delay(300); // pause en millisecondes