アナログジョイスティックモジュールをArduinoで動かす①チュートリアル通りに動かす

2022/05/02

Analog Joystick Module Arduino

t f B! P L

アナログジョイスティックモジュールをArduinoで動かします。

 目次:

今回の目的

ELEGOOのチュートリアル「アナログジョイスティックモジュール」をチュートリアル通りに動かします。

※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。

Download ⇒「Arduino Kits & ~」⇒「UNO R3 Starter Kits」⇒ 「ELEGOO UNO R3 The Most Complete Starter Kit」 からダウンロードリンクに辿り着けます。


アナログジョイスティックモジュール

ジョイスティック(Joystick)です。ゲーム機のコントローラ等に使われている入力装置ですが、実際、ELEGOOのモジュールはPS2のコントローラに似ているようです。

通販サイトで「アナログジョイスティックモジュール」を検索すると、似たような外観のものが多数出てきます。

(1)グリップ(左)とジョイスティックモジュール(右)

(2)真上から見た

(3)グリップを取り付けた

(4)側面1

(5)側面2

図1.アナログジョイスティックモジュール

端子は5本。各端子はシルク表記から「GND」、「+5V」、「VRx」、「VRy」、「SW」。

どうやらこれは2軸式ジョイスティック(2-axis joystick)と呼ばれるもので、X方向、Y方向にそれぞれ2つの可変抵抗器が回転するよう構成されている模様。

スティックが初期位置で半分の抵抗値、一方に倒せば対応する可変抵抗器が減少、逆方向に倒せば増加し、この抵抗で分圧された電源電圧のアナログ値をマイコン(ここではArduino)で読み取ります。

このX方向、Y方向の読み取りがそれぞれ端子「VRx」、「VRy」に対応(「VR」は「Variable Resistor」の意でしょう)。

これでスティックの傾きをX方向、Y方向に同時に読み取る他、上下方向にスイッチとして押すことができます。これは2値で読み取り端子は「SW」。

リンク


器材接続

モジュールはArduino直結です。

シリアルモニタをパソコン画面で表示するため、USBをパソコンにつなぎます。


図2.機材接続


スケッチ

オリジナルのものを少し簡略化して行数減らしました。

void setup() {

  pinMode(2, INPUT);    // Arduino 2#ピンを入力に設定

  digitalWrite(2, HIGH);    // Arduino 2#ピンをHighにプルアップ

  Serial.begin(9600);    // シリアルポートを9,600bpsで開く

}

void loop() {    // 以下延々と繰り返す

  Serial.print("Switch:  ");

  Serial.println(digitalRead(2)); 

    // Arduino 2#ピンをデジタル値読み取り、それをシリアル出力(スイッチ)

  Serial.print("X-axis: ");

  Serial.println(analogRead(0)); 

    // Arduino A0#ピンのアナログ値読み取り、それをシリアル出力(X軸)

  Serial.print("Y-axis: ");

  Serial.println(analogRead(1));

    // Arduino A1#ピンのアナログ値読み取り、それをシリアル出力(Y軸)

  Serial.print("\n\n");

  delay(500);    // 500ms待ち

}


動作

パソコンのArduino IDEの「ツール」→「シリアルモニタ」でウインドウを立ち上げます。

まずはジョイスティックは触れずにおきます。

図3.シリアルモニタ(ジョイスティック初期状態)

一定時間毎に出力が自動スクロールされて表示され続けます。

初期状態でX軸:507、Y軸:511で安定しております。analogRead関数の戻り値は0~1023ですので、ほぼほぼ真ん中の値が測定されている様子。


次はジョイスティックをぐるぐる回しました。

図4.シリアルモニタ(ジョイスティックぐるぐる)

X軸、Y軸共に最小0から最大1023まで変化していることがわかります。

(図3ではスイッチが1のままですが、ジョイスティックを押せば0となりました)


図5.オシロスコープ接続

オシロスコープを信号線に接続して、モジュールの出力電圧を確認しました。

図6.電圧表示(CH1:A1 Y軸、CH2:A0 X軸)

時間軸は500ms/マス(スケッチのシリアル出力間隔に同じ)です。

なめらかにジョイスティックを回したつもりでしたが、電圧変化はがたがたになってしまいました。それでも連続的に電圧が変化していることがわかります。

なお、SWは5V(押さない)、0V(押す)の2値が測定されました。


ジョイスティックの動きと電圧の関係は図6の通りでした。

図7.ジョイスティックと出力電圧の相関


所感

意外にシンプルな内容でした。

ハード的には言ってしまえば可変抵抗器×2個、プッシュスイッチ×1個。それを5Vにぶら下げて分圧を出力しているだけ(スイッチは分圧もなし)。

前回までのスケッチがLessonを追うごとに複雑になり、今回はどんなスケッチやライブラリが出てくるのかと思っておりましたが、今回はライブラリ無し、関数もanalogRead、digitalReadとわかりやすいものでした。

また、ゲーム機という比較的身近なところで使われていた仕組みとして興味をもって取り組むことができました。


前回の記事:温度湿度センサーをArduinoで動かす①チュートリアル通りに動かす-sozoro-Lab.

このブログを検索

ブログ アーカイブ

自己紹介

にほんブログ村

QooQ