デジタル鉄道模型フォーラムDCC・メルクリン等のデジタル鉄道模型の話題でコミュニケーションできる場です。登録・利用は無料です。
デスクトップステーション(DesktopStation)のページはこちら
・無料の日本型超高品質DCCサウンドデータをWebで配布中!
・鉄道模型をスマホで簡単制御!国産で革新的なコマンドステーション DSair2はこちらから。

2019年02月15日

DCC同人誌をDesktopStationShopに追加

WebNuckyさんの頒布で、DCC同人誌2019春号を無償頒布されています。

当方でも、DCC同人誌を頒布開始することにしました。Nuckyさんと頒布条件は基本的に同じです。3月末の池袋のイベントのいくつかのブースでも無料で入手できます。Webで無理に入手頂く必要はありません。

2018秋号
2019春号

※DCC同人誌のみの購入は出来ません。何らかの商品(おわかりと思いますが安い商品がありますよね?)とセットでご購入下さい。(DCC同人誌だけを頒布すると送料分では赤字になるため)
※システム上、DCC同人誌のみの購入が可能ですが、強制的にキャンセルさせて頂きます。
※ネットオークション・個人売買サイトでの転売を禁止します。転売を見つけた方は、ご一報下さい。
※海外からの注文には、原則として無条件でDCC同人誌2019をお付けしております。

dcc_dojinshi2.jpg

dcc_dojinshi1.jpg
posted by yaasan at 19:06 | Comment(0) | 鉄道模型

DSair2 ファームウェア r2j TEST13

DSair2 r2j TEST13です。デバッグが完了次第、正式版として、DSair2 r2.1をリリースしたく、よろしくお願いします。

■ダウンロード

DSair2 wiki ファームウェアダウンロードページ

■変更内容

・バッファオーバーランのバグを修正(LEDが最初に光らない原因)

■今後のスケジュール

r2j TEST13のバグを確認して修正次第、r2.1として公開します。
12月リリースのr2hからのメジャーアップデートになります。
posted by yaasan at 08:30 | Comment(1) | 鉄道模型

2019年02月14日

DSbasicのプログラミング

DSair2の新機能であるDSbasicの使い方をご紹介します。
2019年2月14日現在、r2j TEST12で、ご利用頂けます。

DSbasicは、DSair2の裏機能であるS88-Nのコネクタを有効にすることで、絶大な効果を発揮します。
S88-Nは、欧州で標準の線路上の車両を検出するためのシステムで、メルクリンが開発したものがオープン化されて今に至っています。日本と欧州では在線検出システムとしてデファクトスタンダードになっています。日本でも通販でサードパーティーの機器が安価なキットで入手可能です。

DSair2でS88-Nを有効化するには基板に部品を追加する必要があります。基板上のCN7に、秋月電子で売っているRJ45コネクタ(7810-8P8C, C-00159)を別途購入し差し込んで半田付けし、ケースをくり抜くことで使用可能になります。元々、オープンにするつもりはありませんでしたが、私がBASICにハマってしまった以上、使わないわけにはいきませんし、自動運転用には必須のコネクタですので、今回、裏機能として公開させて頂くに至りました。

dsair2_fsmpl_test2.jpg

さて、DSbasicと銘打って開発を進めておりますが、BASICというプログラミング言語には、方言がいくつかあり、私はN88 BASICをよくいじってましたが、マイクロソフトのQuickBasicをいじっている方もいらっしゃったと思いますし、F-BASIC等、マニアックなものもあったと思います。癖がいろいろあり、人によっては、解釈が異なるかも知れません。

DSbasicで採用しているBASICも、JavaScriptに内部で変換処理を行っている都合上、本来のBASICよりもかなり拡張されている部分があります。基本的には、wwwbasicの文法・ルールをそのまま適用して頂きたいですが、参考にする実例やサンプルが無いと分からん、ということですので、基本的なものをここに紹介します。

■参考となるプログラム例

wwwbasicのページに、examplesが紹介されており、基本的には私もここを見ながら、プログラムを入力しています。

■おまじない

プログラムの最初に、
screen(7)
を書くと、文字が大きくなり見やすくなります。

■文字表示

print命令を使います。

print "HelloWorld!"

変数を足したいときは、単純に以下のようにすればOKです。iは数字とします。セミコロン(;)で区切ってもOKです。

print "Number is " + i

■変数

突然、使い始めて問題ありません。

xx=999
print xx

こんな感じで、好きに使えます。

■ for

繰り返しは、以下のようにforとnextで記述します。BASICでは一般的な書き方ですね。

--------------------
FOR i = 1 to 10
PRINT "Counting "; i
NEXT i
--------------------

■ if

ifは、「もし〜〜ならば、end ifまでを実行、という処理です。基本的には、S88センサのチェックや、ポイント状態(getacc)の確認で多用すると思います。

--------------------
if getacc(1)=1 then
if getacc(2)=0 then
print "route=A"
acc 2,1
acc 3,1
end if
end if
--------------------

■ while

whileは他のプログラミング言語で同様ですが、whileのコマンドに指定した式(以下ではs88get(1)=0)が、真(=成り立ってる状況)であれば、whileとwendの間の処理が、永遠に続くという命令です。
もし、s88get(1)=1になったら(つまりS88センサが車両を検出したとき)、この処理は終了し、wendの次の命令が動きます。

--------------------
while s88get(1)=0
print "RUN!"
sleep 1000
wend
--------------------

■goto

プロの世界では「絶対に使ってはいけない」と念を押されるGOTO文。趣味なら困る人も居ないですから、別に構わないですし、そもそも論としてアセンブラなんてGOTOの嵐ですからねえ・・・。
BASICはそれほど高級言語(値段が高い、という意味では無く、機械語に近いか遠いかの意味です)、という立ち位置ではないと個人的には思ってます。

--------------------
Again:
print "XXX"
GOTO Again
--------------------

■整数化

INT関数を使って、浮動小数点変数を整数に変換できます。

xx=INT(10.234)

■算術系

Math関数も、定義されていて使えます。

log, sin,cos,tan,atn,exp,abs,sqr,atan2

■大文字小文字などの変数型の変換処理

大文字へ変換は、ucase$
小文字へ変換は、lcase$
数値型から文字列型へ変換は、str$
文字列型から数値型へ変換は、val

■他にも

実はこのBASIC、何度も書いてますが、実行する際にBASIC→JavaScriptに変換してから実行するので、超高速です。また、JavaScriptの機能をまんま使えるので、かなりリッチなBASICになっています。

・関数を定義してコールできます
・構造体・クラスがBASIC的に使えます。
・配列も使えます
・型も定義できます
・マウス、キーボードの入力もできます(私はまだ理解できてませんが)

つまり、何でも出来てしまう最強BASICということです。これがスマホ上で動かせて、DCC車両も動かし放題、S88で在線検出もできる、ポイントも動かせる、というのがポイントです。
SDカードに作ったソフトをBASファイルで置いておいて、スマホ画面上で読み出して実行すれば、自動運転も、運転操作の自動支援も、一通りのことができます。

イベントスクリプトなんていう、非常に制限された環境から完全に解放されたのです。ぜひともDSair2で、DSbasicを駆使して、自分が納得できる鉄道模型の動かす環境を構築できればと思います。
posted by yaasan at 19:59 | Comment(0) | 鉄道模型

2019年02月13日

DSair2で自動運転をしてみる

DSair2が、S88のセンサに対応したので、早速、試してみた。パソコンも要らず、ルータも要らない。S88デコーダを接続してあげれば、自動運転が出来てしまいます。世界で、PC無しでスマホだけで自動運転ができるのは、DSair2システムだけ!

■使用機器

・Androidタブレット(スリープモードは解除済み)
DSair2 (S88-N端子改造済, r2j TEST12導入済)
・Fujigaya2 S88 Detector (現行品は、8ch版です)
・ACアダプタ 12V/2A
・C Track線路
・フォトリフレクタ改造埋め込み済みCTrack線路
・Roco BR621 (DCCモードで使用)

■デモ動画

PCは使ってません。S88も、スマホのBASICエンジン(ブラウザで動いてます)で処理しており、スマホだけで完結します。注意点としては、スリープにならないように省電力設定をOFFにすることくらいです。



■配線状況

Androidタブレット、DSair2、S88 Detectorなどシンプルな配線のみ。

DSbasic_S88_4.jpg

DSbasic_S88_3.jpg

センサーレールは、以前に作ったもの。作り方はこちらから。

DSbasic_S88_5.jpg

DSbasic_S88_6.jpg

■自動運転のBASICプログラム

DSbasic_S88_2.png

BASICプログラムは以下です。
またBASファイルをSDカードに置けば開けます。

s88test.zip

--------------------------
screen(7)
s88start

pwr 1
print "START S88 Control"

dir 3,1
fnc 3,0,1
fnc 3,1,1
fnx 3,2
spd 3,200

while s88get(1)=0
print "RUN!"
sleep 1000
wend

print "S88 Adr.1 Detected"
spd 3,0
sleep 2000

print "REV"
dir 3,2
spd 3,200
sleep 12000
spd 3,0

fnc 3,0,0
fnc 3,1,0

print "end."
end
--------------------------

■Q&A

・アナログ車両でも自動運転できるんですか?

あまり大きい声では言えませんが、できます

DCPWMコマンドを使って下さい。在線検出については、S88がそのまま使えます。ただしフジガヤさんのS88 Detectorを使った光式かリードスイッチ、接触接点式が良いです。電流検出式では検出できない可能性もあるため(未検証)。

・なんかBASICと厳密には違うような?

BASIC風の記述を、内部でJavaScriptに変換しています。なので、JavaScriptをBASIC風に書いているのと同じです。このため、かなりのことがBASICで出来てしまいます。

・行数に制限はありますか

原則ありません。メモリのある限り、書いて下さい!

・MP3PLAYは、どこにあるMP3を再生するんですか?

FlashAir(SDカード)の中にあるMP3ファイルです。WebアプリのMP3一覧で表示できていれば、再生できます。
posted by yaasan at 21:03 | Comment(0) | 鉄道模型

DSbasic over DSair2 その6

今日は、DSair2に、本丸のS88に手を付けました。とりあえず、S88デコーダ(在線検出センサのことです。デコーダと言ってますがDCCデコーダのことではありません)に対応しました。

DSbasic_S88_1.png

■動作の仕組み

BASICコマンドで、
s88start
と書くと、S88の取得処理を0.5秒おきに始めます。(Arduinoスケッチが今回更新されてます)

S88センサのデータは、
s88get(センサ番号)
で取れます。センサ番号は、1〜16の16個分です。返り値で0は未反応、1は反応、となります。IF文などで分岐して、自動運転処理が書けます。

S88デコーダは1つまで繋げられます。これ以上は勘弁して下さい。ハード的な要因では無く、FlashAirとの通信やDCCパケット生成のパフォーマンスを保証するなどする必要があり、トータルでの処理的に増やせないためです。もちろん、自己責任の下、各自改造は自由です。

■ファームウェア

ダウンロードページ

■推奨するS88デコーダ

・フジガヤ2 S88 Detector
・Nucky s88-N Train Detector

※上記の機種以外でも、S88-N規格準拠であれば動作します。DesktopStationはS88-Nの使用許可を取得済みです。

------------------------------
s88start
testb = getacc(1)
test = s88get(1)
print s88get(2)
print s88get(3)
print s88get(4)
print s88get(5)
print s88get(6)
print s88get(7)
print s88get(8)
print s88get(9)
print s88get(10)
print s88get(11)
print s88get(12)
print s88get(13)
print s88get(14)
print s88get(15)
print s88get(16)
end
------------------------------
posted by yaasan at 08:42 | Comment(8) | 鉄道模型