
PS2コントローラを手軽に使えるArduino Shieldを動かしてみた。操作性が良いプレステ2のコントローラを使って、ロボットを制御できるようになります。
[itemlink post_id=”245″]
Cytron社が出している専用ライブラリがGithubで公開されているのでダウンロードします。
https://github.com/CytronTechnologies/Cytron_PS2Shield

ArduinoIDEを開いて、上のバーの”スケッチ”→”ライブラリをインクルード”→”Zip形式のライブラリをインストール…”を押して先ほどダウンロードしたファイルを選択します。


今回使ったのはシールド版なので差し込むだけで接続は完了です。
// readButton関数 name.readButton(引数); // "name"は、宣言時の任意の文字列 // 戻り値は、unsigned char型
この関数に調べたいボタンの引数を代入することで、ボタンが押されているか押されていないか判定できます。
先ほどと同じreadButton関数に、調べたいスティックの軸の引数を代入することで、現在のスティックの座標を調べることができます。
// vibrate関数 name.vibrate(motor,value); // "name"は、宣言時の任意の文字列 // 戻り値なし
関数に、下の表の引数を代入すると、コントローラのモーターを動かすことができます。
| 引数 | motor | value |
|---|---|---|
| Bigmotor | 0 | 0~255 |
| Smallmotor | 1 | 0 or 1 |
簡単に動作テストのコードを書いてみました。
左スティックのx座標とy座標の値がシリアルモニタに表示されます。またセレクトボタンを押すとArduino Uno上のLEDが点灯します。
#include <Cytron_PS2Shield.h>
#include <SoftwareSerial.h>
Cytron_PS2Shield ps2(2,3);
/* 初期設定 */
void setup() {
ps2.begin(9600);
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
/* メイン */
void loop() {
//check select_button
if(ps2.readButton(PS2_SELECT)==0){
digitalWrite(LED_BUILTIN,HIGH);
}
else{
digitalWrite(LED_BUILTIN,LOW);
}
//check LEFT_X_joystick
Serial.print("X Axis val:");
Serial.print(ps2.readButton(PS2_JOYSTICK_LEFT_X_AXIS));
Serial.print(" ");
Serial.print("Y Axis val:");
Serial.println(ps2.readButton(PS2_JOYSTICK_LEFT_Y_AXIS));
delay(50);
}

ボタンもスティックも正常に動作しました。
シリアルモニタでジョイスティックの値を確認すると、x座標y座標共に0~255の間で値が返ってくることが分かりました。触っていないときは中央値である128が返ってきます。以下の画像はデーシートから引用した画像です。

接続から動作までArduinoなら簡単にできました。Robo-Oneなどのロボットを動かすときに役立ちそうですね。
[itemlink post_id=”245″]