見出し画像

ジョイステックで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); // 少し待機してループ速度を調整
}

最後に完成した動画をご覧ください。

こんな感じです。鋭意工作は進めますのでよろしくお願いします。




いいなと思ったら応援しよう!