Module ULN2003

On trouve chez plusieurs marchands du net ce petit kit permettant de piloter un moteur pas-à-pas. Le mien provient de chez un célèbre vendeur Chinois, kit obtenu pour moins de 2€ livré en France ☺.
On trouve chez plusieurs marchands du net ce petit kit permettant de piloter un moteur pas-à-pas. Le mien provient de chez un célèbre vendeur Chinois, kit obtenu pour moins de 2€ livré en France ☺. Le kit comprend le matériel suivant : Il faudra bien entendu une carte Arduino pour faire fonctionner le moteur pas-à-pas et son pilote. Peu importe ici, le type de carte Arduino utilisée. Par ailleurs il est préférable d'utiliser une alimentation externe 5 V continu si on veut garder son Arduino en bonne santé... En effet dès que l'on demande un peu de puissance en sortie, il est préférable de ne pas utiliser le 5 V de l'Arduino ou du port USB du PC. La carte pilote utilise un circuit ULN2003 qui regroupe 7 transistors "Darlington" pouvant délivrer jusqu'a 500 mA. Voir le schéma ci-dessous pour la structure d'un transistor "Darlington". La tension d'alimentation max est de 12 V. Mais ici on se limitera à 5 V qui est la tension de service du moteur pas-à-pas livré. La carte comporte 3 connecteurs : 4 leds sont présentes sur la carte pilote et permettent de visualiser et donc contrôler le bon fonctionnement des 4 phases (A, B, C, D), du moteur pas-à-pas. Ses dimensions sont très réduites : 35mm x 32mm pour 10mm de hauteur. Le moteur pas-à-pas est un modèle 25BYJ-48. Connecteur de raccordement : La carte Arduino sera câblée de la manière suivante : Bien sur on pourra utiliser d'autres broches (Digitales) des GPIO de l'Arduino mais dans ce cas, attention à modifier cela dans le code source... N'importe quelle alimentation 5 V courant continu 500 mA fera l'affaire. Le moteur pas-à-pas à 4 phases démultiplié dans un rapport de 1:64 (Réduction mécanique), permet de se positionner sur la valeur angulaire de son choix et ce manière trés précise. Le couple relativement important permet une utilisation dans divers montages de petite taille. La carte pilote à base d'ULN2003 sert d'interface de puissance ce que les GPIO de l'Arduino ne peuvent pas fournir sans risque. Ce montage pourra être utilisé dans les exemples suivants : Présentation
Description
Carte pilote
Moteur pas-à-pas
Carte Arduino
Alimentation 5 V
Principe de fonctionnement
Séquence de commutation
Couleur des fils
Direction
1
2
3
4
5
6
7
8
Bleu (Fil N° 1)
✓
✓
✓
Rose (Fil N° 2)
✓
✓
✓
jaune (Fil N° 3)
✓
✓
✓
Orange (Fil N° 4)
✓
✓
✓
Les schémas de raccordement
Le code source Arduino
// Inclusion de la librairie "stepper.h" pour les moteurs pas-à-pas.
#include <Stepper.h>
// Déclaration de la constante définissant le nombre de pas.
#define PAS 100
// Création d'une instance de la classe stepper.
// On utilise les sorties digitales 8, 9, 10 et 11
// de l'Arduino pour connecter les fils 1, 2, 3 et 4 de la carte pilote.
// De cette manière, on tourne dans le sens "horaire".
// Pour changer de sens on inverse les sorties 8 et 11.
Stepper small_stepper(PAS, 8, 10, 9, 11);
int nbPas = 0; // Initialisation du nombre de pas demandé
long temps = 0; // Initialisation de la durée d'un tour
// Pour ce moteur :
// 64 pas par tour.
// 4 phases donc un angle de 5.625° (360° / 64).
// Démultiplication de 1:64 (Réducteur mécanique intégré).
// 64 * 64 = 4096 angles en prenant en compte la réduction mécanique.
// 360° / 5.625° * 64 * 4 bobines / 2 bipolaire = 2048 step / tour.
void setup() {
Serial.begin(9600); // Transmission à 9600 bps
Serial.println("Moteur pas à pas");
}
void loop() {
Serial.println("Moteur en cours de fonctionnement");
// Faire tourner le moteur en ne dépassant pas 300.
// Avec 100 le couple est élevé.
// Au dessus de 300, le moteur vibre et ne tourne plus...
// Plus le chiffre est bas, plus le moteur tourne lentement.
small_stepper.setSpeed(10);
// Une rotation complète avec 1024 pas (1 tour environ 9 secondes)
nbPas = 2048;
// Pour tourner dans le sens inverse de 10 fois 1/20ème de tour,
// il faut multiplier "nbPas" par 10/20ème et ajouter le
// signe "moins" devant pour inverser le sens.
// Cela donne : nbPas = -10*2048/20;
temps = millis();
// Ca tourne.
small_stepper.step(nbPas);
// Chronomètrage d'un tour complet 6.236 s à vitesse 200.
temps = millis() - temps ;
// Affiche le temps (en ms) pour un tour complet.
Serial.println(temps);
// On effectue une pause de 5 secondes (5000 ms).
delay(5000);
}
Références techniques
Commenter l'article