基板電車を作る その4 [電車]
続いて、床下の方です。
まずは床下(Floor)基板です。載っている機能は、ACをDCに変更するブリッジダイオード。瞬断に耐えるためのトマランコンデンサ。12Vから5Vを生成するためのDCDCコンバータ。モーターをPWMするためのモータードライバ(1A)です。あとで、トマランコンデンサの配線を間違えているのを発見しましたが、それはまた後で。(100Ω抵抗で12V~GNDに繋いでしまった。常に120mA流れ続ける無駄回路・・・)
次に、Floor基板二枚を繋ぐCont基板。こちらは、マイコンと、Mp3Player(DFPlayerMini)、各RGBLEDへの電力供給と通信、DCCパルスを12V→3.3V変換、BEMF用にモーター電圧を12V→3.3Vに変換などをしています。(写真はマイコンとかは載せていませんが)
で、Floor基板にヘッダピンを付けて、
Cont基板と接続し、14m車両の床下の完成です。(18cm*80倍)。横から見るとこんな感じにつながっています。
そして、側面と繋ぐため、L字のピンヘッダを付けて、
間違いに気づきました。ピンヘッダをまとめる黒いプラスチックのせいで、側面とはんだづけできないので、ピンヘッダはんだ付け後にプラスチックを撤去です。
そして、こんな感じで、はめてはんだ付けをしていきます。
まだまだ終わりません。その5に続く。
まずは床下(Floor)基板です。載っている機能は、ACをDCに変更するブリッジダイオード。瞬断に耐えるためのトマランコンデンサ。12Vから5Vを生成するためのDCDCコンバータ。モーターをPWMするためのモータードライバ(1A)です。あとで、トマランコンデンサの配線を間違えているのを発見しましたが、それはまた後で。(100Ω抵抗で12V~GNDに繋いでしまった。常に120mA流れ続ける無駄回路・・・)
次に、Floor基板二枚を繋ぐCont基板。こちらは、マイコンと、Mp3Player(DFPlayerMini)、各RGBLEDへの電力供給と通信、DCCパルスを12V→3.3V変換、BEMF用にモーター電圧を12V→3.3Vに変換などをしています。(写真はマイコンとかは載せていませんが)
で、Floor基板にヘッダピンを付けて、
Cont基板と接続し、14m車両の床下の完成です。(18cm*80倍)。横から見るとこんな感じにつながっています。
そして、側面と繋ぐため、L字のピンヘッダを付けて、
間違いに気づきました。ピンヘッダをまとめる黒いプラスチックのせいで、側面とはんだづけできないので、ピンヘッダはんだ付け後にプラスチックを撤去です。
そして、こんな感じで、はめてはんだ付けをしていきます。
まだまだ終わりません。その5に続く。
2021-06-07 10:31
コメント(0)
基板電車を作る その3 [電車]
で、本日はお休みを取って3連休にしているので、連投です。
次に、正面(Front)部分にLEDを付けていきます。RGB LEDなので、赤にも白にもでき、明るさも自由自在ですので、ヘッドライト、テールライトがありそうなところと正面真ん中にはんだ付けします。
WS2812Cは私の作ったフットプリントかシルクが適当なせいで、少々チップの中心がどこなのかわからん状態になりました・・・。
裏面です。WS2812Cは、Typicalの例に従って0.1uFのパスコンを付けておきます。WS2812Bは秋月の新型を付けているので、パスコンいりません。
この部分だけ、適当なスケッチで光るかを確認します。くらいですが光っています。
同様に、天井(Ceiling)もはんだ付けします。
側面(SideA,SideB)もはんだ付けします。
SideAの表面です。
SideAの裏面です。
そして、SideBの表面ですが、パスコンを表に出してしまいました・・・。
あーあ。間違えちゃった。
はんだ付けは、表面実装なのと、気づくと極性間違える、とかがあり、8面作るのに1日ぐらいかかりました・・・。
その4に続く。
次に、正面(Front)部分にLEDを付けていきます。RGB LEDなので、赤にも白にもでき、明るさも自由自在ですので、ヘッドライト、テールライトがありそうなところと正面真ん中にはんだ付けします。
WS2812Cは私の作ったフットプリントかシルクが適当なせいで、少々チップの中心がどこなのかわからん状態になりました・・・。
裏面です。WS2812Cは、Typicalの例に従って0.1uFのパスコンを付けておきます。WS2812Bは秋月の新型を付けているので、パスコンいりません。
この部分だけ、適当なスケッチで光るかを確認します。くらいですが光っています。
同様に、天井(Ceiling)もはんだ付けします。
側面(SideA,SideB)もはんだ付けします。
SideAの表面です。
SideAの裏面です。
そして、SideBの表面ですが、パスコンを表に出してしまいました・・・。
あーあ。間違えちゃった。
はんだ付けは、表面実装なのと、気づくと極性間違える、とかがあり、8面作るのに1日ぐらいかかりました・・・。
その4に続く。
2021-06-07 10:14
コメント(0)
基板電車を作る その2 [電車]
さて、気づいたら6月ですね。今年はいろんなものが壊れはじめて、シャワートイレ×2とか、食器棚とか、テレビアンテナ修理とかしていたら、家計が赤字で大変なことになっています。
で、タイトルの件ですが、基板が少し前に来ました。Kicadが初めてということもあり、頼んでいる最中にいくつかいくつかミスも発見し、追加で頼んでいたとかもして、10cm*10cmで5$は安いのですが、割と高めになっています。そして、ミスの連鎖はまだ続いています。
まずは、来ました。仮組でこんな感じです。(セロテープで貼り付け)
展開図だとこうです。6種類の基板と組み合わせて18㎝の車両を作ります。
で、3Dプリンtなで作った台車でも付けるかと思い、床下基板(Floor)をみたら、台車の軸部分の穴径を間違えました。おそらく5.4㎜の直径が必要ですが、3DCad見たときに穴径は半径で指定するので、2.7㎜とメモして、KiCadで半径2.7㎜のつもりで、直径2.7mmとやらかしたのでしょう(基板関連は直径で入れるのが普通)。
気を取り直して、5.2mm、5.5mm、6mmあたりのドリルを買いました。穴の広げ方としては、まず、5㎜の下穴ドリルで穴を広げ、そのあと、5.2mm、5.5mmと穴を広げていきます。天賞堂のパワトラは5.2㎜で行けそうだった気がします。
で、基板の台車用軸穴を広げました。
その3に続く。
で、タイトルの件ですが、基板が少し前に来ました。Kicadが初めてということもあり、頼んでいる最中にいくつかいくつかミスも発見し、追加で頼んでいたとかもして、10cm*10cmで5$は安いのですが、割と高めになっています。そして、ミスの連鎖はまだ続いています。
まずは、来ました。仮組でこんな感じです。(セロテープで貼り付け)
展開図だとこうです。6種類の基板と組み合わせて18㎝の車両を作ります。
で、3Dプリンtなで作った台車でも付けるかと思い、床下基板(Floor)をみたら、台車の軸部分の穴径を間違えました。おそらく5.4㎜の直径が必要ですが、3DCad見たときに穴径は半径で指定するので、2.7㎜とメモして、KiCadで半径2.7㎜のつもりで、直径2.7mmとやらかしたのでしょう(基板関連は直径で入れるのが普通)。
気を取り直して、5.2mm、5.5mm、6mmあたりのドリルを買いました。穴の広げ方としては、まず、5㎜の下穴ドリルで穴を広げ、そのあと、5.2mm、5.5mmと穴を広げていきます。天賞堂のパワトラは5.2㎜で行けそうだった気がします。
で、基板の台車用軸穴を広げました。
その3に続く。
2021-06-07 09:57
コメント(0)
基板電車を作る [電車]
さて、もう一つ、ゴールデンウィークにKicadのお勉強をしていましたが、何を作ろうか考えていて、考え付いたのが、タイトルの件です。
なんだ?それって感じですが、プリント基板だけで電車を作ろうと思っています。大きさはHOゲージで、20㎝の車両(本物だと16m?)になります。すでにTrainoさんがスピードメーターの車両を電子基板で作っていますが、私のは電車の形をしたものになります。で、せっかくなので、ws2812を大量に使って、未来風の妄想電車を作っていこうと思います。
未来風の電車って何?と言うと、まずは小田急5000形のフロントに一本白か赤く光る線がありますが、あんな感じで、正面にライトの色が変わるLEDを並べることにします。正面の色を変えることで、どこ行きなのか、とか、急行なのか、普通なのかなどを分けるという妄想をします。もちろんナイトライダーの点灯もパリピ点灯も可能です。
また、側面にもws2812を配置し、電車の帯をいろんな色に光らせることで、山手線(緑)中央線(オレンジ)、総武線(黄色)、京浜東北線(水色)、東海道線(緑+オレンジのシマシマ?)とかすることで、どこの線にも配置できる(という妄想の)電車を作ろうと思います。もちろん、パリピ電車も可能です。まあ、将来的に、人口が減ってきたら、電車の運用も今よりも柔軟さが求められると思いますので、いろんな色で発色できる必要が出てくると思います。
で、図面はこれです。
特徴的になりそうな正面はこれ。贅沢にWS2812Bを6個、WS2812Cを5個使う予定。
側面は、これ。10個のWS2812Cを配置予定。(2種類存在)
床下はこれで、本当に床下にブリッジダイオードや、モータードライバ、5VDCDCを載せる予定。(2枚で一車両)
コントロール基板はこれで、M5Atomで作ろうと思っています。(そして、まだスケッチを作っていない)
今のところDFPlayerMiniを載せて、Mp3だけ鳴るようにする予定。
屋根はこれで、パリピ電車にできるようにWS2812Bを6個搭載。(2枚で一車両)
台車は天賞堂とかアルパワーとかが付けられるといいなあと思っています。
さて、基板を適当に頼もうか?
なんだ?それって感じですが、プリント基板だけで電車を作ろうと思っています。大きさはHOゲージで、20㎝の車両(本物だと16m?)になります。すでにTrainoさんがスピードメーターの車両を電子基板で作っていますが、私のは電車の形をしたものになります。で、せっかくなので、ws2812を大量に使って、未来風の妄想電車を作っていこうと思います。
未来風の電車って何?と言うと、まずは小田急5000形のフロントに一本白か赤く光る線がありますが、あんな感じで、正面にライトの色が変わるLEDを並べることにします。正面の色を変えることで、どこ行きなのか、とか、急行なのか、普通なのかなどを分けるという妄想をします。もちろんナイトライダーの点灯もパリピ点灯も可能です。
また、側面にもws2812を配置し、電車の帯をいろんな色に光らせることで、山手線(緑)中央線(オレンジ)、総武線(黄色)、京浜東北線(水色)、東海道線(緑+オレンジのシマシマ?)とかすることで、どこの線にも配置できる(という妄想の)電車を作ろうと思います。もちろん、パリピ電車も可能です。まあ、将来的に、人口が減ってきたら、電車の運用も今よりも柔軟さが求められると思いますので、いろんな色で発色できる必要が出てくると思います。
で、図面はこれです。
特徴的になりそうな正面はこれ。贅沢にWS2812Bを6個、WS2812Cを5個使う予定。
側面は、これ。10個のWS2812Cを配置予定。(2種類存在)
床下はこれで、本当に床下にブリッジダイオードや、モータードライバ、5VDCDCを載せる予定。(2枚で一車両)
コントロール基板はこれで、M5Atomで作ろうと思っています。(そして、まだスケッチを作っていない)
今のところDFPlayerMiniを載せて、Mp3だけ鳴るようにする予定。
屋根はこれで、パリピ電車にできるようにWS2812Bを6個搭載。(2枚で一車両)
台車は天賞堂とかアルパワーとかが付けられるといいなあと思っています。
さて、基板を適当に頼もうか?
2021-05-16 17:27
コメント(0)
DSairように京急のスキンを作ってみた。 [DSAir]
さて、ゴールデンウィークがいつの間にか終わっていましたが、まんえん防止法だったかで(このごろそれが、どんな法律なのか、自粛を促すための注意書きに過ぎないのか?など、理解できなくなってきましたが)、県外には出ていけないということで、こっそり近くの横須賀のポテチパンの本物でも買いに行こうと思って、京急に乗ってきました。で、ふと、スピードメーターを見ると、黒くてかっこいいことに気づきました。
ということで、DSair2用に追加してみました。
京急の1000系?の運転台写真はこれ。(他にもネット上の写真を参考にしています)
ソースはこちらです。SD-WLANの入れ替えとなります。
一応備忘録として追加の方法を書いておきます。
----
改造の流れ。
京急のスキンを追加するため
List.htmの最初の方にファイル名として
script src="/SD_WLAN/js/meterdraw_Keikyu.js"を追加。(不等号でくくる必要あり)
を追加
最大スピード選択に140km/hを追加
/js/meterdraw.jsの
function onChangeSkins()、
function drawMeterBackground(inScale)
function drawMeter(inSpeed, inScale)
で京急の物を追加
また、function onChangeSkins()では加えて、
スキン切り替えを4→5個のトグルへ改造
あとは、
/js/meterdraw_Keikyu.js
を追加。今回はEden(旧国)から改造して作るのでそれをコピーした。
で、適当に色とかを変えるとどう変わるか確認しながら、お絵描きして終わり。
----
ということで、DSair2用に追加してみました。
京急の1000系?の運転台写真はこれ。(他にもネット上の写真を参考にしています)
ソースはこちらです。SD-WLANの入れ替えとなります。
一応備忘録として追加の方法を書いておきます。
----
改造の流れ。
京急のスキンを追加するため
List.htmの最初の方にファイル名として
script src="/SD_WLAN/js/meterdraw_Keikyu.js"を追加。(不等号でくくる必要あり)
を追加
最大スピード選択に140km/hを追加
/js/meterdraw.jsの
function onChangeSkins()、
function drawMeterBackground(inScale)
function drawMeter(inSpeed, inScale)
で京急の物を追加
また、function onChangeSkins()では加えて、
スキン切り替えを4→5個のトグルへ改造
あとは、
/js/meterdraw_Keikyu.js
を追加。今回はEden(旧国)から改造して作るのでそれをコピーした。
で、適当に色とかを変えるとどう変わるか確認しながら、お絵描きして終わり。
----
2021-05-16 16:45
コメント(0)
kicadに移行するか? [その他]
ずっと水魚堂さんのBschとMBEで回路図とアートワークをしていますが、ちょっとKicadいいなあと思っていました。
ですが、なんか新しい基板作る用事もなかったので、ずっとほっぽっていたのですが、まあ、思い立ったが吉日ということで、S88 Detector 8chを移植してみることにしました。
今までは、シンボルの無いものやフットプリントの無いものはどんどん作っていましたが、こちらは、なんかネットを探すと落ちていることが多いので、それを最大限使ってみましたが、どうも、形が微妙に違うため、そこから直していって・・・。結局、結構自分でチェックして作り直す羽目になりました。
あとは、私は、寒い日はリビングに持って行ったノートパソコンで作って、寒くない日は自分のスペースのデスクトップPCでやったりするのですが、プロジェクトをローカルに落としてやっていると、ライブラリの場所が基本的に絶対パスで通されているようで、ライブラリが見つかりませんエラーで大変なことになりました。(プロジェクトはマイドキュメント系の所に入れているので、絶対にパス変わるし・・・)どっか、ネットワーク上のドライブにライブラリも含めておいて置くべきなんですかね?
で、まずはBschのところ、これが、
こうなります。
MJ-4PP-9(3.5mm4極ミニジャック 基板取付用)、LANコネクタ、ArudinoNano、ボリュームなど、どれもネットでどなたかが作ってくれたものを流用して作っています。少し、大きくなったりして、回路を描くスペースに工夫が必要になりましたが、まあ、特に問題はありません。
そして、次にアートワーク。もともとが
を、並べて、
自動配線して、ベタGND付けてとやったのがこちらです。
ハマったところが沢山あります。(以下はほぼ自分用のメモです)
1.自動配線はファイル内に2バイト文字が入っていると、エラーが出て配線してくれません。ファイル内の2バイト文字を変更したりするとよいらしいです。ファイル内を見ると(中はテキストファイルですが)、パスに日本語が紛れていましたので、Cドライブ直下に近いところにプロジェクト自体を写して、やったら、まあ、問題なく自動配線を開始できました。(といろんな人が書いている)
2.自動配線用のSDNファイルをAutoRouterで読み込んだ時にincompleteエラーのポップアップが出ることがあるが、「いいえ」で抜けると普通にその後自動配線ができる。いいのかしら?なんか、アートワークを始めたあとにフットプリントをぐちゃぐちゃ変えると、この状態に陥る感じがします。
3.自動配線時、スルーホールが楕円になっていると、90°ごとにしか、配線を開始してくれない。ArudinoNanoのフットプリントのスルーホールが外見は円だが、属性が楕円で、自動配線時、斜めに配線してくれず、残念な感じでした。(属性を円にしたらちゃんと斜めに配線開始してくれました)
4.ネットで取ってきたフットプリントが妙だったり、間違っていたり。で、ArudinoNanoもLANコネクタもVRも、3.5㎜ジャックもフットプリント修正しました。まあ、タダですし、そこは自己責任でということですよね。
6.フットプリントの更新は、ツール→ライブラリからフットプリントの更新で行うと変わります。
よくわからんが編集のフットプリントを変更からだと変わらないです。
7.デザインルールの説明でわかりやすかったページ。
8.ベタGNDの禁止領域の更新。禁止領域のプロパティを開いて、OKすると、更新されます。
後はDCCのロゴを入れる方法を考えるぐらいかな?と、思います。
ですが、なんか新しい基板作る用事もなかったので、ずっとほっぽっていたのですが、まあ、思い立ったが吉日ということで、S88 Detector 8chを移植してみることにしました。
今までは、シンボルの無いものやフットプリントの無いものはどんどん作っていましたが、こちらは、なんかネットを探すと落ちていることが多いので、それを最大限使ってみましたが、どうも、形が微妙に違うため、そこから直していって・・・。結局、結構自分でチェックして作り直す羽目になりました。
あとは、私は、寒い日はリビングに持って行ったノートパソコンで作って、寒くない日は自分のスペースのデスクトップPCでやったりするのですが、プロジェクトをローカルに落としてやっていると、ライブラリの場所が基本的に絶対パスで通されているようで、ライブラリが見つかりませんエラーで大変なことになりました。(プロジェクトはマイドキュメント系の所に入れているので、絶対にパス変わるし・・・)どっか、ネットワーク上のドライブにライブラリも含めておいて置くべきなんですかね?
で、まずはBschのところ、これが、
こうなります。
MJ-4PP-9(3.5mm4極ミニジャック 基板取付用)、LANコネクタ、ArudinoNano、ボリュームなど、どれもネットでどなたかが作ってくれたものを流用して作っています。少し、大きくなったりして、回路を描くスペースに工夫が必要になりましたが、まあ、特に問題はありません。
そして、次にアートワーク。もともとが
を、並べて、
自動配線して、ベタGND付けてとやったのがこちらです。
ハマったところが沢山あります。(以下はほぼ自分用のメモです)
1.自動配線はファイル内に2バイト文字が入っていると、エラーが出て配線してくれません。ファイル内の2バイト文字を変更したりするとよいらしいです。ファイル内を見ると(中はテキストファイルですが)、パスに日本語が紛れていましたので、Cドライブ直下に近いところにプロジェクト自体を写して、やったら、まあ、問題なく自動配線を開始できました。(といろんな人が書いている)
2.自動配線用のSDNファイルをAutoRouterで読み込んだ時にincompleteエラーのポップアップが出ることがあるが、「いいえ」で抜けると普通にその後自動配線ができる。いいのかしら?なんか、アートワークを始めたあとにフットプリントをぐちゃぐちゃ変えると、この状態に陥る感じがします。
3.自動配線時、スルーホールが楕円になっていると、90°ごとにしか、配線を開始してくれない。ArudinoNanoのフットプリントのスルーホールが外見は円だが、属性が楕円で、自動配線時、斜めに配線してくれず、残念な感じでした。(属性を円にしたらちゃんと斜めに配線開始してくれました)
4.ネットで取ってきたフットプリントが妙だったり、間違っていたり。で、ArudinoNanoもLANコネクタもVRも、3.5㎜ジャックもフットプリント修正しました。まあ、タダですし、そこは自己責任でということですよね。
6.フットプリントの更新は、ツール→ライブラリからフットプリントの更新で行うと変わります。
よくわからんが編集のフットプリントを変更からだと変わらないです。
7.デザインルールの説明でわかりやすかったページ。
8.ベタGNDの禁止領域の更新。禁止領域のプロパティを開いて、OKすると、更新されます。
後はDCCのロゴを入れる方法を考えるぐらいかな?と、思います。
2021-04-25 16:53
コメント(0)
ラズピコリセットボタン [その他]
毎度、生存確認状態のBlogになっていますが、今年に入ってから会社が忙しくて、土日は、スマホのゲームをすると終わってしまうぐらいにやる気があまりない状態になっています。まあ、もう少ししたらゴールデンウィークだし、割と大型連休にできそうな雰囲気なので、なにかだましだましいろいろとやっていこうと思います。
というのは置いておいて、あやのさんからラズピコリセットボタンのキットをいただいたので、作ってみました。
キット内容はこんな感じ。(これは2セット分かもです)。
表面実装部品なので、老眼にはつらいです。ただ、DCCデコーダのように詰め込むために頑張ってしまった変なレイアウトではないので、はんだ付けは難しくないと思います。コンデンサがフットプリントと大きさが揃っていないとのことで、確かに少々ハンダブリッジ気味に付ける必要がありました。
そして、ラズピコに搭載。ちゃんとモード切り替わりました。(違うスケッチを書いていたため、最初、LEDが光らず、ぶっ壊したかとひやひやしていましたが・・・。)
これで、ボタンを押して切り替えるという作業が必要ではあるけど、Arduinoっぽく使えるのかな?
というのは置いておいて、あやのさんからラズピコリセットボタンのキットをいただいたので、作ってみました。
キット内容はこんな感じ。(これは2セット分かもです)。
表面実装部品なので、老眼にはつらいです。ただ、DCCデコーダのように詰め込むために頑張ってしまった変なレイアウトではないので、はんだ付けは難しくないと思います。コンデンサがフットプリントと大きさが揃っていないとのことで、確かに少々ハンダブリッジ気味に付ける必要がありました。
そして、ラズピコに搭載。ちゃんとモード切り替わりました。(違うスケッチを書いていたため、最初、LEDが光らず、ぶっ壊したかとひやひやしていましたが・・・。)
これで、ボタンを押して切り替えるという作業が必要ではあるけど、Arduinoっぽく使えるのかな?
2021-04-18 11:48
コメント(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)