HOME >> 鉄道模型工作室 >  マイコン式の運転操作台を作ろう ブレッドボードでのテスト

鉄道模型工作室  マイコン式の運転操作台を作ろう ブレッドボードでのテスト

 マイコンを使った運転操作台を作ってみようと思い立ち、さっそく手を動かしました。 制御ロジックの骨格が固まったので、ロジックとハード回路の確認のために、ブレッドボードによるテストを実施することにしました。

 

■ ハード回路の検討

 まず、機能を実現させるハード回路を検討しました。 制御マイコンは、一般的な Arduino UNO を使用する事にします。  液晶表示パネルは、以前使用していたキャラクターLCDを再利用します。 16×2行バックライト緑付(SD1602HULB-XA)小型CDモジュールで、インターフェースIC(HD44780 コンパチ)を備えているものです。

 マスコンやブレーキのノッチ選択は、「ロータリスイッチのコード化」(2021/1/16)と同じロータリスイッチを使用する予定ですが、ブレッドバードでのテストの場合には、小型でコード化されたスイッチを使用しました。 DIPロータリースイッチ正論理タイプ(ERD216RSZ)です。 16ポジションの物ですが、0〜7ポジションを使用予定ですので、出力は3本のピンを使用します。 各ピンは選択されない場合の浮き防止のためプルダウン回路にしておきます。

 供給電圧は給電を考慮して12ボルトを使用し、付属機器類の制御電力として Arduino の負担を減らすため、いつもの様に 5v定電圧ユニットを使用します。 モータドライバは今まで使用してきたドライバを使用し、フィーダーはテストですのでひとつだけ設定しました。

 

 配線図を上に示しますが、Arduino のポートは満杯となりました。 PWM出力はD10ポートを使用し、PWMのキャリア周波数を 20Kh/z にする予定ですのでD9ポートは使用出来ません。 その理由は「Arduino Uno のPWMキャリア周波数を20kHzにする」(2020/4/4)を参照下さい。

 回路を組んだ状態を下に示す。

 ここまですんなりと進んだ様に記述していますが・・・・・・・・・、あちこちヘマをしてウロウロしていました。 内容は恥ずかしいので内緒にしておきます。

 

■ スケッチの記述

 制御の基本となるロジックをプログラムとして記述して行きます。 まず、最初に昔実施したことのある液晶表示パネルの表示方法から復習する事にしました。 やはり心配した通りにエラーとなってコンパイルできませんでした。 ネットのアドバイスに従し、 megaavr ボードパッケージをバージョンアップして対応しました。 無事表示できるようになったので、操作ダイヤルの選択状態をチェックする部分から記述を始めました。

 各スイッチ毎に、 if 〜 else if 〜 文を使ってノッチ数を選択します。 そのノッチ数に従って先回報告した要領で車速を計算し、液晶パネルにその結果を表示させるようにしました。

 ここでも、単純ミスとか思い込みによって狙いどうりに作動せず、スケッチのバージョンがいくつも出来てしまいました。 当初は、全てを記述してからテストするつもりでしたが、不具合の原因が分からなかったため、最初に戻ってひとつづつ進めることにした。 処理結果をシリアルモニタに表示させ、作動状態をチェック確認しながら進めました。 記述は馴れたと言えども一歩づつ進めるべきですね。

  1. 各操作ダイヤルからノッチ数を読み取る部分を関数化しようとしましたが、うまく行かず結局それぞれを記述しました。
  2. 変数のスコープという概念に足をすくわれました。 グローバル変数とローカル変数の取り扱い方です。 勉強不足でした。 例えば車速を表す変数 v を、最初は void loop() 内で定義していましたが、ループが実行されるたびにゼロクリアされる様で、車速の逐次計算は何時もゼロでした。 そこで、int v ; の記述を void setup() や void loop() の記述の前に宣言する、即ち、グローバル変数として宣言して、やっと正常に逐次計算が実行できるようになりました。 まだまだ初心者ですね。
  3. 車速 v の逐次計算の中で、v = v + 0.1*(vm - v) として計算していました。 vm は目標車速です。 なお、スケッチの記述の中では変数を小文字で記述するようにしています。 そして、車速 v は int v ; として整数で定義しています。 テストを実施すると目標車速に近づくのですが、常に 9Km/h 小さい値に収束します。
    原因は? v を整数としているからです。 目標車速との差が9以内になると、これに 0.1を掛けていますので 0.9以下 となりますが、整数とするために小数点以下は切り捨てられているようです。 従ってこれ以上は加算されないのです。 そこで、v = v + 0.1*(vm - v + 9) として計算すると目標車速に収束します。 うまくいった思ったのですが、今度は上から目標車速に近づく場合は +9 の状態に収束します。 数式をあれこれ考えるのは面倒なので、収束する方向を場合分けして対応しました。
  4. PWMのデューティ値の記述方法を間違えていました。 デューティ比は、0〜100%であると言う概念が先行していたため、車速をデューティ値に変換する時、デューティ比を使っていました。 スケッチでのanalogWrite() では、0〜255の値を指定するのですよね。 トロイ!

 車速の演算と液晶表示の記述がパスできると、PWM制御部分を追加して、実際に作動するのかを確認するため簡単なレイアウトで走行テストを実施しました。 その時の状態を下に示す。

 電車が動き出した時はやっぱりうれしかったですね。 これでこの方法でも実現できると確信しました。

 これらの作業時の様子を動画で紹介します。 最初は、ダイヤル操作と液晶表示状態を確認している時の様子です。 まだ馴れていないマスコン操作とブレーキ操作にうろうろしています。 次に、初めて電車を走らせた状態です。 そして、PWMのデューティ値の記述方法を変更した時の状態です。 PWM信号のキャリヤ周波数は、約490Hz ですので、キーンという耳障りな音が聞こえています。

 次回は、周波数を 20KHz にアップした状態と常灯レベルの確認状態を報告しよう。

 

ページトップへ戻る .


 2021/4/19 作成