Arduinoジョイスティックモジュールの製作:仕組みから配線・プログラミングまで徹底ガイド
モーション制御やロボティクス関連のプロジェクトを扱っている方なら、Arduinoジョイスティックモジュールの名前を聞いたことがあるでしょう。しかし、実際にどうやって作るのか、どう動くのか分からないという方も多いはずです。
この記事では、Arduinoジョイスティックモジュールの仕組み、特徴、配線方法、そしてArduinoとのインターフェース方法まで、ステップバイステップで詳しく解説します。自作ジョイスティックでロボットやカメラ制御など、様々なプロジェクトに応用してみましょう。
ジョイスティックモジュールとは?
ロボットプロジェクトの多くでジョイスティックは必須ですが、専用コントローラーを入手するのは難しく、高価な場合もあります。ジョイスティックモジュールは、アナログゲームパッドのジョイスティックと同様の機能を、安価に実現できるデバイスです。
主な構成要素は、90度の角度で傾けられた2つのポテンショメータと、バネで中央に戻る短いスティックがこれらに接続されたものです。
動作原理
ジョイスティックが静止している状態では、X軸とY軸から約2.5Vが出力されます。スティックを動かすと、方向に応じて出力電圧が0V〜5Vの範囲で変化します。マイクロコントローラー(10ビットADC)で読み取る場合、静止時の値は約512(1023の半分)となり、スティックの位置に応じて0〜1023の値が得られます。
ピン構成
| ピン番号 | ピン名 | 説明 |
|---|---|---|
| 1 | GND | モジュールのグランド端子 |
| 2 | +5V | モジュールの正電源端子 |
| 3 | VRx | X軸に比例した電圧出力 |
| 4 | VRy | Y軸に比例した電圧出力 |
| 5 | SW | モジュールのスイッチ(スティック押し込み検出) |
主な特徴
- X軸・Y軸それぞれに独立したポテンショメータを搭載
- 軽量でコンパクト
- ほとんどのマイクロコントローラーやArduinoと容易にインターフェース可能
- 手を離すと自動的に中央位置に戻るスプリング機構
- カップ型ノブで操作性良好
技術仕様
- 動作電圧:5V
- 内部ポテンショメータ値:10kΩ
- 動作温度範囲:0〜70℃
- ピン間隔:2.54mm
- 寸法:4.0cm × 2.6cm × 3.2cm
- 5ピン構成
- 2つのポテンショメータで水平・垂直方向を制御
回路図
ジョイスティックモジュールの完全な回路図を示します。前述の通り、X軸とY軸を制御する2つのポテンショメータ(各10kΩ)が独立して動作します。また、スイッチ(SW)ピンは内部でプッシュボタンに接続されています。
Arduinoとのインターフェース
ジョイスティックモジュールは、Raspberry Pi、Arduinoなど多くのマイクロコントローラーと互換性があり、接続も簡単です。まず、VRxとVRyピンをマイクロコントローラーのADCピンに接続します。スイッチを使用する場合は、デジタルピンに接続してください。
Arduinoへの接続図
以下の接続でArduinoとジョイスティックモジュールを接続し、スティックの動きに応じた出力を得られます。
- VCC → Arduino 5V
- GND → Arduino GND
- VRx → アナログピン A0
- VRy → アナログピン A1
- SW → デジタルピン 8(プルアップ抵抗使用推奨)
Arduinoサンプルコード(基本読み取り)
ライブラリ不要で、アナログ入力を読み取りシリアルモニタに表示する基本スケッチです。
#define joyX A0
#define joyY A1
void setup() {
Serial.begin(9600);
}
void loop() {
int xValue = analogRead(joyX);
int yValue = analogRead(joyY);
Serial.print(xValue);
Serial.print("\t");
Serial.println(yValue);
delay(100);
}
マッピング機能(8×8 LEDマトリックス表示例)
読み取ったアナログ値を、ディスプレイや他のインターフェースに合わせてマッピングする例です。ここでは8×8 LEDマトリックス上でピクセルをジョイスティックで動かします。
#include "LedControl.h"
#define joyX A0
#define joyY A1
int xMap, yMap, xValue, yValue;
LedControl lc = LedControl(12, 11, 10, 1);
void setup() {
Serial.begin(115200);
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
}
void loop() {
xValue = analogRead(joyX);
yValue = analogRead(joyY);
xMap = map(xValue, 0, 1023, 0, 7);
yMap = map(yValue, 0, 1023, 7, 0);
lc.setLed(0, xMap, yMap, true);
delay(50);
lc.clearDisplay(0);
}
ポイント: `map()` 関数を使って、0〜1023の範囲を任意の範囲(ここでは0〜7)に変換しています。この手法でOLEDやグラフィックディスプレイへの応用も容易です。
主な応用例
- ロボティクス制御(ロボットアーム、クローラー、ドローンなど)
- 可動カメラのパン/チルト制御
- 各種モーション制御アプリケーション
- ゲームコントローラーの自作
まとめ
ジョイスティックと聞くとゲームコントローラーを連想しがちですが、DIYエレクトロニクスではロボット制御やモーションアプリケーションなど、実に多様な用途があります。本モジュールは、スティックの水平・垂直移動に応じてアナログ出力を生成し、マイクロコントローラーのアナログ入力に供給する仕組みです。
基本的な接続とコードを理解すれば、アイデア次第で様々なプロジェクトに応用できます。ご質問やご提案があれば、お気軽にお問い合わせください。
産業技術
- Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
- Arduino MegaとNEO-6M GPSモジュールの接続:ステップバイステップガイド
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- Arduinoと超音波センサーで自動ドアを制御:LCD・ブザー付き完全ガイド
- Bluetooth制御Arduinoカー完全自作ガイド – 3Dプリント&Arduino Nanoで作る2輪ロボット
- Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル
- Arduino Nanoで作るJARVIS v1 音声制御ホームオートメーション
- Arduino Due望遠鏡制御キット「rDUINOScope」 - GPS、RTC、Bluetooth、ジョイスティック搭載のスタンドアロンGOTOシステム
- ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー)
- Arduinoで大型3Dプリンターを自作するステップバイステップガイド