RMCS鉄道模型制御の最近のブログ記事

アルミ・トランクへの収納
 このレイアウトは市販のアルミ・トランクへ収納することを意識しながら設計しました。写真はA4とB4の中間くらいの大きさです。蓋を外すことができるタイプです。

22_P1000744.jpg このようにレイアウトを分解することなく収納することができます。
 
課題10
 次の順番で列車1と列車2を交代で運行するプログラムを作成しましょう。

  列車1=> 出発=>センサ3反応 3秒停止 => 反転出発=> センサ1反応=> 停止
  => ポイント切り替え
  列車2=> 出発=>以後、繰り返し

mbedプログラミング
・新しく導入したアクティブ光センサはp9~p11に接続します。
DigitalIn Asens1(p9);
DigitalIn Asens2(p10);
DigitalIn Asens3(p11);Asensは反応した時にAsens1~3=XONとなります。

・この課題より、システム・スタート時はセンサ1とセンサ2の上に車両がいて、反応しているときにスタートする設定に変更しました。
  lcd.cls();
  lcd.locate(0,0);
  lcd.printf("Set Train on rail!!");
  lcd.locate(0,1);
  lcd.printf("==>Sns1:XON,Sns2:XON");

■■Publish
 下記URLにてPublishしています。
  http://mbed.org/users/takeuchi/programs/2ck0122_RMCS10/m5ne8o
レイアウトの準備
 写真のようにセンサ1~3、ポイント一つを設置したレイアウトを用意します。作例では橋脚を利用して立体的レイアウトに仕上げました。
 
0_image.jpg 手前がセンサ1,奥がセンサ2です。配線はレールの下などをうまく通して隠してください。
 単線レイアウトを拡張して一端にポイントを設置し、2列車の交換運転を楽しみましょう。このレイアウトは小型アルミ・トランクに収納する予定です。

回路図
 CdS光センサは安価で設置が簡単なのが特徴です。しかし、周囲の明暗によってはうまく動作せず、ちょっとした影に反応してしまい、思わぬ誤動作を招きます。また、暗くした部屋では動作しません。そこで、この問題を解決するために赤外線LEDの発光を受光して動作するインタラプト型センサ=アクティブ光センサを利用して車両位置を検出します。
 アクティブ光センサユニットを接続するために新たな回路を設計製作し、mbedに接続します。

zu-1.jpg
 完成したmbed RMCS 2列車交換エンドレス・レイアウトを楽しみましょう。

119系
 飯田線をイメージして119系 JR東海色と登場時色=スカイブルーを配置しました。駅はトミーテック製です。

15_P1010187.jpg 20年ほど前、飯田線の各駅では貨物の扱いもあり、2~3面のホームがある駅がけっこうありましたが、今では片面のみの無人駅が増えています。そのかわり駅舎も近代的になりました。
 2列車の交換ができるレイアウトは完成しましたか? このレイアウトのmbedプログラミングを楽しみましょう。

課題9
 次のように列車を運行するプログラミングを楽しみましょう。

11_P1010186.jpg写真手前:列車1、奥:列車2とします。

ポイント初期化・・・切り替え1、2、1
列車1=> 3周=>4周目:センサ3より速度ダウン =>駅停車=>ポイント切り替え
列車2=> 同じ走行パターン繰り返し

Vr1:列車1速度、Vr2:列車2速度

ポイント・・・ポイントを切り替える際には0.8A程度の電流が0.2秒間流れるので、両方を同時に切り替えるのではなく、順次切り替えないと電圧降下によるトラブルが発生する可能性があります。
 小型のエンドレスにポイントを2か所設けて、2列車が交換運転できるレイアウトを楽しみましょう。CdS光センサは3か所設置します。写真を参考にしてください。

1_image.jpgCdS光センサの設置
 センサ1 設置の様子です。場所を変えながらテストを繰り返したので、いくつか穴が開いています。
ローカル線ムードを楽しみましょう
 単線往復運転システムは完成しましたか? CdSセンサの前に駅やホームを配置して、目線を下げて列車の運行を楽しみましょう。

7_P1000144.jpg 単線レイアウトはエンドレス・レイアウトに比べると、狭い場所でも楽しむことができることが特徴です。
 
課題8
 両端にCdS光センサを設置した単線往復レイアウトのセンサの間を、列車が往復するmbedプログラムを作成しましょう。

4_P1000138.jpgmbed プログラミング
 アルゴリズムとしては以下の動作を繰り返します。
  センサ1より発車=> センサ2が反応するまで走行継続 => センサ2到着 =>5秒停車
  センサ2より発車=> センサ1が反応するまで走行継続 => センサ1到着 =>5秒停車
 単線エンドレス・レイアウトであってもCdS光センサを一つ追加することでずいぶんと楽しむことができたと思います。センサを二つ設置した単線レイアウトを題材にした課題です。

レイアウトの準備
 直線のみで構成する簡単なレイアウトです。

1_P1000113.jpg
 エンドレス・レールを使った最後のプログラミングを楽しみましょう。

課題7
 この課題ではCdS光センサ(以後、CdSセンサ)を検知するごとに、
  右回り=> (センサ反応) 5秒停止=> 左回り=> (センサ反応) 5秒停止=> ・・・
を繰り返すプログラムを作成しましょう。

mbedプログラミング
  while(1){
  //右回りで走行開始 
    while(sens1==XOFF){
   //右回り継続
    }
  // センサ反応したので・・・
  // 5秒停車中の処理
  // 左回り開始
    while(sens1==XOFF){
   //左回り継続
    }
  //センサ反応したので・・・
  //3秒停車中の処理
  }//while

 CdSセンサを利用したmbedプログラムを楽しみましょう。

課題6
 CdSセンサの上を列車が通過した回数=周回数をカウントするプログラムを作成しましょう。

mbedプログラミング
 CdSセンサがXONになったときをカウントすれば完成しそうなプログラムですが、XONになった状態をXOFFになるまで確認しないとあっというまにカウントが進んでしまいます。次を参考にしてプログラミングに挑戦してください。
      if(sens1==XON){
        count++;
        //カウント表示
        while(sens1==XON){ // CdSセンサを通過するまで待つ
        }        
      }
      else{ // センサを通過していないとき
      lcd.locate(0,2);
        lcd.printf("sens1 OFF");
      }

 
 レールに設置したCdS光センサ(以後、CdSセンサ)を利用したmbedプログラムを楽しみましょう。

課題5
 CdSセンサ上を列車が通過している間は”sens1 ON!”、そうでないときは”sens1
OFF”と表示するプログラムを作成しましょう。列車はVr1で設定した速度で走行します。

mbedプログラミング
・CdSセンサはmbed RMCSユニットに三つ接続できます。センサ1:p17、センサ2:p18、センサ3:p19です。今回はセンサ1だけを使用します。
DigitalIn sens1(p17);
DigitalIn sens2(p18);
DigitalIn sens3(p19);
 レールにCdS光センサ(以後、CdSセンサ)を設置して、センサユニットが使えるようにします。

レールの加工
 レールとレールの中心に使用するCdSの直径に合わせた穴を開けます。作例では秋月電子で販売しているφ5mmのCdSに合わせて穴を開けました。

 
7_P1000078.jpg
 ボリュームを回すことで列車の速度制御ができるようになりましたか? ここでは二つのボリュームを有効活用した課題を考えます。

課題4
 課題2と似ているのですが、ボリュームを二つ活用したプログラムを作成しましょう。
 Vr1の設定速度で20秒間右回り走行 => 3秒停止 =>Vr2の設定速度で20秒間左回走行 =>3秒停止 ・・・繰り返す

mbedプログラミング
・ボリュームの接続
 Vr2はp16に接続します。A-Dコンバータを利用します。
AnalogIn vr2_adc(p16);
 一つ目のforループではVr1の設定速度で列車は走行します。二つ目のforループではVr2の設定速度で走行します。

■■Publish
 下記URLにてPublishしています。

  http://mbed.org/users/takeuchi/programs/2ck0111_RMCS04/m407g1
 簡単なエンドレス・レイアウトを使った課題を続けます。

課題3
 列車の速度をボリュームで制御するプログラムを作成しましょう。左側の赤いつまみのボリュームをVr1として制御します。A-Dコンバータを使う課題です。

mbedプログラミング
・ボリュームの接続
 Vr1はp15に接続します。mbedのA-Dコンバータを利用して、アナログ値として読み取ります。
AnalogIn vr1_adc(p15);

・A-D変換
 Vr1の電圧は0~1.0に変換されてpdutyに入ります。この値をそのままnotch関数に渡せば列車の速度を制御することができます。
   pduty=vr1_adc.read();
   notch(pduty);

■■Publish
 下記URLにてPublishしています。

  http://mbed.org/users/takeuchi/programs/2ck0111_RMCS03/m40yms





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.