見出し画像

DIY DCC Sound Loco Sketch

概要

DCC鉄道模型のスターターキットを構築することを目指して、DIYでサウンドデコーダ付き機関車を作っています。

Sketch

スケッチはArudino IDEで書きます。と言っても、スクラッチで書く訳ではなく、下に示すスケッチを使わせていただいています。これらを修正して組み合わせて機能を作り込んでいきます。

DesktopStationさん 電機屋の毎日
pioasmでDCCパルス幅をカウントしたものをパケットデコードする

fujigaya2 さん ゲヌマ・フジガヤ2
RP2040で音の再生実験 その3

NMRA Digital Command Control (DCC) Library
https://github.com/mrrwa/NmraDcc

最初のスケッチ

最初にハードウェアのテスト用のスケッチを作りました。
スケッチを書き込んで、電気(5-12v)を流すと、LEDが全点灯し、モーターが前進、加速、減速、停止、後退を繰り返します。また、DCC信号に合わせて、カラーLEDやスピーカーからの音が変化します。
このスケッチにより異常個所の推定ができます。

スケッチはこちら--->Google drive

DCCをデコードするスケッチ

DCC信号を検知して、モーターとLEDを制御する部分を書いていきます。

信号の検知はDesktopStationさんのスケッチを使います。今回のハード構成では入力ピンをPullupする必要がありますので、その部分を修正しました。

void setup()
{
// 略

  // PIOプログラムを初期化
  dcc_pulse_dec_init(gPio, gPio_SM, offset, PIN_DCC);

  // DCC信号ピンをPullupする HMX 2024-06-02
  gpio_pull_up (PIN_DCC);

// 略
}

モーターとLEDを制御する部分はNmraDccの
examples/NmraDccMultiFunctionMotorDecoder/NmraDccMultiFunctionMotorDecoder.ino
を修正して使います。
モータドライバにBDR6133を使っています。このドライバはINAとINBにPWM信号を入れることで方向と速度を定めることができます。NmraDccMultiFunctionMotorDecoder.inoはDIRとPWMで定めていますのでここを中心に修正しました。

BDR6133
// NmraDccMultiFunctionMotorDecoder.ino
// #define MOTOR_DIR_PIN 12
// #define MOTOR_PWM_PIN 3

// P029_DccMotorDecoder.ino
#define PIN_MOTOR_A 1       // For ZERO
#define PIN_MOTOR_B 2       // For ZERO
//analogWrite(MOTOR_PWM_PIN, newPwm);
Motor_Run(lastDirection, newPwm);

void Motor_Run(uint8_t Direction, uint8_t Speed) {
  if (Speed < 1) {
    analogWrite(PIN_MOTOR_A, 0);
    analogWrite(PIN_MOTOR_B, 0);
  } else {
    if (Direction > 0) {
      analogWrite(PIN_MOTOR_A, 0);
      analogWrite(PIN_MOTOR_B, Speed);
    } else {
      analogWrite(PIN_MOTOR_B, 0);
      analogWrite(PIN_MOTOR_A, Speed);
    }
  }
}

LEDもfunction0で点灯する様にしています。

起動時の初期化が上手く機能しなかったので、初回はCV8に8を書き込んてCVをRESETしてください。

モータードライバ周りのスケッチですが、加速度機能を追加した際に大きく手直ししていますので参考程度としてください。

スケッチはこちら--->Google drive

サウンド機能を追加したスケッチ

サウンド機能は後日公開予定です。

---- 

メインページはこちらです。

この記事が気に入ったらサポートをしてみませんか?