デジタル鉄道模型フォーラムのご案内:
DCCやメルクリンなどのデジタル鉄道模型を楽しむ方が集まって、様々な話題でコミュニケーションできる場です。ぜひご登録ください!登録・利用は無料です。

2018年01月20日

DSシールドをPLCのようにする その3

某T社の某NOSに対する、最強の刺客として成長を続ける、DSシールドですが、スケッチを追加して、自動運転プログラミングに必須なS88のセンサ入力関数をサポートしました。

Arduinoを使ってC言語プログラミングを覚えながら、DCC鉄道模型も気軽に制御する自動運転環境が作れちゃいます。しかも、自分で組めば1500円未満ですよ!!圧倒的な安さと、機能のポテンシャルの高さに注目ください。

DSAUTO_ROUTE3.jpg

□追加した命令

・永久ループを関数化(CMD_END)
・CMD_ScanS88 S88からデータを収集する処理。
・CMD_GetS88 収集したデータから希望のS88アドレス(1-16)の状態(0 or 1)を得る。
・ピン設定、変数設定のためにuser_init()を追加。

□サンプル(ボタンでポイントのルート設定)

ボタンを3つ用意し、押されたら、ボタンごとに決められたポイントを動かす処理です。
前に作ったサーボポイントデモ機を例にしてみます。

□必要な物

・DCCポイント2つ、アドレスは1と2に設定
・DSシールド
・Arduino UNOもしくは互換機
・パソコン
・Arduino IDE(無料)
・このページに掲載されているスケッチ(ソフト、ソースコード)

□作業手順

(0) DSシールドを買って、秋月電子で部品を入手しておき、半田付けします。
(1) Arduino UNOとDSシールドは合体させておきます。
(2) Arduino IDEをインストールする。Arduino UNO(互換機)のUSBドライバもインストールする。
(3) ここに掲載されているスケッチをダウンロードし、Arduino IDEで開く。

DSAUTO_ROUTE4.png

(4) ボードをArduino UNOにして、ポートをArduino UNOとして認識したポートを指定する。空白はNG。

DSAUTO_ROUTE5.png

(5) Uploadボタン(→マーク)を押して書き込む

□このスケッチの内容の説明

ルート割り当て:


ボタンは左からルート1(青)、ルート2(黄)、ルート3(オレンジ)で切り替えできます。
ここではポイントは2つしか無いですが、もっとあっても良いです。ただ、その分、ボタンが増えます。

DSAUTO_ROUTE1.jpg

Arduino UNOとの配線図:
DSAUTO_RouteSCH.png

Arduino UNOに配線した例:
DSAUTO_ROUTE2.jpg

□スケッチ

DSshieldAUTO_r0c.zip

※digitalReadして、処理を動かす際には必ずCMD_WAITを入れてください。今回はスイッチの変化を認識しているのではなく、押されている間、ずっとこの処理が繰り返される動きになってます。CMD_WAITを入れると、タクトスイッチのバネの動きでうまくごまかせます。


/*****************************************************************/
/* User Program Area */
/*****************************************************************/

void user_init(void)
{
pinMode(8, INPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);

digitalWrite(8, HIGH);//内部プルアップON
digitalWrite(11, HIGH);//内部プルアップON
digitalWrite(12, HIGH);//内部プルアップON

CMD_Power(1);
Serial.println("Power On");
}

void user_program(void)
{
//ボタンが押されたとき、digitalReadは0を返す。押さないときは1を返す。

if( digitalRead(8) == 0)
{
Serial.println("Route 1");

CMD_Turnout(ADDR_ACC_DCC + 2, 0);
CMD_Wait(1000);
}

if( digitalRead(11) == 0)
{
Serial.println("Route 2");

CMD_Turnout(ADDR_ACC_DCC + 1, 1);
CMD_Wait(1000);
CMD_Turnout(ADDR_ACC_DCC + 2, 1);
}

if( digitalRead(12) == 0)
{
Serial.println("Route 3");

CMD_Turnout(ADDR_ACC_DCC + 1, 0);
CMD_Wait(1000);
CMD_Turnout(ADDR_ACC_DCC + 2, 1);
}
}


□動かしてみた例

パソコンなしで、ArduinoUNOとDSシールドだけでルートの制御が実現できます。もちろん、ポイントだけでなく無く車両を走らせることも出来ます。サウンドもギミックもDCCなので全部出来ます。

Youtubeビデオ:
posted by yaasan at 08:25 | Comment(0) | 鉄道模型
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。