ジョイステックでNゲージをコントロール
ジョイステックとArduinoをつかってNゲージのパワーパックを作ってみようという試みをしました。なぜそう思ったかというと何となくです。
さて材料は以下のようです。
ジョイステック アマゾンで購入
Arduino uno
モータードライバー L298N
フィーダー線 トミックス
ジャンパ線など
配線は以下のようです。
ジョイスティックの配線
Ⅹ軸→A0
Y軸→A1
GND→GND
VCC→VCC
モータードライバーの配線
IN1→2
IN2→3
A enable→9
+5V Power→5V
12V Power→電池
power GND→電池、GND
プログラムは以下の通りです。
// ジョイスティックのアナログピン
const int joystickX = A0; // X軸(前後)
const int joystickY = A1; // Y軸(スピード)
// モータードライバのデジタルピン
const int motorPin1 = 2;
const int motorPin2 = 3;
const int enablePin = 9; // PWMで速度制御用
void setup() {
// モーターピンを出力に設定
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// シリアルモニタで確認用
Serial.begin(9600);
}
void loop() {
// ジョイスティックのX軸(前後)を読み取る
int xValue = analogRead(joystickX);
// ジョイスティックのY軸(スピード)を読み取る
int yValue = analogRead(joystickY);
// 中心値512から前後方向を決定
if (xValue > 550) {
// 前進
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
} else if (xValue < 470) {
// 後退
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
} else {
// 停止
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
}
// スピードを制御(Y軸の値に基づき、0-255にマッピング)
int speed = map(yValue, 0, 1023, 0, 255);
analogWrite(enablePin, speed);
// シリアルモニタで値を確認(デバッグ用)
Serial.print("X: ");
Serial.print(xValue);
Serial.println(yValue);
delay(50); // 少し待機してループ速度を調整
}
最後に完成した動画をご覧ください。
こんな感じです。鋭意工作は進めますのでよろしくお願いします。