Raspberry Pi - Capteur de vitesse optique à fente IR

Ce tutoriel vous explique comment utiliser un Raspberry Pi pour lire les impulsions d'un capteur de vitesse optique à fente IR avec un court script Python. Vous pouvez aussi connaître ce composant sous le nom de fourche optique ou d'interrupteur optique. Il détecte quand quelque chose passe dans son étroite fente. Avec ce seul signal, le Raspberry Pi peut compter des objets, ou calculer à quelle vitesse tourne une roue ou un arbre de moteur. Dans le détail, nous allons apprendre :

Nous suggérons :

Raspberry Pi et capteur de vitesse optique à fente IR

Matériel Requis

1×Raspberry Pi 5
1×IR Slotted Optical Speed Sensor
1×Fils de connexion
1×Optionnel: Breadboard
1×Recommandé: Shield à bornier à vis pour Raspberry Pi
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Raspberry Pi

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À Propos du Capteur de Vitesse Optique à Fente IR

Regardez le module de côté et vous verrez la lettre U. Les deux bras du U se font face de part et d'autre d'une fente large de 5,9 mm. Un bras contient une LED infrarouge. L'autre bras contient un phototransistor NPN. La LED éclaire la fente en permanence, et le phototransistor surveille cette lumière.

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 CC
Sortie numérique (TTL), BAS quand bloqué, HAUT quand libre
Conditionnement du signal trigger de Schmitt intégré
Fixation trous de vis M3 aux deux extrémités
Broches 3 (VCC, GND, OUT)

On utilise ce capteur pour des tâches comme celles-ci :

  • Mesurer la vitesse (tr/min) d'un moteur équipé d'un disque codeur
  • Construire un tachymètre simple
  • Compter des objets ou des impulsions
  • Mesurer une distance en comptant combien de fois une roue tourne
  • Donner un retour de vitesse pour les roues d'un robot
  • Détecter une fin de course ou une position d'origine

Comment Ça Fonctionne

Fonctionnement du capteur de vitesse optique à fente IR

La broche OUT suit le faisceau lumineux :

  • Fente vide : la lumière infrarouge arrive au phototransistor, donc OUT reste HAUT.
  • Quelque chose d'opaque dans la fente (un morceau de carton, ou une dent d'un disque codeur) : la lumière ne peut pas traverser, donc OUT passe à BAS.

Il y a aussi un trigger de Schmitt sur la carte. Il transforme le signal brut en un 0 ou un 1 net, sans instabilité sur les fronts. Grâce à cela, votre script Python n'a besoin d'aucun code anti-rebond.

Deux petits points à garder à l'esprit :

  • Le plastique transparent ou le verre peut laisser passer la lumière IR, et le capteur peut alors ne pas le voir. Utilisez des objets opaques.
  • Quelques modules d'autres fabricants fonctionnent à l'inverse. Si votre module indique « bloqué » alors que la fente est vide, échangez BAS et HAUT dans le premier script. Le script de tr/min compte un front pour chaque dent, il donne donc la bonne vitesse dans les deux cas.

Brochage du Capteur de Vitesse Optique à Fente IR

Brochage du capteur de vitesse optique à fente IR

Le module a trois broches :

  • VCC : cette broche doit être connectée à l'alimentation (3,3V à 5V). Sur le Raspberry Pi, utilisez 3,3V.
  • GND : cette broche doit être connectée à la masse (0V)
  • OUT : cette broche envoie le signal numérique à une broche d'entrée GPIO du Raspberry Pi

※ Note:

La disposition des broches d'un module peut différer selon les fabricants, et même selon les lots. Il est essentiel de toujours utiliser les étiquettes imprimées sur le module. Regardez-les bien de près !

Schéma de Câblage

Schéma de câblage du Raspberry Pi avec le capteur de vitesse optique à fente IR

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

Pour simplifier et organiser votre montage de câblage, nous recommandons l'utilisation d'un shield à bornier à vis pour Raspberry Pi. Ce shield assure des connexions plus sûres et mieux gérées, comme illustré ci-dessous :

Shield à bornier à vis pour Raspberry Pi
  • Broche VCC du capteur à 3,3V du Raspberry Pi (broche 1)
  • Broche GND du capteur à GND du Raspberry Pi (broche 6 ou toute autre broche GND)
  • Broche OUT du capteur à GPIO17 du Raspberry Pi (broche 11)

WARNING

N'alimentez pas ce capteur avec la broche 5V du Raspberry Pi. La broche OUT monte aussi haut que la tension VCC. Avec 5V sur VCC, OUT enverrait 5V dans GPIO17, mais les broches GPIO du Raspberry Pi n'acceptent que 3,3V. Alimenter le capteur en 3,3V garde le signal OUT sans danger.

Installation du Disque Codeur pour la Mesure de Vitesse

Le deuxième script a besoin d'un disque codeur. C'est un disque rond avec des fentes découpées sur son bord.

  • Fixez le disque sur l'arbre du moteur ou sur la roue.
  • Montez le capteur avec ses trous de vis M3, de sorte que le bord du disque passe dans la fente.
  • Vérifiez que les dents du disque passent dans la fente sans toucher les bras du capteur.

Vous pouvez faire tourner le disque à la main, ou faire tourner le moteur. Le câblage du moteur ne fait pas partie de cette page. Pour piloter un moteur avec le Raspberry Pi, consultez le tutoriel Raspberry Pi - Moteur DC..

Comment Programmer le Raspberry Pi pour Détecter et Compter des Objets avec le Capteur de Vitesse Optique à Fente IR

Ce premier script vérifie GPIO17 encore et encore dans une boucle. Il n'affiche une ligne que lorsque l'état de la broche change. Chaque fois que la fente est bloquée, le compteur augmente de un.

Étapes Rapides

  • Assurez-vous d'avoir installé Raspbian ou tout autre système d'exploitation compatible Raspberry Pi sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous avez besoin d'installer des bibliothèques.
  • Si c'est la première fois que vous utilisez un Raspberry Pi, consultez Installation du logiciel - Raspberry Pi.
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows.
  • Assurez-vous que la bibliothèque RPi.GPIO est installée. Si elle est absente, installez-la avec ces commandes :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Câblez le capteur au Raspberry Pi comme indiqué dans le schéma de câblage ci-dessus.
  • Créez un fichier script Python OpticalSpeedSensor.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi 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/raspberry-pi/raspberry-pi-ir-slotted-optical-speed-sensor import RPi.GPIO as GPIO import time SENSOR_PIN = 17 # GPIO17 (pin 11) connected to the OUT pin of the speed sensor GPIO.setmode(GPIO.BCM) GPIO.setup(SENSOR_PIN, GPIO.IN) last_state = GPIO.input(SENSOR_PIN) object_count = 0 # how many times the slot was blocked try: while True: state = GPIO.input(SENSOR_PIN) if state != last_state: # the state has changed if state == GPIO.LOW: # LOW = something is in the slot object_count += 1 print("The slot is blocked - count: {}".format(object_count)) else: # HIGH = the slot is clear print("The slot is clear") last_state = state time.sleep(0.001) except KeyboardInterrupt: pass finally: GPIO.cleanup()
  • Enregistrez le fichier et lancez le script avec cette commande :
python3 OpticalSpeedSensor.py
  • Glissez un morceau de carton, ou votre doigt, dans la fente et retirez-le. Faites-le plusieurs fois.
  • Vérifiez les résultats dans le terminal.
PuTTY - Raspberry Pi
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

Le terminal reste silencieux tant que rien ne change. Une nouvelle ligne apparaît seulement au moment où la fente est bloquée ou redevient libre. Le script continue de surveiller jusqu'à ce que vous appuyiez sur les touches Ctrl + C dans le terminal. Il nettoie alors la broche GPIO avant de quitter.

Comment Programmer le Raspberry Pi pour Mesurer la Vitesse d'un Moteur (tr/min) avec le Capteur de Vitesse Optique à Fente IR

Quand un disque tourne vite, les impulsions arrivent très rapidement. Une simple boucle comme celle ci-dessus pourrait en manquer certaines. Ce script demande donc à RPi.GPIO de surveiller la broche en arrière-plan avec GPIO.add_event_detect(). Chaque front FALLING (le moment où une dent bloque la fente) appelle une petite fonction qui ajoute un à un compteur. De cette façon, chaque dent donne exactement un comptage.

Une fois par seconde, le script lit le compteur, le remet à zéro et calcule la vitesse :

  • Un tour complet d'un disque à 20 fentes donne 20 impulsions.
  • Impulsions en 1 seconde × 60 = impulsions en 1 minute.
  • Impulsions en 1 minute ÷ 20 = tours en 1 minute, ce qui donne les tr/min (RPM).

La valeur 20 est stockée dans SLOTS_PER_TURN. C'est le nombre de fentes du disque codeur courant vendu avec les moteurs à réducteur TT. Si votre disque a un nombre de fentes différent, changez cette constante.

Étapes Rapides

  • Faites la même préparation que dans le premier exemple : connexion SSH au Raspberry Pi, installation de RPi.GPIO, et même câblage.
  • Mettez le disque codeur en place, comme indiqué dans l'installation du disque codeur ci-dessus.
  • Créez un fichier script Python OpticalSpeedSensorRPM.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi 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/raspberry-pi/raspberry-pi-ir-slotted-optical-speed-sensor import RPi.GPIO as GPIO import time SENSOR_PIN = 17 # GPIO17 (pin 11) connected to the OUT pin of the speed sensor SLOTS_PER_TURN = 20 # number of slots (holes) in the encoder disc pulse_count = 0 # runs every time a tooth of the disc blocks the slot def count_pulse(channel): global pulse_count pulse_count += 1 GPIO.setmode(GPIO.BCM) GPIO.setup(SENSOR_PIN, GPIO.IN) GPIO.add_event_detect(SENSOR_PIN, GPIO.FALLING, callback=count_pulse) try: while True: time.sleep(1) # count pulses for 1 second pulses = pulse_count # read and reset the counter pulse_count = 0 rpm = pulses * 60 / SLOTS_PER_TURN # pulses per second -> turns per minute print("Pulses: {} | Speed: {:.2f} RPM".format(pulses, rpm)) except KeyboardInterrupt: pass finally: GPIO.cleanup()
  • Enregistrez le fichier et lancez le script avec cette commande :
python3 OpticalSpeedSensorRPM.py
  • Faites tourner le disque à la main, ou allumez le moteur.
  • Vérifiez les résultats dans le terminal. Les lignes ci-dessous viennent d'un moteur qui tourne à environ 300 tr/min :
PuTTY - Raspberry Pi
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

Contrairement au premier script, celui-ci affiche une ligne toutes les 1 seconde (à cause de la ligne time.sleep(1)), même quand le disque ne bouge pas. Dans ce cas, il affiche 0 impulsion et 0,00 tr/min. Les mesures continuent d'arriver jusqu'à ce que vous appuyiez sur les touches Ctrl + C dans le terminal. Le script nettoie alors la broche GPIO et s'arrête.

Connaissances Supplémentaires

Capteur Optique à Fente vs Capteur d'Évitement d'Obstacles vs Encodeur Rotatif

Ces trois composants envoient des impulsions ou des signaux ON/OFF au Raspberry Pi, on les confond donc facilement. Comparons à quoi sert chacun :

Capteur de vitesse optique à fente IR Capteur d'évitement d'obstacles IR Encodeur rotatif
Ce qu'il détecte un objet dans une fente de 5,9 mm un objet devant lui, à quelques centimètres de combien et dans quel sens un bouton est tourné
Comment il détecte le faisceau lumineux dans la fente est bloqué lumière infrarouge réfléchie deux signaux décalés l'un par rapport à l'autre
Meilleur usage tr/min, comptage, tours de roue, position d'origine détection d'obstacles pour robots bouton de saisie utilisateur
Indique le sens non non oui

Évidemment, le capteur optique à fente est le bon choix quand la pièce en mouvement peut passer dans sa fente et que vous avez besoin de la vitesse ou d'un comptage exact. Si l'objet reste à l'extérieur, utilisez le capteur d'obstacles. Si une personne tourne un bouton et que le sens compte, utilisez l'encodeur rotatif.

Choisir le Nombre de Fentes du Disque Codeur

Comparons un disque avec peu de fentes et un disque avec beaucoup de fentes :

  • Plus de fentes donnent plus d'impulsions par tour. La valeur en tr/min a des pas plus fins, et elle réagit mieux à basse vitesse. Avec 20 fentes et une fenêtre de 1 seconde, chaque impulsion en plus change le résultat de 3 tr/min (60 ÷ 20).
  • Moins de fentes donnent moins d'impulsions par seconde. C'est plus facile à suivre pour le Raspberry Pi quand le moteur est très rapide, mais le résultat change par pas plus grands.

Quel que soit le disque utilisé, écrivez son vrai nombre de fentes dans SLOTS_PER_TURN. Sinon la valeur en tr/min sera fausse.

Mesurer une Distance à partir des Tours de Roue

Si le disque codeur tourne avec une roue, vous pouvez aussi savoir quelle distance la roue a parcourue :

  • Circonférence de la roue = π × diamètre de la roue
  • Distance = nombre de tours × circonférence de la roue
  • Nombre de tours = total des impulsions ÷ SLOTS_PER_TURN

Par exemple, une roue de 65 mm de diamètre roule d'environ 204 mm en un tour. Donc après 10 tours, elle a avancé d'environ 2 mètres.

Vidéo

※ 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 !