北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

鉄道模型(おもちゃ)をLINXで動かしてみた

Arduinoを始めたばかりの人にデモをしたいと思って鉄道のおもちゃを購入しました。日本ではNゲージが一般的だということですが、デモのために持って歩くには大きすぎるので、さらに小さいZゲージのZ Shortyを買ってみました。

 

動くものは興味を引きます。

線路をぐるぐる回るだけなので、狭いスペースでデモができます。

 

[ E259系 成田エクスプレス スターターセット ]

 

M8060723s.JPG

 

単三電池2本で速度3段階前進後退ができるコントローラが付属しているのですが、コントローラからの電線を切断してピンヘッダーのオス、メスをはんだ付けします。レールへの給電ピンにArduino UNOのPWM信号(5V)とGNDを接続してPWMで速度を増減します。2個のタクトスイッチをプルダウンで構成して、減速ボタンと増速ボタンにします。

 

単純すぎて記事にならないぐらいの工作ですが、1個だけアーそうね、と思ってもらえそうなことがあります。

Arduino IDEではINPUT_PULLUPがつかえますが、LINXでは使えません。

しょうがないのでLINXに合わせてプルダウン抵抗を使うことにします。

 

配線図を書くのは面倒なので写真を見てください。

M8060703s.JPGM8060697s.JPGM8060700s.JPGM8060732s.JPG

 

LINXのブロックダイアグラムは以下です。スニペットなので空のブロックダイアグラムにドラッグドロップで動くと思います。

SpeedControl.png

 

+++++++++++++++ほぼ対応する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);
}

 

M8060716s.JPG

 

お子さんとLabVIEWで遊んでみてはいかがでしょうか。

 

メッセージ1/1
1,497件の閲覧回数