J'essaie d'obtenir un RPM raisonnable pour un moteur. J'ai un photo-interrupter qui envoie 0 ou 1 s'il détecte une fente qui passe. Mon code est le suivant, ce dont j'ai simplement besoin est de chronométrer 0-60 secondes, et d'ajouter le nombre de fois que 1 a été détecté, puis le diviser par 60, donc RPM.Compte à rebours en Python (Raspberry Pi pour moteur RPM)
Je ne veux pas compliquer mon code, gardez également à l'esprit que cela fonctionne sur le Raspberry Pi avec de nombreux autres scripts et serveurs web. Donc, pas un mauvais code comme "sommeil" qui serait monopoliser tout le cpu.
Je ne cherche pas une mesure précise et folle, juste une idée raisonnable de la vitesse à laquelle le moteur tourne. Est-ce que la taille de la fente fait aussi une différence?
import RPi.GPIO as GPIO
import time
signal = 21
from time import sleep # this lets us have a time delay (see line 15)
GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering
GPIO.setup(signal, GPIO.IN) # set GPIO21 as input (signal)
GPIO.add_event_detect(signal,GPIO.BOTH)
try:
while True: # this will carry on until you hit CTRL+C
if GPIO.event_detected(signal): # if port 21 == 1
print "Port 21 is 1/HIGH/True - LED ON"
slit=slit+1 # Counts every time slit passes
else:
print "Port 21 is 0/LOW/False - LED OFF"
rpm = slit/60 # Calculates the RPM
sleep(0.0001) # wait 0.0001 seconds
finally: # this block will run no matter how the try block exits
GPIO.cleanup() # clean up after yourself
'sleep' est l'opposé de l'accaparement de la CPU. Cela le libérera pour d'autres tâches. Donc, ce serait une bonne solution en utilisant 'sleep', mais vous ne pouvez pas être sûr que vous obtenez exactement 60 secondes de sommeil. Cela peut être un peu plus, donc vous devriez probablement essayer d'obtenir des tampons temporels et de corriger les décalages si vous voulez une valeur plus exacte. – JohanL
@JohanL Merci, mais comment l'implémenterais-je? –