a ロータリーエンコーダー 回転運動をデジタル信号に変換するセンサーであり、位置、速度、方向を正確に制御できるようにします。一般的に使用されます ボリュームコントロール、ロボット工学、CNCマシン、メニューナビゲーション。このガイドでは、Pythonを使用してRaspberry PIを使用してロータリーエンコーダーをセットアップして使用する方法を示します。
あなたが必要とするもの
- Raspberry Pi (GPIOサポートを備えたモデル、例えばPI 3、PI 4)
- ロータリーエンコーダー(例:KY-040)
- ブレッドボードとジャンパーワイヤ
- 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を使用したロータリーエンコーダーのアプリケーション
- メニューナビゲーション - LCDまたはOLEDメニューをスクロールします。
- ボリュームコントロール - メディアアプリケーションのボリュームを調整します。
- CNCマシン - ステッピングモーターアプリケーションの正確な動きの制御。
- ロボット工学 - 速度と位置追跡のためにホイール回転を検出します。
- スマートホームオートメーション - さまざまなホーム機能のセレクターとして使用します。
トラブルシューティング
-
回転エンコーダーは応答しません
- を確認してください 配線およびGPIOピンの割り当て.
- 確保する プルアップ抵抗器が有効になっています (
PUD_UP
).
-
ステップや不安定な動きをスキップします
- 追加 debounce delay (
time.sleep(0.01)
). - 使用 GPIO割り込み ポーリングの代わりに(
GPIO.add_event_detect
).
- 追加 debounce delay (
-
[検出されていない]ボタンを押します
- 確保する ボタンピンが適切に接続されています GNDへ。
- Aを追加します 300msのデバウンス時間 で
GPIO.add_event_detect
.
結論
a ロータリーエンコーダー のための汎用性のある入力デバイスです メニューナビゲーション、モーター制御、および位置追跡。このガイドに従うことにより、ロータリーエンコーダーを簡単に統合できます Raspberry Pi インタラクティブなプロジェクト用。 🚀