HOME >> 鉄道模型実験室 > 登山鉄道レイアウトとモニタ式操作盤 ESP32モジュールを取付ける

鉄道模型実験室 No.225  登山鉄道レイアウトとモニタ式操作盤 ESP32モジュールを取付ける     

 登山鉄道レイアウトの操作盤について、以前検討したモニタ方式の操作画面からWiFiを使った通信によって、操作できないか検討をしている。 通信モジュールESP32の使い方をひと通り学習したので、いよいよ登山鉄道レイアウトに応用することにした。

 

  .

  .

■ ESP32モジュールの準備

 通信モジュールESP32の使い方をひと通り学習したので、いよいよ応用することにしました。 モジュールはESP32-DevKitCというESP32WROOM開発ボードとして入手していますが、このままではレイアウトにそのまま取り付けることが出来ません。

 まず、ArduinoMEGA のGPIO ポートとは、安全のために1KΩの抵抗を介して接続させます。 さらに、信号がない場合の浮きの状態を避けるために、15KΩを使ってプルダウン回路を形成しました。 何時もは10KΩを使うのですが、手持ちが無かったので15Kとしています。

 また、供給電源は安定化電源からのDC5volt から供給するようにし、USB使用時の電源干渉を避けるために、スイッチを設けています。 この場合の回路図を右に示します。

 通信モジュールESP32は39本のピンヘッダが取付られていますので、これにあわせて、ピンホルダをユニバーサルボードに取付けて、セットするようにしました。 下の写真参照。

 抵抗はチップ抵抗を使用しています。 下左の写真は、プルダウン回路を追加する前の状態です。

 

■ レイアウトへの取付

 作成したユニットをレイアウトボードの裏側に取付けました。 ノイズを嫌って機器類と少し離れた場所に設置し、配線も実施しました。 何時もの様に、行き当たりバッタリの工作ですので配線がグチャグチャです。 固定のためにはテープを多用していますが、応急処置のようなじょうたいです・・・・・・・・・・。見えない見えない!

 下左の写真は、5voltを供給する安定化電源で、出力ターミナルにもぐりこませています。

 Arduinoとの接続は、ピンヘッダを使って接続しています。 下右の写真は、スケッチを書込む時の状態です。

void loop(){
  aut = digitalRead(AUT);     //自動運転スイッチをチェック
  mnt = digitalRead(PTS3); 
  
  if (aut==LOW){     //手動運転モード
      if (mnt == LOW){               //パネル操作
        pts1 = digitalRead(PTS1);   //スイッチ類のチェック
        pts2 = digitalRead(PTS2);
        dswr = digitalRead(DSWR);
        dswl = digitalRead(DSWL);
        vol1 = analogRead(VOL1);
        duty=(vol1-500)/2;
      } else {               //モニタ操作
        pts1 = digitalRead(4);   //スイッチ類のチェック
        pts2 = digitalRead(3);
        dswr = digitalRead(9);
        dswl = digitalRead(10);
        spd = digitalRead(8);
        if (spd == HIGH){     //速度の設定
          duty = duty + 5 ;
          if (duty >= 100 ){
            duty = 100;
          }
        } else if (spd == LOW){
          duty = duty - 5 ;
          if (duty <= 0){
            duty = 0;
          }
        }
      }
    
      ledhyoji();          //パネル表示       
      if (pts1==HIGH){     //ポイント1操作
        p1han_i();
        delay(100);
      } else {
        p1tei_i();
        delay(100);
      }
      if (pts2==HIGH){     //ポイント2操作
        p2han_i();
        delay(100);
      } else {
        p2tei_i();
        delay(100);
      }
      if (dswr==HIGH){           //進行方向右設定
        digitalWrite(DIRR,HIGH);
      }  else {
        digitalWrite(DIRR,LOW);
      }
      if (dswl==HIGH){          //進行方向左設定
        digitalWrite(DIRL,HIGH);
      } else {
        digitalWrite(DIRL,LOW);
      }
      analogWrite(MPWM,duty);    //速度指示
      
  } else if (aut==HIGH){   //自動運転モード
*********  以下省略  *******

 

■ 制御用スケッチの追加と修正

 制御用マイコンであるArduinoMEGAのスケッチも追加修正が必要となります。

 

● 制御に関する情報の流れ

 まず、スケッチの記述を追加修正するにあたって、ボタン操作から作動デバイスまでの、情報記号の関係を整理しておきましょう。

ボタン GET信号 ESPポート MEGAポート スケッチの制御変数
ポイント1定位 point1 = off GPIO 12  LOW GPIO 4 LOW pts1 = LOW
ポイント1反位 point1 = on GPIO 12  HIGH GPIO 4 HIGH pts1 = HIGH
ポイント2定位 point2 = off GPIO 14  LOW GPIO 3 LOE pts2 = LOW
ポイント2反位 point2 = on GPIO 14  HIGH GPIO 3 HIGH pts2 = HIGH
右方向 direction = right GPIO 25  HIGH GPIO 9 HIGH dswr = HIGH
停止 direction = stop GPIO 25&26 LOW GPIO 9&10 LOW dswr & dswl = LOW
左方向 direction = left GPIO 26 HIGH GPIO 10 HIGH dswl = HIGH
UP speed = up GPIO 32  HIGH GPIO 8 HIGH spd = HIGH
DOWN speed = down GPIO 32 LOW GPIO 8 LOW spd = LOW

 こうすると、制御変数の取扱について、間違いが少なくなります。

 

● スケッチの追加と修正

 まず、元となったスケッチは、「ポイントのスローアクション駆動 レイアウトへの組込み」(2022/10/14)で紹介した 「ポイントのスローアクション駆動 レイアウトへの組込みスケッチ」 です。

 追加・修正した内容を箇条書きにしました。

 上記の内容をスケッチに記述した部分を右に示す。 当然ですが、ポートの指定は先頭部分で設定しているが、ポート名は面倒なので直接数字での記述として手抜きしている。 

 

■ テスト運転の実施

 ArduinoMEGA のスケッチを書込み、テストを実施した。 IPアドレスの固定化などで、いくつかのトラブルがあったものの、無事に作動させることが出来たが、その内容は次回に報告しよう。

 

 

 

ページトップへ戻る  .


 2022/11/4