So-net無料ブログ作成
検索選択

S88 Detectorを作る その1 [自動運転]

 かわね路号は11月1日にお店を出荷とのメールが来たので、SoundOptionの件は、そこまでやらないことにした。
 少し前にYaasan様からBEMF対応のSmileDecoderをいただいたのだが、まだ作っていない・・・。
 その時に、ArduinoでS88の検出器を作ってみたいと思っていますというメールをしたら、まえ途中まで作ったのがありますので、ご自由にお使いくださいと図面をいただいた。
 制御部分については、どういう風に作ろうと思っていたかというと、rudysmodelrailway様のスケッチ(Arduino used as a 16-sensor S88 detector board)をベースにLEDのOnOffと検出部分を作るつもり。
 このとき、検出器は、前作った通りに4線(LED_ONOFF(A0),+5V(A1),SIGNAL_IN(A2),GND)で繋ごうと思っていた。せっかくだから線路下の基板も0.8㎜厚とかで作ろうかと思っている。多分TomixのS70用になると思う。
 信号センサ部(Fujigaya).PNG
 Yaasan様から3線(LED_ONOFF,SIGNAL_IN,GND)でできると思いますよとのことで、以下の5Vをオープンコレクタでやる図面をいただいた。3線だと、オーディオ用の3.5mmジャック系の線が100円ショップのが使えて、安いからとのことだった。(確かに4線ある3.5㎜のは300円ぐらいから始まり高い)
 PCDetector_Parts.PNG
 ただし、動作確認はしていませんとのことだった。

 で、まずは、秋月のTPR-105とユニバーサル基板とを線路につないで、ArduinoUnoで試してみることにした。
 TPR-105の線路への感じは以下。
 DSC00279-1.jpg

 適当に、LEDをオンオフさせながら、Yaasan様のデフォルト抵抗値で信号がデジタルで取れるかやってみた。残念ながら、だめだった。
 デジタルでやっていても難しそうだったので、まずはアナログでやることにした。
 以下がその時の写真。
DSC00278-1.jpg
 SIGNAL_INをA0(Analog_In)に繋いで、LED_ONOFFをしながら、信号がどのように変わるかを確認すると、LEDがOnだろうがOffだろうが、電車がセンサの上にあろうがなかろうが、ずっとHighっぽいことが分かった。
 ということで、パラメータとして動かせそうな、LEDの電流制限用の抵抗470ΩとSIGNAL_INの5Vに吊っている6.8kΩの抵抗を変更してみることにした。TPR-105のLEDは50mAが電流MAXとのことで、470Ωだと、LEDの電圧降下を1.2Vとして、8mA程度流れているようなので、220Ω(17mA)、100Ω(38mA)で、抵抗を下げるほど、明るくなり(スマホのカメラは安物で、赤外線が見える)、車両がフォトリフレクタの上に来たときの反応もよい。しかし、LEDに20mA以上流すのはなんとなく気が引けるのと、将来的に、S88 Detectorボードで複数のLEDを駆動させるわけだが、そうすると、電流は少ない方が良い、と思ったので、220Ωで17mAとした。
 で、次にオープンコレクタ入力をするところの抵抗だが、6.8kΩよりも大きくすれば大きくするほど、反応が良くなることが分かった。また、車両の裏を白くすると(今回は両面テープを貼った)、反射率が高くなり、検出がやりやすくなるが、できるだけ、車両への加工(底面を白く塗るなど)はしたくないと思う。
 車両の裏に両面テープ(反射率をよくするため)の写真。
DSC00280-1.jpg

 以下がその時の表。On、OffはLEDのOn、Off。値はArduinoUnoのA0をAnalogInputで読み取った値で(0~1023)が(0V~5V)。
車両無いとき 車両あるとき 車両テープあるとき
抵抗 offonoffonoffon
6.8k 98599110239521020600
22k 91789910238001014 33
66k 7076521021395 998 21
88k 6866371021406 996 20
110k 5225261021 90 986 19
154k 4072931018 32 970 17

 車両がないときと、車両があるときに明確にパターンが分かれればいいとおもう。
・表の中で、水色の感じなら、車両がないときはLEDのOn.OffにかかわらずHighとなりそうだ。ただし、ここは、環境光の影響をもろに受け、太陽光がもっと差し込んだ時間では、154kΩのとき、Off:242,On:152などとなった。
・表の中で、黄緑色の感じなら、車両があるときはLEDのOffでHigh、OnでLowとなりそうだ。
 デジタル入力端子でやる場合は、オープンコレクタの吊る抵抗は可変抵抗(200kΩ or 500kΩ)にするのが良いだろうか?でも、アナログ入力でやるにしても、可変抵抗をつけておいた方が良さそう。
 アナログにするなら、ArduinoUnoは6ポートしか取れないが、LEDのOn,Offの差を取れるので、車両のないときは電圧差があまりない(最大200ぐらい)と車両のある時のLEDのOn,Off時の電圧差が大きい(800以上ぐらい)ととやればよいので、そのやり方が良さそうとなる。
 LEDで17mAも取るとなると、いっぱいセンサをつなぐと、5V系を結構使いそうとか、なんか、いろいろと考え中のまま、今日は終わり。

  

オハ47にC11の音を入れる [ds-DCCデコーダ]

 前回までで、とりあえずのC11の音はできたつもりになったので(細かいことを言うと、いくつかおかしいのだが)、車両に載せることにした。
 候補として、Katoのマニ36とオハ47を衝動買いしてしまっているので、両方分解してみた。わかったことは、マニ36の内部には柱が4本立っており、これを切らない限りSmile Decoder + アンプ基板386が入らないということだった。
 (貧乏性で車両の改造はできるだけ避けたい性分なので)無加工で行けるオハ47に入れることにした。
 オハ47のボディー外してこんな感じに入れようという構想写真は以下。
DSC00259-1.jpg
 で、毎度のごとく、EC用集電バネ6014を使って、室内灯部分から線を引き出して、配線したのが以下。(上の写真とトイレ?車掌室?の場所が反対になっているが)
DSC00261-1.jpg
 ただし、このままではボディーをかぶせたら問題があった。音が小さい。
 ということで、写真の形からスピーカーを裏返して上側に音が出るようにレイアウトを変更したら、いい感じに音が大きくなった。

 あと、デコーダー開発ボードでのデバッグ中に気づいたのが、ドラフト音を低い周波数で再生すると、高周波のピーピーする音が聞こえるため、アンプ基板386のローパスフィルターの定数を変えた。具体的には、R1=1.2KΩ、C1=0.1uF、遮断周波数は1500 Hzあたりになったようだ。気分的にピーピー音が小さくなっていると信じている・・・。相変わらず汽笛は汽笛に聞こえない音だ・・・。
 で、かぶせた写真が以下。もちろん、Smile Decoderもアンプ基板386もスピーカーも丸見えだが、細かいことは気にしない。
 DSC00262-1.jpg
 そして、これを引かせるつもりのとりあえずの機関車は、この10年前に安売りしてた(値段は忘れたが)マイクロエースのD51鶴マーク。で、DCC改造するための方法を調べて、「DCCで楽しむ鉄道模型応用編」とかも見てみたのだが、どうも、テンダー付き蒸気機関車のDCC化は面倒なことが分かった。ので、とりあえず、やめた。
 で、EF66にひかせることにした。(アーノルドカプラーのものは、それ以外はすべてVVVFスケッチにしていて、うるさいので使えない)
 動画はこちら。なにか、ちょっとEF66がかわいそう。EF66の電気機関車の音も入っているのでわかるとは思うが、蒸気の音は結構小さい。

 あと、一度、集電が切れると、ドラフト音が切れるとか、(ほかのファンクションの音は切れないのに)、なにかバグっぽいものがあるが、それについては、おいおい、調査していきたい。
 あとは、かわね路号が来たら、C11はDCC改造するつもり。(テンダーじゃないからきっと楽だと信じて。)

C11のサウンドオプションの作成 その3 [追記あり] [ds-DCCデコーダ]

 せっかく音をとってきたので、ドラフト音?以外も入れてみた。
F1:ドラフト音のOnOff(Onしているときスピードに合わせて鳴る)
F2:短い汽笛(音がいまいち)
F3:止まっているときの減圧している音か?のOnOff(Onしている間中鳴る)
F4:ブラスト音(4秒ぐらいなって止まる)
 前回(その2)は1秒にDCC processを50msec二回しか入れていなかったが、今回からレスポンスをよくするように、100msec 2回に変えた。これでレスポンスは良くなったが、ドラフト音を鳴らす時間が減った(428msec * 2回→368msec * 2回)ので、前よりも音が寂しくなっている(いちばん後ろが切れている)。
 また、F3(減圧音っていうのか?)もドラフト音同様にファイルを二つにして、時間をケチっている。
 ブラスト音は切れ目なく出続けていたので、4回切れ目なしのリピートにしている。
以下が動画。


 大体、出来上がった気分で、次はこれをSLすぐ後ろの旧客車に載せようと思って、旧客車(オハ47マニ36)を買ってしまった。持っているグリーンマックスの板キットで集電するのは至難の業なので。
 スケッチはこちら(K2)。今回はROMの99%を使ってしまっている。まだSSSAdapterには対応していない。(対応させたらまた、音を削らないと・・・。)
 コマンドステーションだが、サウンドが鳴っている最中はファンクションを受け取れないため、D501Kato D101のように、スピードと一緒にファンクション情報も定期的に流れるようになっていたほうがうれしい。(持っていないけど)

<追記>
 ArduinoIDE 1.6.4でROMが足りなくてビルド出来ないとのことで、(私も1.6.4使用なのですが、他のライブラリかしら?)少々stop_sound1,2を少し小さく(0.05秒ずつ)したものをアップしておきます。スケッチはこちら(K3)
 私の環境ではROMの使用率は99%→97%になっております。
 


「アンプ基板386」頒布のご案内 [ds-DCCデコーダ]

 一応、elecrowで作った基板について、こちらにまとめておきました。
 名前は「アンプ基板386」としておきます。
 ほしい方がおられるかどうかはわかりませんが、一応、頒布の案内も書きましたので、欲しい方、なにかコメントのある方は、ご連絡ください。
 ただし、現状、電車に載せての確認を行っておりませんので、もう少し待ってからの方が良いかもしれません。(NJM386BDが最大18V、定格22Vなので、走行時のノイズなどで大丈夫かちょっと心配。)
 電車へ載せての確認は10月末を予定。Katoかわね路号 再生産を買って、客車に搭載予定。と思って、Katoのページを確認したら、発売予定が11月上旬に変更されている・・・。じゃあ、11月中旬かなあ。
 

C11のサウンドオプションの作成 その2 [ds-DCCデコーダ]

 その1で問題は、
・蒸気のリピート時のプツ音
・DCCのレスポンスの悪さ
 の二つと書いたが、今回、そのうちプツ音だけどうにかなったので、書く。
 なお(PAM8012より音は悪いが、せっかく12Vで駆動するものを作ったので)自作アンプ基板を使ってスピーカーを駆動させている。(SoundOption386という名前にするつもりだったが、よく考えると、これってアンプだけだしSoundOptionはYaasan様のほうでSmileDecoder+アンプ+スケッチなので、名前は考え直す予定)
 音はこんな感じでプツ音が解消している。

 
 まず、Yaasan様からコメントいただいたとおりに、Audacityで始めと終わりを無音にした。これで試したが、終わり側のプツ音は消えるが初めのプツ音は消えないという現象になった。
 で、音を鳴らす心臓部に当たる割り込みのISR(TIMER1_COMPA_vect) 命令の中身を見ると、
// Ramp down to zero to reduce the click at the end of playback.
とコメントで書いてある。
 たぶん、「再生の最後のクリック音を小さくするために0に(Duty比を)減少させる。」
ようだ。つまりフェードアウト。
 これを音の鳴り始めにも入れればいいということで、スケッチにフェードイン部分も付け加えるように書き換えた。(そのままの形の改造は難しいので、全体的にステートマシンっぽく書き換えてしまった)
 音の最初と最後はAudacutyですでに無音にしているので、これをデータで見ると、128となる。
Duty128(Max255)なので電圧的に、2.5V相当だと思われる。
 サウンドの開始では、0V(割り込みなし)→2.5V(タイマー割り込み開始で無音相当)と急に電圧が変化するためプツ音となると考えた。
 終わりのところも2.5V(無音相当)→0V(タイマー割り込み止め)のため、(実際はもともと上記のものが入っていたためプツ音にはならなかったが)プツ音になるようだ。
 これを避けるためにまず音の鳴り始めにDutyを0(0V)→128(2.5V)と徐々に高くして、そこからサウンドを再生させ、サウンドが終わった最後に128(2.5V)→(0V)と徐々に電圧を下げてやった。
 また、サウンド(蒸気)をループさせる間にDCC Processを入れて、速度やファンクションを読み取るため、その間は無音になる。
 もともとの蒸気音のループは約1秒なのだが、ループ間にDCCProcess用に50ms、フェードイン、フェードアウト用に32ms(フェードイン時間:128*125usec、フェードアウト時間:128*125usec)として、蒸気音を925msecに変更した。
 これで、リピートさせても、リズム的に違和感なく再生するようになった。
 現在「しゅっしゅっぽっぽ」と鳴らしてからDCC processに行くようにしているが、「しゅっしゅっ」→DCC process→「ぽっぽっ」→DCC processとすれば、もう少しレスポンスが良くなるかなあと思っている。また、警笛などを「しゅっしゅっぽっぽ」となっている最中に、(もちろん蒸気音は止めて)鳴らしたいと考えている。
 ということで、まだやり途中。 ソースはこちら

elecrowから基板が届いたので作ってみた [ds-DCCデコーダ]

 9月25日にelecrowから出荷したというメールが来て、10月6日(火)に書留で郵便局から届いた。出荷メールから11日。結構待ち遠しかった。
DSC00252-1.jpg

 で、予想通り、一枚の基板に10面付けされており、10枚あるので、100個片ある・・・。数日前に秋月電子から部品だけ買っており(5個分)、さっそく、作ってみた。
 見た感じはこんな感じで、SmileDecoderとほぼ同サイズ。DSC00253-1.jpg

 ただし、はんだ付けしやすいように2.54㎜ピッチの部品で作ったので、高さは結構高い。7mmぐらいある。コンデンサは高さをケチるために100uF品を使った。基板も高さをケチるために、1.0㎜品にしてある。小さい基板なので反りなどは見られない。
 DSC00254-1.jpg

 出来上がったので、さっそく音を出そうとしたが、鳴らない・・・。焦りながらいろいろいじってわかったことは、ボリュームの大小の方向を間違えていた。最大(時計回りいっぱい)にすると音は最小で、最小(反時計回りいっぱい)にすると、音は最大になる。
 始め音が最大のところで、割れてしまい聞こえなかったようだ・・・。スピーカー壊れなくてよかった。
 あとは、抵抗を22Ω(8KHzぐらいまで出るLowPassフィルター)にしたせいか、ボリュームの実用的な可変範囲が時計回りいっぱいに回したあたりから10°程度しかない。自分で作ったものだし、まあいっかと思った。(自分に甘い)
 そして、この後、SoundOption C11と組み合わせて、実験は続く。

C11のサウンドオプションの作成 その1 [ds-DCCデコーダ]

 せっかくSLの音をとったので、スロットルにリンクする蒸気音を出そうと思った。
 はじめは、サンプリング音の速さや周波数を簡単に変えられそうな、Mozziを使おうと思った。Mozziの中の例に、08.Sample のSample_Loop_Points というのがあり、なんか、ほぼこれで行けそうだと思ったのだった。
 しかし、このMozziのSampleライブラリは、サンプリング音のフォーマットが少々Arduinoの標準?(8kHz、8bit undigned int)からずれた、16kHz、8bit signed intで、変換がとても面倒くさい。
・SOX(Sound Exchange)で、8bit signed intのWavファイルを作って、
・Pythonを使ってArduinoに読めるヘッダにするらしい。
で、SOXはコマンドラインで変換するツールで日本語の解説はほとんどないし、Pythonはダウンロードはしてみたものの、なんか、使いにくかった。(いくつか説明しているサイトを見たのだが、使い方がよくわからなかった。)。Wavからヘッダファイルを生成するルーチンを自分で作ろうかと一瞬思ったが、始めると時間がかかる割に、大したものできなさそうだし・・・。朝からやって、ここまでで、夕方になってしまった。残念。
 ということで、まずは、音だけ出ることを確かめようと思って、SoundOptionのとおりに加工した。「シュッシュッポッポ」で繰り返しかなあと思って、以下のように切り出した。たぶん動画の場所としては、バカでかいトーマスが迫りくる辺りの音だと思おう。


(途中、Audacityの使い方を学びつつ)音が出るかを確認した。
 で、無事、Arduinoから音が出た。
 こうなると、次は、DCCの速度信号で蒸気音のスピードを変えたくなった。SoundOptionの元ソフトのF4部分を蒸気音に変えて、On状態の時はずっと出るようにして、速度が2以上になると、速度に応じて蒸気音が鳴るようにした。以下が動画。


 塗料皿の下にスピーカーがあり、皿がエンクロージャー代わり。アンプはPAM8012に200Ωのローパスフィルターと10Kオームの可変抵抗をつないだ後の信号を増幅している。(標準的なPAM8012+Nゲージ用スピーカーでは、スピーカーが熱くなっており、使えなさそう)

 今の問題は、「プツ」音とDCCレスポンス。

 サンプルの繰り返しのところに「プツッ!」という音が入る。
 また、サンプリング音を遅らせないようにするため、Loopでは、サンプリング音終了後、DCCプロセスが33ms入ったあとすぐに、サンプリング音の再生(約1秒間)としているため、結構、DCCのパケット受信は取りこぼしているようで、リアルタイムには程遠いぐらいのレスポンスになっている。(2~3秒後にやっと速度を受信するとか)
 音の長さの調節は#Defineで宣言されていたSample_rateを変数化して、少々周波数は遅いときは低く、速いときはちょっと高くと音階が変わってしまうが、大体よさげに聞こえている。
 スケッチはこちら。(適当版です)
操作方法:
 F2:115系のAlertが鳴る
 F3:E211系のAlertが鳴る
 F4:C11の蒸気音がなる。F4をOnにして、スロットルを上げると速度に応じた蒸気音がなることになっている。(あと、このスケッチはモーターは接続しない)

 いろいろ試行錯誤して直らないようなら、DSDec2個使いで音を制御するか?(一個はDCC受け取り専用で、ソフトウェアシリアルでつないで、2個目はサンプリング音出し専用かな。)
 
 

大井川鉄道に音をとりに行く

 ずっと前にArduino ProminiでPWMDAC_Synthを使って和音の曲を奏でる。記事でいつか、かわね路号を買って、蒸気の音を入れてと、言っていたのだが、やっと、大井川鉄道に行った。日帰りで車で400km以上走った・・・。楽しかったからよかったけど。
 で、まず、トーマスを川根温泉道の駅で撮った。11:12に来るとのことだった(ずっとそうなのかは知らない)。一眼レフのガシャーガシャー音が入ったら嫌だと思って、映像的に微妙な場所から撮っている。
 地元のミカンが売っており、おいしかった。


 巨大なトーマスにどこかの小さな子ががおびえていた。私も確かに巨大で怖いと感じた。
 道の駅には、食事できるところがなかった。今度はコンビニでおにぎりを買っていこうと思った。

 次に、塩郷の吊り橋に行った。揺れるし、高いしで子供も私も大喜びだった。
 そして、千頭駅のトーマスフェアに行った。(2015/10/12までのようだ)
 MECYさんからディーゼル音がという話があったが、近くにディーゼル機関車がなく、どういう音かわからなかったので、まずは、井川線のDD205のディーゼル機関車の音。トラックみたいな音ね?

 せっかくだから、走り出しも撮った。


 次にトーマスの補機のE102の音。駅に止まっている最中ずっとうなっていたが、何の音かわからない。走っているときも似たような音が出ている気がする。



 あとはトーマスが止まっているときの音。(なんでこういう音なのかは知らない)

 トーマス発車の音。(実際に感じたのと違う音になっている。音が大きすぎたのかも)

 C11のバックの時の音。

 C11の手動ターンテーブルで方向転換

 C11 補機 E101の音。



 
 これらから音をとりだして、Katoのような夢のサウンドカードができないか、試行錯誤してみるつもり。

SSSAdapterの対応 [ds-DCCデコーダ]

 Yaasan様の記事で、スマイルアダプターでCV値を読み込めるようにしたとのことで、Designer_ID(228)もいただいたので、VVVF+MelodyスケッチをSSSアダプター対応とした。スケッチはこちら。(Melody部分は動くことを確認したが、モーター部分は未確認。)
 使った感じの画面キャプチャはこちら。
SSSAdapter.png

気を付ける点としては、
・ソフトウェアシリアルのbpsを9600にする。
・LFをつけること。(”改行なし”にすると、うんともすんとも言わない)
・aParam1,aParam2が必要な命令は最後に","(カンマ)をつけること。
 例えばCV1を読みたいときは"RD,1,"とする。
 CV1を10にしたいときは、"WR,1,10,"とする。
 カンマを忘れると、CV値が255とかに化けます。(化けた結果が見えるのでわかる)
・CV3,4が出てくるが、VVVF+Melodyスケッチでは現在未使用。

 これはうまく使えば、VVVF配列をCV値化することが可能だと思う。
 一緒に、motor_func.cに入っていたMotor_PI命令(たぶんPI制御するための関数)の方も気になった。