Skip to Content

Contrôler un moteur pas à pas avec une télécommande infrarouge

Contrôler un moteur pas à pas avec une télécommande infrarouge

Dans ce tutoriel, vous allez apprendre à contrôler un moteur pas à pas à l’aide d’une télécommande infrarouge (IR). Les moteurs pas à pas sont largement utilisés dans de nombreuses applications, comme la robotique, les machines CNC et les imprimantes 3D, grâce à leur contrôle précis et leur capacité à se déplacer par petits incréments. En combinant le moteur pas à pas avec une télécommande IR, nous pouvons créer un système de contrôle sans fil pour nos projets.

Nous allons utiliser le ULN2003 module driver pour interfacer le moteur pas à pas avec l’Arduino. Le ULN2003 est une puce driver populaire qui simplifie le contrôle des moteurs pas à pas en fournissant l’amplification de courant nécessaire et des circuits de protection. Il nous permet de contrôler le moteur pas à pas en utilisant seulement quelques broches digitales de l’Arduino.

Pour le moteur pas à pas, nous utilisons un moteur 28byj-48 pas à pas. Il est très abordable, compact et fonctionne sous 5 à 12 Volts, ce qui le rend facile à intégrer avec des Arduino et des projets alimentés par batterie.

À la fin de ce tutoriel, vous comprendrez clairement comment connecter les composants, écrire le code Arduino et contrôler le moteur pas à pas avec une télécommande IR. Plus précisément, nous pourrons contrôler la vitesse et le sens de rotation du moteur, et nous aurons également une fonction pause.

Alors, c’est parti !

Matériel nécessaire

Vous trouverez ci-dessous la liste des composants nécessaires pour ce projet. Si vous avez déjà une télécommande IR, vous n’aurez pas besoin du Kit Récepteur IR, seulement du module récepteur IR. Cependant, toutes les télécommandes IR ne conviendront pas. D’un autre côté, si vous achetez ou possédez le Kit, vous n’aurez pas besoin du module récepteur IR, car il fait partie du Kit.

Arduino Uno

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

Câble USB pour Arduino UNO

Infrared (IR) receiver module

Module récepteur IR

Kit récepteur IR

ULN2003 28BYJ-48 4-Phase Stepper Motor

Moteur pas à pas

Connexion des composants

Dans cette section, nous allons connecter les composants à l’Arduino. Vous devrez connecter les broches de sortie de l’Arduino au module driver, qui est lui-même relié au moteur pas à pas. Comme le moteur pas à pas consomme plus de courant que ce que l’Arduino peut fournir, nous ajoutons une breadboard avec une alimentation supplémentaire. La breadboard accueillera aussi le capteur IR, qui doit être connecté à l’alimentation et à une broche d’entrée de l’Arduino. L’image ci-dessous vous montre le câblage complet.

Wiring of the IR sensor, stepper motor, driver and Arduino

Connexion du moteur pas à pas et du driver

Commençons par connecter le moteur pas à pas à la carte driver.

Le moteur pas à pas 28byj-48 est généralement livré avec un connecteur qui s’insère directement dans la prise de la carte driver. Branchez-le simplement. Il ne peut s’insérer que dans un seul sens.

Wiring stepper motor and driver

Ensuite, nous connectons les signaux d’entrée du driver moteur aux broches de sortie de la carte Arduino :

Wiring driver and Arduino

Le tableau suivant liste les broches correspondantes :

Arduino Module driver
Broche 12 IN1
Broche 11 IN2
Broche 10 IN3
Broche 9 IN4

Nous terminons le câblage du driver en connectant l’alimentation de la carte driver à la breadboard. Assurez-vous que le fil rouge relie l’entrée positive de la carte driver au rail positif de la breadboard (marqué par une ligne rouge). Le fil noir relie le côté négatif à la masse (GND).

Power supply driver

Connexion de l’alimentation supplémentaire

Pour faire fonctionner un moteur pas à pas, il faut généralement plus de puissance que ce que la carte Arduino peut fournir. Nous connectons donc une alimentation supplémentaire (par exemple, une pile 9V) à la breadboard. Voir le connecteur ci-dessous :

Additional power supply

Ne faites PAS fonctionner le moteur pas à pas directement à partir de la sortie 5V de l’Arduino ! Vous risquez d’endommager le régulateur de tension de votre carte.

Connexion du capteur IR

Plaçons maintenant le capteur infrarouge (IR) sur la breadboard et connectons-le. La broche négative est marquée d’un signe (-). Nous utilisons un fil noir pour relier cette broche au rail de masse de la breadboard. Cela signifie que le capteur et la carte driver partagent la même masse.

Wiring IR sensor

La broche centrale du capteur est généralement le plus. Nous devons la connecter à la sortie 5V de l’Arduino. Ci-dessous, vous voyez le fil rouge allant de la broche centrale du capteur IR à la sortie 5V de la carte Arduino.

Power supply IR sensor

Ne connectez PAS la broche centrale du capteur au rail positif de la breadboard, car il pourrait être à une tension plus élevée ! Ne connectez pas non plus le 5V de l’Arduino au rail positif de la breadboard .

Cependant, il faut s’assurer que le capteur et la carte driver partagent bien la même masse. Nous faisons donc passer un fil noir de la broche GND de l’Arduino au rail négatif de la breadboard (marqué par une ligne bleue. Voir ci-dessus.

Enfin, nous connectons le signal de sortie du capteur IR, c’est-à-dire la broche marquée (S), à la broche 8 de l’Arduino à l’aide d’un fil blanc.

Les deux choses les plus importantes à retenir sont (1), ne pas connecter l’alimentation du moteur pas à pas directement à l’Arduino. Mais (2), bien connecter l’alimentation du capteur IR à l’Arduino. Faites aussi attention à la polarité, bien sûr.

Écriture du code Arduino

Dans cette section, nous allons écrire le code pour contrôler le moteur pas à pas avec une télécommande IR. Plus précisément, nous voulons pouvoir contrôler la vitesse et le sens de rotation du moteur pas à pas. De plus, il serait pratique de pouvoir arrêter et démarrer le moteur en appuyant sur un bouton.

Le code ci-dessous fait tout cela. Nous allons le découper en parties et expliquer chaque section dans la suite du tutoriel.

#include <IRremote.hpp>
#include <AccelStepper.h>

#define IR_RECEIVE_PIN 8

#define IN1_PIN 12
#define IN2_PIN 11
#define IN3_PIN 10
#define IN4_PIN 9

#define TYPE AccelStepper::HALF4WIRE

#define MAXSPEED 1000
#define MINSPEED 100

int currspeed = 500;
int prevspeed = 500;
int inc = 100;
int dir = +1;

// Note the pin order 1,3,2,4!
auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);

void setup() {
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  stepper.setMaxSpeed(MAXSPEED);
}

void loop() {
  if (IrReceiver.decode()) {
    uint16_t command = IrReceiver.decodedIRData.command;
    if (command == 31) {         // VOL+
      prevspeed = currspeed;
      currspeed = min(currspeed + inc, MAXSPEED);
    } else if (command == 23) {  // VOL-
      prevspeed = currspeed;
      currspeed = max(currspeed - inc, MINSPEED);
    } else if (command == 21) { // MODE
      dir = -dir;
      delay(200);
    } else if (command == 7) {  // PLAY or PAUSE
      currspeed = currspeed > 0 ? 0 : prevspeed;
      delay(200);
    }
    IrReceiver.resume();
  }
  stepper.setSpeed(dir * currspeed);
  stepper.runSpeed();
}

Installation des bibliothèques

Tout d’abord, nous avons besoin de deux bibliothèques. IRremote, qui sert à lire et interpréter les signaux envoyés par la télécommande IR. Et AccelStepper, qui va nous faciliter le contrôle du moteur pas à pas. Si vous n’avez pas encore ces deux bibliothèques installées, il faudra les ajouter.

#include <IRremote.hpp>
#include <AccelStepper.h>

Définition des constantes

Ensuite, nous définissons les constantes que nous utiliserons dans le reste du code. D’abord, nous définissons les broches pour le capteur IR (PIN 8) et les quatre broches de sortie de la carte Arduino qui sont connectées aux broches d’entrée du driver du moteur pas à pas (IN1_PIN, …, IN4_PIN)

#define IR_RECEIVE_PIN 8

#define IN1_PIN 12
#define IN2_PIN 11
#define IN3_PIN 10
#define IN4_PIN 9

De plus, nous devons indiquer à la bibliothèque stepper quel type de moteur pas à pas est connecté (HALF4WIRE). Nous voulons aussi spécifier une vitesse maximale et minimale (1000…100). Pour plus de détails, consultez notre tutoriel 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino.

#define TYPE AccelStepper::HALF4WIRE

#define MAXSPEED 1000
#define MINSPEED 100

Définition des variables

Comme nous voulons pouvoir contrôler la vitesse du moteur pas à pas, il nous faut quelques variables en plus des constantes ci-dessus. Plus précisément, nous avons besoin de la vitesse actuelle (currspeed), de la vitesse précédente du moteur (lastspeed), et de l’incrément (inc) pour accélérer ou ralentir le moteur. Nous avons aussi une variable dir, qui vaut soit +1 soit -1 et qui détermine le sens de rotation.

int currspeed = 500;
int prevspeed = 500;
int inc       = 100;
int dir       = +1;

Astuce : si vous souhaitez modifier la vitesse du moteur plus rapidement ou lentement, c’est la variable inc qu’il faut ajuster.

Enfin, nous créons l’objet moteur pas à pas (stepper), qui nous permet d’envoyer des commandes au moteur.

auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);

Notez que les entrées ne sont PAS dans l’ordre séquentiel mais dans l’ordre 1, 3, 2, 4. C’est fait exprès !

La fonction Setup

La fonction setup, où nous initialisons la carte, est très simple. Nous indiquons juste à la bibliothèque du capteur quelles broches sont utilisées pour le capteur IR et nous réglons la vitesse initiale du moteur pas à pas sur MAXSPEED.

void setup() {
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  stepper.setMaxSpeed(MAXSPEED);
}

La fonction Loop

Toute l’action se passe dans la boucle principale. Ici, nous attendons d’abord le signal du récepteur IR. S’il reçoit un signal à décoder, nous le décodons et extrayons la commande spécifique envoyée par la télécommande IR. Selon la valeur de la variable command , nous accélérons, ralentissons, changeons de sens ou passons du mode pause au mode marche.

void loop() {
  if (IrReceiver.decode()) {
    uint16_t command = IrReceiver.decodedIRData.command;
    if (command == 31) {         // VOL+
      prevspeed = currspeed;
      currspeed = min(currspeed + inc, MAXSPEED);
    } else if (command == 23) {  // VOL-
      prevspeed = currspeed;
      currspeed = max(currspeed - inc, MINSPEED);
    } else if (command == 21) { // MODE
      dir = -dir;
      delay(200);
    } else if (command == 7) {  // PLAY or PAUSE
      currspeed = currspeed > 0 ? 0 : prevspeed;
      delay(200);
    }
    IrReceiver.resume();
  }
  stepper.setSpeed(dir * currspeed);
  stepper.runSpeed();
}

Les codes de commande sont associés à des touches spécifiques (Vol+->31, Vol–>23, Mode->21, Play/Pause->7) sur la télécommande IR. Cette correspondance dépendra de la télécommande IR que vous utilisez ! Pour savoir quelles touches correspondent à quels codes de commande pour votre télécommande, consultez notre tutoriel sur How to use an IR receiver and remote with Arduino.

Il y a quelques détails intéressants dans le code. Premièrement, si on accélère, il faut éviter de dépasser MAXSPEED. La fonction min() s’en charge. De même, quand on ralentit, on utilise la fonction max() pour s’assurer de ne pas descendre en dessous de MINSPEED.

Le changement de sens est simple : chaque fois que j’appuie sur MODE sur ma télécommande, le récepteur IR lit le code de commande 21, et on change simplement le signe de la variable dir . Notez que la variable dir est utilisée plus loin dans le code quand la vitesse est définie via stepper.setSpeed(dir*currspeed), et détermine le sens de rotation (+1 = sens horaire, -1 = sens antihoraire).

La dernière commande permet d’alterner entre marche et arrêt avec la touche PLAY/PAUSE de ma télécommande. On utilise un ternary condition (c ? a : b) ici pour vérifier si la vitesse actuelle est supérieure à zéro. Si c’est le cas, cela signifie que le moteur tourne et on met la vitesse à zéro pour l’arrêter. Sinon, si le moteur est à l’arrêt (vitesse nulle), on remet la dernière vitesse connue (prevspeed).

Applications

Il y a beaucoup de choses à faire avec un moteur pas à pas contrôlé par IR. Voici quelques idées sympas et applications possibles :

Stores ou rideaux automatisés

Utilisez le moteur pas à pas pour ouvrir et fermer des stores ou des rideaux en réponse aux commandes de la télécommande IR. Cela peut être un ajout pratique à un système domotique.

Bras robotisé

Construisez un petit bras robotisé contrôlable avec la télécommande IR. Le moteur pas à pas peut servir à déplacer le bras pour saisir et manipuler des objets.

Distributeur automatique pour animaux

Créez un distributeur automatique pour animaux qui distribue de la nourriture à des heures précises ou sur commande via la télécommande IR. Le moteur pas à pas peut contrôler le mécanisme de distribution.

Système d’arrosage automatique

Construisez un système qui arrose les plantes automatiquement selon un planning ou sur commande IR. Le moteur pas à pas peut contrôler le débit d’eau ou le mouvement d’un bras d’arrosage.

Ouvre-porte de garage

Utilisez le moteur pas à pas pour ouvrir et fermer une porte de garage en réponse aux commandes de la télécommande IR. Cela peut être un ajout utile à un système domotique.

Aspirateur robotisé

Créez un petit aspirateur robotisé contrôlable avec la télécommande IR. Le moteur pas à pas peut servir à déplacer l’aspirateur pour qu’il se déplace dans la pièce.

Distributeur automatique pour poissons

Construisez un distributeur automatique pour poissons qui distribue de la nourriture à des heures précises ou sur commande IR. Le moteur pas à pas peut contrôler le mécanisme de distribution.

Serrure de porte intelligente

Utilisez le moteur pas à pas pour verrouiller et déverrouiller une porte en réponse aux commandes de la télécommande IR. Cela peut être un ajout pratique à un système domotique.

Ouvre-fenêtre automatique

Créez un système qui ouvre et ferme automatiquement les fenêtres selon la température ou sur commande IR. Le moteur pas à pas peut contrôler le mouvement de la fenêtre.

Barman robotisé

Construisez un barman robotisé capable de préparer et servir des boissons sur commande IR. Le moteur pas à pas peut contrôler le mouvement du mécanisme de distribution des boissons.

Conclusions

Dans ce tutoriel, nous avons appris à contrôler un moteur pas à pas 28byj-48 à l’aide d’une télécommande IR et d’un driver ULN2003 avec une carte Arduino. En suivant les étapes de ce guide, vous devriez maintenant pouvoir intégrer ces composants dans vos propres projets et réaliser des mouvements précis de moteur.

Nous avons commencé par rassembler les pièces nécessaires, dont le moteur pas à pas 28byj-48, une télécommande IR, un driver ULN2003 et une carte Arduino. Nous avons ensuite connecté ces composants ensemble, en veillant à ce que le câblage soit correct et sécurisé.

Ensuite, nous avons écrit le code Arduino pour recevoir les signaux de la télécommande IR et les traduire en mouvements spécifiques du moteur. Grâce à la bibliothèque IRremote, nous avons pu facilement capter et interpréter les signaux envoyés par la télécommande. Nous avons ensuite utilisé le driver ULN2003 pour piloter le moteur pas à pas, en fournissant la puissance et les signaux nécessaires pour faire tourner le moteur dans la direction et à la vitesse souhaitées.

En conclusion, contrôler un moteur pas à pas 28byj-48 avec une télécommande IR et un driver ULN2003 est un projet amusant et pratique qui ouvre de nombreuses possibilités en automatisation et robotique. Que vous construisiez un slider pour caméra, un bras robotisé ou tout autre projet nécessitant un contrôle précis de moteur, ce tutoriel vous a donné les connaissances et compétences nécessaires pour vous lancer.

Nous espérons que ce tutoriel vous a été utile et qu’il vous a inspiré à explorer encore plus de possibilités avec les moteurs pas à pas et Arduino. N’hésitez pas à consulter la section Liens pour d’autres ressources et projets autour du contrôle de moteurs pas à pas. Bon bricolage !

Foire aux questions

Voici quelques questions fréquemment posées sur le contrôle d’un moteur pas à pas 28byj-48 avec une télécommande IR et un driver ULN2003 :

Q : Puis-je utiliser un autre moteur pas à pas avec ce montage ?

R : Oui, vous pouvez utiliser un autre moteur pas à pas tant qu’il a des caractéristiques compatibles. Vérifiez la tension, le courant et le nombre de pas par tour du moteur pour garantir la compatibilité avec le driver ULN2003. Consultez nos tutoriels sur les alternatives driver boards and stepper motors.

Q : Puis-je utiliser un autre driver à la place du ULN2003 ?

R : Oui, vous pouvez utiliser un autre driver comme le A4988 ou le DRV8825. Cependant, il faudra modifier le code en conséquence pour correspondre à la configuration des broches et aux signaux de contrôle du nouveau driver.

Q : Puis-je contrôler plusieurs moteurs pas à pas avec ce montage ?

R : Oui, vous pouvez contrôler plusieurs moteurs pas à pas en connectant chaque moteur à un driver ULN2003 séparé et en utilisant des broches différentes sur l’Arduino pour chaque driver. Il faudra adapter le code pour piloter chaque moteur individuellement.

Q : Puis-je utiliser un autre microcontrôleur à la place de l’Arduino ?

R : Oui, vous pouvez utiliser un autre microcontrôleur comme un ESP32 ou un Raspberry Pi. Il faudra cependant adapter le code au langage de programmation et à la configuration des broches du microcontrôleur choisi.

Q : Comment alimenter le moteur pas à pas ?

R : Le moteur pas à pas peut être alimenté avec une alimentation externe. Assurez-vous de connecter la borne positive de l’alimentation à la broche VCC du driver ULN2003 et la borne négative à la broche GND. La tension de l’alimentation doit correspondre à la tension nominale du moteur (5-12V).

Q : Puis-je contrôler le moteur pas à pas sans fil ?

R : Oui, vous pouvez contrôler le moteur pas à pas sans fil en utilisant un module de communication sans fil comme le Bluetooth ou le Wi-Fi. Il faudra intégrer le protocole de communication approprié dans votre code et établir une connexion entre le microcontrôleur et le module sans fil.

Si vous avez d’autres questions ou des doutes, n’hésitez pas à les poser dans les commentaires ci-dessous ou à consulter les liens fournis pour plus d’informations.

Liens

Voici quelques liens vers des tutoriels associés :