So-net無料ブログ作成

DCC/MMシールドとDSOne向けDSjoyスケッチ修正 [DCC/MM2シールド]

 いつの間にか大みそかになってしまいました。皆さん、今年は良い年でしたでしょうか?まあ、人生いろいろかとは思いますが、来年はいい年でありますように、と久しぶりに切に願っております。
 で、タイトルのとおり、DSMainR5に続き、今度はDCC/MMシールド向けDSJoyスケッチの修正です。一応イメージ写真です。
re_DSC02195.jpg
 今までは200msごとに呼んで、複数台のコントローラがあるとウェイトが10msで複数命令をDSCoreに出しておりましたが、こちらも100msごとに呼び一回に一つの命令だけDSCoreに飛ばすように変更しております。一応2つまでS88Masconはつなげるようにしておりますが、ArduinoUnoの三端子レギュレータで12V→5V変換をすると、手で触れないぐらいの熱さになりますので、あまりお勧めしません。
 DCC/MMシールド向けソースはこちらです。
 DSOne向けソース(DSJoyR2d4)はこちらです。

 

コメント(0) 

DSMainR5のDSJoy部分のバグ [DSmainR5]

 Yaasan様が私の年賀状イラストをPaintChainerでAIに着色してもらったら、わりとちゃんとしていたというとことで、画像を下さったので載せます。ちゃんと私の絵を犬と認識できたということでAI偉い!と思いました。犬の影が赤い(血だまり)のよう見えるのがちょっと気になりますが。
K9CJCTOSW96OPSWJN58PQUAN4UVBI40D_0.jpg
 で、お正月の大型連休に入りましたので、鉄道模型を再開です。
re_DSC02194.jpg
 今回は、クモハ40とクモハ12の複線レイアウトで、S88Masconを2台つないで、子供がやるハードな運転の再現です。・・・少し前から気になっていたバグの部分です。
 DSMainR5にS88Masconを2台つないで両方とも割とハードに加速と減速を続けると、DSMainR5の電源供給が突然途絶えたりErrorLEDが消えたり、と心霊現象が起きます。(いや、単なるバグです)
 で、最新のソフトを使って確認しました。ファームも最新(DSCore(R5.1)R2)です。私の持っているのはDSMainR5なので、電流制限部分はちょっと変更しますが。
 で、この状態では、S88Masconで上記のバグが再現します。
 現象として、線路電源供給がOffしたり電流制限のErrorLEDが点いても、DSMainR5のNanoからの@で始まる状態のシリアル出力では、それにあたる命令がでたというのは確認できないし、もちろんS88MasconでもPowerOff命令は出していませんでした。
 現状ではDSMeister.inoのloop関数内で、DSjoyは100msに一回割り込みをもらって、2個S88Masconをつないでいる場合はここで、2命令を連続でDSCoreに投げます。
 なんとなく以前に言っていたDSCoreに命令を一度に送りすぎるとバグるという現象っぽい、ということでいくつか試してみました。
(1)DSJoyの100ms割り込みを200ms、400msなどに変更してみる。→現象は変わらないので、多分連続送信がダメっぽい。
(2)DSJoyの100ms割り込みでS88Masconの命令を一つだけ送るように変更してみる。つまり、S88Masconを二つ繋いでいると、1周期に200msかかる。→バグらなくなった。
 ということで、DSCoreへの連続送信をやめることで、心霊現象(バグ)は起きなくなりました。
なので、loopをちょっと汚いですが以下のように変更したら、大丈夫になりました。
ソースはこちら。(DSMainR5用です)
 今後、DSOneなどでも同じルーチンを試してみようと思います。
---------------------(抜粋)
//DSJoy用スケジューラ
int dsjoy_int = 0;

void loop()
{
	
//省略
  if( (millis() - gPreviousL6) >= 100)
  {
    if( Sequence.GetRJ45Mode() == RJ45MODE_DSJ)
    {
      // S88  
      if(dsjoy_int == 0)
      {
        reporter.refresh(MAX_S88DECODER);
      }
      
      // データ処理 

      //for( int i = 0; i < MAX_S88DECODER; i++)
      int i = dsjoy_int;
      {
        uint16_t aData = (reporter.getByte(i * 2 + 1) << 8) + reporter.getByte(i * 2 + 0);
        if(i == 0)
        {
          //SerialDS.print("s88_raw:");
          //SerialDS.printHEX(aData);
          //SerialDS.println("");
        }
				
        if( aData != 0xFFFF)
        {
          // S88データをジョイスティックプロファイルに読み替え処理 
          DSJoy.SetData(i, aData);
        }
        //else
        //{
        //	break;
        //}
        i++;
        if(i == MAX_S88DECODER)
        {
          //最大数まで行った
          dsjoy_int = 0;
       	}
        else if(0xffff == (reporter.getByte(i * 2 + 1) << 8) + reporter.getByte(i * 2 + 0))
        {
          //次が接続されていない
          dsjoy_int = 0;
        }
        else
        {
          //次がある
          dsjoy_int ++;
        }
      }
    }

    //Reset task
    gPreviousL6 = millis();
  }
//以下省略
}

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

コメント(4) 

年賀状を書いていた [その他]

 さて、会社の忙しい時期は一度終わったのですが、年賀状やらクリスマスやらのやらなきゃいけないことが溜まっているため、年末まで鉄道模型はお預けです。
 とか言いながら他の遊びは再開しています。今週末はまずスターウォーズのエピソード8を見に行きました。うーん。詰め込み過ぎですね。まあ、ロボットとか戦闘とかいっぱいで、それはそれで面白かったですが。前作同様、心の中で映画の時間が長いなあ・・・と思いながら見ていました、で、次に鎌倉ものがたりを見に行きました。少し前から江ノ電がキャンペーンをやっていて、300形の行先標が「黄泉」、「現世」となっていて、かなりこの電車縁起悪いなあと思っていたのですがそれの元ネタになります。映画の中では、鎌倉と江ノ電の説明が入るためちょっと違和感もありましたが、主人公の一色先生がHOゲージが好きで、テンショウドウの電車やタンコロを走らせて喜んでいました。まあ、映画は面白かったです。知っている風景がいっぱい出ていたので楽しめました。タンコロも出てきたし。
 で、その後は、25日までに出さなければいけない年賀状です。親戚に出す年賀状は写真の物なので宛名を書くだけですが、子供が友達に出す年賀状は、子供がイラストを描いて私がプリンタで印刷してという感じです。で、大人げなく子供に対抗して私もGoogle検索などでネットから絵をパクりつつ少しオリジナリティーを入れて年賀状を作ってみました。
戌年.jpg
 渾身の作(30分ぐらいかかった)だったのですが、子どもからは総スカンを食らいました。まあ、普通に考えて自分で書いた絵を使いたいですよね。この絵はもちろんお蔵入りです。こんな乙女チックなのはわたしの知り合いには出せませんし。で、土日が終わりました。

コメント(0) 

クモハ40(HO)をプレゼントするらしい [その他]

 かなり、釣りのような題名ですが、DesktopStationの電機屋の毎日様のBlogで、DCC電子工作連合の部品を使った作品を応募すると、クモハ40(HO)がもらえるかもとのことです。微妙に9位を取るというのは難しいような気もしますが。
 なお、私の近況ですが、昼の仕事で精神的に疲れているため、模型はお休み中です。そのせいで、クリスマスプレゼントが溜まっております・・・。冬休みに手を付けていこうと思います。(いや、それ以外もいろいろと片付いていないことがありますねえ)
re_DSC02193.jpg


コメント(0) 

タンコロ祭りに行った。 [その他]

 どうも仕事の調子がかなり悪いので、引きずられて、趣味も低空飛行です。
 土曜日は子どもと江ノ電のタンコロ祭りに行きました。上の二人は行かないと言ったので、一番下の息子と二人です。
re_DSC02171.jpg

 土曜日の10時開場してすぐぐらいに行ったので、ミニ電車とかはとても混んでいましたが、まあ子供も興味を示さないの乗りませんでした。
 展示されている車両はタンコロだけで、今回は車庫内部も公開していないし、他の電車も止まってなく、少々さみしい感じでした。
 物販では、踏切の手前のバッテンに光るあれが売っていました。1000円です。すごく欲しかったのですが、鉄道模型同様、家の中に置いたら、多分押し入れの奥にしまい込んで・・・だろうなあと思ったので、ぐっとこらえて買いませんでした。重さは軽かったので家に持って帰るのは可能でしたが。
re_DSC02169.jpg

 あと、踏切の赤いランプも売っていました。1個2000円って、バッテンより高いのがちょっと私にはわかりませんでしたが、まあ、一般的にはこの値付けのほうが正しいんでしょうね。
re_DSC02170.jpg

 前回はJR大船の車両基地で何か所も運転席に乗りましたし、その前は大井町の車両基地で洗車体験もしましたので、今回、子どもはかなり物足りなかったようで、早々に帰りました。まあ、江ノ電ですしね。
 なんか、家の近くなのに鎌倉方面は余り乗らないので、行き帰りの腰越~江ノ島の併用軌道はいつも通り車窓が楽しかったです。
 
コメント(0) 

DNOSを試す。

 かなり、仕事が嫌な感じになっていますが、そんな休日に関係のないことは置いておいて、Yaasan様のDSShieldです。まだ、Wikiのほうは部品図しかないです。
 今週は都内への出張があったので、Aitendoに寄ってびんぼうでいいのを買いました。
 で、DSShieldと記念撮影です。
re_DSC02151.jpg

 なおこの写真ではATMEGA328Pを取り忘れています。びんぼうでいいのはフルで揃えると大体1000円ぐらいで「組みあがっていないArudinoUno」なので、普通に買うならAliとかで中国から300円ぐらいの互換完成品を買ったほうが貧乏人には優しいのではないかと思います。なお、以前に私が買ったものはクリスタルのはんだが不良で直してやらないと動きませんでしたが。
 で、生ATMEGA328P-PUを買ったので、こっちはブートローダーを書き込んでおきます。
re_DSC02152.jpg

 そして、aitendoの写真の通り半田付けして、Lチカが動くことを確認しました。
re_DSC02153.jpg

 次に、DSShieldの組み立てです。
re_DSC02154.jpg

 抵抗の読み方を思い出すのが面倒なので、テスターで抵抗値を測ったり、しながら作りました。
 で、完成です。すでにびんぼうでいいのにくっつけています。
re_DSC02155.jpg

 Trackoutの所がArudinoのACアダプターに干渉します。と思ってYaasan様のBlog見たら、干渉してますね。
 re_DSC02156.jpg

 抵抗が1/4W品だと立てないとはんだ付けできません。基板スペースにも余裕ありますし、出来たら、寝たままはんだ付けできるようになっているといいかなあと思います。
re_DSC02157.jpg

 で、せっかくS88も動くとのことで、BlogのスケッチのうちDSOneのほうを入れて動かします。
 動きました。
 で、S88を試そうと思って、HO用のセンサーレールを探しましたが、一個しかありません。作るのも面倒なので、一個で自動運転することにしました。
 全景はこうです。
re_DSC02159.jpg

 とりあえず、システム名はTomixのTNOS(TOMIX Traffic model New Operation control System)に対抗して、DNOS(DesktopStation traffic model New Operation control System)と思いましたが、かなりバッタモン感が強いので、きっとYaasan様がもっと良い名前を考えてくれることでしょう。「トマランコンデンサ」のように。
 話が脱線しましたが、システムは
 PC(自動運転スクリプト)-DSshieldーS88-センサ1
とつないでいます。
 今回、自動運転されるのはゴードンで、Mp3V5にSLスケッチを入れています。
 言葉で説明すると、運転は汽車が走っていて
(1)センサ1を踏んだら止め、進行方向を前進にしておく。
(2)プシュプシュ音を出す。(ファンクション6 On)
(3)汽笛をならす。(ファンクション8 On)
(4)シューシュー音を鳴らしながら走り出す。(ファンクション5 On)
(5)10秒くらいで止める。
(6)大人の事情で使ったファンクションをすべてOffに戻す。(ファンクション6,8,5をOff)
(7)大人の事情で、音を止める。(ファンクション14をOn,Off)
(7)進行方向を後進にして、バックでセンサ1へ向かって走り出す。
を繰り返します。
スクリプトを貼るとこうです。センサ1の「在線」で駆動するようにしています。(たぶん「進入」でも良いと思います)
----------
DESKTOPSTATION,SCRIPT,2013
SPEED,0,0,20
DIRECTION,0,1,0
WAIT,20,,0
FUNCTION,0,6,1
WAIT,20,,0
FUNCTION,0,8,1
WAIT,20,,0
FUNCTION,0,5,1
SPEED,0,300,50
WAIT,50,,0
SPEED,0,0,20
FUNCTION,0,6,0
WAIT,10,,0
FUNCTION,0,8,0
WAIT,10,,0
FUNCTION,0,5,0
WAIT,10,,0
FUNCTION,0,14,1
WAIT,10,,0
FUNCTION,0,14,0
DIRECTION,0,2,0
FUNCTION,,,0
SPEED,0,300,50
----------

動画はこんな感じ。大人の事情で手前での方向転換時にファンクションが鳴り響いています。


 今回DesktopStationのソフト095bを使用したのですが、(最新で変わっているかもですが)digitrax系のプッシュボタンファンクションにスクリプトを対応していただけると嬉しいです。(ファンクション命令をだすと、On,Offでなく、トグルになってくれるやつ)


コメント(2) 

Mp3デコーダでディーゼル音のための実験2 [ds-DCCデコーダ]

 さて、今週も一応やってみたのですが、ほぼ進んでいません。
 かなり久しぶりにMp3デコーダとDSBlueBoxを引っ張り出してきて実験です。
re_DSC02149.jpg
 浦島太郎です。スマイルコネクタ経由でのMp3デコーダへの書き込みでエラーがでてパニクリそうになっていました。
 一回目は失敗するお約束でしたね。
 で、まあ、サンプリングした音0.5秒の繰り返しで以下です。音は、加速中の一定音のところです。このあともうちょっとスピードが上がると、速度比例の音に変わったような気がします。


 位相を0.25秒ずらして2音だとこうでした。


 位相を0.16秒ずらして3音にしたらこうでした。


 うーん。あまり変わらないので、1音でいいかという感じです。

 問題はこっちではなくて、加速時の音階です。
 0.5秒、16kHzサンプリングデータのデータ数が8000個ほどなのですが、現在のデータのアドレスを小数指定するためのUnsigned intで扱える長さは65536個です。
音階を変えるときは8000データを65536個を超えない2の乗数で小数扱いするのですが、65536/8000 = 8.192で、整数以下は8分割しかできません。
 つまり、元サンプリング音の周波数と倍の周波数の音までの刻みが8個しか取れません・・・。
 ほぼ、ピアノの白鍵盤音階と一緒なので、スピードを変えると離散的にドレミファ・・・みたいに
音階が変わっていきます。キハはドレミファじゃないんだが・・・。
 もちろん、unsigned longにしてしまえば4,294,967,295まで扱えるらしいので、この問題は解決のような気がするのですが、なんかunsigned longにしたら、どうも音のデータでないところまで参照を始めてしまいFAXのような音がします。バグっています。
 一度Mp3デコーダでのヤマ勘実験はやめて、シリアルで確認しながらやった方が良いかなあとちょっと思いました。
 さて、先は長そうだが、時間がない・・。

コメント(2) 

Mp3デコーダでディーゼル音のための実験1 [ds-DCCデコーダ]

 さて、3連休でしたが少々仕事が忙しくてあまり休めませんでした。なんかこういう状態が年度末(3月)ぐらいまで続きそうな感じです。嫌ですね。
 で、私もホビセンのジャンク市に行きたいなあ、C56欲しいなあと思いましたが、少し前のディーゼルで盛り上がっているときに予約していたものが、心が少々冷めた後に届いており、
re_DSC02148.jpg
 キハ58とDE10にはデコーダ入れたいし、そのためにはなんか、ちょっともう少しちゃんとした音にしておきたいというのもあり、実験です。(測色センサはどうなった?という突っ込みはしないでください。また気が向いたらやろうと思います)
 ですが、今日はAudacity(WindowsのWAVをいじれるソフト)上で音を確認しただけです。
 八高線のキハ110は音としては、低速時は一定の高音が続き、そのうちギアがつながったように低音から高音まで音が変わるという感じのようなのですが、いわゆるバスとかのディーゼル音ではなく、ヒューンいう音なので、今の疑似音の仕組み(0.5秒ぐらいの音を振幅で±0になるところで切り出して、それをリピートさせて音を出しつつ周波数を変えて回転数を表現)だと、どうも音のつなぎ目が分かってしまい、違うよなあと感じていました。
 音で言うとヒューンヒューンヒューンと0.5秒周期ぐらいで鳴り続ける感じです。まあ、電車でGo!の気動車でもそんな感じの音が鳴っているようなもしますが。本物はヒュー――――とずーっと同じ音が鳴っています。
 今回は、音のつなぎ目がなくならないかなあと思い、このサンプリングした0.5秒周期の音を、位相を0.1~0.2秒ぐらいずらしていくつか一緒に鳴らすといい感じにならないかなあと思って、実験をしました。
 まずは、適当に音を0.5秒切り出しです。今回の音は近くで女子高校生がしゃべり続けていたため、音を切り出せる場所がかなり限られてしまいました。会話は、「みやぞん」がどうのこうのと話しているのですが、テレビに出ている「みやぞん」のことなのか、だれか友達のあだ名が「みやぞん」なのかはよくわかりません。(どうでもいいよなあ、そんなことと思いながら、どこの音が切り出しにいいかなあと思いながら何度も繰り返し聞いていると、その話が聞こえてきてしまって。)
切り出し部分.png
 会話の無い場所で、低速の高い一定音の所から切り出しています。
 Audacityは、適当に時間で範囲を選択した後、Zキーを押すと適切に時間的に近くの振幅±0の場所に直してくれます。
 そして、この状態でShift+Spaceを押してリピートで音を聞いてみて、いい感じ(音の印象が元と似ている、周期音が気にならない)なら、その部分をコピーします。
 で新しいプロジェクトを作って、貼り付けます。
切り出し後.png
 適当に音を大きくしておきます。エフェクト→増幅または正規化でしょうか?
 一緒に、音のモノラル化とサンプリング周波数を16KHzにしておきます。
切り出し後_モノラル_16khz_増幅(-4db).png

 で、本日のメイン部分、「位相を変えた波形を加えたら自然にならないか?」です。
切り出し後_モノラル_16khz_増幅(-4db)_位相変更重ね_勾配あり.png
 まずはリピートする波形は、つなぎ目が目立たないように時間中央は大きく、開始と終了の波形は小さくひし形の音量の波形にしてみました。で、これを位相をちょっと変えて4chぐらいミックスして音を聞いてみました。
 うまくいくと思ってやってみたのですが、どうも音量が小刻みに震えているようで、
 元々の波形ではヒューンヒューンヒューンヒューンと音が鳴っていたのですが、
 今回の波形ではヒュンヒュンヒュンヒュンヒュンと、どうもディーゼル音ではない何か違う機械音を作ってしまいました。失敗です。
 音量変えなくていいんじゃないのかと思い、次はそのままの波形をリピートさせつつ、何Chかミックスして聞いてみました。
切り出し後_モノラル_16khz_増幅(-4db)_位相変更重ね.png 
 今度はさっきよりいい感じです。ヒューーーーーにはなりませんが、ヒューヒューヒュー位にはなっています。
 ということで来週以降ここら辺の位相を変えつつ複数チャンネルでの音というのをMp3デコーダに入れてどんな感じか聞いてみたいと思います。
・ATMega328は16KHzで大体1秒ぐらい無圧縮のWAVを入れることができます。
・0.5秒はアイドリング音のWAV、0.5秒は走行時の音のWAVとして、走行時の低速(高音一定音)、高速(速度比例音)は、WAV波形の全体長さを加工して周波数が変わったように聞こえるようにしようと思っています。
・なお、マイコンに入る音の長さですが、前回のディーゼル音はIMA ADPCM(圧縮できる)で時間を贅沢に使ったのですが、波形が圧縮されているため、音のデコード時にときどき出てくる圧縮情報の読み取り部分と、WAV波形の全長を変える部分がおそらくバッティングして、そんなプログラムは書けないとおもったので、今回は普通のPCMを使用します。

コメント(4) 

S88 Button Decoderケース品切れ [S88]

 業務連絡です。
 委託販売しているYaasan様のS88 ButtonDecoderですが、現在ケース(未加工)が品切れです。基板は在庫あります。
 ケースもご希望の方がおりましたら、言っていただければ、中国に注文はしようと思います。
 よろしくお願いいたします。

コメント(0) 

突然、測色器を作ってみようと思ったんだが [その他]

 昨日はブレードランナー2049を見に行きました。ファン以外には全くつまらないと思いますが、わたし的には今年一番の映画でした。
 前作のブレードランナーは友達が面白いと言ったので、レンタル屋に借りに行って間違ってバトルランナーを借りて見て、友達に面白かったと言ったという少々恥ずかしい思い出があります。バトルランナーも面白かったんですよ。
 さて、本題ですが、ジオラマを作るときに橋とか地面とかの本当の色がいまいち分からないので、本物の物の測色をしたいと思っていたのですが、測色器は安くても数万円します。秋月にカラーセンサーモジュールが売っていたので、買ってきて、ArduinoNanoとくっつけて、動かしてみることにしました。
 はじめは、
(1)物を測色する。
(2)パソコン上で同じ色を作るようにしようと思って、モニターを測色器で測色しながらフィードバックさせて、モニターに同じ色を作る。
(3)モニターの色を見ながら、ジオラマ用の色を調合して塗る。
とか考えていたのですが、いろいろなサイトで同じようなことが書いてありますが、このカラーセンサーは強い白色LED光を当てて、その反射で計測するので、(2)の液晶の色味を見ることは難しかったです。
 白色LED光は消せるのですが、消した状態で、液晶モニターの色をみたら、(うちのノートパソコンのせいかもですが)青系は割と同じように変化するのですが、緑系は、ずれてきて、赤系は壊滅的に違う色に変換されてしまいました。ですので、水色とかはいい感じに測色して画面にも同じような色をだせたのですが、赤色はどす赤くなり、黄色は黄土色に、紫色は青でした。ということで、却下です。
 で、じゃあこうしましょうと次の策を考えて、
(1)物(橋とか砂利とかコンクリとか、木とか)を測色して、RGBをメモっておきます。
(2)Amazonとかから配色カード?みたいのを買ってきて、こっちも測色しながら近いものを探します。(色カードって高いものは1万円以上するみたいです。普通の測色器買えそうになってくるかも。)
(3)その色を調合して塗ります。
という感じにしようかと思います。写真撮ってきて同じ色にすればいいんじゃないの?と思う方もいるかもですが、写真で撮った物の色が晴れの日と曇りの日と朝と昼と夕方で違うので、そこをどうにかしたいと思っているわけです。
 で、まあ、これが今回の実験用のブレッドボードです。配線はまんまエイダフルートのものです。IntとLEDを短絡させて、I2C経由で白色LEDをOn,Offさせています。でいいのかな?
re_DSC02146.jpg
 スケッチもそこから落とせるライブラリのColorViewをほぼそのまま使っています。
余り速く測色しなくてもよいので、インターバルだけ
TCS34725_INTEGRATIONTIME_50MS → TCS34725_INTEGRATIONTIME_154MS
として、それに伴い、Loop内のDelayを
/delay(60); // takes 50ms to read → delay(200);
になんとなく変更しています。そんな必要あるか?
 また、受け側のソフトはかなり久しぶりに.netのVBで作りました。でも、COM通信部分でときどきエラーが起きます。なんだろう?
 一応、白をRGB=(255,255,255)、黒をRGB(0,0,0)にキャリブレーションする計算式を入れて、このTCS34725というセンサは照度?明度?みたいのも一緒に測っているようですが、なんかこの部分で色がいろいろと変になっているような感じもあるので、計算には入れないようにしています。
 で、ミカンを計ったら、ちゃんと、PCのほうでもミカン色になってはいます。
re_DSC02147.jpg
 が、キャリブレーションとかセンサと物の距離、角度などで、色味が結構変わってしまうため、これをまじめにやるなら、箱が必要です。
 ちゃんとそとで測るなら、電池とか液晶とか必要です。
 そこをやるのだろうか?どうしようか?



コメント(2)