将旋转编码器与覆盆子Pi一起使用

Using a Rotary Encoder with the Raspberry Pi

一个 旋转编码器 是将旋转运动转换为数字信号的传感器,可以精确控制位置,速度和方向。它通常在 音量控件,机器人技术,CNC机器和菜单导航。本指南将向您展示如何使用Python设置和使用Raspberry Pi的旋转编码器。


你需要什么

  1. 覆盆子pi (任何具有GPIO支持的模型,例如PI 3,PI 4)
  2. 旋转编码器(例如KY-040)
  3. 面包板和跳线电线
  4. 安装了Python 在覆盆子pi上

步骤1:了解旋转编码器的工作方式

一个 旋转编码器 有两个主要输出:

  • clk(a) - 时钟脉冲信号
  • dt(b) - 方向信号
  • SW (选修的) - 按钮(用于选择选项)

旋转时, CLK和DT引脚产生脉冲。这些脉冲的顺序决定了 旋转方向.


步骤2:将旋转编码器接线到Raspberry Pi

旋转编码器销 覆盆子Pi Pin 功能
VCC 3.3V(引脚1) 电源
gnd 地面(引脚6) 地面
clk(a) GPIO17(引脚11) 时钟脉冲
dt(b) GPIO27(引脚13) 方向信号
SW(按钮) GPIO22(引脚15) 按钮按

步骤3:安装所需库

更新您的Raspberry Pi并安装 rpi.gpio 处理GPIO中断的库。

sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio

步骤4:读取旋转编码器输入的Python代码

基本的Python代码读取旋转

import RPi.GPIO as GPIO
import time

# Define GPIO pins
CLK = 17
DT = 27
counter = 0
last_state = None

# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(CLK, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Read initial state
last_state = GPIO.input(CLK)

try:
    while True:
        current_state = GPIO.input(CLK)
        if current_state != last_state:
            if GPIO.input(DT) != current_state:
                counter += 1
                direction = "Clockwise"
            else:
                counter -= 1
                direction = "Counterclockwise"
            print(f"Position: {counter}, Direction: {direction}")
        last_state = current_state
        time.sleep(0.01)  # Debounce delay
except KeyboardInterrupt:
    print("Exiting...")
finally:
    GPIO.cleanup()

添加按钮按检测

# Define button pin
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def button_pressed(channel):
    print("Button Pressed!")

# Add event detection for button press
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)

步骤5:用覆盆子Pi的旋转编码器的应用

  1. 菜单导航 - 滚动通过LCD或OLED菜单。
  2. 音量控制 - 调整媒体应用程序中的音量。
  3. CNC机器 - 步进电动机应用中的精确运动控制。
  4. 机器人技术 - 检测车轮旋转以进行速度和位置跟踪。
  5. 智能家庭自动化 - 用作不同家庭功能的选择器。

故障排除

  1. 旋转编码器不响应

    • 检查 接线和GPIO引脚分配.
    • 确保 启用了上拉电阻 (PUD_UP).
  2. 跳过步骤或不稳定的运动

    • 添加 调试延迟 (time.sleep(0.01)).
    • 使用 GPIO中断 而不是民意调查(GPIO.add_event_detect).
  3. 按钮未检测到

    • 确保 按钮销正确连接 到Gnd。
    • 添加一个 调试时间为300msGPIO.add_event_detect.

结论

一个 旋转编码器 是一种通用的输入设备 菜单导航,电动机控制和位置跟踪。通过遵循本指南,您可以轻松地将旋转编码器与您的 覆盆子pi 用于互动项目。 🚀

发表评论

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.