2021年7月4日日曜日

妄想鉄道の夜 第1夜 Nゲージ+Arduino

 Arduino(ATMEGA328P)をNゲージに載せてみました。


 電子工作を始めたころから、鉄道模型にマイコン制御を組み込みたいと思っていました。
とりあえず、20年前に購入したNゲージを引っ張り出してSLの走行をためしました。
 最初、レールからの給電がうまくいかず。レールみがきから始めました。

それから3か月ようやくマイコン搭載の車両の走行が実現出来ました。
 

 概要

 Nゲージ車両にはマイコンATMEGA328Pを搭載、コントローラからIRによる指令を受信し、モータードライバを介して、モータを制御し、前進、停止、後退、速度調整を行います。











車両搭載/コントローラ マイコンの選定

 搭載マイコンは Texas InstrumentsのMSP430、Microchip Technology ATMEGA 考えています。 搭載スペースでは MSP430 開発の手軽さでは ATMEGA。とりあえず ATMEAG328Pを選択しました。

 コントローラ用のマイコンも開発の手軽さでArduino Nanoを選択。

Nゲージ車両






※モータドライバ、ATMEAG328P、2200uFコンデンサーの配置がポイント、配置を間違えると、発車、停止、前進後進切替え時にマイコンが暴走、制御不能に、









Nゲージコントローラ

 ※意外と、電動ポイントの駆動に電流が必要なことが判明、1000uF~4700uFのコンデンサに電荷をため込み、一気に放電させることでなんとか 電動ポイントの駆動に成功。
 極性(+/―)の反転用にモータドライバを使用。
 (コンデンサー/モータードライバ間に抵抗を配置して、過電流の防止を試みたが失敗、いろいろやって 2200uF のコンデンサを採用しました。)











マイコンのプログラミング 開発環境

 開発環境はArduinoIDEを使用します。




Arduino IDE は setup()関数で初期処理、Loop()関数で処理の本体を C言語で記述します。








ボードマネージャで 車両搭載マイコン ATMEAG328Pの場合Arduino Unoを選択、コントローラ用のマイコンの場合 Arduino Nano を選択して プログラミングを行います。 
(ターゲット毎に切替えるのは結構面倒)

ATMEAG328Pのプログラミングについて




ATMEAG328Pのプログラミングは、Aruduino UNO R3 自体に 取り外し可能な ATMEAG328P が搭載されているので Arduino Unoとしてプログラミングして、プログラムの書き込み後、UNOから取り外し、Nゲージ車両に搭載します。



 
※ Arduino IDEでのプログラミングで ピン「D9」 を使った場合 ATMEAG328Pでは  PB1 15ピンを使うことになる。





マイコンのプログラミング 実装

 今回のプログラミングの中心は 赤外線通信です。参考のプログラムコードはArduino IDEのスケッチ例から取得しました。

 IR通信 送信側(Nゲージコントローラ側)



Nゲージコントローラ側のプログラミングはスケッチ例/IRemote/IRsendRawDemoを参考にしました。

(※IrSender.sendRaw_P()を使用)

 IR通信 受信側(Nゲージ車両側)

【きむ茶工房ガレージハウス】 ◆ 赤外線リモコンを送信器にして何か動かす記事さんのコードを拝借
  赤外線リモコン受信モジュールの信号の Hi/Low の 間隔を測り 受信データをビットパターンで取得する。