Le 28BYJ-48 est le moteur pas à pas le plus courant des projets Arduino : petit, alimenté en 5 V, et vendu avec son connecteur prêt à brancher. Il ne tourne pas directement — il se fixe à la demande au degré près, puis reste immobile dans la position qu’on lui a donnée, même sous contrainte. C’est ce qui le rend irremplaçable pour une aiguille, un chariot, un volet ou une vanne.
Ce moteur est un modèle unipolaire à réducteur intégré. Le réducteur multiplie le couple et divise la vitesse : contrairement à un moteur continu, il ne cherche pas à tourner vite, il cherche à se placer précisément et à y rester. Cinq fils sortent du boîtier, réunis dans un connecteur femelle qui se clipse sur un driver à ULN2003A.
Ce que la photo montre, et ce qu’il faut ajouter
La photo présente le moteur seul, avec ses cinq fils et son connecteur : le driver n’est pas inclus dans cet article. Un moteur unipolaire ne peut pas être branché directement sur les sorties d’un microcontrôleur — les quatre bobinages demandent bien plus de courant qu’une broche n’en fournit. Il faut donc, en plus, la petite carte à ULN2003A qui reçoit les ordres de l’Arduino et alimente les bobinages. Si vous n’avez pas encore ce driver, sachez qu’il existe aussi en pack avec le moteur, dans un seul article.
Caractéristiques techniques
| Modèle | 28BYJ-48 — moteur pas à pas unipolaire à réducteur intégré |
|---|---|
| Alimentation | 5 V continu |
| Type | Unipolaire, 4 phases, 5 fils |
| Réduction | Annoncée à 1 pour 64, à engrenages |
| Pas par tour en sortie | 2048 pas en séquence à 4 phases, 4096 en demi-pas |
| Angle par pas en sortie | 0,176° par pas, 0,0879° par demi-pas |
| Angle de pas interne | 5,625°, avant le réducteur |
| Bobine | 50 Ω par phase, tolérance constructeur de l’ordre de 7 % |
| Courant | De l’ordre de 90 à 100 mA par phase alimentée, sous 5 V |
| Couple de maintien | Au moins 34,3 mN·m, soit environ 0,35 kg·cm |
| Vitesse pratique | De l’ordre de 15 tours par minute au maximum, sous 5 V |
| Axe | Acier, diamètre 5 mm, avec méplat, longueur utile d’environ 8 mm |
| Encombrement | Corps cylindrique Ø 28 mm, environ 30 mm de long hors axe |
| Connecteur | Femelle 5 broches, pas de 2,54 mm |
| Fixation | Deux oreilles percées sur la platine avant |
| Masse | De l’ordre de 30 à 35 g, câble compris |
Les cinq fils, et ce qu’ils font
Quatre fils alimentent les bobinages, le cinquième est le point commun. C’est pourquoi on parle de montage unipolaire : toutes les phases partagent un même fil, ici le rouge, qui reçoit le +5 V.
| Fil rouge | Commun — à relier au +5 V. Sans lui, rien ne bouge. |
|---|---|
| Fil bleu | Bobine 1 — première entrée du driver. |
| Fil rose | Bobine 2 — deuxième entrée du driver. |
| Fil jaune | Bobine 3 — troisième entrée du driver. |
| Fil orange | Bobine 4 — quatrième entrée du driver. |
Le connecteur est détrompé : il ne se clipse que dans un sens sur la carte à ULN2003A, le fil rouge face au repère +. Il n’y a donc rien à inverser au branchement — et si le moteur tourne dans le sens opposé à ce que vous attendez, cela se corrige dans le programme, pas dans le câblage.
Vérification utile avant de brancher : au multimètre en position ohmmètre, le rouge et chacun des quatre autres fils doivent afficher une cinquantaine d’ohms. Beaucoup plus, ou rien du tout : un fil est coupé ou le connecteur est mal serti.
Pourquoi 2048 pas pour un tour en sortie
À l’intérieur du boîtier, le moteur pas à pas avance par pas de 5,625°, et le réducteur à engrenages divise ensuite ce mouvement par 64 environ. À l’arbre de sortie, une impulsion ne déplace donc l’axe que de 0,0879° en demi-pas, et de 0,176° en pas complet. Il faut ainsi de l’ordre de 4096 impulsions en demi-pas — ou 2048 en pas complet — pour faire un tour complet.
Autrement dit, la commande est plus fine que ce que le moteur interne sait faire seul, et c’est précisément ce qui permet de placer un objet au millimètre sur un chariot à courroie sans aucune mesure de position. Le rapport annoncé de 1 pour 64 est une valeur de catalogue : la valeur réelle varie légèrement d’un lot à l’autre, souvent autour de 63,7. Sur un mécanisme qui doit tomber juste après un grand nombre de tours, faites un tour de référence au démarrage, ou corrigez le nombre de pas après avoir mesuré un tour réel.
Le réducteur a un autre effet, aussi important : il démultiplie le couple. C’est ce qui permet à un moteur de quelques dizaines de grammes de déplacer un mécanisme bien plus lourd qu’il ne pourrait le faire en direct.
Mini-projet : faire tourner le moteur avec un Arduino
Le montage de mise en route : le moteur sur son driver, le driver sur l’Arduino, et un programme qui fait un tour puis marque une pause. Une quinzaine de minutes suffisent.
Ce qu’il faut
| Le moteur | Le 28BYJ-48 de cette page |
|---|---|
| Le driver | Driver ULN2003A pour moteur pas à pas — la carte sur laquelle le moteur se clipse |
| Le cerveau | Uno R3 + câble USB |
| Les liaisons | 10 câbles Dupont — quatre suffisent pour relier les entrées du driver aux broches de l’Arduino |
Le câblage
| Connecteur moteur | → connecteur 5 broches du driver ULN2003A, dans le seul sens possible |
|---|---|
Driver IN1 | → Arduino D8 |
Driver IN2 | → Arduino D9 |
Driver IN3 | → Arduino D10 |
Driver IN4 | → Arduino D11 |
Driver VCC | → Arduino 5V (le cavalier du driver reste en place) |
Driver GND | → Arduino GND |
Le programme
À copier dans l’IDE Arduino, puis à téléverser. Le moteur fait un tour, s’arrête une seconde, recommence.
/*
* Moteur pas a pas 28BYJ-48 - pilotage par un driver ULN2003A
* Carte : Arduino Uno R3
* Montage : moteur 28BYJ-48 clipse sur son driver ULN2003A
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const byte BROCHES[4] = {8, 9, 10, 11}; // IN1 a IN4 du driver ULN2003A
// Un bobinage alimente a la fois, dans l'ordre des phases.
// Chaque ligne represente un pas, soit 0,176 degre a l'arbre de sortie.
const byte PHASES[4][4] = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
const int PAS_PAR_TOUR = 2048; // un tour complet a l'arbre de sortie
const int DELAI_PAS = 3; // millisecondes entre deux pas
void appliquerPas(byte pas) {
for (byte b = 0; b != 4; b++) {
digitalWrite(BROCHES[b], PHASES[pas][b]);
}
}
void setup() {
for (byte b = 0; b != 4; b++) {
pinMode(BROCHES[b], OUTPUT);
}
Serial.begin(9600);
Serial.println("Moteur 28BYJ-48 pret");
}
void loop() {
for (int p = 0; p != PAS_PAR_TOUR; p++) {
appliquerPas(p % 4);
delay(DELAI_PAS);
}
delay(1000); // une seconde de pause entre deux tours
}Comment ça marche
- Les quatre bobinages sont alimentés l’un après l’autre, en boucle. À chaque changement, le rotor avance d’un pas et s’y verrouille : c’est la succession des phases, et non la durée, qui fixe le déplacement.
DELAI_PASrègle la vitesse et rien d’autre. À 3 ms par pas, un tour de 2048 pas prend environ six secondes. Descendez vers 2 ms pour atteindre la vitesse maximale du moteur, de l’ordre de 15 tours par minute : en dessous d’environ 1 ms, le rotor n’a plus le temps de suivre et se met à vibrer sans avancer.- La table
PHASESse lit ligne par ligne : modifier l’ordre des lignes inverse le sens de rotation. C’est la seule correction à faire si votre mécanisme tourne à l’envers. - La pause d’une seconde laisse le moteur tenu : les bobinages restent alimentés et la position est conservée, même si une force extérieure pousse l’axe.
Variante : alimenter le moteur sur une source séparée
Sur un petit montage, l’Arduino suffit à nourrir le moteur. Dès que le moteur tourne longtemps, ou que vous en branchez deux, il vaut mieux le nourrir à part : le régulateur de la carte chauffe, et la tension peut s’effondrer au point de faire redémarrer l’Arduino.
Utilisez une alimentation 5 V 2 A, retirez le cavalier du driver ULN2003A, puis reliez le + de l’alimentation à la broche + du connecteur moteur — celle du fil rouge — et le − au GND commun avec l’Arduino. Les deux masses doivent être reliées, sinon les signaux de commande n’ont plus de référence et le moteur reste immobile.
Points d’attention
- Ne forcez jamais l’axe à la main. Le réducteur est en plastique : un tour forcé peut casser des dents, et le moteur devient alors irréparable. Pour déplacer le mécanisme, faites-le tourner par le programme.
- Un moteur chaud au toucher est normal. Les bobinages restent alimentés tant que le moteur est en position : c’est la tenue, pas une panne. Une alimentation au-delà de 5 V, en revanche, n’est pas prévue et l’échauffe réellement.
- Aucun retour de position. Le 28BYJ-48 n’a pas de codeur : le programme sait combien de pas il a envoyés, jamais où l’axe se trouve réellement. Au démarrage, la position de départ est inconnue — placez l’axe par un mouvement de référence au début de votre programme si cela compte.
Questions fréquentes
Le moteur vibre mais ne tourne pas, pourquoi ?
Presque toujours parce que le fil commun n’arrive pas : sans le rouge au +5 V, chaque phase est alimentée sans référence et le rotor reste sur place en tremblant. Vérifiez aussi que le connecteur du moteur est bien clipsé sur le driver, et que les quatre entrées IN1 à IN4 sont chacune sur une broche distincte de l’Arduino.
Comment inverser le sens de rotation ?
Inversez l’ordre des lignes de la table PHASES dans le programme : le moteur part de l’autre côté. Inutile de débrancher quoi que ce soit.
Peut-on l’alimenter en 3,3 V ?
Cela ne fonctionne pas de façon fiable : le moteur est prévu pour 5 V, et à 3,3 V il perd son couple et décroche vite. La logique de commande, elle, fonctionne très bien en 3,3 V sur les entrées du driver — c’est la partie puissance qui demande du 5 V.
Puis-je brancher le moteur directement sur les broches de l’Arduino ?
Non. Chaque phase demande de l’ordre de 90 à 100 mA, très au-delà de ce qu’une broche peut fournir sans se détériorer. Le driver ULN2003A est là pour cette raison : il reçoit un signal faible de l’Arduino et l’utilise pour alimenter les bobinages.
Le moteur peut-il positionner un objet au millimètre ?
Oui, à condition de compter les pas. Sur l’axe de 5 mm de diamètre de ce moteur, un pas déplace la surface d’environ 0,008 mm, et un demi-pas de moitié moins. Comme il n’y a pas de retour de position, cette précision tient tant que le moteur ne décroche pas — ne lui demandez pas plus de force qu’il n’en a.
Pourquoi tourne-t-il si lentement ?
À cause du réducteur, et c’est voulu. Il échange la vitesse contre le couple et la précision : de l’ordre de 15 tours par minute au maximum, mais dans une position exacte à chaque instant. Pour un déplacement rapide, un moteur continu avec un pilote à pont en H est plus adapté.
Combien de pas pour un tour, exactement ?
Comptez 2048 pas en séquence à 4 phases, et 4096 en demi-pas. C’est la valeur de référence de ce modèle, mais elle dépend du réducteur, dont le rapport réel varie selon les lots. Si votre projet additionne les tours sur une longue durée, faites un tour de référence puis ajustez : c’est plus court que de calculer.
À combiner avec
Le moteur part rarement seul. Le moteur 28BYJ-48 avec son driver ULN2003A est la formule la plus simple si vous n’avez pas encore la carte de commande. Pour les montages qui réclament franchement plus de couple et une commande par impulsions, le moteur pas à pas Nema 17 et son driver dédié prennent le relais. Et si vous n’avez encore ni carte ni plaque d’essai, le kit Arduino Uno starter contient déjà la Uno R3 et les câbles nécessaires — il ne manquera que le moteur et son driver.








Avis
Il n’y a pas encore d’avis.