2020年10月25日日曜日

ESP32/arduino : WEBから制御可能なNゲージ用 PWM制御パワーパック_改4

目的:

Nゲージ用 PWM制御パワーパックの改良/機能追加として、以下を行う。
(1) フォトリフレクタ TPR-105 による車両検出

追加機能:

レイアウトの主要地点に TPR-105 を設置し、車両検出を行う。
自動運転時、車両検出 (通過検出) により次の動作(設定)へ移行する。

 

車両検出ハードウェア:

 PWPK ハードウェア(回路) は こちら
 車両検出回路 は こちら

ESP32 に TPR-105 を接続できる端子が余っていない為、I2C接続の I/Oエキスパンダ(MCP23017) を使用して TPR-105 を接続している。
MCP23017 の使い方は こちら を参照。
TPR-105 の使い方は こちら を参照。
 

WEB画面:

車両検出対応の為、PWPK設定画面 ( 自動運行の設定画面 ) を下の様に変更。

 "設定更新契機" で、次の設定を開始するタイミングを
・時間経過
・地点通過
・スイッチ押下
から選択する。
地点通過で車両検出を行う。

その他の画面は WEBから制御可能なNゲージ用 PWM制御パワーパック_改3 と同じ。


スケッチ等:

スケッチ等は こちらのファイルを参照。(zipファイル)
スケッチ等の構成は、改3 と同様。
詳細はコメントを参照。
 

HTML     :   PWPK MAIN HTML (pwpk.html)

PWPK設定 HTML   (pwpk_conf.html)
PWPK XHR 応答 HTML (pwpk_resp.html)
WiFi設定 HTML (wifi_conf.html)
WiFi XHR 応答 HTML (wifi_resp.html)
スケッチ :    MAIN (pwpk_5.ino : 変数定義, setup, loop 関数)
WIFI設定 (wifi_config.ino : 主に WiFI 設定用 の関数)
PWPK処理 (pwpk.ino : 主に PWPK処理、PWPK 設定用 の関数)



車両位置検出概要:

車両位置検出は、以下の変数を使用する。

det_ariv : 到達フラグ。検出位置に到達したことを示す。定期割込み開始時にクリア。
pnt_extno : 車両位置。
最後に到達した位置を示す。初期値は 0xff

pnt_arrive[8] : 検出位置毎の到達フラグ。
検出位置に到達した事を示す。
検出位置 に 到達した時 '1', 処理終了か、別検出位置到達で '0'

pnt_mask[8] : 検出位置毎のマスクフラグ。
検出位置到達後、一定期間、到達の検出を行わない様にする
検出位置 に 到達した時 '1', 一定期間経過経過後に '0'

pnt_time[8] : 検出位置毎の到達時刻。
検出位置 に 到達した時の時刻を記憶する。


車両位置検出の処理の概要は以下の通り。
 (実際の処理は、スケッチ 参照)
  • 車両の位置情報取得
    1. 各検出位置毎に 到達後の経過時間をチェックし、一定時間経過していればマスクフラグを解除する。
    2. MC23017の割込み状態を取得 ( INTFA, INTCAPA をリードする )。
    3. 到達フラグをクリア。
    4. 割込み発生時、各変数更新。
      1. 到達位置を取得。
        マスクされていない位置に到達した時、到達フラグをセットして到達した位置を取得。
      2. 各変数更新。
        到達した位置の場合、到達フラグ(pnt_arrive[n]),マスクフラグ(pnt_mask[n]) をセットし、, 到達時刻(pnt_time[n])を更新。
        到達した位置ではない場合は、到達フラグ(pnt_arrine[n]) をクリア。

  • 自動運転制御中の 車両位置検出処理
    1. 自動運転開始時、全検出位置の変数を初期化する。
    2. 設定更新契機が地点通過の場合、待っている位置の到達フラグを確認。
      到達フラグが立っていた場合、自動運転設定の更新フラグをONし、全検出位置の到達フラグをクリア。

また、パワーパックの制御(定期割込み処理) の 概要は以下の通り。

  • 操作盤情報取得 : 操作盤の状態を取得し、状態により制御設定値を更新する。
    (Local(制御盤操作) 時)
    制御盤のスイッチ状態を取得する。
    (設定モード時)
    READYスイッチが押下ならWiFi再起動
    (通常モード時)
    出力用ボリューム値取得
    (制御盤操作許可時)
    (走行中ではない時)
    進行方向スイッチをチェックし、変化したらフラグをセット
    READYスイッチをチェックし、押下ならLED常時点灯設定を現在の反対にセット
    STARTスイッチをチェックし、押下ならスタートフラグをセット
    自動走行でない場合は、PWMduty値にボリューム値から計算した値を設定
    (制御盤操作不許可時)
    PWMduty値にOFF状態の値を設定
    ボリュームの値が'0'なら制御盤操作を許可にする。
    (Remote(WEB からの操作) 時)
    READYスイッチをチェックし、押下ならLocalにする。
  • 車両位置情報取得 : センサ()の状態を取得し、車両の位置情報を更新する。
    車両位置検出マスクフラグ更新
    MCP23017割込み状態取得(車両位置検出)
    車両位置検出用変数更新
  • 自動運転制御 : 自動運転設定により、制御盤設定値を自動で更新する。
    発車スイッチチェック
    (発車スイッチがONの時)
    (自動運行実行中ではない時)
    自動運行開始要求をON
    (自動運行実行中の時)
    (発車スイッチ待ちの時)
    設定更新要求をON
    (発車スイッチ待ちではない時)
    停車要求ON
    自動運転開始
    (自動運転開始要求がONの時)
    運転設定No.を1にし、各パラメータをセットする
    加減速要求ON
    通過位置情報をクリア
    ステータスLED値をNo.に設定して点灯ON
    自動運転中フラグをON
    開始時の時刻を取得
    自動運行中の処理
    (自動運転中フラグがONの時)
    (設定更新契機が時間経過の時)
    開始からの時間が運転設定時間以上なら設定更新要求ON
    (設定更新契機が地点通過の時)
    設定地点の到達フラグがONなら設定更新フラグをONし、全到達フラグをクリア
    (設定更新要求ONの時)
    次の有効な設定No.を探す。
    有効な設定No.が無い場合は停車要求をON
    (停車でない場合)
    設定を更新。
    ステータスLED値をNo.に設定して点灯ON
    (加速要求がONの時)
    (PWMduty値が目標値でない場合)
    PWMduty値に加速度設定値を加減算する
    (PWMduty値が目標値の場合)
    加速要求をOFFする
    (停車要求の時)
    (PWMduty値が停車時のdutyより大きい場合)
    PWMduty値から加速度設定値を減算する
    (PWMduty値が停車時のduty以下の場合)
    停車要求をOFFする
    自動運転中フラグをOFFする
    ステータスLED値を停車時の値に設定して点灯ON
    (自動運転中フラグがOFFの時)
    (停車時設定変化時)
    ステータスLED値を停車時の値に設定して点灯ON
    走行中フラグ更新
    PWMdutyの値から走行中の判定をしてフラグをON/OFF
    操作盤制御:更新された制御盤設定値により、走行設定を行う。
    進行方向設定
    ステータスLED制御
    PWMduty設定
    デバッグ用シリアル出力
    デバッグ用にシリアル画面に各種情報を出力する。



0 件のコメント:

コメントを投稿