树莓派中用python检测连续脉冲

本文介绍如何利用树莓派结合霍尔传感器对小车轮子进行速度测量。通过边缘检测实现脉冲计数,进而计算出小车的速度与行驶距离。

​在制作树莓派小车过程中,需要对轮子进行测速,采用的是马达+霍尔传感器的形式,小车运动的同时,霍尔传感器输出连续脉冲,即可通过检测脉冲的数量计算小车的速度,前行的距离等等。

​ 在树莓派中检测脉冲,一般有两种方法:

在笔者的程序中,需要实时连续的检测脉冲,采用的是边缘检测方式,对应的Python代码为:

 ```python
 #霍尔脉冲读取函数
 GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_UP)   #通过18号引脚读取左轮脉冲数据
 GPIO.setup(35, GPIO.IN,pull_up_down=GPIO.PUD_UP)   #通过35号引脚读取右轮脉冲数据
 counter=0      #左轮脉冲初值
 counter1=0     #右轮脉冲初值
 def my_callback(channel):          #边缘检测回调函数,详情在参见链接中
     global counter                 #设置为全局变量
     if GPIO.event_detected(18):        #检测到一个脉冲则脉冲数加1
         counter=counter+1
 def my_callback1(channel1):            #这里的channel和channel1无须赋确定值,但笔者测试过,不能不写
     global counter1
     if GPIO.event_detected(35):
         counter1=counter1+1
 GPIO.add_event_detect(18,GPIO.RISING,callback=my_callback) #在引脚上添加上升临界值检测再回调
 GPIO.add_event_detect(35,GPIO.RISING,callback=my_callback1)
 ```

在边缘检测方式中,add_event_detect()函数运行后,会为回调函数另外开启一个线程,与主程序并发运行,因此不容易错过当 CPU 忙于处理其它事物时输入状态的改变。但同一进程内也最好不要有太过耗费CPU时间的部分,否则仍会导致脉冲的丢失,如果不可避免,可以用多进程去处理CPU密集型代码部分。

人生苦短,我用Python~

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值