PR

Arduino学習⑪ Lesson12 アナログジョイスティック
Arduinoのお勉強。アナログジョイスティックで押した方向をシリアルモニタに表示してみた。

Arduino学習

Lesson12 アナログジョイスティック

このレッスンでは、アナログジョイスティックモジュールの使用方法を学習します。アナログジョイスティックは、ゲームのコントローラのようにArduinoの制御装置をコントロールします。

必要な部品

必要な部品は以下になります。

  • Elegoo UNO R3 x 1
  • JoyStick Module x 1
  • F-M Jumper Wire x 5
Lesson12 使用部品

ジョイスティック(JoyStick Module)

ジョイスティックモジュールには、5V、GND、X軸、Y軸、キー(スイッチ)の5つのピンがあります。X軸、Y軸の向きの情報は、Arduinoのアナログインプットピンに繋くことで読み取りが可能になります。キーの情報はデジタルインプットピンで読み取り可能です。

アナログジョイスティックモジュール

回路をつくってみる

それでは実際に回路をつないでみます。

チュートリアルにある回路図
回路を接続

ジョイスティックには、5本のピンがありますが、上からGNDはArduinoのGND、+5Vは5V、VRxはA0、VRyはA1、SWはD2に繋ぎます。

Arduino側の接続
ジョイスティック側の接続(ハンドルを外した状態)
ジョイスティック

プログラムを動かしてみる

チュートリアルに付属のコードを利用して実際に動かしてみる。

チュートリアル付属のコード
//www.elegoo.com
//2016.12.09

// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = A0; // analog pin connected to X output
const int Y_pin = A1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);
}

void loop() {
  Serial.print("Switch:  ");
  Serial.print(digitalRead(SW_pin));
  Serial.print("\n");
  Serial.print("X-axis: ");
  Serial.print(analogRead(X_pin));
  Serial.print("\n");
  Serial.print("Y-axis: ");
  Serial.println(analogRead(Y_pin));
  Serial.print("\n\n");
  delay(500);
}

それでは実際にPCと繋いで動かしてみたいと思います。結果はシリアルモニタに表示されます。

PCと繋いだ状態
シリアルモニタ結果①
シリアルモニタ結果②

ジョイスティックのスイッチを押すと「Switch: 0」押さない状態だと「Switch: 1」と表示されます。Delayが500msなので0.5秒に1回、サンプリングしています。ジョイスティックの方は、初期値がX:499、Y:496 のようです。最大がそれぞれ 1023でした。

ちょっと地味ですね。少し気になったのがシリアルモニタがIDEの中から浮かして独立のウィンドウにすることが出来ませんでした。Windows版だけかもしれないですが…、将来的にはRaspberryPI上での制御を考えていますので、実験中だと思ってとりあえず気にしないことにします。

あまりにも地味すぎるので応用してみたいと思います。

応用編(2軸のサーボモータを動かしてみる)

さて、何か動かしたいと思いますが、やっぱりサーボモータですね。X軸とY軸で2台のマイクロサーボモータを繋いで回転させてみたいと思います。先ほどの回路をそのままにサーボモータを接続します。

サーボモータを接続

プログラムを変更して、AnalogReadをServo.writeに接続してみます。

応用プログラム
#include <Servo.h>

// Analog input min - max
#define AXIS_INPUT_MIN  0
#define AXIS_INPUT_MAX  1024

// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = A0; // analog pin connected to X output
const int Y_pin = A1; // analog pin connected to Y output
const int X_Servo_pin = 5; // X axis servo pin
const int Y_Servo_pin = 6; // Y axis servo pin
Servo servo_x;
Servo servo_y;

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);
  servo_x.attach(X_Servo_pin);
  servo_y.attach(Y_Servo_pin);
  servo_x.write(90);
  servo_y.write(90);
}

void loop() {
  if (digitalRead(SW_pin) > 0) {
    Serial.print("Switch: ON\n");
  } else {
    Serial.print("Switch: OFF\n");
  }
  // Joystick input -> Rectangle (0 - 180)
  servo_x.write(map(analogRead(X_pin), AXIS_INPUT_MIN, AXIS_INPUT_MAX, 0, 180));
  servo_y.write(map(analogRead(Y_pin), AXIS_INPUT_MIN, AXIS_INPUT_MAX, 0, 180));
  delay(500);
}

動きがあるので動画にしてみました。

ジョイスティックでサーボモータを動かしてみる

以上

コメント

タイトルとURLをコピーしました