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 :
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
Stepper , setSpeed 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....