标签旋转编码传感器

旋转编码传感器实验

    旋转编码传感器是一种速度位移检测传感器;用来检测位置的变化以及位置的偏移变化量;它可以向左转动也可以向右转动,同时还可以按压进行复位这个三个动作方向。
其中传感器有五个引脚,功能分别如下:
引脚功能
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()
实验效果: