無料ブログはココログ

« Bトレに止まらんを組み込む | トップページ | センサーレールリベンジ »

2017年6月22日 (木)

バスコレDCCコラボ編

  バスコレの動力はボタン電池で走行するので、直接DCCで制御する事は出来ませんが、前回のバスコレセンサー編の実験で、マグネットを使って停車させる事が出来ました。

Photo_2

そこで、列車が駅に停車したらバスも停車させる事にしました。

Photo_3

マグネットはサーボデコーダで移動させます(上写真サーボホーンの位置に注目してください)。yaasanさんのOEMServoDecoderスケッチを借用しました。列車の停車はフォトセンサーを2個使えば車速を検出できますが、面倒なのでサーボデコーダのスケッチをアドレスマスク無しのファンクションデコーダに変更して、DCCコントローラのスピードステップパケットを受信する事にしました。

CVPair FactoryDefaultCVs [] =
{
  CV_MULTIFUNCTION_PRIMARY_ADDRESS, DECODER_ADDRESS},
  CV_ACCESSORY_DECODER_ADDRESS_MSB, 0},
  CV_29_CONFIG, 0b00000110},
  ...
};

void setup()
{
  ...
  Dcc.init( MAN_ID_DIY, 10, FLAGS_OUTPUT_ADDRESS_MODE, 0 ); // ID, Ver, Flags, Ops)
  ...
}

  フォトセンサーとサーボモータは、踏切アクチュエータ用に作ったスマイルエキスパンド基板に繋ぎました

//各種設定、宣言
...
#define PIN_SERVO2  12 // smile connector#1 /MISO
#define PIN_STOP  13 // smile connector#3 /SCL

注1:電流100mAのサーボモータを駆動すると、5Vレギュレータの損失(PD)は(12[v] - 5[v]) x 0.1[A] = 0.7Wです。エキスパンド基板ではPD1WのTA78M05を使って5Vにドロップしています。DCCで使うシリーズレギュレータは最大電流よりも最大許容損失が重要です。

  DCC速度パケットでスピードステップを受信して、フォトセンサーがオンの時スピード0なら停車と判断します。excec_Function()は全LOCアドレスに反応するのでファンクション9に逃がしてますが、notifyDccFunc()でアドレスチェックすれば不用意にサーボが動き出すのを防ぐ事が出来ます。

//DCC速度信号の受信によるイベント
extern void notifyDccSpeed( uint16_t Addr, uint8_t Speed, uint8_t ForwardDir, uint8_t MaxSpeed )
{
  gSpeedCmd = Speed;
  ...
}

void loop()
{
  ...
  if( (millis() - gPreviousL6) >= 100)
  {
    int Stopstat = digitalRead(PIN_STOP);
    if(Stopstat == HIGH && gSpeedCmd <= 1)
    {
      exec_function(9, 1);
    }
    else if(Stopstat == LOW && gSpeedCmd > 1)
    {
      exec_function(9, 0);
    }
    ...
   }
  ...
}

« Bトレに止まらんを組み込む | トップページ | センサーレールリベンジ »

バスコレ」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: バスコレDCCコラボ編:

« Bトレに止まらんを組み込む | トップページ | センサーレールリベンジ »