F28コントローラ改造 バンク機能追加 [DCCコントローラ]
さて、数年前に作ったF28コントローラですが(もともとワンコインコントローラと言って作り始めた気がしますが、やりたい機能をいれていったら、いつの間にか、材料費500円で作れなくなっていた系統のモノです。
LocoAddressを変えると内部的に10個ぐらいそのAddressのファンクションを記憶しておくという機能はコッソリ入れていたのですが、そのアドレスが何かは外部からはわからない構造となっていました。
Locoアドレスをボタン一つで変えたいとの要望があり、一応、なんちゃって対応をいたしました。
通常操作モードからLocoボタンを押すとLocoAddressの設定モードに入ります。
今回の追加で、内部的にセーブされているLocoアドレスが入っているバンクだけ、バンクの0~9がLEDの16~25に対応して点滅します。例えば、バンク0にLocoAddress3がセーブされていると、16番のLEDが点滅します。そのボタンを押すと、そのLoco番号が表示されます。もう一回Locoボタンをおすと、その設定がロードされます。
ソースは、こちらです。
LocoAddressを変えると内部的に10個ぐらいそのAddressのファンクションを記憶しておくという機能はコッソリ入れていたのですが、そのアドレスが何かは外部からはわからない構造となっていました。
Locoアドレスをボタン一つで変えたいとの要望があり、一応、なんちゃって対応をいたしました。
通常操作モードからLocoボタンを押すとLocoAddressの設定モードに入ります。
今回の追加で、内部的にセーブされているLocoアドレスが入っているバンクだけ、バンクの0~9がLEDの16~25に対応して点滅します。例えば、バンク0にLocoAddress3がセーブされていると、16番のLEDが点滅します。そのボタンを押すと、そのLoco番号が表示されます。もう一回Locoボタンをおすと、その設定がロードされます。
ソースは、こちらです。
2022-08-28 12:11
コメント(0)
電車でGoコントローラで、ー走ろう山手線ーを動かす。 [DCCコントローラ]
さて、生存報告を兼ねてになります。少し前まで、RaspPiNanoを動かすのをコソコソとやっていました。しかし、Pythonはインタプリタなので、動かすと10msecレベルの時間がすぐにたってしまい、マイコンとしてどうなんだ?という感じで、C++で書くと、CMakeは必要だし、実行ファイルをダウンロードするためにいちいちUSBを抜き差ししないといけないしと、使い勝手が悪かったので、もう少し使い勝手の良いものが出るまで待つことにして、そっと押し入れにしまいました。
で、本題の「電車でGo!コントローラで、走ろう山手線を動かす。」ですが、先週ぐらいにやっとスイッチ版が出るということを聞きつけて、古いPS用の電車でGoコントローラをスイッチに繋げないかをちょっとネットで調べていたら、Arduinoだと、Atmega32u4だと、スイッチに繫げるらしいことがわかり、そうなると、少し前に作った、Mascon2kbdがそのまま使えそうだなあと思って、早速、ネットのスイッチ操作自動化の記事を参考に作ってみました。で、今週発売日にソフトを買いました。発売日にソフト買ったのって何年ぶりだろう?というぐらい、買っていません。
Arudinoをスイッチのコントローラとして認識させる用のライブラリは、以下を使用させていただきました。
https://github.com/celclow/SwitchControlLibrary
で、もともとの電車でGoマスコンのほうは、Yaasan様のを流用した自分のスケッチがあるので、そこら辺を使って、電車でGoマスコン(PSコネクタ)→スイッチのUSBと変換するスケッチを作りました。一応中身がこちらです。
接続イメージはこれですね。
で、今日一日ゲームし続けてみましたが、スイッチ版だけなのかどうか知りませんが、ロードが長いのがいまいちですが、ゲーム自体は面白いです。電車でGo!コントローラはワンハンドル版はNで止まりにくいので、加速とブレーキの境目が分かりづらく、パニックになると、運転がグダグダになります。きっと本物のマスコンはNできっちり止まるんだろうなあと思います。
その点、2ハンドルタイプだと、加速と減速のレバーが分かれているので、上手に運転できます。ですので、E235だろうと、私は2ハンドルで運転します。
あとは、マスコン操作(スタンダード)は最初E235とかなので、ワンハンドルの物のため、Lのアナログスティックの上下のみで操作なのですが、少しゲームが進むと、205系とかの2ハンドルタイプが出てきて、こちらはLの下押しで加速、Rの右押しで減速という、動きが違うそれっぽいものが出てきたので、PS→USBの変換部分もそれに対応するよう、ブレーキについては、Lの上側とRの右側を同時に出力するようにしておきました。加速や減速の段階のアナログ値がどれにあたるかは適当に現物合わせしております。
また、電車でGoマスコンはボタンが5つしかありません。それに対して、スイッチのコントローラはボタンが16個+アナログスティック2個とそのボタン押し込み、などがあるようで(スイッチの操作をあまりわかってなかったりするんですが)、それをそのまま割り当てるのはボタン数的に無理なので、最低限の機能で作りました。なので、途中終了や、ホーム画面へ戻るなどは単体ではできないです。USBから引っこ抜くと、コントローラを探し始めるので、その時にもともとのコントローラで戻ってもらおうというコンセプトです。(手抜き)
動作説明ですが、
<通常操作時>・・・運転時に必要な操作
電車でGoコントローラ:スイッチの本体側のボタン割り付け
マスコン減速側:Lスティックの上側、Rスティックの右側、緊急停止はZLボタンを押すようにする
マスコン加速側:Lスティックの下側
Selectボタン:Shiftボタンとする。
Startボタン:Xボタン
Aボタン:Yボタン
Bボタン:Bボタン
Cボタン:Aボタン
これは、画面上のボタン配置とワンハンドルマスコンの並びから考えて割り付けました。
次に、
<Selectボタンを押した状態(Shift状態)の時>・・・メニューでL,Rボタンとデジタルの上下左右の操作
電車でGoコントローラ:スイッチの本体側のボタン割り付け
マスコン減速側:目いっぱい動かしてRボタンを押す
マスコン加速側:目いっぱい動かしてLボタン押す
Selectボタン:Shiftボタンとする。
Startボタン:↑ボタン
Aボタン:←ボタン
Bボタン:↓ボタン
Cボタン:→ボタン
使い方としては、USB端子でスイッチに接続。
ホーム画面で、ボタンを適当に押して、1Pとして認識させて、Selectを押しながら、→↓←↑ボタンなどを駆使して、電車でGo!を起動させれば、行けると思います。
一応、ちゃんと動いたよという証拠に、動作の所だけこっそり動画を載せておきます。
で、本題の「電車でGo!コントローラで、走ろう山手線を動かす。」ですが、先週ぐらいにやっとスイッチ版が出るということを聞きつけて、古いPS用の電車でGoコントローラをスイッチに繋げないかをちょっとネットで調べていたら、Arduinoだと、Atmega32u4だと、スイッチに繫げるらしいことがわかり、そうなると、少し前に作った、Mascon2kbdがそのまま使えそうだなあと思って、早速、ネットのスイッチ操作自動化の記事を参考に作ってみました。で、今週発売日にソフトを買いました。発売日にソフト買ったのって何年ぶりだろう?というぐらい、買っていません。
Arudinoをスイッチのコントローラとして認識させる用のライブラリは、以下を使用させていただきました。
https://github.com/celclow/SwitchControlLibrary
で、もともとの電車でGoマスコンのほうは、Yaasan様のを流用した自分のスケッチがあるので、そこら辺を使って、電車でGoマスコン(PSコネクタ)→スイッチのUSBと変換するスケッチを作りました。一応中身がこちらです。
接続イメージはこれですね。
で、今日一日ゲームし続けてみましたが、スイッチ版だけなのかどうか知りませんが、ロードが長いのがいまいちですが、ゲーム自体は面白いです。電車でGo!コントローラはワンハンドル版はNで止まりにくいので、加速とブレーキの境目が分かりづらく、パニックになると、運転がグダグダになります。きっと本物のマスコンはNできっちり止まるんだろうなあと思います。
その点、2ハンドルタイプだと、加速と減速のレバーが分かれているので、上手に運転できます。ですので、E235だろうと、私は2ハンドルで運転します。
あとは、マスコン操作(スタンダード)は最初E235とかなので、ワンハンドルの物のため、Lのアナログスティックの上下のみで操作なのですが、少しゲームが進むと、205系とかの2ハンドルタイプが出てきて、こちらはLの下押しで加速、Rの右押しで減速という、動きが違うそれっぽいものが出てきたので、PS→USBの変換部分もそれに対応するよう、ブレーキについては、Lの上側とRの右側を同時に出力するようにしておきました。加速や減速の段階のアナログ値がどれにあたるかは適当に現物合わせしております。
また、電車でGoマスコンはボタンが5つしかありません。それに対して、スイッチのコントローラはボタンが16個+アナログスティック2個とそのボタン押し込み、などがあるようで(スイッチの操作をあまりわかってなかったりするんですが)、それをそのまま割り当てるのはボタン数的に無理なので、最低限の機能で作りました。なので、途中終了や、ホーム画面へ戻るなどは単体ではできないです。USBから引っこ抜くと、コントローラを探し始めるので、その時にもともとのコントローラで戻ってもらおうというコンセプトです。(手抜き)
動作説明ですが、
<通常操作時>・・・運転時に必要な操作
電車でGoコントローラ:スイッチの本体側のボタン割り付け
マスコン減速側:Lスティックの上側、Rスティックの右側、緊急停止はZLボタンを押すようにする
マスコン加速側:Lスティックの下側
Selectボタン:Shiftボタンとする。
Startボタン:Xボタン
Aボタン:Yボタン
Bボタン:Bボタン
Cボタン:Aボタン
これは、画面上のボタン配置とワンハンドルマスコンの並びから考えて割り付けました。
次に、
<Selectボタンを押した状態(Shift状態)の時>・・・メニューでL,Rボタンとデジタルの上下左右の操作
電車でGoコントローラ:スイッチの本体側のボタン割り付け
マスコン減速側:目いっぱい動かしてRボタンを押す
マスコン加速側:目いっぱい動かしてLボタン押す
Selectボタン:Shiftボタンとする。
Startボタン:↑ボタン
Aボタン:←ボタン
Bボタン:↓ボタン
Cボタン:→ボタン
使い方としては、USB端子でスイッチに接続。
ホーム画面で、ボタンを適当に押して、1Pとして認識させて、Selectを押しながら、→↓←↑ボタンなどを駆使して、電車でGo!を起動させれば、行けると思います。
一応、ちゃんと動いたよという証拠に、動作の所だけこっそり動画を載せておきます。
2021-03-20 00:16
コメント(0)
F28まであるコントローラ の緊急停止修正とRailComDisplayの相性調査 [DCCコントローラ]
へのへのもへじさんがPitIn-PaceCarとか、ほぼ基板の電車を作っているので、私もそういう基板だけ電車をちょっと作りたいなあと思いつつ、とくに速度計を作りたいわけでもないので、自分にとって面白い基板電車とは何か?を妄想中です。elecrowは基板の大きさが10cmを超えると突然価格が上がるので、10cm未満にして、HOゲージでとやって行くと、どうしても、プラレールチックな(そしてプラレール(115mmぐらい)よりも短い)ものになります。基板を2枚つなげて、20cmにしても、それでも20m*1/80=25㎝の普通の車両の長さに満たないし・・・。毎度のことながら、妄想中が一番楽しいのと、中国もどうせ春節中で、頼んでもすぐには作れるわけでもないので、うだうだと2月中、考えようと思います。
さて、本題で、まずは、「F28まであるコントローラ の緊急停止修正」ですが、緊急停止するバグを修正しました。
DCCの、スピード命令は
0を送ると、停止、
1を送ると緊急停止、
2~127が1~126の速度指令になる
という、妙な決まりになっています。そこをすっかり忘れてて、停止は0、スピード指定は1~127と送ってしまい、ときどき停止で緊急停止になるんだけれどもどうして?という指摘をいただきましたので、修正しました。スケッチはこちらの最新になります。多分これで直ると思います(と言いつつ、物での確認していません)
次に、「RailComDisplay繋げたら、命令出してすぐはLocoAddressを返してくれるんだけれども、すぐに表示が”ー”に戻るんだがなんでですか?」という質問がありました。DSair2は、一度作った命令を定期的に再送信していますので、それに合わせてLocoAddressを返してくれているようです。が、それに対して、私のCheapControllerは3回連続で送信した後は、なんと、すべてを忘れてIdlePacketを出し続ける仕様にしています。(と偉そうに言いつつ、その仕様が正しいのかどうかは知らないですが)。ということで、デコーダのほうも、RailComをすぐに出してくれなくなるんじゃないかと思っています。(このごろオシロが無いので確認できていません)。在線検知で使うなら、パケットを定期的に送信すべきかなあとも思います。
そして、DCCのパケットのインターバルはどのくらいですか?という質問がありました。私のコントローラだと、1ビットが150usぐらいとしてPreambleを15回ぐらい、その後3バイトぐらい命令送って、その後、RailCom用に500usぐらい電力出力を休止します。ですので、インターバルで、
150us(15bit+8bit*3bit/byte)+500us = 6.35ms
かかります。DCCの命令長は可変ですので、3バイトよりも短くなることもあるかもですが。
で、この命令を出した後に、ボタンの検出やLEDとかの画面表示とかやっていたりします。
詳しくはオシロで確認するのがよくわかると思います。現在は500usのほぼ0電圧時間があるため、パケットがどうなっているか解析しやすいと思います。
つぎに、RailComDisplayの相性調査です。コントローラはDSair2です。最初に行っておきますが、デコーダは数種類しか持っていません。
まずは、E217系。DesktopStation様にFL12がFWD,REVで切り替わんないです。とクレーム入れていた時期のものですね。EM13とFL12を使用していますが、どちらも普通に制御できました。もちろんRailcomへの反応はありません。
次に京急2100系です。これは、前照灯はNuckyさんのワンコインデコーダ。モーターはdsDecR4に、VVVFスケッチを入れているものですね。で、ちゃんと動きました。もちろんRailcomへの反応はありません。
で、最後にHOのロマンスカーVSE。載っているのはNagodenさんのMp3V5?とNuckyさんのワンコインデコーダ。これも全く問題ありませんでした。もちろんRailcomへの反応はありません。
あとは、RailComDisplayを途中に繋いで、CVReadしても値は読めました。ぐらいでしょうか?
以上です。
さて、本題で、まずは、「F28まであるコントローラ の緊急停止修正」ですが、緊急停止するバグを修正しました。
DCCの、スピード命令は
0を送ると、停止、
1を送ると緊急停止、
2~127が1~126の速度指令になる
という、妙な決まりになっています。そこをすっかり忘れてて、停止は0、スピード指定は1~127と送ってしまい、ときどき停止で緊急停止になるんだけれどもどうして?という指摘をいただきましたので、修正しました。スケッチはこちらの最新になります。多分これで直ると思います(と言いつつ、物での確認していません)
次に、「RailComDisplay繋げたら、命令出してすぐはLocoAddressを返してくれるんだけれども、すぐに表示が”ー”に戻るんだがなんでですか?」という質問がありました。DSair2は、一度作った命令を定期的に再送信していますので、それに合わせてLocoAddressを返してくれているようです。が、それに対して、私のCheapControllerは3回連続で送信した後は、なんと、すべてを忘れてIdlePacketを出し続ける仕様にしています。(と偉そうに言いつつ、その仕様が正しいのかどうかは知らないですが)。ということで、デコーダのほうも、RailComをすぐに出してくれなくなるんじゃないかと思っています。(このごろオシロが無いので確認できていません)。在線検知で使うなら、パケットを定期的に送信すべきかなあとも思います。
そして、DCCのパケットのインターバルはどのくらいですか?という質問がありました。私のコントローラだと、1ビットが150usぐらいとしてPreambleを15回ぐらい、その後3バイトぐらい命令送って、その後、RailCom用に500usぐらい電力出力を休止します。ですので、インターバルで、
150us(15bit+8bit*3bit/byte)+500us = 6.35ms
かかります。DCCの命令長は可変ですので、3バイトよりも短くなることもあるかもですが。
で、この命令を出した後に、ボタンの検出やLEDとかの画面表示とかやっていたりします。
詳しくはオシロで確認するのがよくわかると思います。現在は500usのほぼ0電圧時間があるため、パケットがどうなっているか解析しやすいと思います。
つぎに、RailComDisplayの相性調査です。コントローラはDSair2です。最初に行っておきますが、デコーダは数種類しか持っていません。
まずは、E217系。DesktopStation様にFL12がFWD,REVで切り替わんないです。とクレーム入れていた時期のものですね。EM13とFL12を使用していますが、どちらも普通に制御できました。もちろんRailcomへの反応はありません。
次に京急2100系です。これは、前照灯はNuckyさんのワンコインデコーダ。モーターはdsDecR4に、VVVFスケッチを入れているものですね。で、ちゃんと動きました。もちろんRailcomへの反応はありません。
で、最後にHOのロマンスカーVSE。載っているのはNagodenさんのMp3V5?とNuckyさんのワンコインデコーダ。これも全く問題ありませんでした。もちろんRailcomへの反応はありません。
あとは、RailComDisplayを途中に繋いで、CVReadしても値は読めました。ぐらいでしょうか?
以上です。
2021-02-06 16:01
コメント(0)
F28まであるコントローラ DCC出力OnOffボタン追加とRailComDisplay対応 [DCCコントローラ]
今週も緊急事態宣言のため、土日はほぼ家に引きこもっていますが、元々冬は寒くて苦手なので、外にはあまり出ません。夕方、スーパーへの買い物のために家の近くの国道を通ったら、江ノ島からの車が渋滞していました。まあ、関東の感染者も下り坂ですし、車なら他の人と隔離されているからいいんですよね。きっと。
で、F28まであるコントローラの件ですが、DCCの出力をOnOffしたいという話があったのでやりました。ソースはWikiから該当するGitHubで落とせます。最初、出力のOnOffだけしようと思ったのですが、それだけやると、Off→Onで、コントローラ側は以前のファンクションの状態を覚えていて、デコーダ側は忘れているという残念な事態になるため、コントローラ側もファンクション状態を忘れる、という形に変更したのですが、これが大変でした。(CheapControllerだけあって、初期化を含めて、かなり適当にやっているので)。
で、最初Offの状態で、
F31ボタンを押すとDCC線路出力が出るようになります。
あとは、もう一つ、DesuktopStationさんから、RailComDisplayを相性調査用に分けていただいたので、相性調査は今からちゃんとやる予定ですが、その前に、このF28まであるコントローラにつなげられるかを確認してみました。
NMRAの該当部分を見てみると、パケット送り終わったら、左右の線路の電位を0にして、500us程度待てばその間にデコーダからシリアルでデータが送信されてくるようにみえたので、何も考えずにパケット送信後に500usぐらい、モータードライバをブレーキ状態にしてみたのですが、EsuのLoksound5とRailComDisplayのセットは全然アドレスを返してくれません。
わからんと思って、DSair2の該当ソース部分をこっそり眺めて、理解しました。電位を0にする前後にHigh状態とLow状態を作らないといけないようですね。
//DSair2該当ソース部分(DScoreM_DCC.cpp)
---------------
//29us High
DS_WriteBit(0);
delayMicroseconds(TIME_DCC_BIDI_CUTOUTSTART);
//454us BREAK MODE of TB664X
DS_OutputBrake();
//DS_OutputOff();
delayMicroseconds(TIME_DCC_BIDI_ENDCUTOUTTIME);
//End of Cutout
DS_WriteBit(1);
delayMicroseconds(20);//10us
-------------
ということで、同じにしてしまいます・・・。
私のソースだと、作りが適当なので、ほぼ直書きしてしまっていて
fujigaya2_dcc.cppの
-------------
//Railcom cutout
PORTD |= _BV(PD7);
PORTC &= ~_BV(PC6);
delayMicroseconds(bit_cutoff_start_us);
bit_off();
delayMicroseconds(bit_cutoff_width_us);
PORTD &= ~_BV(PD7);
PORTC |= _BV(PC6);
delayMicroseconds(bit_cutoff_end_us);
-------------
になります。bit_off()がブレーキ部分になります。
RailComDisplayでLocoAddressを返してくれました。よかったよかった。
と思ったのもつかの間、これってCheapContoroller的に何に使うんだろう?
という疑問も一緒に出てしまいました。が、まあ、その時思いついたことをするのが趣味だと思うので、深く考えないようにしましょう。
で、F28まであるコントローラの件ですが、DCCの出力をOnOffしたいという話があったのでやりました。ソースはWikiから該当するGitHubで落とせます。最初、出力のOnOffだけしようと思ったのですが、それだけやると、Off→Onで、コントローラ側は以前のファンクションの状態を覚えていて、デコーダ側は忘れているという残念な事態になるため、コントローラ側もファンクション状態を忘れる、という形に変更したのですが、これが大変でした。(CheapControllerだけあって、初期化を含めて、かなり適当にやっているので)。
で、最初Offの状態で、
F31ボタンを押すとDCC線路出力が出るようになります。
あとは、もう一つ、DesuktopStationさんから、RailComDisplayを相性調査用に分けていただいたので、相性調査は今からちゃんとやる予定ですが、その前に、このF28まであるコントローラにつなげられるかを確認してみました。
NMRAの該当部分を見てみると、パケット送り終わったら、左右の線路の電位を0にして、500us程度待てばその間にデコーダからシリアルでデータが送信されてくるようにみえたので、何も考えずにパケット送信後に500usぐらい、モータードライバをブレーキ状態にしてみたのですが、EsuのLoksound5とRailComDisplayのセットは全然アドレスを返してくれません。
わからんと思って、DSair2の該当ソース部分をこっそり眺めて、理解しました。電位を0にする前後にHigh状態とLow状態を作らないといけないようですね。
//DSair2該当ソース部分(DScoreM_DCC.cpp)
---------------
//29us High
DS_WriteBit(0);
delayMicroseconds(TIME_DCC_BIDI_CUTOUTSTART);
//454us BREAK MODE of TB664X
DS_OutputBrake();
//DS_OutputOff();
delayMicroseconds(TIME_DCC_BIDI_ENDCUTOUTTIME);
//End of Cutout
DS_WriteBit(1);
delayMicroseconds(20);//10us
-------------
ということで、同じにしてしまいます・・・。
私のソースだと、作りが適当なので、ほぼ直書きしてしまっていて
fujigaya2_dcc.cppの
-------------
//Railcom cutout
PORTD |= _BV(PD7);
PORTC &= ~_BV(PC6);
delayMicroseconds(bit_cutoff_start_us);
bit_off();
delayMicroseconds(bit_cutoff_width_us);
PORTD &= ~_BV(PD7);
PORTC |= _BV(PC6);
delayMicroseconds(bit_cutoff_end_us);
-------------
になります。bit_off()がブレーキ部分になります。
RailComDisplayでLocoAddressを返してくれました。よかったよかった。
と思ったのもつかの間、これってCheapContoroller的に何に使うんだろう?
という疑問も一緒に出てしまいました。が、まあ、その時思いついたことをするのが趣味だと思うので、深く考えないようにしましょう。
2021-01-31 18:37
コメント(0)
F28まであるコントローラ複数アドレス対応 [DCCコントローラ]
なんか、Youtubeで適当にクリックを繰り返したいたら、多分有名なんだろうけど、プラレールみたいな線路の動画があったので、CTA HD 60fps: Chicago "L" Trains @ Tower 18 Interlocking on The Loop (2/8/19)自分への備忘録として貼っておきます。
この頃寒くて、外に出ていません。今週は家族の職場でコロナ陽性者が出たため、家族もPCR検査を受けることになり、そうなると、会社や学校の規則で、わたしやほかの家族も出社や登校が出来なくなり、いろいろと活動が止まりました。結局検査は陰性だったので、来週から普通に会社行きますが。
さて、こっそりと頒布しているfujigaya2 DCC Cheap Controller F28の話です。
いままで、チープコントローラ部分はLocoAddressが3しか使えないという、とても潔い漢仕様のコントローラだったのですが、アドレスを変えたいという要望があり、変えられるようにしました。一応、マイコンの中で、10アドレスの状態を覚えるようにはしていますが、電源を引っこ抜くとすべて忘れるようにしています。
使い方はLocoボタンを押して、点滅している間にF0~F9でLocoAddressを入力して、もう一度Locoボタンを押すと、そのアドレスになります。F10を押すと0に戻ります。0や数字キーを押さずにもう一度Locoボタンを押すと、以前のLocoAddressのままとなります。初期値は3です。
また、前進(For)、後進(Rev)状態をドット点灯でわかるようにしておきました。
スケッチはWiki内のスケッチからGitHubに飛んでクローンからダウンロードしてください。
なお、中を見ていただくと分かりますが、ソースがスパゲティになっています。
また、備忘録となりますが、Arduinoでuint32_tのビットシフトでこちらが思う計算が出来なくてずっと困っていたのですが、
uint32_t function_state_32 = (uint32_t)0x01 << 25;
のように明示的に定数もUnsigned longであることを明示すればヘンテコにならないことがやっとわかりました。よかったよかった。
この頃寒くて、外に出ていません。今週は家族の職場でコロナ陽性者が出たため、家族もPCR検査を受けることになり、そうなると、会社や学校の規則で、わたしやほかの家族も出社や登校が出来なくなり、いろいろと活動が止まりました。結局検査は陰性だったので、来週から普通に会社行きますが。
さて、こっそりと頒布しているfujigaya2 DCC Cheap Controller F28の話です。
いままで、チープコントローラ部分はLocoAddressが3しか使えないという、とても潔い漢仕様のコントローラだったのですが、アドレスを変えたいという要望があり、変えられるようにしました。一応、マイコンの中で、10アドレスの状態を覚えるようにはしていますが、電源を引っこ抜くとすべて忘れるようにしています。
使い方はLocoボタンを押して、点滅している間にF0~F9でLocoAddressを入力して、もう一度Locoボタンを押すと、そのアドレスになります。F10を押すと0に戻ります。0や数字キーを押さずにもう一度Locoボタンを押すと、以前のLocoAddressのままとなります。初期値は3です。
また、前進(For)、後進(Rev)状態をドット点灯でわかるようにしておきました。
スケッチはWiki内のスケッチからGitHubに飛んでクローンからダウンロードしてください。
なお、中を見ていただくと分かりますが、ソースがスパゲティになっています。
また、備忘録となりますが、Arduinoでuint32_tのビットシフトでこちらが思う計算が出来なくてずっと困っていたのですが、
uint32_t function_state_32 = (uint32_t)0x01 << 25;
のように明示的に定数もUnsigned longであることを明示すればヘンテコにならないことがやっとわかりました。よかったよかった。
2021-01-24 15:37
コメント(0)
プリウスαで電車ごっこ その2 [DCCコントローラ]
少し前に飲み会をしたとき、夜中に車で走りながらの電車ごっこの動画はシュールだという話が出ました。確かに夜の11時に撮って、その日は雷や雨もすごかったですが。なので、今回は、白昼どうどうとやることにしました。車の中なので、三蜜にならないし、外からは、いい歳した大人が電車ごっこしていることはばれませんし。
で、今回はSoundBoxもつけたり、音も、鉄道模型用のスピーカーでなく、車載ナビのライン入力端子に繋いで、動画を撮ってみました。
やったものは
(1)SoundBox 115系、117系 コントローラ優先モード
(2)SoundBox 京急2100系 コントローラ優先モード
(3)Esu LokSoundMicroV5 OpenSound 旧国電(ジョイント音 On)
(4)Esu LokSoundMicroV5 OpenSound C57、59
(5)Mp3V6N18 ディーゼルスケッチ改造版(エンジン音が加速時以外は小さい鳴るようにして、ジョイント音をタタンタタンと一両分に変更したもの(従来はタタンと一台車分しか入れていなかった)
です。
運転してて一番気持ちよかったのは(4)のC57,59で、スピードに合わせてドラフト音がなるのが良いです。
次は(1)の115系、117系で、高速になると唸るような独特の音がスピード出てきたなと感じます。
(3)や(5)のジョイント音も電車ごっこ的には大切だと思います。そういう意味で、SoundBoxはジョイント音が出ないところが少し寂しいです。(鉄道模型的にはいらないと思いますが)
で、順番に動画です。
(1)SoundBox 115系、117系 コントローラ優先モード
(2)SoundBox 京急2100系 コントローラ優先モード
(3)Esu LokSoundMicroV5 OpenSound 旧国電(ジョイント音 On)
(4)Esu LokSoundMicroV5 OpenSound C57,C59
(5)Mp3V6N18 ディーゼルスケッチ改造版(エンジン音が加速時以外は小さい鳴るようにして、ジョイント音をタタンタタンと一両分に変更したもの(従来はタタンと一台車分しか入れていなかった)
で、今回はSoundBoxもつけたり、音も、鉄道模型用のスピーカーでなく、車載ナビのライン入力端子に繋いで、動画を撮ってみました。
やったものは
(1)SoundBox 115系、117系 コントローラ優先モード
(2)SoundBox 京急2100系 コントローラ優先モード
(3)Esu LokSoundMicroV5 OpenSound 旧国電(ジョイント音 On)
(4)Esu LokSoundMicroV5 OpenSound C57、59
(5)Mp3V6N18 ディーゼルスケッチ改造版(エンジン音が加速時以外は小さい鳴るようにして、ジョイント音をタタンタタンと一両分に変更したもの(従来はタタンと一台車分しか入れていなかった)
です。
運転してて一番気持ちよかったのは(4)のC57,59で、スピードに合わせてドラフト音がなるのが良いです。
次は(1)の115系、117系で、高速になると唸るような独特の音がスピード出てきたなと感じます。
(3)や(5)のジョイント音も電車ごっこ的には大切だと思います。そういう意味で、SoundBoxはジョイント音が出ないところが少し寂しいです。(鉄道模型的にはいらないと思いますが)
で、順番に動画です。
(1)SoundBox 115系、117系 コントローラ優先モード
(2)SoundBox 京急2100系 コントローラ優先モード
(3)Esu LokSoundMicroV5 OpenSound 旧国電(ジョイント音 On)
(4)Esu LokSoundMicroV5 OpenSound C57,C59
(5)Mp3V6N18 ディーゼルスケッチ改造版(エンジン音が加速時以外は小さい鳴るようにして、ジョイント音をタタンタタンと一両分に変更したもの(従来はタタンと一台車分しか入れていなかった)
2020-08-16 22:21
コメント(0)
Kato SoundBoxをGPS速度比例で制御することを考える その3 [DCCコントローラ]
きもの展に行った帰りに国立科学博物館でD51でも撮りました。
写真を撮るとき、先に写真を撮っていたカップルがなかなか離れず、なんでだろうと思っていましたが、近づいたらわかりました。原因は猫でした。鉄ヲタには見えないカップルでしたので。
で、SoundBoxの続きです。
モーター出力時にときどき出力を切って、その時の逆起電力を見て、BEMFをかけているはずなので、下記のような回路を組めばOKと勝手に考えて、SoundBoxの出力に繋いでみましたが、全然ダメでした。SoundBoxの出力(Mot1,Mot2)を切ったときは、analog出力から、適当な0~12Vが出て、それをSoundBoxが電圧モニタ見て、スピードを測っているかと思ったのですが、・・・。
深いことは考えずにこの方法は挫折することにしました。また、115系、117系のサウンドカードを買ってきましたので、電車をコントローラ同調方式にできるアップデートを入れて、吊りかけとかもコントローラ同調可能になったはずなので、これで楽しもうと思います。深いことは考えません。Lineで車のカーオーディオにつながるし。
次に、。EsuとなごでんさんのMp3V6を車のLine Inに繋ぐ話ですが、適当に10Kを分圧した出力を、付けたら全然でした。Mp3V6はまだましでしたが、Esuの方はノイズが乗りまくりです。ということで、秋月のAT403昇圧トランスキットを使ってみました。スマホ用ヘッドホン(大電流+小電圧)→Line(小電流+大電圧)に変えるということで、やってみたら、音割れします・・・。多分もともとの電流がすごいんじゃないかと思います。ということで、次はAT403をAT129に変更して、基板は単体売りしているので使わせてもらって、やってみました(グランドループアイソレーター?)。
モノラルなので、ジャンパしています。
それなりに良い音になりました。Esuのほうは、入力と出力を入れ替えるとか、SP端子を入れ替えるとか、おまじないを繰り返すと、ノイズが減ったりして、だからアナログオーディオは嫌いです。
ということで、Esuでもカーオーディオから音が出せるようになりましたので、どっか、名の知れたところに行って”昼間”に電車ごっこの撮影でもしようかと思います。
写真を撮るとき、先に写真を撮っていたカップルがなかなか離れず、なんでだろうと思っていましたが、近づいたらわかりました。原因は猫でした。鉄ヲタには見えないカップルでしたので。
で、SoundBoxの続きです。
モーター出力時にときどき出力を切って、その時の逆起電力を見て、BEMFをかけているはずなので、下記のような回路を組めばOKと勝手に考えて、SoundBoxの出力に繋いでみましたが、全然ダメでした。SoundBoxの出力(Mot1,Mot2)を切ったときは、analog出力から、適当な0~12Vが出て、それをSoundBoxが電圧モニタ見て、スピードを測っているかと思ったのですが、・・・。
深いことは考えずにこの方法は挫折することにしました。また、115系、117系のサウンドカードを買ってきましたので、電車をコントローラ同調方式にできるアップデートを入れて、吊りかけとかもコントローラ同調可能になったはずなので、これで楽しもうと思います。深いことは考えません。Lineで車のカーオーディオにつながるし。
次に、。EsuとなごでんさんのMp3V6を車のLine Inに繋ぐ話ですが、適当に10Kを分圧した出力を、付けたら全然でした。Mp3V6はまだましでしたが、Esuの方はノイズが乗りまくりです。ということで、秋月のAT403昇圧トランスキットを使ってみました。スマホ用ヘッドホン(大電流+小電圧)→Line(小電流+大電圧)に変えるということで、やってみたら、音割れします・・・。多分もともとの電流がすごいんじゃないかと思います。ということで、次はAT403をAT129に変更して、基板は単体売りしているので使わせてもらって、やってみました(グランドループアイソレーター?)。
モノラルなので、ジャンパしています。
それなりに良い音になりました。Esuのほうは、入力と出力を入れ替えるとか、SP端子を入れ替えるとか、おまじないを繰り返すと、ノイズが減ったりして、だからアナログオーディオは嫌いです。
ということで、Esuでもカーオーディオから音が出せるようになりましたので、どっか、名の知れたところに行って”昼間”に電車ごっこの撮影でもしようかと思います。
2020-08-07 17:30
コメント(0)
Kato SoundBoxをGPS速度比例で制御することを考える その2 [DCCコントローラ]
夏休みに外に全く行かないのも癪なので、秋月電子と千石電商に行くついでに、国立博物館のきもの展に行ってきました。
織田信長、豊臣秀吉、徳川家康の着物とか、
岡本太郎やYoshikiデザインの着物とか、有名人の着物がいっぱい展示されていました。
また教科書に載っている本居宣長の見返り美人図などもありました。(小さかった)
個人的には篤姫が雀好きで着物や箱に雀をあしらっているというのが興味深かったです。雀が刺繍や彫刻されていて、金持ちってすごいのねと思いました。
きもの展というだけあって、見ている人は女性が9割で背が小さいため後ろからでもよく見えるのと、コロナ禍のため人も少なくとても快適でした。平時もこのぐらい入場制限してくれると、展示物に集中できてよいのですが。
あとは、本館も見て、基本的には写真OKのようで、風神、雷神
とかも写真とりました。写真禁止って書いていなかったし。
あとは「富嶽三十六景 神奈川沖浪裏」
とか、
はにわとか、
とやっていて忘れていました。本題ですが、SoundBoxとGPSの接続は、スケッチを作るのが面倒だったので、(その3)でやりました。
で、コントローラも作り直しており、5Vのスイッチングレギュレータを付けて、GPSへはGrove端子で接続するようにしました。
はんだ付けはスイッチとLEDが大変多いので、毎度のことながら鬼のように時間がかかりました。2時間半ぐらい?
これを昔作ったSoundBoxDecoderに繋ぎ、いろいろと試したら、
付属の蒸気機関車のボリュームはこんな設定か?
京急はこんな感じか?
で、夜になったら、また、車に乗せて、走って確認しました。いろいろと載せるものが多いので、板に付けています。
SoundBoxはBEMFがかかっているので、モーターを繋がないと動かないのですが、この調整がかなり難しく、止まってもモーターが回りっぱなしだったり、動いてもモーターが動き出さず走行音が鳴らなかったりで、BEMFだけ電圧を生成してだまして使うようなものを作ろうかと一瞬思いました。
また、今回、SoundBoxはLine出力があって、車のオーディオのライン入力に入れられるので、結構いい音が鳴りました。ただし京急は「サウンド同調モード」のみのため、全くスピードに比例せず、残念なことになりましたが。
で、この「Line入力で車のスピーカーから電車の音を出す」を今までのEsuやMp3V6でもできないかなあと思って、適当にスピーカー出力を分圧して車のオーディオのライン入力に入れたのですが、Mp3V6はどうにか鳴りましたが、Esuは変なノイズが沢山出て、聞けたものではありませんでした。
どうやら、トランスでGNDを独立させてやる必要がありそうで、秋月に行くことにしました。(続く)
織田信長、豊臣秀吉、徳川家康の着物とか、
岡本太郎やYoshikiデザインの着物とか、有名人の着物がいっぱい展示されていました。
また教科書に載っている本居宣長の見返り美人図などもありました。(小さかった)
個人的には篤姫が雀好きで着物や箱に雀をあしらっているというのが興味深かったです。雀が刺繍や彫刻されていて、金持ちってすごいのねと思いました。
きもの展というだけあって、見ている人は女性が9割で背が小さいため後ろからでもよく見えるのと、コロナ禍のため人も少なくとても快適でした。平時もこのぐらい入場制限してくれると、展示物に集中できてよいのですが。
あとは、本館も見て、基本的には写真OKのようで、風神、雷神
とかも写真とりました。写真禁止って書いていなかったし。
あとは「富嶽三十六景 神奈川沖浪裏」
とか、
はにわとか、
とやっていて忘れていました。本題ですが、SoundBoxとGPSの接続は、スケッチを作るのが面倒だったので、(その3)でやりました。
で、コントローラも作り直しており、5Vのスイッチングレギュレータを付けて、GPSへはGrove端子で接続するようにしました。
はんだ付けはスイッチとLEDが大変多いので、毎度のことながら鬼のように時間がかかりました。2時間半ぐらい?
これを昔作ったSoundBoxDecoderに繋ぎ、いろいろと試したら、
付属の蒸気機関車のボリュームはこんな設定か?
京急はこんな感じか?
で、夜になったら、また、車に乗せて、走って確認しました。いろいろと載せるものが多いので、板に付けています。
SoundBoxはBEMFがかかっているので、モーターを繋がないと動かないのですが、この調整がかなり難しく、止まってもモーターが回りっぱなしだったり、動いてもモーターが動き出さず走行音が鳴らなかったりで、BEMFだけ電圧を生成してだまして使うようなものを作ろうかと一瞬思いました。
また、今回、SoundBoxはLine出力があって、車のオーディオのライン入力に入れられるので、結構いい音が鳴りました。ただし京急は「サウンド同調モード」のみのため、全くスピードに比例せず、残念なことになりましたが。
で、この「Line入力で車のスピーカーから電車の音を出す」を今までのEsuやMp3V6でもできないかなあと思って、適当にスピーカー出力を分圧して車のオーディオのライン入力に入れたのですが、Mp3V6はどうにか鳴りましたが、Esuは変なノイズが沢山出て、聞けたものではありませんでした。
どうやら、トランスでGNDを独立させてやる必要がありそうで、秋月に行くことにしました。(続く)
2020-08-06 12:08
コメント(0)
Kato SoundBoxをGPS速度比例で制御することを考える [DCCコントローラ]
さて、少し前にプリウスαで電車ごっこで、DCCコントローラ+GPS+Esuのデコーダで車の速度に比例したドラフト音やモーター音を出すことによって、面白い遊びができましたが、KatoのSoundBoxを繋いでも同じことできるよなあと思って、検討をしてみました。
考えられるシステムは3通り。
(その1)サウンドボックスのCOM通信を使う(一番シンプルだが、すでにDCCでは無い・・・。)
(その2)Analogの0~12Vを繋いで音を出す(一番わかりやすいが、これもDCCではない)
(その3)昔作ったSoundBoxDecoderを繋いで音を出す。(すぐにできるが、なんか部品が多くて嫌)
どれもいまいちだなあという自問自答をしていたのですが、とりあえず、面白そうというだけで、”その2”の回路を試したくなって、Arduinoから12V電圧生成のため、Arduino→DA(MCP4911)→増幅(LM358)として回路を作ってみました。
回路図
ブレッドボード
とりあえず、10.6Vぐらいまではアナログの電圧が出るようになりました(そして、SoundBoxにはつないでいないです)。やっぱり”その1”でGPSからのスピードをシリアルにして、SoundBoxに入れるスケッチでも書こうか、と思っているところで連休がおわりです。
考えられるシステムは3通り。
(その1)サウンドボックスのCOM通信を使う(一番シンプルだが、すでにDCCでは無い・・・。)
(その2)Analogの0~12Vを繋いで音を出す(一番わかりやすいが、これもDCCではない)
(その3)昔作ったSoundBoxDecoderを繋いで音を出す。(すぐにできるが、なんか部品が多くて嫌)
どれもいまいちだなあという自問自答をしていたのですが、とりあえず、面白そうというだけで、”その2”の回路を試したくなって、Arduinoから12V電圧生成のため、Arduino→DA(MCP4911)→増幅(LM358)として回路を作ってみました。
回路図
ブレッドボード
とりあえず、10.6Vぐらいまではアナログの電圧が出るようになりました(そして、SoundBoxにはつないでいないです)。やっぱり”その1”でGPSからのスピードをシリアルにして、SoundBoxに入れるスケッチでも書こうか、と思っているところで連休がおわりです。
2020-07-26 16:36
コメント(0)
プリウスαで電車ごっこ [DCCコントローラ]
娘が中3で、ついに私の趣味の部屋を追い出されてしまってリビング?の一角を間仕切りして過ごしていますが、冷房のない部屋のため夏は使えなさそうです・・・。
さて、コロナの第2波がやってきたということで、人と会わない趣味ということで、前からずるずるとやっていた「EsuのOpenSoundにDCCコントローラを付けて、GPSから速度情報を取って、車で電車ごっこする」が完成しましたので、動画を載せます。DCCを介して制御しますので、Esuでも、Mp3V6でも、Kato SoundBoxでも行けます。多分。
システムは、この頃作っているDCC CheapController F28のUARTにGPSを繋げ、DCC出力にEsuのOpenSoundを載せたデコーダ(BEMFの絡みのためモーターもつける)を付けて、スピーカーに繋いで、車の12Vで駆動させることで、子供のころ自転車を走らせながらガタンゴトンとかウーーーーとか言いながら走っていたアレを実現させるやつです。
システムは写真だとこんな感じです。
システム図を書くと
となる。
で、動画です。雨は降っているし、雷が鳴っている中、安全運転できれば、一人遊びとしてはかなり面白い部類に入ると思います。
旧国電(モノレール片瀬山~湘南江の島~江の島腰越間併用軌道~モノレール西鎌倉~片瀬山)
C57,C59(モノレール片瀬山~湘南江の島~江の島腰越間併用軌道~モノレール西鎌倉~片瀬山)
さて、コロナの第2波がやってきたということで、人と会わない趣味ということで、前からずるずるとやっていた「EsuのOpenSoundにDCCコントローラを付けて、GPSから速度情報を取って、車で電車ごっこする」が完成しましたので、動画を載せます。DCCを介して制御しますので、Esuでも、Mp3V6でも、Kato SoundBoxでも行けます。多分。
システムは、この頃作っているDCC CheapController F28のUARTにGPSを繋げ、DCC出力にEsuのOpenSoundを載せたデコーダ(BEMFの絡みのためモーターもつける)を付けて、スピーカーに繋いで、車の12Vで駆動させることで、子供のころ自転車を走らせながらガタンゴトンとかウーーーーとか言いながら走っていたアレを実現させるやつです。
システムは写真だとこんな感じです。
システム図を書くと
となる。
で、動画です。雨は降っているし、雷が鳴っている中、安全運転できれば、一人遊びとしてはかなり面白い部類に入ると思います。
旧国電(モノレール片瀬山~湘南江の島~江の島腰越間併用軌道~モノレール西鎌倉~片瀬山)
C57,C59(モノレール片瀬山~湘南江の島~江の島腰越間併用軌道~モノレール西鎌倉~片瀬山)
2020-07-12 15:14
コメント(0)