我想使用转盘上的10个孔的圆形阵列和接近传感器来计算转盘(上面贴有铝箔)的RPM。
不幸的是,我没有大量计数(从铝箔到孔的变化),而是有很多不需要的数字。
我试图弄清楚发生了什么,但没有任何积极的结果。例如,如果我固定(没有磁盘的任何可见运动)与接近开关相对的铝箔,则会每0.003-0.004 s不断调用一次detect_motion()函数。弹跳时间效果不好。
from __future__ import division
import RPi.GPIO as GPIO
import time
import Adafruit_PCA9685
import xlsxwriter
workbook = xlsxwriter.Workbook('Test.xlsx')
worksheet = workbook.add_worksheet()
pwm = Adafruit_PCA9685.PCA9685()
GPIO.setmode(GPIO.BCM)
pwm.set_pwm_freq(60)
pwm.set_pwm(0, 0, 4095)
pwm.set_pwm(1, 0, 1000)
time_motion = [0]
delta_time = [0]
row = 0
def detect_motion(ev=None):
global row
row += 1
time_motion.append(time.time())
a = time_motion[-1] - time_motion[-2]
print(a)
worksheet.write(row, 0, a)
workbook.close()
delta_time.append(a)
del time_motion[-2]
del delta_time[-2]
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(17, GPIO.FALLING, callback=detect_motion, bouncetime=10)
需要更改事件之间的时间间隔(从箔到孔)。使用它们,我将能够计算磁盘的RPM。