Arduinoで鉄道模型PWMコントローラーを自作
2015年 01月 19日
感謝を込めて、私も製作記を公開したいと思います。
参考にさせていただいた、しろくまさんのページ: ArduinoでPWMパワーパックを作ってみた
▼できあがり写真
では、以下に詳細を。
●使用部品
基本的には、しろくまさんがリストアップされているものと同じです。
ただし、7セグLEDについては、表示情報量を格段に増やすことができるキャラクター液晶ディスプレイ(C-LCD) TC1602を使うことにし、マルツで入手しました。秋月電子で買えるSC1602でも同じです。
●製作順序
1. 電気のINPUT側から、H/Wを組み立て始めました。構成はしろくまさんと同一。きちんとACアダプターからの12V入力が5Vに落とせていることを確認します。
2. Arduinoのマイコンチップ ATMEGA328P の周辺に接続される周りの部品を接続していきます。まずは、加速率や常点灯調整のダイヤルとマスコンのロータリースイッチ、クリスタルの辺りを作り込みます。
レールへの出力部分の実装は後からにしました。
この部分の部品構成とマイコンへの接続先も、しろくまさんの回路図とほぼ同一。
3. ロータリースイッチ部分はちょっとオリジナル。梅澤無線で入手したものなんだけど、ストッパーが無く何周も回転してしまう物しかなかったので、ロータリースイッチを分解し、回転する部品が周回する、円周上のとある位置にピンバイスで穴を空け、針金を埋め込んでストッパーとしました。力業(笑)
▼こんな部品。
そしてロータリースイッチへの抵抗の接続について。
フルノッチは目一杯時計回りに回し切ったところとしているのですが、そこを便宜上ロータリースイッチの位置12番としています。反時計回りに回し切ったところは位置1番としました。1kΩ抵抗をロータリースイッチの円周上にグルリと並べて接続し、位置1番の時に11kΩ、位置2番の時に10kΩ・・・位置12番の時に0kΩとなるようにしました。
4. 次にソフトウェア。Arduino unoにて、ロータリースイッチからの入力値調整を実施。ArduinoではanalogRead値は0~1023の値として読み取られるのですが、ロータリースイッチが12段階切替なので、0~1023の入力値を、1~12の12段階に分けます。
つまり、0(=analogRead値Min)の時に値「1」としたく、1023(=analogRead値Max)の時に値「12」にしたい訳です。これをロータリースイッチ位置1番~12番と紐付けたいのです。
0~1023を85.333(=1024/12)で割ると0.000~11.988になります。analogRead値0、1、2・・・と増えるにしたがって0.000、0.011、0.023・・・と少しずつ値が増えていき、最終的にanalogRead値1023では11.988になる訳です。これらの値を四捨五入すれば1~12の値に集約できそうです。
ロータリースイッチを接続した3番ピンからのanalogRead実測値は、私の環境では以下のとおりでした。
・ロータリースイッチの位置が 1の時:11kΩ ⇒ 83
・ロータリースイッチの位置が 2の時:10kΩ ⇒ 169
・ロータリースイッチの位置が 3の時: 9kΩ ⇒ 254
・ロータリースイッチの位置が 4の時: 8kΩ ⇒ 340
・ロータリースイッチの位置が 5の時: 7kΩ ⇒ 425
・ロータリースイッチの位置が 6の時: 6kΩ ⇒ 511
・ロータリースイッチの位置が 7の時: 5kΩ ⇒ 596
・ロータリースイッチの位置が 8の時: 4kΩ ⇒ 682
・ロータリースイッチの位置が 9の時: 3kΩ ⇒ 767
・ロータリースイッチの位置が10の時: 2kΩ ⇒ 853
・ロータリースイッチの位置が11の時: 1kΩ ⇒ 938
・ロータリースイッチの位置が12の時: 0kΩ ⇒ 1023
でした。
読み取れた値はだいたい85.3の倍数になっていますね。
四捨五入相当の簡単な代替計算として『+0.5した上で小数点以下を切り捨て』という処理にしました。
こんな感じ。
int getMasconVol(int vol) {
int ans = 0;
ans = (int)(((double) analogRead(3)) / (1024 / 12) + 0.5); // 3はRotarySW接続ピン番号
return ans;
}
5. C-LCDの接続と表示内容について。
しろくまさんオリジナルの7セグメントLEDの代わりに、Arduinoデジタルピン5番~9番と12番(=ATMEGA328での11番~15番と18番)へC-LCDを接続しています。
しろくまさんプログラムでは、電源ON→走行パターン選択(初期設定)→走行可能という流れで進みますが、基本はその流れのままです。12種類の走行パターンの名称を表示させたり、マスコンノッチ位置や速度値を表示させるようにしています。最初の写真のC-LCDの1行目は走行パターン名、2行目左側はスピード(しろくまさんのソースコードでいう"spd"変数の値)、2行目右側はノッチ位置(1番から12番を順に、EB:Emergency Brake、B5~B1、N、P1~5)となっています。
動画にしてみるとこんな感じ。
▼ホワイトベア・コントローラ Rev.1.0 (の製作途中)
http://youtu.be/22ebGRu_r8o
6. 私の環境に合わせてパラメーター変更も幾つか実施。しろくまさんソースでいう KASOKU や GENSOKU は 3 ですが、なっかなか加速しなかったので試行錯誤した結果、それぞれ 50、20 という値にしています。
7. VVVF音のパターンを2種類、独自に用意してみました。具体的にはEF210,EF510と、EH200,EH500。JRFのカマなんて金太郎しか持ってないんですが、動画で聴く桃太郎やレッドサンダーはVVVF音の変調があって気に入りました。ただし北の大地では実物を体感できません(苦笑)
値は以下のようにしています。
//パターン5 EF210,EF510
784, 784, 11,// 1 開始周波数 終了周波数 切替スピード
784, 784, 21,// 2 開始周波数 終了周波数 切替スピード
784, 1480, 56,// 3 開始周波数 終了周波数 切替スピード
1480, 1480, 101,// 4 開始周波数 終了周波数 切替スピード
-1,// 5 終了コード
//パターン6 EH200,EH500
1000, 1000, 11,// 1 開始周波数 終了周波数 切替スピード
1000, 1000, 101,// 2 開始周波数 終了周波数 切替スピード
-1,// 3 終了コード
しろくまさんが、ソースの商用利用は不可とされていますので、私の上記VVVF音の値も私的利用目的に限ってご自由にお使いください。当記事にコメントいただけると嬉しいです。
8. レールへの出力部分も組み立て、TOMIXの単品ケースへ組み付けて形にしました。
9. 最後に、フィーダーについて。同じく梅澤無線さんで買った細いステレオプラグを使っちゃっています。2極だからちょうど良いでしょ。
【2018/02/22追記】
コメントいただいていたのに気付かず、お返事遅くなりました。すみません。
きちんとテスターを使って、電力がどこまで供給されているのかを、電源に近い側から順番にチェックしていくのは如何ですか?
暖かいコメントありがとうございます。途中経過や完成のご連絡をお待ちしています(^。^)
当記事を参照されている他の方にも有益な情報となり得るので、記事に追記する形で公開しました。如何でしょうか。
12V→5V降圧や、マイコンの各足との接続など、部分部分ごとにしろくまさんの回路図と照らし合わせてご確認されるのが良いかと思います。
頑張って〜!