一起玩转树莓派(16)——旋转编码传感器
旋转编码传感器是一种速度位移传感器。其通过旋钮的旋转来带动内部的光栅盘旋转,光栅盘上会预置很多狭缝,光栅盘的转动导致经过狭缝的光线产生脉冲变化,此信号经过后继电路的处理后,输出成脉冲信号。最终,我们可以通过信号引脚的输出来获取旋钮的旋转动作。
本次实验,使用的旋转编码传感器如下图所示:
通过内部发光源与光敏元件的配置,旋转时产生脉冲信号,示意图如下:
我们使用的传感器有5个引脚,其中除了电源和接地引脚外,还有3个信号引脚。SW引脚为复位信号引脚,此旋转编码传感器本身也是一个按钮,当按下此按钮时,SW引脚会从高电平跳变为低电平。CLK引脚为旋转信号引脚,未旋转时,此引脚输出高电平,旋转时输出低电平。DT引脚用来判定旋转的方向,如果未旋转时此引脚为高电平,旋转时变低电平,则表示发生了顺时针旋转,如果未旋转时此引脚为低电平,发生旋转时此引脚为高电平,则表示发生了逆时针旋转。
下面,我们来连接树莓派进行实验,接线如下:
旋转编码传感器 |
树莓派 |
VCC |
+5V |
GND |
GND |
CLK |
GPIO17 (BCM编码) |
DT |
GPIO18 (BCM编码) |
SW |
GPIO19 (BCM编码) |
编写实验代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
import RPi.GPIO as GPIO import time
resetPin = 35 clkPin = 11 dtPin = 12
clockwise = 0 anticlockwise = 0
GPIO.setmode(GPIO.BOARD) GPIO.setup(clkPin, GPIO.IN) GPIO.setup(dtPin, GPIO.IN) GPIO.setup(resetPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def reset(channel): global clockwise, anticlockwise clockwise = 0 anticlockwise = 0 print('计数复位')
GPIO.add_event_detect(resetPin, GPIO.FALLING, callback=reset)
while True: lastDT = GPIO.input(dtPin) while GPIO.input(clkPin): pass currentDT = GPIO.input(dtPin) if (lastDT == 1) and (currentDT == 0): clockwise += 1 print('顺时针旋转计数:%d'%(clockwise)) if (lastDT == 0) and (currentDT == 1): anticlockwise += 1 print('逆时针旋转计数:%d'%(anticlockwise))
|
运行代码,效果如下图所示:
专注技术,懂的热爱,愿意分享,做个朋友
QQ:316045346