Compte-tours d’un moteur Pas à Pas avec Sensor Module LM393 piloter par un L298N et Arduino Uno
Description :
Projet permettant de mesurer le nombre de tours d’un moteur pas à pas à l’aide d’un capteur de vitesse LM393, piloté par un driver L298N et un Arduino Uno.
Le système compte les impulsions générées par le capteur à chaque rotation du moteur et peut afficher ou utiliser ces informations pour contrôler précisément les mouvements, idéal pour des applications nécessitant un suivi exact de la position ou du nombre de tours.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x L298N
- 1 x Moteur PAP bipolaire (NEMA17)
- 1 x Alimentation 12V
- 1 x Potentiomètre 10 KΩ
- 1 x Speed Sensor Module LM393
- 1 x Breadboard
- Fils de connexion
Version IDE :
- Arduino IDE 2.3.5
Vidéo de démonstration :
Schéma de câblage :


Code :
#include <Stepper.h>
// modifiez ceci pour qu'il corresponde au nombre de pas par tour
// pour votre moteur
const int stepsPerRevolution = 200;
// initialiser la bibliothèque stepper sur les broches 8 à 11
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
// La broche numérique 2 est reliée au Speed Sensor Module LM393
const int PinLM393 = 2;
// La broche analogique A0 est reliée au Potentiometre
const int PinPotentiometre = A0;
int RPM; //Variable stock vitesse de rotation par minute
float RPS; //Variable stock vitesse de rotation par seconde
unsigned long last_temps;
volatile float TpsparTour;
volatile unsigned long tempsMillis = 0, last_tempsMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(PinLM393, INPUT);
attachInterrupt(digitalPinToInterrupt(PinLM393), CalculTpsparTour, FALLING);
}
void loop() {
int ValeurPotentiometre = analogRead(PinPotentiometre);
int motorSpeed = map(ValeurPotentiometre, 0, 1023, 0, 200);
if (motorSpeed > 20) {
myStepper.setSpeed(motorSpeed);
myStepper.step(1);
} else {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (millis() - last_temps >= 1000) {
if (TpsparTour > 0) {
detachInterrupt(digitalPinToInterrupt(PinLM393));
//Affiche le temps de 1 tour
Serial.print("Tps/Tour : ");
Serial.print(TpsparTour);
Serial.println(" ms");
//Affiche la vitesse de rotation par seconde
RPS = 1000 / TpsparTour;
Serial.print("tr/s : ");
Serial.println(RPS);
//Affiche la vitesse de rotation par minute
RPM = 60000 / TpsparTour;
Serial.print("tr/min : ");
Serial.println(RPM);
Serial.println("");
last_temps = millis();
attachInterrupt(digitalPinToInterrupt(PinLM393), CalculTpsparTour, FALLING);
}
}
}
void CalculTpsparTour() {
tempsMillis = millis();
// Anti-rebond du capteur 100ms
if ((tempsMillis - last_tempsMillis) > 100) {
//Calcul du Temps par tour
TpsparTour = tempsMillis - last_tempsMillis;
last_tempsMillis = tempsMillis;
}
}
