あそびっと

back index next

2015年5月24日
[DCC]

Arduino で自動往復運転

ArduinoとDCC/MM2 シールドを使った往復運転は、例えばDSGatewayLibのサンプルスケッチDSG_LocRunでもできるが、線路の指定位置で折り返すには、ロコの進入をセンサーで検知する必要がある.

asoY5209614-s

鉄道模型に利用できそうなセンサーは「リードスイッチ」(写真左)と「CDS(光センサー)」(右)だ.
リードスイッチは磁気を検知するので、ロコ側に磁石を付ける.
CDSは光で電圧が変わるので.その上を列車が通過して暗くなったのを検知する.
リードスイッチは5個で200円、CDSは4個100円程度.
どちらでも使えるが、今回は2通りを試した.


CDS-s

どちらのセンサーもArduinoの5V-POWERを利用する.
CDSはArduinoのアナログA0とA1の端子につなぐ.


RSW03

リードスイッチの場合はデジタルのD2とD3端子につなぐ.


asoY5259755E

実際には、Arduinoに重ねたDCC/MM2 シールドの同名端子に接続する.


asoIMG_1669-s

KATOのユニトラック線路にセンサーを付ける.
テスト用に複数のセンサーを付けている.
リードスイッチもCDSもレールの高さ未満なので、線路内に接着した.
道床内に抵抗を格納して、各センサーごとに3つの端子を外に出している.


●リードスイッチ用磁石の取り付け

asoY5209606-s

小型の永久磁石はいろいろあるが、東急ハンズで見つけた3x5mmの磁石を、On30ロコの前端梁に両面テープで貼り付けた.
リードスイッチをレール脇に付けたのは、左右位置でロコを区別する場合を想定している.


asoY5229703-s

これは直径6mmの丸磁石で、この場合は台車に付けないとセンサーが検知しなかった.
磁石の向きによってもリードスイッチの反応が変わるので、付ける場所には工夫がいる.


●CDSの光検知値をチェック
CDSはどの車両でも反応するが、部屋の明るさによって検知光量を決める必要がある.
このためのチェックプログラム(スケッチ)がこれ、
「CDS光量チェックプログラム」
見やすいようにテキストファイルになっているので、ファイルの拡張子を .ino に変更して、Arduinoに読み込む.
コンパイルしてArduinoに書き込んだ後、「ツール」メニューから「シリアルモニタ」を選ぶと、下記の画面が出る.

serial

シリアルモニタはArduinoの動作状況を見るためのもので、スケッチのデバッグには必須だ.
このモニタは、0.5秒毎に現状の明るさが数値で出るので、
スケッチ内の、
int light_level = 400;
の400の値を変えて、CDSを手で覆った時に「Dark : 」となる値を決める.
その値は、下記「自動往復プログラム・CDS」の中の、
#define LIGHT_LEVEL ???
にセットする.


asoY5219631-s

デバッグ中のようす.
シリアルモニタを見ながら、ロコの動作を確認している.
デバッグは、DCC/MM2シールド基盤上の「EMG」ボタンを押してロコを停止させ、スケッチを書き直し、コンパイルし、Arduinoに書き込み、シリアルモニタを立ち上げて動作をチェックする、という手順の繰り返しである.


「自動往復プログラム・CDS」

両CDSの間に置いたロコが前進して、最初に反応したCDSで停止し、
次にその反対側のCDSに向かってバックする.
それを繰り返す.
ファイルの拡張子は .ino に変更すること.
#define 文中のロコアドレスのように // *** のある行は、それぞれ書き換える.
それからプログラム中の Serial.print()、Serial.println() という関数は、デバッグ用なので削除しても動作に影響はない.

「自動往復プログラム・リードスイッチ」

両リードスイッチの間に置いたロコが前進して、どちらかのリードスイッチが反応するたびに、停止と逆転を繰り返す.
このプログラムはリードスイッチの検知に割込を使っている.
停止したロコがバック時に再検知するのを防ぐために、要所で割込停止(detachInterrupt)している.


aso-auto-rev

上はリードスイッチによる往復動作のようす.
(QuickTime動画 26秒 7.8MB)

上記スケッチプログラムの内容は、とりあえず動くという程度で、あまりスマートではないが、
「自動往復プログラム・リードスイッチ」の中の、// Reverse 部分を削除すれば、駅で停車/再出発、という運転になる.
ホイッスルやベルを鳴らすのはお好み次第である.
2ヶ所のセンサーの通過時間で速度を計算し、ロコ毎の速度のばらつきを制御する、などなど、模型車両のATCが実現できるかもしれない.


back home next