Détectez le régime de votre moteur à l’aide d’un capteur photoélectrique à faisceau traversant IR

Détectez le régime de votre moteur à l'aide d'un capteur photoélectrique à faisceau traversant IR

Dans ce projet, vous apprendrez à câbler un capteur photoélectrique à faisceau traversant IR (HC-89) et à écrire du code pour calculer la vitesse à laquelle un moteur tourne.

Choses dont vous aurez besoin:

Conditions préalables:

Dernière version de Rasbian installée sur votre carte SD
Configuration du Raspberry Pi avec un clavier, une souris et un moniteur

Detectez le regime de votre moteur a laide dun capteurlayout bb

Voici une explication rapide du fonctionnement du capteur photoélectrique IR à faisceau traversant … Le capteur a un émetteur IR, et juste en face un récepteur photoélectrique. Lorsqu’un objet est placé entre l’émetteur et le récepteur, le faisceau est rompu et le capteur détecte la présence d’un objet.

En utilisant ce capteur et un petit disque acrylique / carte attaché à un moteur, nous pouvons calculer la vitesse de rotation du moteur.

Voici un aperçu de la configuration que nous avons utilisée pour ce didacticiel.

1593363610 490 Detectez le regime de votre moteur a laide dun capteur20170405 140600

Commençons par câbler le capteur au Pi.

Vous devriez voir trois broches nommées: VCC, GND, OUT

Attachez chaque broche à la broche Raspberry Pi suivante à l’aide des fils de saut F / F:

VCC – 5V (broche 2)
GND – GND (broche 6)
OUT – GPIO21 (Pin 40) – Vous pouvez câbler celui-ci à n’importe quelle pin GPIO libre, n’oubliez pas de mettre à jour le numéro de pin dans le code ci-dessous.

Si vous allumez votre Pi, vous pouvez rapidement tester le capteur. Placez simplement un peu de carte dans la fourche du capteur et vous devriez voir une petite LED rouge s’allumer. Vous pouvez également utiliser du papier, mais vous devrez peut-être le plier plusieurs fois pour le rendre suffisamment épais pour bloquer les IR émis.

Ensuite, connectez votre moteur. C’est super facile, il suffit de fixer une broche du moteur au fil positif de la batterie et l’autre au fil négatif.

Maintenant, ajoutez votre petit disque à l’arbre du moteur.

Vous devrez ensuite fixer le capteur et le moteur de telle sorte que le petit disque de la carte tourne librement entre l’émetteur et le récepteur du capteur. Assurez-vous que lorsque vous faites tourner le moteur, le disque bloque réellement l’IR (voyant allumé) et lorsque les deux encoches du disque se retournent, il ne bloque pas l’IR (voyant éteint).

1593363611 235 Detectez le regime de votre moteur a laide dun capteur20170405 140612

1593363611 427 Detectez le regime de votre moteur a laide dun capteur20170405 140637

Avec tout câblé et tournant librement, il est temps de regarder du code!

Commencez par créer un script appelé rpm.py:

nano rpm.py

Ajoutez ensuite le code suivant:

#!/usr/bin/python

import RPi.GPIO as GPIO
import time

sensor = 21 # define the GPIO pin our sensor is attached to

GPIO.setmode(GPIO.BCM) # set GPIO numbering system to BCM
GPIO.setup(sensor,GPIO.IN) # set our sensor pin to an input

sample = 1000 # how many half revolutions to time
count = 0

start = 0
end = 0

def set_start():
 	global start
 	start = time.time()

def set_end():
 	global end
 	end = time.time()

def get_rpm(c):
 	global count # delcear the count variable global so we can edit it

 	if not count:
 	 	set_start() # create start time
 	 	count = count + 1 # increase counter by 1
 	else:
 	 	count = count + 1

 	if count==sample:
 	 	set_end() # create end time
 	 	delta = end - start # time taken to do a half rotation in seconds
 	 	delta = delta / 60 # converted to minutes
 	 	rpm = (sample / delta) / 2 # converted to time for a full single rotation
 	 	print rpm
 	 	count = 0 # reset the count to 0

GPIO.add_event_detect(sensor, GPIO.RISING, callback=get_rpm) # execute the get_rpm function when a HIGH signal is detected

try:
 	while True: # create an infinte loop to keep the script running
 	 	time.sleep(0.1)
except KeyboardInterrupt:
 	print "  Quit"
 	GPIO.cleanup()
 

Si vous exécutez le script et démarrez la rotation du moteur, vous devriez voir le RPM (tours par minute) imprimé à l’écran.

python rpm.py

Que se passe-t-il réellement dans ce script? Ok, voyons d’abord cette ligne:

GPIO.add_event_detect(sensor, GPIO.RISING, callback=get_rpm) # execute the get_rpm function when a HIGH signal is detected

Cette ligne dit simplement, lorsque nous détectons un signal RISING (un changement de bas en haut) de notre capteur, préférez la fonction get_rpm. Cela signifie que lorsque le moteur fait tourner le disque, chaque fois que l’encoche passe le capteur, il déclenche la fonction get_rpm.

Ainsi, lorsque la fonction get_rpm est appelée pour la première fois, lorsque count = 0, la fonction obtient l’heure actuelle en secondes en appelant la fonction set_start (), elle augmente ensuite la variable count de 1. Chaque fois que la fonction get_rpm est déclenchée, la variable count augmente par 1. Cela se produit jusqu’à ce que la valeur de comptage soit égale à notre valeur d’échantillon. C’est ce point que nous obtenons à nouveau l’heure actuelle.

En supprimant notre heure de début de notre heure de fin, nous savons combien de temps il a fallu pour compléter notre échantillon de déclencheurs. Ensuite, avec un peu de mathématiques simples, nous pouvons calculer le temps moyen nécessaire à 1 tr / min 🙂 simple!

Vous voudrez ajuster l’échantillon en fonction de la vitesse à laquelle votre moteur tourne. Plus votre moteur tourne rapidement, plus l’échantillon que vous pouvez avoir est élevé.