ジョイスティックという言葉を聞いて最初に頭に浮かぶのは、ゲームコントローラーです。はい、まったく同じで、ゲームの目的で使用できます。ゲームとは別に、DIY電子機器には他にも多くの用途があります。このジョイスティックは、それぞれX面とY面の2つのポテンショメータの組み合わせに他なりません。ポテンショメータを介して電圧を読み取り、Arduinoにアナログ値を与えます。ジョイスティックシャフト(単にポテンショメータのポインタ)を動かすと、アナログ値が変化します。
この回路では、ジョイスティックの動きに応じて4つのLEDを制御するだけで、ジョイスティックとArduinoを接続しています。ジョイスティックのシャフトの動きの方向を表すように4つのLEDを配置しました。このジョイスティックには、他のさまざまな目的に使用したり、アイドル状態のままにすることができるプッシュボタンもあります。ジョイスティックのボタンを押すと、その1つのLEDがオンになるため、ジョイスティックのスイッチにも1つのLEDが取り付けられています。
必要な材料
- Arduino UNO
- ジョイスティックモジュール
- LED-5
- 抵抗器:100オーム-3
- 接続線
- ブレッドボード
回路図
ジョイスティックモジュール
ジョイスティックに はさまざまな形状とサイズがあります。典型的な ジョイスティックモジュール を次の図に示します。このジョイスティックモジュールは通常、アナログ出力を提供し、このモジュールによって提供される出力電圧は、移動する方向に応じて変化し続けます。そして、いくつかのマイクロコントローラーを使用してこれらの電圧変化を解釈することにより、移動の方向を取得できます。以前は、JoystickをAVRおよびRaspberryPiとインターフェースしていました。
ご覧のとおり、このジョイスティックモジュールには2つの軸があります。X軸とY軸です。ジョイスティックの各軸は、ポテンショメータまたはポットに取り付けられています。これらのポットの中点は、RxとRyとして追い出されます。したがって、RxとRyはこれらのポットへの可変ポイントです。ジョイスティックがスタンバイ状態のとき、RxとRyは分圧器として機能します。
ジョイスティックを横軸に沿って動かすと、Rxピンの電圧が変化します。同様に、縦軸に沿って動かすと、Ryピンの電圧が変化します。だから、 我々は4つの持っている2つのADCの出力にジョイスティックの方向を。スティックを動かすと、各ピンの電圧が方向に応じてハイまたはローになります。
ここでは、このジョイスティックモジュールを、最後のビデオに示すように、ADC(アナログ-デジタルコンバーター)メカニズムが組み込まれているArduinoUNOに接続しています。ArduinoのADCの使用について詳しくは、こちらをご覧ください。
コードと説明
完全なArduinoコードは最後に記載されています。
以下のコードでは、アナログピンA0とA1にそれぞれジョイスティックモジュールのX軸とY軸を定義しています。
#define joyX A0 #define joyY A1
以下のコードでは、ジョイスティックモジュールのスイッチ(プッシュボタン)用にArduinoのPIN 2を初期化しており、 buttonstate と buttonstate1の 値は開始時に0になります。
int button = 2; int buttonState = 0; int buttonState1 = 0;
以下のコードでは、ボーレートを9600に設定し、ピン7を出力ピンとして定義し、ボタンピンを入力ピンとして定義しています。最初は、スイッチが押されるまでボタンピンはハイのままです。
void setup(){pinMode(7、OUTPUT); pinMode(button、INPUT); digitalWrite(button、HIGH); Serial.begin(9600); }
ここで、このコードでは、アナログピンA0とA1から値を読み取り、シリアルに印刷しています。
int xValue = analogRead(joyX); int yValue = analogRead(joyY); Serial.print(xValue); Serial.print( "\ t"); Serial.println(yValue);
ジョイスティックシャフトの動きに応じてLEDをオン/オフするための条件は、以下のコードで定義されています。ここでは、ArduinoのピンA0とA1の電圧のアナログ値を取得しています。これらのアナログ値はジョイスティックを動かすと変化し、LEDはジョイスティックの動きに応じて点灯します。
この状態は、ジョイスティックシャフトが-Y軸方向に移動する場合です。
if(xValue> = 0 && yValue <= 10){digitalWrite(10、HIGH); } else {digitalWrite(10、LOW);}
この状態は、ジョイスティックシャフトが-X軸方向に移動する場合です。
if(xValue <= 10 && yValue> = 500){digitalWrite(11、HIGH); } else {digitalWrite(11、LOW);}
この状態は、ジョイスティックシャフトが+ X軸方向に移動するためのものです。
if(xValue> = 1020 && yValue> = 500){digitalWrite(9、HIGH); } else {digitalWrite(9、LOW);}
この状態は、ジョイスティックシャフトが+ Y軸方向に移動するためのものです。
if(xValue> = 500 && yValue> = 1020){digitalWrite(8、HIGH); } else {digitalWrite(8、LOW);}
ジョイスティックのシャフトを斜めに動かすと、XとYのアナログ値がそれぞれ1023と1023になると、1つの位置になり、ピン9とピン8の両方のLEDが点灯します。LEDの条件を満たすからです。したがって、その不一致を取り除くために、(X、Y)の値が(1023、1023)の場合、両方のLEDがオフ状態のままであるという条件を与えました。
if(xValue> = 1020 && yValue> = 1020){digitalWrite(9、LOW); digitalWrite(8、LOW); }
以下の条件は、押しボタンスイッチに接続されたLEDを操作するために使用されます。ジョイスティックスイッチを押すと、LEDがオンになり、ボタンが離されるまでラッチします。ジョイスティックモジュールのプッシュボタンスイッチを使用するオプション。
if(buttonState == LOW){Serial.println( "Switch = High"); digitalWrite(7、HIGH); } else {digitalWrite(7、LOW);}
Arduinoでジョイスティックを使用してLEDを制御する
コードをArduinoにアップロードし、回路図に従ってコンポーネントを接続した後、ジョイスティックでLEDを制御できるようになりました。ジョイスティックのシャフトの動きに応じて、各方向に4つのLEDをオンにすることができます。ジョイスティックの内部には2つのポテンショメータがあります。1つはX軸の動き用で、もう1つはY軸の動き用です。各ポテンショメータはArduinoから5vを取得しています。したがって、ジョイスティックを動かすと、電圧値が変化し、アナログピンA0とA1のアナログ値も変化します。
そのため、Arduinoから、X軸とY軸のアナログ値を読み取り、ジョイスティックの軸の動きに従ってLEDをオンにします。下のビデオに示すように、ジョイスティックモジュールの押しボタンスイッチを使用して、回路内の単一のLEDを制御します。