Arduino UNO R4 - Capteur de vitesse optique à fente IR

Dans ce tutoriel, nous allons apprendre à utiliser le capteur de vitesse optique à fente IR avec l'Arduino UNO R4. En détail, nous allons apprendre :

Arduino UNO R4 et capteur de vitesse optique à fente IR

À Propos du Capteur de Vitesse Optique à Fente IR

Ce petit module a une forme de U. On l'appelle aussi fourche optique. Un bras contient une LED infrarouge. L'autre bras contient un phototransistor NPN. Ils se font face de chaque côté d'un espace de 5.9 mm. Le capteur indique une chose simple à l'Arduino UNO R4 : l'espace est-il vide, ou y a-t-il quelque chose dedans ?

Capteur de vitesse optique à fente IR
Type de capteur photoélectrique à fente (LED IR + phototransistor NPN)
Largeur de la fente 5.9 mm
Tension de fonctionnement 3.3V à 5V DC
Sortie numérique (TTL), BAS quand bloqué, HAUT quand libre
Conditionnement du signal trigger de Schmitt intégré
Fixation trous pour vis M3 aux deux extrémités
Broches 3 (VCC, GND, OUT)

Utilisations courantes :

  • Mesurer la vitesse d'un moteur (tr/min, RPM) avec un disque codeur, comme un tachymètre.
  • Compter des objets ou des impulsions.
  • Mesurer une distance en comptant les tours de roue.
  • Donner un retour sur la vitesse des roues à un robot.
  • Détecter une limite ou une position de départ.

Brochage

Brochage du capteur de vitesse optique à fente IR

Le module a trois broches :

  • Broche VCC : à connecter au 5V de l'Arduino UNO R4 (le module accepte de 3.3V à 5V).
  • Broche GND : à connecter à GND (0V).
  • Broche OUT : sortie numérique, à connecter à une broche d'entrée de l'Arduino UNO R4.

L'ordre des broches peut changer d'un lot à l'autre. Lisez toujours les étiquettes imprimées sur votre module.

Comment Ça Marche

Comment fonctionne le capteur de vitesse optique à fente IR

La LED IR éclaire à travers la fente en permanence.

  • La fente est vide : la lumière atteint le phototransistor, donc la broche OUT est HAUTE.
  • La fente est bloquée par quelque chose d'opaque (une carte, un doigt, une dent d'un disque codeur) : la lumière ne peut pas passer, donc la broche OUT est BASSE.

Le trigger de Schmitt intégré transforme le niveau de lumière brut en un 0 ou un 1 propre. Le signal ne vibre pas, donc vous n'avez pas besoin d'anti-rebond logiciel.

Deux petites choses à savoir :

  • Le plastique transparent ou le verre peut laisser passer la lumière IR. Utilisez des objets opaques.
  • Certains modules d'autres fabricants fonctionnent dans l'autre sens. Si votre carte indique « bloqué » alors que la fente est vide, échangez simplement BAS et HAUT dans le premier code. Le code RPM compte un front par fente, donc il fonctionne avec les deux types.

Schéma de Câblage

Seuls trois fils sont nécessaires : VCC au 5V, GND à GND, et OUT à la broche 2 de l'Arduino UNO R4. L'UNO R4 est une carte 5V, donc une alimentation 5V convient ici, et le signal OUT reste à un niveau sûr.

Schéma de câblage de l'Arduino UNO R4 avec le capteur de vitesse optique à fente IR

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Voir Comment alimenter l'Arduino UNO R4..

Nous utilisons la broche 2 car elle peut gérer une interruption. Le deuxième code en a besoin.

Comment Programmer pour le Capteur de Vitesse Optique à Fente IR

Vérifier si la fente est bloquée (scrutation, polling) :

  • Configurez en entrée la broche connectée à la broche OUT :
pinMode(SENSOR_PIN, INPUT);
  • Lisez la broche. BAS signifie bloqué, HAUT signifie libre :
int state = digitalRead(SENSOR_PIN);
  • Comparez avec la dernière lecture, pour agir seulement quand l'état change :
if (state != lastState) { // the slot just became blocked or clear }

Compter des impulsions rapides (interruption) :

  • Créez un compteur. Marquez-le volatile car l'interruption le modifie :
volatile unsigned long pulseCount = 0;
  • Écrivez une toute petite fonction qui ajoute un au compteur :
void countPulse() { pulseCount++; }
  • Exécutez cette fonction à chaque fois que le signal passe de HAUT à BAS (une dent entre dans la fente) :
attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
  • Une fois par seconde, copiez et remettez à zéro le compteur en suspendant les interruptions, puis transformez les impulsions en tr/min (RPM) :
noInterrupts(); unsigned long pulses = pulseCount; pulseCount = 0; interrupts(); float rpm = pulses * 60.0 / SLOTS_PER_TURN;

Pourquoi cette formule ? Avec un disque à 20 fentes, un tour complet fait 20 impulsions. Les impulsions en 1 seconde × 60 donnent les impulsions par minute. Divisez par 20 et vous obtenez les tours par minute (tr/min, RPM).

Code Arduino UNO R4 - Détecter un Objet dans la Fente

Ce programme lit la broche OUT encore et encore. Il affiche une ligne seulement quand l'état change, et il ajoute un au compteur à chaque fois que la fente est bloquée.

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 2; // Arduino UNO R4 pin connected to the OUT pin of the speed sensor int lastState; // the previous state of the sensor int objectCount = 0; // how many times the slot was blocked void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); lastState = digitalRead(SENSOR_PIN); } void loop() { int state = digitalRead(SENSOR_PIN); if (state != lastState) { // the state has changed if (state == LOW) { // LOW = something is in the slot objectCount++; Serial.print("The slot is blocked - count: "); Serial.println(objectCount); } else { // HIGH = the slot is clear Serial.println("The slot is clear"); } lastState = state; } }

Étapes Rapides

Suivez ces instructions étape par étape :

  • Si c'est votre première utilisation de l'Arduino Uno R4 WiFi/Minima, consultez le tutoriel sur Arduino UNO R4 - Installation du logiciel..
  • Câblez les composants selon le schéma fourni.
  • Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Uno R4 appropriée (par exemple, Arduino Uno R4 WiFi) et le port COM.
  • Copiez le code ci-dessus et collez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload pour envoyer le code vers l'Arduino UNO R4.
  • Ouvrez le Arduino UNO R4 - Moniteur série. et réglez-le sur 9600 bauds.
  • Glissez un morceau de carte (ou votre doigt) dans la fente, puis retirez-le. Faites-le plusieurs fois.
  • Regardez le résultat sur le moniteur série.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
The slot is blocked - count: 1 The slot is clear The slot is blocked - count: 2 The slot is clear The slot is blocked - count: 3 The slot is clear
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Chaque passage fait deux lignes : une quand la carte entre, une quand elle sort. Aucune ligne n'est affichée tant que rien ne change.

Code Arduino UNO R4 - Mesurer la Vitesse du Moteur (tr/min, RPM)

La scrutation dans loop() convient aux objets lents. Un disque qui tourne est beaucoup plus rapide, et loop() pourrait manquer des dents. Donc ce programme compte les impulsions avec une interruption sur le front DESCENDANT (FALLING), ce qui donne exactement un comptage par dent. Chaque seconde, il affiche le nombre d'impulsions et la vitesse en tr/min (RPM).

La constante SLOTS_PER_TURN est réglée sur 20. C'est le disque codeur courant livré avec les moteurs à engrenages TT. Si votre disque a un nombre de fentes différent, changez cette valeur.

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 2; // Arduino UNO R4 pin connected to the OUT pin of the speed sensor const int SLOTS_PER_TURN = 20; // number of slots (holes) in the encoder disc volatile unsigned long pulseCount = 0; // changed inside the interrupt unsigned long lastTime = 0; // runs every time a tooth of the disc blocks the slot void countPulse() { pulseCount++; } void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING); } void loop() { if (millis() - lastTime >= 1000) { // every 1 second lastTime = millis(); noInterrupts(); // read and reset the counter safely unsigned long pulses = pulseCount; pulseCount = 0; interrupts(); float rpm = pulses * 60.0 / SLOTS_PER_TURN; // pulses per second -> turns per minute Serial.print("Pulses: "); Serial.print(pulses); Serial.print(" | Speed: "); Serial.print(rpm); Serial.println(" RPM"); } }

Installer le Disque Codeur

  • Fixez le disque codeur sur l'arbre du moteur ou sur la roue.
  • Placez le capteur pour que les dents du disque passent dans la fente.
  • Assurez-vous que le disque ne touche pas les bras du capteur.
  • Vous pouvez faire tourner le disque à la main, ou alimenter le moteur. Le moteur a besoin de son propre câblage. Consultez le tutoriel Arduino UNO R4 - moteur à courant continu. pour cette partie.

Étapes Rapides

  • Gardez le même câblage qu'avant.
  • Copiez le code RPM ci-dessus et collez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload.
  • Ouvrez le moniteur série à 9600 bauds.
  • Faites tourner le disque, puis laissez-le s'arrêter.
  • Regardez la vitesse sur le moniteur série. Ici, le moteur tourne à environ 300 tr/min (RPM) :
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Pulses: 0 | Speed: 0.00 RPM Pulses: 98 | Speed: 294.00 RPM Pulses: 101 | Speed: 303.00 RPM Pulses: 100 | Speed: 300.00 RPM Pulses: 99 | Speed: 297.00 RPM Pulses: 0 | Speed: 0.00 RPM
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Vérifiez une ligne : 100 impulsions × 60 ÷ 20 = 300 tr/min (RPM).

Vous voulez savoir quelle distance une roue a parcourue ? Multipliez le nombre de tours par la circonférence de la roue (π × diamètre de la roue).

※ Note:

Vidéo

Références de fonctions

Commentaires

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !