Description
🔍 Description du Module de Capteur de Vitesse Infrarouge Encoder Numérique
✅ Caractéristiques principales
Le Module de Capteur de Vitesse Infrarouge (IR) avec Encoder Numérique est un dispositif couramment utilisé pour la détection de la vitesse de rotation ou du comptage des rotations d’objets en mouvement, tels que des moteurs ou des roues.
- Type de capteur: Optique infrarouge
- Sortie: Numérique (0 ou 1 logique)
- Principe de fonctionnement: Interruption d’un faisceau IR par un disque codé (disque encodeur)
- Tension d’alimentation: 3.3V – 5V
- Type de sortie: Signal numérique (HIGH/LOW)
- Broches: VCC, GND, OUT
- Fréquence supportée: Jusqu’à ~1000 RPM (dépend du disque encodeur)
🧰 Applications typiques
- Mesure de la vitesse angulaire des moteurs
- Compte impulsions (tachymètres)
- Robotique et automatisation
- Encodage optique pour les roues des robots
⚙️ Composants nécessaires pour le projet avec Arduino
- 1x Arduino UNO (ou compatible)
- 1x Module détecteur de vitesse IR
- 1x Disque encodeur (roue codée, perforée)
- Câbles Dupont
- Moteur DC (facultatif)
- Plateau de prototypage (optionnel)
🔌 Connexions électriques
| Module IR Encodeur | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| SORTIE | Broche digitale (par exemple 2) |
🖥️ Code d’exemple pour Arduino
1. Lecture des impulsions
volatile int conta_impulsi = 0;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);
}
void loop() {
Serial.print("Impulsi contati: ");
Serial.println(conta_impulsi);
delay(1000);
}
void contaImpulso() {
conta_impulsi++;
}
✅ Ce sketch utilise l’interruption sur la broche 2 (seules les broches 2 et 3 supportent les interruptions sur Arduino UNO) pour compter les interruptions générées par le disque encoder.
2. Calcul de la vitesse angulaire (RPM)
Supposons que le disque ait 20 orifices (20 impulsions par tour complet) :
volatile int impulsi = 0;
unsigned long tempo_precedente = 0;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);
}
void loop() {
unsigned long tempo_attuale = millis();
if (tempo_attuale - tempo_precedente >= 1000) {
noInterrupts(); // disabilita gli interrupt per lettura sicura
int rpm = (impulsi * 60) / 20; // 20 fori -> 20 impulsi per rotazione
impulsi = 0;
interrupts(); // riattiva gli interrupt
Serial.print("RPM: ");
Serial.println(rpm);
tempo_precedente = tempo_attuale;
}
}
void contaImpulso() {
impulsi++;
}
📏 Guide d’ajustement et de test
- Installation physique: Installe le détecteur près du disque percé sur le moteur. Assure-toi que le faisceau infrarouge traverse les orifices du disque encoder.
- Alignement: Le faisceau IR doit frapper exactement l’intervalle entre les orifices. Une mauvaise alignement réduit la fiabilité de la lecture.
- Vérification du fonctionnement: Utilise le premier sketch pour vous assurer que les impulsions sont lues correctement.
- Mesure RPM: Utilisez le deuxième sketch pour estimer la vitesse de rotation du disque.
💡 Conseils pratiques
- Utilisez des disques encodeurs imprimables en 3D ou achetables, avec un nombre connu d’orifices.
- Pour améliorer la stabilité, filtrez électriquement l’alimentation du module (par exemple avec un condensateur de 100nF entre VCC et GND).
- Le module peut également être utilisé pour détecter des objets qui passent sur une ligne de production (comptage de pièces).
📚 Ressources supplémentaires
- Encoder Wheel Generator (PDF) – crée des disques encodeurs imprimables
- Arduino attachInterrupt() référence
Parfait ! Étendons maintenant la guide pour inclure :
- ✅ Contrôle d’un moteur DC avec encodeur IR
- ✅ Implémentation d’un contrôle PID de la vitesse
- ✅ Code complet et explication
- ✅ Schéma fonctionnel du système
🔁 Objectif du projet
Réaliser un contrôle de vitesse en boucle fermée pour un moteur DC, en utilisant :
- Un module encodeur IR numérique pour mesurer la vitesse
- Un algorithme PID pour maintenir constante la vitesse désirée
- Un moteur DC piloté par un module driver (par exemple L298N, L9110, L293D)
🔩 Composants supplémentaires nécessaires
- 1x Moteur DC
- 1x Disque Encodeur avec trous
- 1x Driver moteur (par exemple L298N o L9110S)
- 1x Alimentation externe (moteur)
- 1x Potentiomètre (facultatif, pour régler la vitesse)
- Arduino UNO ou compatible
🔌 Schéma électrique (avec L298N)
| Composant | Connexion Arduino |
|---|---|
| Module IR Encoder | VCC → 5V, GND → GND, OUT → D2 |
| L298N IN1 | D8 |
| L298N IN2 | D9 |
| L298N ENA (PWM) | D10 (PWM) |
| Alimentation du moteur | 12V externe |
🧠 Structure du code : PID + Encoder + PWM
Le PID ajuste le signal PWM pour maintenir la vitesse constante mesurée par le capteur encoder.
⚙️ 1. Déclarations et bibliothèque PID
Installez la bibliothèque PID_v1 dans Arduino IDE (via Library Manager).
#include <PID_v1.h>
// PID Variables
double setpointRPM = 100; // Valore desiderato (impostabile)
double inputRPM = 0; // Valore letto dal sensore
double outputPWM = 0; // Output PID -> PWM
// PID tunings: Kp, Ki, Kd
PID myPID(&inputRPM, &outputPWM, &setpointRPM, 2.0, 5.0, 1.0, DIRECT);
📏 2. Impulsions du capteur
volatile int impulsi = 0;
void contaImpulso() {
impulsi++;
}
🔁 3. Initialisation
void setup() {
Serial.begin(9600);
// Encoder
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);
// Motore
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// Direzione motore fissa
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
// PID
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(0, 255); // PWM range
}
🔄 4. Boucle : calcul des RPM et contrôle PID
unsigned long tPrecedente = 0;
int foriDisco = 20;
void loop() {
unsigned long tempo = millis();
// Calcola RPM ogni 100 ms
if (tempo - tPrecedente >= 100) {
noInterrupts();
int lettura = impulsi;
impulsi = 0;
interrupts();
inputRPM = (lettura * 600.0) / foriDisco; // 600 = 60 sec/min * 100ms
myPID.Compute(); // Calcola outputPWM
analogWrite(10, (int)outputPWM); // Controlla motore
// Debug seriale
Serial.print("Setpoint: "); Serial.print(setpointRPM);
Serial.print(" RPM -> Misurato: "); Serial.print(inputRPM);
Serial.print(" PWM: "); Serial.println(outputPWM);
tPrecedente = tempo;
}
}
🎛️ (Facultatif) Contrôle de la vitesse via potentiomètre
setpointRPM = map(analogRead(A0), 0, 1023, 0, 300);
Connectez un potentiomètre entre 5V – A0 – GND pour régler dynamiquement la vitesse désirée.
🧪 Calibration du PID
Les valeurs initiales de Kp, Ki, Kd doivent être adaptées à votre moteur et à la charge :
PID myPID(&inputRPM, &outputPWM, &setpointRPM, 2.0, 5.0, 1.0, DIRECT);
- Kp (Proporcionnel) : augmente pour une réponse plus rapide
- Ki (Intégratif) : corrige l’erreur à long terme
- Kd (Dérivatif) : atténue les oscillations
Commencez avec seulement Kp, puis ajoutez Ki, enfin Kd.
✅ Résultat attendu
- Le moteurs maintiennent une vitesse constante même si la tension change ou la charge varie
- Vous pouvez ajuster la vitesse souhaitée en modifiant
setpointRPM - Le système se régule automatiquement avec l’algorithme PID
🧩 Extensions possibles
- 📈 Enregistrer les données sur une carte SD ou sur le moniteur série
- 🧭 Contrôle PID sur 2 moteurs pour un robot différentiel
- 🕹️ Contrôle à distance de la vitesse via Bluetooth ou Wi-Fi
- 📊 Interface graphique avec Processing ou Python
Tutoriel : Comment utiliser le module détecteur de vitesse infrarouge encoder numérique
Le module détecteur de vitesse infrarouge encoder numérique est idéal pour les makers qui souhaitent mesurer la vitesse de rotation d’un moteur ou d’un autre dispositif rotatif. Il est particulièrement utile dans des projets tels que des compteurs de tours, des robots et des drones.
Ce qu’il faut
- Arduino
- Moteur à courant continu
- Connexion USB pour l’alimentation
Étapes
- Connecter les connecteurs du module au pin D2 de l’Arduino (vérifier le datasheet pour la configuration exacte).
- Attachez le moteur à la roue ou à l’arbre sur lequel vous souhaitez mesurer la vitesse.
- Approchez le capteur infrarouge du bord de la roue de manière à capter les signaux de passage.
- Écrivez un sketch Arduino pour lire les données du capteur et calculer la vitesse de rotation (voir le code ci-dessous).
- Compilez et exécutez le sketch sur votre Arduino.
- Vérifiez que la sortie du capteur est conforme aux attentes, ajustez éventuellement la position ou l’alimentation.
- Connectez un afficheur LCD (optionnel) pour afficher les données de vitesse en temps réel.
- Implémentez la logique du projet pour utiliser ces données comme nécessaire.
Exemple de code
const int encoderPin = 2;
void setup() {
pinMode(encoderPin, INPUT);
}
void loop() {
if (digitalRead(encoderPin) == HIGH) {
Serial.println("Impulso");
}
}
Mini-projet
Créez un compteur de tours pour moteur RC. Connectez le capteur à l’arbre du moteur et mesurez la vitesse pendant l’exécution.
Erreurs courantes
- Le capteur ne détecte pas les signaux : vérifiez qu’il est correctement positionné par rapport au bord de la roue.
- Lecture incorrecte des données : assurez-vous d’avoir configuré le bon pin et d’avoir choisi la logique appropriée pour lire les signaux.
- Vitesse non conforme aux attentes : vérifiez l’alimentation du moteur et la position du capteur.
Accessoires conseillés
- Afficheur LCD
- Moteur à courant continu
- Pneu de test pour moteur RC
- Connecteurs variés
Questions fréquentes
Le module peut-il être utilisé avec d’autres microcontrôleurs ?
Oui, le module est compatible avec tout microcontrôleur qui prend en charge l’entrée digitale.
Quels types de moteur puis-je connecter au capteur ?
Vous pouvez utiliser tout type de moteur à pas ou à courant continu, mais assurez-vous qu’il est compatible avec votre circuit électrique.
Comment puis-je améliorer la précision de la mesure ?
Placez le capteur plus près de la roue et assurez-vous qu’il n’y a pas d’interférences lumineuses.











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