Arduinoを始めたばかりの人にデモをしたいと思って鉄道のおもちゃを購入しました。日本ではNゲージが一般的だということですが、デモのために持って歩くには大きすぎるので、さらに小さいZゲージのZ Shortyを買ってみました。
動くものは興味を引きます。
線路をぐるぐる回るだけなので、狭いスペースでデモができます。
[ E259系 成田エクスプレス スターターセット ]
単三電池2本で速度3段階前進後退ができるコントローラが付属しているのですが、コントローラからの電線を切断してピンヘッダーのオス、メスをはんだ付けします。レールへの給電ピンにArduino UNOのPWM信号(5V)とGNDを接続してPWMで速度を増減します。2個のタクトスイッチをプルダウンで構成して、減速ボタンと増速ボタンにします。
単純すぎて記事にならないぐらいの工作ですが、1個だけアーそうね、と思ってもらえそうなことがあります。
「Arduino IDEではINPUT_PULLUPがつかえますが、LINXでは使えません。」
しょうがないのでLINXに合わせてプルダウン抵抗を使うことにします。
配線図を書くのは面倒なので写真を見てください。
LINXのブロックダイアグラムは以下です。スニペットなので空のブロックダイアグラムにドラッグドロップで動くと思います。
+++++++++++++++ほぼ対応するArduino IDEのプログラム++++++++++++++++
(両方のボタンを同時に押すと停止する機能が追加)
const int DownButtonPin = 8;
const int UpButtonPin = 9;
const int analogOutPin = 10;
int TrainSpeed = 128; // value output to the PWM (analog out)
void setup() {
Serial.begin(9600);
pinMode(DownButtonPin, INPUT);
pinMode(UpButtonPin, INPUT);
Serial.println("SpeedControl_pullDown");
}
void loop() {
if(digitalRead(DownButtonPin)==1){
TrainSpeed = TrainSpeed -10;
}
if(digitalRead(UpButtonPin)==1){
TrainSpeed = TrainSpeed +10;
}
if((digitalRead(DownButtonPin)==1) && (digitalRead(UpButtonPin)==1)){
TrainSpeed = 0;
analogWrite(analogOutPin, TrainSpeed);
delay(500);
}
TrainSpeed=constrain(TrainSpeed,0,255);
//Serial.println(TrainSpeed);
analogWrite(analogOutPin, TrainSpeed);
delay(100);
}
お子さんとLabVIEWで遊んでみてはいかがでしょうか。