旋转编码传感器是一种速度位移检测传感器;用来检测位置的变化以及位置的偏移变化量;它可以向左转动也可以向右转动,同时还可以按压进行复位这个三个动作方向。
其中传感器有五个引脚,功能分别如下:
引脚 | 功能 |
CLK | 判断是否旋转 0是 1否 |
DT | 判断旋转方向,1变0顺时针,0变1逆时针 |
SW | 复位 |
+ | VCC,接5V |
GND | 接GND |
接线示例:
检测原理:
(1)CLK口注册一个边缘检测事件,检测FALLING事件;
(2)当CLK事件命中时,表示旋转事件发生,这个时间检测旋转方向;
(3)检测DT引脚状态,当状态由1变0时为顺时针旋转,0变1时为逆时针旋转;
(4)检测SW引脚状态,默认为高电平,当为低电平时表示按钮按下,表示计数复位;
代码示例
#!/usr/bin/env python
#coding:utf-8
'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''
import RPi.GPIO as GPIO ##引入GPIO模块
import time ##引入time库
clkPin = 17
dtPin = 18
swPin = 27
GPIO.setmode(GPIO.BCM) ##此处采用的BCM编码
GPIO.setup(clkPin, GPIO.IN) ##设置为输入模式
GPIO.setup(dtPin, GPIO.IN)
GPIO.setup(swPin, GPIO.IN)
##定义变量初始值
start = False
reset = False
counter = 0
#检测旋转事件 电压下降为触发条件
GPIO.add_event_detect(clkPin, GPIO.FALLING, bouncetime=600)
try:
while True:
##检测是否触发旋转动作
clkStatus = GPIO.event_detected(clkPin)
dtOldStatus = GPIO.input(dtPin)
swStatus = GPIO.input(swPin)
#开始旋转
if clkStatus:
print('start')
dtNewStatus = GPIO.input(dtPin)
start = True
##动作开始
if start:
##1变0 顺时针旋转
if dtOldStatus == 1 and dtNewStatus == 0:
counter += 1
print('顺时针旋转')
##0变1 逆时针旋转
if dtOldStatus == 0 and dtNewStatus == 1:
counter -= 1
print('逆时针旋转')
##检测是否按下 重置数值
if swStatus == 0:
reset = True
#重置
if reset:
counter = 0
#步进数量
print('步数:%d'%counter)
time.sleep(0.2)
except KeyboardInterrupt:
print('停止检测');
GPIO.cleanup()
实验效果: