Raspberry Piでロータリーエンコーダーを使用します

Using a Rotary Encoder with the Raspberry Pi

ロータリーエンコーダー 回転運動をデジタル信号に変換するセンサーであり、位置、速度、方向を正確に制御できるようにします。一般的に使用されます ボリュームコントロール、ロボット工学、CNCマシン、メニューナビゲーション。このガイドでは、Pythonを使用してRaspberry PIを使用してロータリーエンコーダーをセットアップして使用する方法を示します。


あなたが必要とするもの

  1. Raspberry Pi (GPIOサポートを備えたモデル、例えばPI 3、PI 4)
  2. ロータリーエンコーダー(例:KY-040)
  3. ブレッドボードとジャンパーワイヤ
  4. Pythonインストール Raspberry Piで

ステップ1:ロータリーエンコーダーの仕組みを理解します

a ロータリーエンコーダー 2つの主要な出力があります:

  • clk(a) - クロックパルス信号
  • DT(b) - 方向信号
  • SW (オプション) - プッシュボタン(オプションの選択に使用)

回転すると、 CLKおよびDTピンはパルスを生成します。これらのパルスの順序が決定します 回転方向.


ステップ2:ロータリーエンコーダーをRaspberryPiに配線する

ロータリーエンコーダーピン ラズベリーPIピン 関数
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:RaspberryPiを使用したロータリーエンコーダーのアプリケーション

  1. メニューナビゲーション - LCDまたはOLEDメニューをスクロールします。
  2. ボリュームコントロール - メディアアプリケーションのボリュームを調整します。
  3. CNCマシン - ステッピングモーターアプリケーションの正確な動きの制御。
  4. ロボット工学 - 速度と位置追跡のためにホイール回転を検出します。
  5. スマートホームオートメーション - さまざまなホーム機能のセレクターとして使用します。

トラブルシューティング

  1. 回転エンコーダーは応答しません

    • を確認してください 配線およびGPIOピンの割り当て.
    • 確保する プルアップ抵抗器が有効になっています (PUD_UP).
  2. ステップや不安定な動きをスキップします

    • 追加 debounce delay (time.sleep(0.01)).
    • 使用 GPIO割り込み ポーリングの代わりに(GPIO.add_event_detect).
  3. [検出されていない]ボタンを押します

    • 確保する ボタンピンが適切に接続されています GNDへ。
    • Aを追加します 300msのデバウンス時間GPIO.add_event_detect.

結論

a ロータリーエンコーダー のための汎用性のある入力デバイスです メニューナビゲーション、モーター制御、および位置追跡。このガイドに従うことにより、ロータリーエンコーダーを簡単に統合できます Raspberry 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.