こんにちは!最近Arduinoにハマっているホビーハッピーです。
ジョイスティックってわかりますか??
ゲームのコントローラなんかにも使用されているジョイスティックですが、
実はこれArduinoでも使えるんです!!
イメージとしては、ジョイスティックの入力をArduinoで検知する感じです。
それでは早速どんな感じに出来上がったかご覧ください。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
ジョイスティックの完成形
ジョイスティックの完成形はこんな感じです。
なかなかそれっぽくできている気がします。
自己満足ですが笑
それぞれ5本ずつ線が出ていますが、
「5V」,「GND」,「X方向信号」,「Y方向信号」,「押したときのスイッチ」
となっています。
ジョイスティックですが、中身は「可変抵抗」になっています。
ですから、Arduinoで読み取るのは可変抵抗の値です。
可変抵抗の値を読み取るので、Arduinoではアナログ入力を見る必要があります。
具体的な配線方法は後述しますが、A0~のアナログ入力端子に接続してください。
もちろん押したときのスイッチはタクトスイッチになっているので
デジタル入力端子でOKです。
ジョイスティックコントローラーを自作するのに必要なもの
自作に必要な今回使用したものを紹介します。
ジョイスティック2つ
もはやこれがないと始まりません。
ジョイスティック単体での販売は意外とamazonで発見できます。
多数入ったセット商品が多い印象です。
こんな感じのセットですね。↓amazonで詳細確認できます。
なんかわたしが持っているジョイスティックよりも
PS4みたいな形状になっていてうらやましい…
実は私のジョイスティックは電子工作キットに入っていたものなので
ちょっと古い在庫セールされたものみたいなんですよね…
こんな感じの電子工作キット。
↓amazonで購入できます。
何もわからずに取りあえずなんかやってみたいな。。。と思ったら1つ買ってみるとおもしろいですよ。
ほかにも、センサーだけを詰め合わせセットにしたキットもあります。
もちろんわたしもこれ買いました。
そのせいでDHT-11のパチモンが3個も手元にあるんですが…
何かとDHT-11のパチモンってどの電子工作キットにも入ってるんですよね。なんででしょう。
アクリル板
ジョイスティックを固定するための土台です。
前の記事でArduinoの底面を保護するケースを作る際に登場したものとまったく同じ作り方です。
アクリル専用カッター
こちらも前の記事で登場したアクリル専用のカッターです。
アクリル板を切断するなら必須です。
きれいにカットできるのでさすが専用工具!といった感じ。
普通のカッターでやろうとすると日が暮れますからね…
↓↓↓amazonではいろんなカッターがあります。
六角支柱とナット
土台のアクリル板とジョイスティックをくっつけるために使います。
アクリル板に直接接着剤をつけてもいいですが、
せっかくジョイスティックの四隅に取り付け用の穴が付いているので活用しましょう。
わたしが購入した六角支柱であればサイズもばっちりでジョイスティック側は特に加工なしで
取り付けできました。
↓↓あまり店頭では見かけないのでamazonでそろえたほうがいいかも。
リューター
六角支柱とジョイスティックで加工無しで取り付けできたといいましたが、
もちろんアクリル板のほうは加工が必要です。
具体的には、穴あけ作業ですね。
ハンドドリルという選択肢もありますが、
リューターのほうが早くて簡単です。
ドリル付きのリューターを購入すれば穴あけ作業は全く苦になりません。
ジョイスティックとArduinoで何ができるか?
ジョイスティックとArduinoの組み合わせですが、
いろいろなことに使えます。
具体的には、こんな感じでロボットアームを動かす時にも使えます。
ジョイスティックのいいところはなんといっても、
「直感的に傾けるだけで入力ができるところ」ですよね。しかも無段階で。
※実際には1024段階の限界はあります。(諧調bit数を上げる方法でもっと細かくすることも可能)
ロボットアームなど実際にモノが動く場面で人間が操作する場合は効果絶大です。
ゲームだってラジコンだって人間の直感的で微妙な操作を可能にするために
ジョイスティックが採用されていますもんね。
Arduinoとの具体的な接続方法
それではArduinoとの具体的な接続方法です。
冒頭で、ジョイスティックの中身は可変抵抗で、アナログ信号であるといいました。
なので今回Arduinoと接続するときはA0~のアナログ入力端子を使用します。
繰り返しになりますが、必ずVRXとVRYはアナログ入力端子に接続してください。
X方向の線は緑、Y方向の線は黄色で示しています。
ジョイスティックの入力を検知する方法
それでは接続できたところでいったんテストをしましょう。
テストするには、シリアル通信の窓を見て今のジョイスティックの状態を見るのが一番です。
サンプルコード
int YLsensore=A0;
int XLsensore=A1;
int tactL_switch=8;
int YRsensore=A2;
int XRsensore=A3;
int tactR_switch=7;
void setup() {
Serial.begin(9600);//シリアル監視で状況を確認するためにSerialを設定する。
pinMode(YLsensore,INPUT_PULLUP);
pinMode(XLsensore,INPUT_PULLUP);
pinMode(YRsensore,INPUT_PULLUP);
pinMode(XRsensore,INPUT_PULLUP);
}
void loop() {
//シリアルの窓にそれぞれの状態を表示させる。
Serial.println("XL:,"+String(analogRead(XLsensore))+","+"YL:,"+String(analogRead(YLsensore))+"\r");
Serial.println("XR:,"+String(analogRead(XRsensore))+","+"YR:,"+String(analogRead(YRsensore))+"\r");
delay(30);//表示の更新頻度
}
このスケッチ(プログラム)をArduinoで実行すると、
XLはいくつ、YRはいくつと表示されます。
実際にジョイスティックを倒すことによって数値が変化するのがわかると思います。
この数値の変化を使ってロボットアームを動かしているのが先ほどの動画です。
まとめ
今回はジョイスティックの紹介でした。
何かと人間が操作する場面では多様されるジョイスティックですが、
意外と通信は単純でしたね。ジョイスティックでロボットを制御するなんて
なんだかパイロットになった気分ですね~
余談ですがジョイスティックをちょっと調べてみると、アナログタイプのもののほかに、
I2C通信するタイプのジョイスティックもあるようです。
I2C通信版のほうが諧調が細かくとれるんでしょうかね…ちょっと今度調べてみましょうか。
コメント