スレッドの評価:
  • 回答数0 - 平均0
  • 1
  • 2
  • 3
  • 4
  • 5
DSシールドで自動運転プログラミング
#1
DCC/MM2シールドの後継のDSシールドで、DCCやメルクリンの自動運転プログラミングにチャレンジしよう!
大きく分けて、自動運転プログラミングのやり方は2つ。

■パソコンを使う方法

DesktopStationのDesktopStationSoftwareと言うWindows向けの無料のツールを使うと、比較的簡単に自動運転プログラミングができます。C言語などを覚える必要は無し。ただし、DSshieldスケッチを、Arduino UNOに書き込んでおかないとPCから動かせない。

Desktop Station Software:
https://desktopstation.net/wiki/doku.php...n_software

イベントスクリプト機能:
https://desktopstation.net/wiki/doku.php/event_script

上位機種であるDSmainは、こちらの方法を前提とした機器になっています。
なお、MacOSはサポートしていません。Bootcampや仮想化OS等で、Windowsを導入してください。

■Arduinoで完結させる方法

ArduinoのC言語で、自動運転プログラミングを書くことが出来ます。結構難しいですが、ボタンやLED、液晶などを組み合わせて、世界で自分だけのDCCコマンドステーション・自動運転機器を作れてしまいます。パソコンが要らないので、場所もそれほど取りません。初心者の方はたくさん勉強して、上級者を目指していく形です。

http://fujigaya2.blog.so-net.ne.jp/2018-04-22-1
http://end-trail.jugem.jp/?eid=93

----------------

なお、Arduino UNOや、ACアダプタ、フィーダ線は別に用意しましょうね!
返信
#2
(05-13-2018, 02:43 PM)yaasan : DCC/MM2シールドの後継のDSシールドで、DCCやメルクリンの自動運転プログラミングにチャレンジしよう!

DSシールドで苦戦中です。キットを組み立てたのですがうまく動作しません。以前購入したDCC/MM2シールドはうまく動くので、それと比べて原因を調べようとしているのですが、糸口がつかめません。ベースは同じarduino unoを使っていますが、スケッチはDSシールドの時はr0dにしています。はんだ付け不良の可能性はゼロではありませんが、一応何度もチェックしました。デコーダーはどちらのシールドの場合も同じOneCoinデコーダーです。電源はどちらの場合も15Vです。PC側のソフトも同じDesktopStationです。
 症状は、レールへの供給電圧がAC4.6Vしかなく列車がゆっくりとしか動かず、また制御が不安定なことです(DCC/MM2シールドの時はAC12.6V供給されています)。DesktopStationを立ち上げて「開始」するとシールドのLEDが点灯し、アドレスが一致した列車がゆっくり動き出します。しかし速度調節バーを動かしても速度は変わらず、ゼロにしても列車は止まりません。「開始/停止」や「前進/後退」は動作します。モータードライバーTB4463KQの足をテスターで調べました(オッシロは持っていない)。VMは正常に14.5V供給されています。out1, out2はDCC/MM2シールドではどちらも+7.2Vでしたが、DSシールドでは制御信号が重なっているためか不安定な電圧が表示されます。

もしも上と同じような症状を経験されておられる方がおられたら、ご意見をいただければ幸いです。
返信
#3
DSシールドですが、一部のArduino UNO互換機でD10、D9ピンがうまく接触しないトラブル情報があります。
D9,D10ピンは重要な信号線で、ここが接触不良だと線路に信号が上手く流れず、正常に制御ができません。

Arduino UNOとドッキングした状態で、D9,D10ピンの接触状態をテスタで確認していただけないでしょうか。

もし接触が悪い場合には、D9,D10ピンの接触が良くなるように、はんだを片側だけ盛るなどの対策を実施していただけたらと思います。

※この対策のため、6月中旬以降、DSシールドのキットは接触性の良いピンヘッダーに変更しています。
返信
#4
(06-25-2018, 08:16 PM)yaasan : DSシールドですが、一部のArduino UNO互換機でD10、D9ピンがうまく接触しないトラブル情報があります。

鴨鹿本線3です。早速のご回答有難うございました。おっしゃる通りでした。ただしD9, D10ピンの接触が悪いのはソケットのせいではなく、私のはんだ付け不良ではないかとも思います。いずれにしても的確なご指示を頂いたことに心から感謝します。これでDCC/MM2シールドとDSシールドの2系列が使えるようになったので、DCC運転の可能性が大きく広がりました。これからVC#でソフトを作る作業に入ります。
 有難うございました。
返信
#5
原因が判明して何よりです。
C#のソフトが完成しましたら、ぜひともご紹介ください。

なお、当方のDesktopStationSoftwareもC#で実装しております。汎用で作りこんでおり、参考にしにくいと思いますが、ソースコードもZIPファイルに含まれております。

https://desktopstation.net/wiki/doku.php...n_software
返信
#6
イベントスクリプトに関しての質問です。
1。
基本的に、スクリプトの最後にEXITを入れるべきだと考えていますが、入れなかった場合の影響を教えていただけましたら幸いです。
2。
現在、スクリプト内に10秒以上の長時間のWAITを入れていますが、複数のイベントスクリプトが実行可能、あるいは、実行中の状況に影響は、ありませんでしょうか?
スクリプトをモニターしている限り、並列に処理されている様に思いますが、念の為確認させて頂きたくお願いいたします。
3。
複数のスクリプトが同時に走っている場合、どの様なタイミングで、各スクリプトは実行されるのでしょうか?

お手数とは存じますが、アドバイスいただけましたら幸いです。
返信
#7
>1
EXITを入れない場合は、EXITがあったものとして終了します。たとえば、JUMPしたときにスクリプトの途中で終わらせたいときに明示的に使います。

>2、3
各スクリプトは、A~Zそれぞれが独立して並列動作します。処理時間の単位は100ms周期です。1秒間に10回、スクリプトの各行を実行していきます。つまり、スクリプトAの10行目を実行したら、次にスクリプトBのY行目を実行して・・・というのを100ms間隔の処理でずっと繰り返しています。このようにして、並列して各スクリプトが動いているように見えます。

ご参考:
https://desktopstation.net/wiki/doku.php/event_script
返信
#8
(07-04-2018, 08:46 AM)yaasan : ありがとうございます。

>1
EXITを入れない場合は、EXITがあったものとして終了します。たとえば、JUMPしたときにスクリプトの途中で終わらせたいときに明示的に使います。

「そのイベントのスクリプトの最終行が実行されるまでは、EXITの有無に関わらず、そのイベントが再度発生されても無視される」と言う認識で間違いないでしょうか?

>2、3
各スクリプトは、A~Zそれぞれが独立して並列動作します。処理時間の単位は100ms周期です。1秒間に10回、スクリプトの各行を実行していきます。つまり、スクリプトAの10行目を実行したら、次にスクリプトBのY行目を実行して・・・というのを100ms間隔の処理でずっと繰り返しています。このようにして、並列して各スクリプトが動いているように見えます。

周期の件に関して了解です。
「WAIT行を実行の場合は、WAITの実行が終了するのを待たずに、次のスクリプトの該当行を実行する」と言う認識でよろしいでしょうか?

今、センサー検知後の停止位置が割とバラつくので、それを踏まえての質問でした。しつこい確認であることご容赦ください。
返信
#9
>「そのイベントのスクリプトの最終行が実行されるまでは、EXITの有無に関わらず、そのイベントが再度発生されても無視される」と言う認識で間違いないでしょうか?

その通りです。実行中は、同じトリガ条件が発生しても無視されます。

>「WAIT行を実行の場合は、WAITの実行が終了するのを待たずに、次のスクリプトの該当行を実行する」と言う認識でよろしいでしょうか?

WAITを実行中のスクリプト(たとえばA)は、WAITが完了するまで空回しされ、次のスクリプト(たとえばB)の該当行を実行します。

>センサー検知後の停止位置が割とバラつく

バラツキ要因は結構多いです。
S88の検出が一番悪く、最短で250ms周期なので、±250msのバラツキがあります。スクリプトの実行で±100ms、DSshield(DSmain)に命令を送る部分で100msのバラツキがあります。つまり、合計で250+100+100=450msの時間変動があります。

停止位置を厳密にするには、センサを複数置いたり、センサを通過する前に十分、減速するなどの対策が必要になるかと思います。
返信
#10
(07-04-2018, 06:12 PM)yaasan : >センサー検知後の停止位置が割とバラつく

バラツキ要因は結構多いです。
S88の検出が一番悪く、最短で250ms周期なので、±250msのバラツキがあります。スクリプトの実行で±100ms、DSshield(DSmain)に命令を送る部分で100msのバラツキがあります。つまり、合計で250+100+100=450msの時間変動があります。

停止位置を厳密にするには、センサを複数置いたり、センサを通過する前に十分、減速するなどの対策が必要になるかと思います。

>>ご回答ありがとうございます。バラツキの要因が明確になりましたので、調整いたします。とは言え、センサーの数を増やすにも限度がありますので、テスト環境では、他の方策を考えてみます。
おっしゃるとおり、停車位置を正確にするには、複数センサーを使い、減速位置を作るのがベストだと考えています。
返信


ページ移動:


このスレッドを閲覧中のユーザー: ゲスト1人