ラズベリーパイpicoでジョイスティック制御|ADC変換で操作を読み取る方法

はじめに

ジョイスティックは、2軸のアナログ入力と、ボタンとして使えるスイッチがついている入力デバイスです。このブログ記事では、ラズベリーパイPicoを使ってジョイスティックを接続し、操作する方法について解説します。また、ジョイスティックの構造についても説明します。

ジョイスティックの原理

今回のジョイスティックは、自動調芯式のバネ式ジョイスティックです。(スティックを離すと中央に戻ってきます)
x軸(左右),y軸(上下)の2軸を検出するために、それぞれの軸にポテンショメータがついており、ジンバルメカニズムという構造が使われています。

ジンバルメカニズムとは一般的に2軸の回転軸を持ち、これらの軸が独立して動くように設計されている構造のことです。

配線

Raspberry Pi Picoジョイスティック
VSYS(39番)5V
GND(38番)GND
GPIO26(31)VRx(アナログ)
GPIO27(32)VRy(アナログ)
GPIO15(21)SW
()内はピン番号

操作結果を表示する

ジョイスティックの操作結果を表示します。スティックを押し込んでSWを押下した場合も表示できます。

from machine import ADC, Pin
import time

# アナログ入力の設定
x_pin = ADC(Pin(26))  # VRx (X軸)
y_pin = ADC(Pin(27))  # VRy (Y軸)
sw_pin = Pin(16, Pin.IN, Pin.PULL_UP)  # SWボタン

# 変換用の関数(0〜1023の範囲を0〜3.3Vに変換)
def read_analog(pin):
    return pin.read_u16() / 65535 * 3.3

while True:
    # VRx, VRy の値を読み取る
    x_value = read_analog(x_pin)
    y_value = read_analog(y_pin)
    
    # SWボタンの状態を確認
    sw_state = sw_pin.value()  # 1 = ボタン未押下, 0 = ボタン押下
    
    # 結果を表示
    print(f"X: {x_value:.2f}, Y: {y_value:.2f}, Button Pressed: {sw_state == 0}")
    
    # 1秒待機
    time.sleep(0.5)

まとめ

ゲーム機でジョイスティックには馴染があると思います。別のモジュールを作動させるコントローラとしても面白いと思いますので、ぜひやってみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする