Montage test mouvements EEZYbotArm MK3 avec Moteur pas à pas (28BYJ-48 + ULN2003) et Arduino
Description :
Ce montage permet de réaliser un test de mouvements du bras robotique EEZYbotArm MK3 en utilisant un moteur pas à pas 28BYJ-48 piloté par son driver ULN2003 et une carte Arduino.
Le système inclut également deux boutons poussoirs servant à contrôler la direction de rotation du moteur (sens horaire et antihoraire), ainsi qu’un potentiomètre permettant d’ajuster la vitesse de rotation en temps réel.
L’ensemble offre une interface simple pour expérimenter le fonctionnement du moteur pas à pas, vérifier la mécanique du bras robotisé et valider les réglages de vitesse et de direction avant d’intégrer des séquences de mouvements plus complexes.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x 28BYJ-48
- 1 x ULN2003
- 2 x Boutons
- 1 x Potentiomètre 10KΩ
- 1 x Breadboard
- 1 x Alimentation 12V
- Fils de connexion
Vidéo de démonstration :
NA
Schéma de câblage :


//Inclut la librairie nécessaire pour interagir facilement avec le moteur pas à pas sans devoir gérer manuellement les séquences de pas.
#include <Stepper.h>
//Définit le nombre de pas nécessaires pour une révolution complète du moteur. C'est une valeur cruciale pour déterminer la précision de la rotation.
const int stepsPerRevolution = 200;
//Initialise l'objet
//Broches digitales de l'Arduino connectées au driver du moteur pas à pas
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
//Définit la broche digitale 3 comme l'entrée pour le bouton contrôlant la rotation dans le sens horaire
const int senshoraireM1 = 3;
//Définit la broche digitale 4 comme l'entrée pour le bouton contrôlant la rotation dans le sens anti-horaire
const int sensantihoraireM1 = 4;
void setup() {
//Les deux broches de direction sont configurées avec une résistance de tirage interne (Pull-up).
//Cela signifie que l'état de la broche est normalement HIGH (actif) et passe à LOW (inactif)
//uniquement lorsque le bouton est pressé et connecte la broche à la masse (GND)
pinMode(senshoraireM1, INPUT_PULLUP);
pinMode(sensantihoraireM1, INPUT_PULLUP);
}
void loop() {
//Lit la valeur de la broche analogique A0, où le potentiomètre est connecté. La valeur lue est comprise entre 0 et 1023.
int sensorReading = analogRead(A0);
//Convertit la lecture du potentiomètre (0-1023) en une plage de vitesse plus exploitable (0-100).
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
//Le moteur n'est contrôlé que si le potentiomètre est tourné et que la vitesse calculée est supérieure à zéro.
if (motorSpeed > 0) {
//La vitesse du moteur est mise à jour avec la valeur lue et mappée. La vitesse est exprimée en RPM (tours par minute).
myStepper.setSpeed(motorSpeed);
//Si le bouton senshoraireM1 est pressé (lecture LOW grâce au PULLUP), la fonction myStepper.step(stepsPerRevolution / 100) est appelée.
//Le moteur avance d'un petit pas positif (ici, 1/100e de tour, ou 2 pas) pour un mouvement dans le sens horaire.
if (digitalRead(senshoraireM1) == LOW) {
myStepper.step(stepsPerRevolution / 100);
//Si le bouton sensantihoraireM1 est pressé, la fonction myStepper.step(-stepsPerRevolution / 100) est appelée.
//Le moteur avance d'un petit pas négatif pour un mouvement dans le sens anti-horaire.
} else if (digitalRead(sensantihoraireM1) == LOW) {
myStepper.step(-stepsPerRevolution / 100);
} else {
//Toutes les broches du moteur sont mises à l'état LOW.
//Désactiver le moteur et coupe le courant dans les bobines lorsqu'il n'est pas utilisé.
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}
}
