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