Sommaire
Contrôle sans fil du moteur pas-à-pas NEMA 17 avec Arduino, NRF24L01 et TB6600
Dans ce projet, nous allons piloter sans fil un moteur pas-à-pas NEMA 17 à l’aide d’un module radio NRF24L01, d’un driver TB6600 et d’un shield Joystick pour Arduino UNO.
Grâce à cette communication radio fiable et économique, il devient possible de contrôler à distance la vitesse et le sens de rotation du moteur, sans câble entre l’utilisateur et le système. Ce type de contrôle est particulièrement adapté aux projets nécessitant plus de mobilité et moins d’encombrement.
- Plateau rotatif motorisé
- Axe CNC déporté
- Robot mobile ou plateforme articulée
- Manipulation à distance d’équipement motorisé
Ce système améliore la flexibilité, facilite l’intégration dans des environnements restreints et permet un pilotage fluide du moteur pas-à-pas NEMA 17.
Réglage du moteur NEMA 17 et du driver TB6600
Avant de piloter votre moteur NEMA 17 avec le module NRF24L01, il est essentiel de régler correctement le driver TB6600 pour garantir un mouvement fluide et sécurisé.
Vous pouvez retrouver toutes les informations détaillées sur le réglage des micropas, de l’intensité maximale et des connexions du NEMA 17 dans notre article dédié : Contrôle du NEMA17 avec le TB6600 et le joystick KY-023.
Ces réglages incluent :
- Configuration des connecteurs de commande : ENA, DIR, STEP
- Connexion des phases du moteur : A+/A-, B+/B-
- Réglage de la résolution du pas et du courant maximal sur le TB6600
Un réglage correct garantit un pilotage précis et fiable, que vous utilisiez un joystick local ou la commande sans fil via NRF24L01.
Montage et câblage du système sans fil NEMA 17
Pour ce projet de contrôle sans fil d’un moteur NEMA 17 avec Arduino, TB6600 et NRF24L01, il est important de bien organiser le montage côté émetteur et récepteur pour garantir une communication stable et un fonctionnement fiable.
Matériel nécessaire
Côté émetteur :
- 1 Carte Arduino UNO
- 1 Shield Joystick
- 1 Module radio NRF24L01
- 1 Câble USB Type C
Côté récepteur :
- 1 Carte Arduino UNO
- 1 Driver TB6600
- 1 Moteur pas à pas NEMA 17
- 1 Module radio NRF24L01 avec support
- 1 Alimentation 12V / 2A
- 1 Connecteur Jack femelle 5.5 x 2.1 mm
- Câbles de connexion
- Mâle – Mâle 10cm
- Mâle – Femelle 10cm
- 1 Câble USB Type C
Montage côté émetteur
Le côté émetteur reçoit les commandes de l’utilisateur via le shield joystick.
Le joystick est connecté à la carte Arduino UNO et au module radio NRF24L01 qui transmet les données à distance.
Assurez-vous que le module NRF24L01 est correctement alimenté et fixé sur son support pour éviter toute déconnexion.
Montage côté récepteur
Le côté récepteur reçoit les signaux radio émis par le joystick et les traduit en mouvements précis du moteur NEMA 17 via le driver TB6600.
Un câblage correct du TB6600 et des phases du moteur est crucial pour garantir un fonctionnement stable et fluide.
Assurez-vous que le module NRF24L01 est alimenté et positionné correctement.
| Arduino Uno | Driver TB6600 | Moteur NEMA 17 | Module radio NRF24L01 | Connecteur Jack femelle |
|---|---|---|---|---|
| 5V | VCC | |||
| GND | GND | |||
| D9 | CE | |||
| D10 | CSN | |||
| D11 | MOSI | |||
| D12 | MISO | |||
| D13 | SCK | |||
| GND | ENA- | |||
| GND | ENA+ | |||
| GND | DIR- | |||
| D2 | DIR+ | |||
| GND | PUL- | |||
| D3 | PUL+ | |||
| B- | Fil Noir | |||
| B+ | Fil Vert | |||
| A- | Fil Bleu | |||
| A+ | Fil Rouge | |||
| GND | Borne Moins (-) | |||
| VCC | Borne Moins (+) |
Veillez à vérifier toutes les connexions avant l’alimentation. Une erreur dans le câblage peut endommager le moteur, le driver ou le module NRF24L01.
Une fois le montage terminé, votre système est prêt à recevoir les commandes du joystick et à piloter le moteur NEMA 17 sans fil de manière fluide et sécurisée.
Code Arduino pour le contrôle sans fil du NEMA 17
Pour piloter votre moteur NEMA 17 sans fil, nous allons utiliser deux codes Arduino : un pour l’émetteur (lecture du joystick et transmission des données) et un pour le récepteur (réception des données et pilotage du moteur via le driver TB6600). Assurez-vous d’avoir installé les librairies suivantes dans l’IDE Arduino :
- RF24.h
- nRF24L01.h
- SPI.h (incluse par défaut)
Code Arduino – Émetteur
L’émetteur lit les valeurs du shield joystick et les envoie via le module radio NRF24L01. Vous pouvez suivre les valeurs du joystick en temps réel via le moniteur série.
// Carte : Arduino UNO
// Atelier de la Robotique
#include
#include
#include
// NRF24L01
RF24 radio(9, 10); // CE, CSN
const byte adresse[6] = "motor";
// Structure de données à envoyer
struct Data {
int x;
int y;
bool bouton;
};
Data data;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(adresse);
radio.setPALevel(RF24_PA_LOW);
radio.stopListening(); // Mode émission
}
void loop() {
data.x = analogRead(A0);
data.y = analogRead(A1);
data.bouton = !digitalRead(8); // Bouton pressé = LOW
radio.write(&data, sizeof(Data));
Serial.print("X: "); Serial.print(data.x);
Serial.print(" | Y: "); Serial.print(data.y);
Serial.print(" | Bouton: "); Serial.println(data.bouton);
delay(100);
}
Code Arduino – Récepteur
Le récepteur reçoit les données du joystick et contrôle le moteur NEMA 17 via le driver TB6600. Il prend en compte une zone morte autour du centre du joystick pour éviter les mouvements involontaires et ajuste la vitesse en fonction de la déviation.
// Carte : Arduino UNO
// Atelier de la Robotique
#include
#include
#include
RF24 radio(9, 10); // CE, CSN
const byte adresse[6] = "motor";
struct Data {
int x;
int y;
bool bouton;
};
Data data;
#define DIR_PIN 2
#define STEP_PIN 3
const int X_CENTER = 330; // X_CENTER : Joystick au Repos
const int X_MIN = 0; // X_MIN: Joystick vers le Bas
const int X_MAX = 670; // X_MAX: Joystick vers le Haut
const int DEADZONE = 40;
volatile int currentDelay = 0; // durée entre pas
volatile bool moteurActif = false;
volatile bool sens = HIGH;
unsigned long lastStepTime = 0;
void setup() {
Serial.begin(9600);
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
radio.begin();
radio.openReadingPipe(0, adresse);
radio.setPALevel(RF24_PA_LOW);
radio.startListening();
Serial.println("Récepteur prêt !");
}
void loop() {
// ---- Réception radio ----
if (radio.available()) {
radio.read(&data, sizeof(Data));
int deviation = data.x - X_CENTER;
if (abs(deviation) < DEADZONE) {
moteurActif = false;
currentDelay = 0;
} else {
moteurActif = true;
sens = (deviation > 0);
digitalWrite(DIR_PIN, sens ? HIGH : LOW);
currentDelay = map(abs(deviation), 0, max(X_CENTER - X_MIN, X_MAX - X_CENTER), 1200, 200);
currentDelay = constrain(currentDelay, 200, 1200);
}
}
// ---- Génération d’impulsions fluide ----
if (moteurActif && currentDelay > 0) {
unsigned long now = micros();
if (now - lastStepTime >= (unsigned long)currentDelay) {
lastStepTime = now;
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(5); // impulsion courte (5–10 µs)
digitalWrite(STEP_PIN, LOW);
}
}
}
Avec ce code, votre moteur NEMA 17 peut être piloté à distance de manière fluide et précise, en ajustant la vitesse et le sens en fonction du déplacement du joystick. Assurez-vous de calibrer les valeurs X_CENTER, X_MIN et X_MAX selon votre joystick pour un contrôle optimal.
Démonstration en vidéo du moteur NEMA 17 piloté sans fil
Approfondir le contrôle sans fil du NEMA 17
Maintenant que vous avez mis en place un contrôle sans fil fonctionnel de votre moteur NEMA 17 avec le joystick et les modules NRF24L01, vous pouvez explorer d’autres possibilités :
- Ajouter un second axe de joystick pour contrôler simultanément la vitesse et la direction.
- Mettre en place plusieurs moteurs NEMA 17 pilotés en parallèle pour un projet de robotique plus complexe.
- Enregistrer les mouvements du moteur sur une carte SD pour analyse ou répétition automatique.
- Optimiser le code pour utiliser des interruptions et améliorer la précision des impulsions STEP à haute vitesse.
Ces améliorations permettent de transformer votre projet en une solution robuste pour des applications robotiques avancées ou des prototypes industriels.




