検索コード

レッスン13/31:ArduinoでXYジョイスティックを使用し、ジョイスティックの動きでブザーを鳴らす | Robojax

レッスン13/31:ArduinoでXYジョイスティックを使用し、ジョイスティックの動きでブザーを鳴らす | Robojax

このレッスンでは、XYジョイスティックモジュールと、それをArduinoに接続して方向の動きとボタン押下を検出する方法について探求します。この多用途な入力デバイスには、2つのポテンショメータ(X軸用とY軸用)とプッシュボタンが含まれており、360度全方向の動きとクリック動作を捉えることができます。単に生の値を読み取るだけでなく、ジョイスティックが特定の位置に動かされたときにブザーを鳴らすなどのアクションをトリガーする方法もデモンストレーションします。この原理は、数え切れないほどのインタラクティブプロジェクトの基盤を形成します。

sunfounder-13-JoyStick-2

このガイドは、以下のようなプロジェクトの構築に最適です:

  • ロボットカーやパン・チルトカメラマウント用の2軸リモコン。
  • PCやモバイルデバイス用のカスタムゲームコントローラー。
  • LCDやOLEDディスプレイ用のメニューナビゲーションシステム。
  • 産業用またはホビー用アプリケーション向けの精密なモーター速度・方向コントローラー。
  • 特定のジョイスティック位置がサイレンやアラートを作動させるインタラクティブな警報システム。

ハードウェアとコンポーネント

このプロジェクトに沿って進めるには、以下のコンポーネントが必要です。ビデオで使用されている特定のキットはSunFounder 3-in-1 Arduinoキットですが、これらの部品は個別に広く入手可能です。

  • Arduino Uno(または互換性のある任意のボード)
  • XYジョイスティックモジュール
  • パッシブブザー
  • ジャンパーワイヤー
  • プログラミングと電源用のUSBケーブル
LB-LR0001_Dual-axis_XY_Joystick_Module

XYジョイスティックモジュールの理解

XYジョイスティックは自己完結型の入力デバイスです。ビデオ(01:20時点)で説明されているように、2つの10kオームのポテンショメータが垂直に配置されて組み合わされています。スティックをX軸に沿って動かすと一方のポテンショメータが回転し、Y軸に沿って動かすともう一方が回転します。これにより、Arduinoは各軸のアナログ電圧を読み取り、スティックの正確な位置を表すことができます。このモジュールには、スティックを真下に押すと作動するモーメンタリプッシュボタンも含まれています。

Joystick-Module-Internal-Structure

ピンの内訳は以下の通りです:

  • GND:Arduinoのグランド(0V)に接続します。
  • VCC:Arduinoの5V電源に接続します。
  • VRX:X軸位置のアナログ出力。
  • VRY:Y軸位置のアナログ出力。
  • SW:プッシュボタンのデジタル出力(アクティブロー)。

ビデオでは、2つの内部ポテンショメータがVCCとGNDの間に並列に配線されており、その結果、合計抵抗が約5kオームになることも示されています。これはこのモジュールの正常な読み値です(04:30時点)。

配線ガイド

sunfounder-13_xy_joystick_wiring_bb

このプロジェクトの配線は簡単です。ビデオではSunFounderのドキュメントの配線図が示されていますが、ここでは説明どおりにジョイスティックをArduinoのピンに直接接続します。ブザーはプロジェクトのアクション部分のために追加されています。

ビデオ(06:24時点)で確立された接続は以下の通りです:

  • ジョイスティックGNDArduino GND(黒いワイヤー)
  • ジョイスティックVCCArduino 5V(赤いワイヤー)
  • ジョイスティックVRXArduino A0(黄色いワイヤー)
  • ジョイスティックVRYArduino A1(緑のワイヤー)
  • ジョイスティックSWArduino Pin 8(青いワイヤー)
  • ブザー正極(長いピン)Arduino Pin 2
  • ブザー負極(短いピン)Arduino GND

コードの説明

提供されたコードは、ジョイスティックの位置を読み取り、特定の条件が満たされたときにブザーを作動させるように設計されています。設定できる主要な部分はスケッチの先頭にあります。

まず、ピン定義が設定されています。これらはお使いの配線に合わせて変更できます:

const int xPin = A0;  //VRXが接続されるピン
const int yPin = A1;  //VRYが接続されるピン
const int swPin = 8;  //SWが接続されるピン
const int alarmPin=2;//ブザーへ

次に、ジョイスティックの状態を格納するためのグローバル変数が宣言されています。これらはreadJoystick()関数が呼び出されるたびに更新されます。

int xValue;//xValueを格納するため
int yValue;//yValueを格納するため
int swValue;//スイッチの値を格納するため

setup()関数では、スイッチピンが内部プルアップ抵抗を使用して設定されています。これは外部抵抗の必要性を排除するため、重要なステップです。INPUT_PULLUPに設定することで、ピンはデフォルトでHIGHを読み取り、ボタンが押されるとLOWになります。

pinMode(swPin, INPUT_PULLUP);  //SWピンをINPUTに設定

コアロジックはloop()内にあります。カスタム関数readJoystick()を呼び出して最新のデータを取得します。次に、条件をチェックします:X軸の値が600より大きく、Y軸の値が300未満の場合、ブザーがオンになります。これらのしきい値を変更して、ジョイスティックの「アクティブゾーン」を別に定義できます。alarmPinHIGHに設定され、ブザーが作動し、シリアルモニタにメッセージが出力されます。

if(xValue >600 && yValue <300)
{
  digitalWrite(alarmPin, HIGH);
  Serial.print("Alarm X:");
  Serial.print(xValue);
  Serial.print(" Y:");
  Serial.println(yValue);
}else{
  digitalWrite(alarmPin, LOW);
  // ... アラームがオフのときに値を出力するコード
}

最後に、カスタム関数readJoystick()が定義されています。この関数は、XピンとYピンのアナログ値、およびスイッチのデジタル状態を読み取り、グローバル変数に格納します。このモジュール式のアプローチにより、メインループをクリーンで整理された状態に保てます。

void readJoystick()
{
  xValue =analogRead(xPin);//xPinの値を読み取る
  yValue =analogRead(yPin);//yPinを読み取る
  swValue =digitalRead(swPin);//スイッチを読み取る 
}

ライブプロジェクトとデモンストレーション

コードがアップロードされると、シリアルモニタを開いて生の値を確認できます。最初に、ジョイスティックが中央にある場合、X値とY値は約512になります。これは0〜1023の範囲の中間点です。ジョイスティックを押し下げると、スイッチの値が1から0に変わります(ビデオの10:15時点)。

ジョイスティックを端まで動かすと、全範囲が表示されます:完全に右に動かすとX値は1023、完全に左に動かすと0になります。同様に、上下に動かすとY値は0から1023の間で変化します(ビデオの10:37時点)。

デモンストレーションでは、次にプロジェクトの動作部分を示します。ジョイスティックを右上隅(X > 600かつY < 300の位置)に動かすと、ブザーが鳴り、シリアルモニタに「Alarm」メッセージが出力されます。そのゾーンから離すとブザーはオフになります。これにより、ジョイスティックの位置を使用して出力デバイスを制御できることが証明され、リレー、LED、モーターなどを制御してさまざまなアプリケーションに拡張できます。

チャプター

  • [00:00] XYジョイスティックプロジェクトの紹介
  • [01:20] ハードウェアと内部コンポーネントの理解
  • [03:33] モジュールの回路図と抵抗測定
  • [05:51] ジョイスティックをArduinoに配線する
  • [07:00] コードの設定とプルアップ抵抗の有効化
  • [09:23] コードのアップロードと生値のテスト
  • [12:21] 動作:ジョイスティックの位置でブザーを制御
  • [16:02] アラームシステムのライブデモンストレーション

画像

Sunfounder car assembled
Sunfounder car assembled
LB-LR0001_Dual-axis_XY_Joystick_Module
LB-LR0001_Dual-axis_XY_Joystick_Module
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-2
sunfounder-13-JoyStick-2
Joystick-Module-Internal-Structure
Joystick-Module-Internal-Structure
sunfounder-13_xy_joystick_wiring_bb
sunfounder-13_xy_joystick_wiring_bb
922-Lesson 13/31: How to read position and values of X-Y Joystick
言語: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

リソースと参考文献

ファイル📁

Arduinoライブラリ(zip)

ユーザーマニュアル