ArduinoでNゲージのコントローラーを作ってみた

おとといの続きで、可変抵抗の値を読んでPWMで制御するコントローラーを作ってみた。

[c]
#define LED_PIN_LEFT 2
#define LED_PIN_RIGHT 3
#define VOLUME_PIN A1
#define MOTOR_FRONT 6
#define MOTOR_BACK 5
/**
* ピン初期化
*/
void setup() {
pinMode(LED_PIN_LEFT, OUTPUT);
pinMode(LED_PIN_RIGHT, OUTPUT);
pinMode(MOTOR_FRONT, OUTPUT);
pinMode(MOTOR_BACK, OUTPUT);
Serial.begin(9600);
}
void loop() {
int value = ((analogRead(VOLUME_PIN) / 1023.0f) * 24) – 12; // 24段階に正規化して真ん中で左右を分ける
Serial.println(value);
if(value < 0) {
// 左方向
Serial.println("left");
digitalWrite(LED_PIN_LEFT, HIGH);
digitalWrite(LED_PIN_RIGHT, LOW);
int speed = (1 – (value / 12.0f)) * 250;
analogWrite(MOTOR_BACK, 0);
analogWrite(MOTOR_FRONT, speed);
} else if(value > 0) {
// 右方向
Serial.println("right");
digitalWrite(LED_PIN_RIGHT, HIGH);
digitalWrite(LED_PIN_LEFT, LOW);
int speed = ((value / 12.0f)) * 250;
analogWrite(MOTOR_BACK, speed);
analogWrite(MOTOR_FRONT, 0);
} else {
// 停止
Serial.println("stop");
digitalWrite(LED_PIN_LEFT, LOW);
digitalWrite(LED_PIN_RIGHT, LOW);
float speed = 0;
analogWrite(MOTOR_FRONT, 0);
analogWrite(MOTOR_BACK, 0);
}
delay(100);
}
[/c]
可変抵抗の値(0~1023)を24段階にして、中央(12)で停止。12未満なら左方向、12より大きければ右方向に走行とすることで、可変抵抗だけで正転逆転に対応。
周波数はデフォルトのまま(5ピンと6ピンは970Hz)なので走行中は励起音がずっとしてる。というか止まってても励起音がしてる。
この辺は周波数を変えれば良さそう。なんかVVVFインバーターの音再現できるみたいだし(?)
なにげにArduinoとモータードライバそれぞれに電源が必要なのが面倒だな。しかもモータードライバの電源は12Vあるから、間違えるとArduinoが死ぬ可能性があるし…
後はセンサーで車両検知して自動運転と、列車交換。あとは脱線検知できればいいなぁ……部品とレール買わなきゃ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です