Juega con Raspberry Pi (16) - Sensor de codificación rotatorio

Juega con Raspberry Pi (16) - Sensor de codificación rotatorio

    Un sensor de codificador rotatorio es un sensor de desplazamiento de velocidad. Impulsa el disco de rejilla interno para que gire a través de la rotación de la perilla. Muchas rendijas están preestablecidas en el disco de rejilla. La rotación del disco de rejilla hace que la luz que pasa a través de las rendijas produzca cambios de pulso. Después de que la señal es procesada por el subsiguiente circuito, se emite como una señal de pulso. Finalmente, podemos obtener el movimiento giratorio de la perilla a través de la salida del pin de señal.

    En este experimento, el sensor del codificador rotatorio utilizado se muestra en la siguiente figura:

A través de la configuración de la fuente de luz interna y el elemento fotosensible, se genera una señal de pulso durante la rotación.El diagrama esquemático es el siguiente:

El sensor que estamos usando tiene 5 pines, de los cuales además de los pines de alimentación y tierra, hay 3 pines de señal. El pin SW es ​​el pin de señal de reinicio. El sensor del codificador rotatorio también es un botón. Cuando se presiona el botón, el pin SW saltará de nivel alto a nivel bajo. El pin CLK es un pin de señal de rotación. Cuando no gira, este pin emite un nivel alto, y cuando gira, emite un nivel bajo. El pin DT se usa para determinar la dirección de rotación. Si este pin está alto cuando no está girando y baja cuando está girando, significa que se ha producido una rotación en el sentido de las agujas del reloj. Cuando este pin está alto durante la rotación, significa que se ha producido una rotación en sentido contrario a las agujas del reloj.

    A continuación, vamos a conectar la Raspberry Pi para realizar experimentos. El cableado es el siguiente:

sensor de codificador rotatorio pastel de frambuesa
CCV +5V
TIERRA TIERRA
CLK GPIO17 (código BCM)
DT GPIO18 (código BCM)
SUDOESTE GPIO19 (código BCM)

Escriba el código experimental de la siguiente manera:

#coding:utf-8

import RPi.GPIO as GPIO
import time

# 定义引脚
resetPin = 35 # BCM编码为19的GPIO 物理编码为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))

Ejecute el código, el efecto es como se muestra a continuación:

Concéntrese en la tecnología, comprenda el amor, esté dispuesto a compartir, sea un amigo

Pregunta rápida: 316045346

{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/2340880/blog/5267293
Recomendado
Clasificación