Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

Pour mon projet de pont transbordeur , je vais avoir besoin d'un moteur . J'ai fait le choix d'utiliser un moteur pas à pas . Pour les non-initiés , un moteur pas à pas est utilisé pour du positionnement , de la vitesse sans retour d'information (Boucle ouverte).

Par exemple pour déplacer un axe de 10mm , on va envoyer un nombre d'impulsion au moteur en fonction des bobines de celui-ci . Pour plus de détails , je vous invite à regarder sur Wikipédia , il y a une page qui explique le principe de fonctionnement d'un moteur pas à pas.

 

Revenons au côté pratique :

J'ai crée une petite application afin d'illustrer le fonctionnement du moteur.Lorsque j'appuie sur le bouton poussoir 1 , le moteur va faire un tour dans le sens horaire . Si j'appuie sur le BP2 le moteur va faire un tour dans le sens anti-horaire.

 

Maintenant le schéma de câblage :

Arduino Uno : alimenter un moteur pas à pas

Pour mes tests j'utilise le moteur pas à pas équipé d'un réducteur 28byj-48 5Vdc . Il est interfacé avec la carte Arduino par une carte équipé d'un ULN2003 . Les sorties de la carte arduino se trouverait détruite .

Pour l'alimentation de l'ensemble , j'utilise une alimentation 5Vcc externe .Du moment ou l'on commence à utiliser un peu de puissance , je déconseille fortement d'utiliser l'alimentation délivrée par le port USB de l'ordinateur.

Les boutons poussoirs et la led sont connectés comme pour l'application 'allumer une led avec un bouton poussoir'

 

Maintenant , nous allons étudié la partie programme .

 

 

Pour notre programme , nous allons utilisé la bibliothèque de fonctions <stepper.h>

Elle nous permettra d'utiliser les fonctions

SteppersetSpeed et step

 

La fonction Stepper , nous permet de définir le nombre de pas pour une révolution et les sorties de la carte Arduino qui vont le piloter.

Ex : pour un moteur équipé de 4 fils :

stepper Mon_moteur(100,8,9,10,11);

100 : Nombre de pas

8 ,9 ,10, 11 : Sorties Arduino définies pour piloter notre moteur

 

La fonction setSpeed définie la vitesse.

Mon_moteur.setSpeed(200); 

Dans notre cas , la vitesse sera de 200 tr/min.

 

La fonction qui permet de faire tourner le moteur est la fonction step de x pas .

ex : Mon_moteur.step(2048);

2048 correspond à 1 tour sortie réducteur.

Attention , on ne peut pas arrêter le moteur tant que la fonction step n'a pas fini d'envoyer le nombre de pas que l'on veut effectuer.

 

Le programme complet :

 

//**************************************************************
// Commande moteur pas-à-pas 28BYJ-48 5VDC
// Driver ULN2003 et rapport de réduction 1:64
//
//**************************************************************



 #include <Stepper.h> // Inclus la librairie pour les fonctions stepper
 #define STEPS 100    //nombre de pas pour 1 tour moteur 

  //Créer une instance de la classe stepper pour définir notre moteur
  

  Stepper Mon_moteur(STEPS, 8, 10, 9, 11);     // Sens horaire
  
  int  nb_pas = 0;  //Nombre de pas de rotation demandé au moteur
        
 // Définir les broches
const int BP1= 2;     // La constante BP1 est affecté à la broche 2
const int BP2= 3;     // La constante BP1 est affecté à la broche 3
const int led =  4;   // La constante led est affectée à la broche 4


int Etat_bouton1 = 0; //  Déclaration et initialisation de la variable Etat_bouton
int Etat_bouton2= 0;


void setup() 
 {             
  pinMode(led, OUTPUT);   // La broche 4 est définie comme une sortie    
  pinMode(BP1, INPUT);    // La broche 2 est définie comme une entrée 
  pinMode(BP2,INPUT);     // La broche 3 est définie comme une entrée 
  }


void loop() 
  {
    Etat_bouton1 = digitalRead(BP1); // lecture de l'état logique BP1
    Etat_bouton2= digitalRead(BP2);  // lecture de l'état logique BP2
    
    Mon_moteur.setSpeed(200); //Vitesse de 300 (max) réduire cette valeur pour avoir un vitesse plus lente
     
    nb_pas = 2048;  // Une rotation complète avec 2048 pas 
     
    if (Etat_bouton1 == HIGH) {         
      motor_sh(); //Appele la fonction motor_sh
    } 
    if (Etat_bouton2 == HIGH) {
      motor_sih(); //Appel la fonction motor_sih
    }
  } 
  
//Fonction Sens horaire moteur  
void motor_sh(){
   digitalWrite(led, HIGH);  // allume la led 
   Mon_moteur.step(nb_pas);  // fait tourner l'axe du réducteur 
   
 }
//Fonction Sens anti-horaire moteur  
 void motor_sih(){
      Mon_moteur.step(-nb_pas); // fait tourner l'axe du réducteur
      digitalWrite(led, LOW);   // Eteint la led
 }

 

Voilà pour mes premiers pas avec un moteur pas à pas piloté par une carte Arduino . Avec un minimum de câblage ,  un petit bout de programme et cette petite merveille qu'est l'Arduino nous pouvns faire de petites animations pour nos réseaux .

 

A bientôt pour la suite....

 

 


  

Tag(s) : #Electrique, #Arduino