DIY自動列車制御システム – Arduinoで実現するシンプル・信頼性・カスタマイズ自在なレイアウト運転
概要
Arduino UNO(またはNano/MEGA)とL298NデュアルHブリッジドライバだけで、模型列車の自動往復・停止・加減速を実現するミニマムな制御システムです。スケッチ内の時間パラメータを書き換えるだけで「発車→加速→巡航→減速→停車→折返し」のダイヤを自由に設計でき、複雑なDCCシステムを導入せずにアナログレイアウトを自動化できます。
必要なパーツ
| パーツ名 | 数量 | 備考 |
|---|---|---|
| Arduino UNO(Nano/MEGA等あらゆるボードで可) | 1 | |
| L298N モータードライバモジュール | 1 | 定格2A、ヒートシンク付き推奨 |
| ジャンパーワイヤー | 適宜 | |
| 12V電源(ACアダプタまたは電池) | 1 | レール電圧・ドライバ駆動用 |
| 模型列車(Nゲージ/HOゲージ等、DC2線式) | 1編成 | レールへ給電 |
配線
- Arduino D5(PWM) → L298N ENA(速度制御)
- Arduino D6 → L298N IN1、D7 → IN2(方向制御)
- L298N OUT1/OUT2 → レール給電端子
- L298N 12V/GND → 外部12V電源、Arduino GND と共通接地
- Arduino 5V/GND → L298N 5V/GND(ロジック電源、モジュールに5V出力がある場合は不要)
添付の配線図(写真2枚)を参照してください。
制御ロジック(スケッチ解説)
全て loop() 内で millis() ベースのノンブロッキング処理として実装されています。
スケジューラー(カウンター方式)
int counterScheduler = 0;
unsigned long timerScheduler = 0;
void loop() {
if (millis() > timerScheduler + 1000) { // 1秒ごとにインクリメント
counterScheduler++;
timerScheduler = millis();
}
// 以下、counterScheduler の値に応じたアクションを記述
}
ダイヤ定義の例(スケッチ内のコメントより)
// 1 | 0〜5秒 : 加速・発車
if (counterScheduler <= 5) { accelerate(); }
// 2 | 10〜15秒 : 減速・停車
if (counterScheduler >= 10 && counterScheduler <= 15) { brake(); }
// 3 | 16秒 : 方向転換(IN1/IN2 反転)
if (counterScheduler == 16) { reverseDirection(); }
// 4 | 20〜30秒 : 再加速・折返し運転
if (counterScheduler >= 20 && counterScheduler <= 30) { accelerate(); }
// 5 | 31〜40秒 : 再減速・停車
if (counterScheduler >= 31 && counterScheduler <= 40) { brake(); }
// 6 | 40秒超 : カウンタリセット、初期方向へ戻して繰り返し
if (counterScheduler > 40) { counterScheduler = 0; setForward(); }
加減速パラメータ
int brakingDelta = 5; // 減速ステップ(PWM値を毎回この値ずつ減算)
int accelerateDelta = 6; // 加速ステップ(PWM値を毎回この値ずつ加算)
100msごと(timerLocal)にPWM値を更新し、滑らかな加減速を実現。目標速度(255)と最低速度(30)でクランプ。
方向制御
// 前進
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
// 後進
digitalWrite(L298_IN1, LOW);
digitalWrite(L298_IN2, HIGH);
カスタマイズ・拡張のヒント
- 複数駅停車:
counterSchedulerの区間を増やし、停車時間・発車時刻を追加 - センサー連動:フォトリフレクタやホールセンサーで列車位置検知し、時刻表通りに発車
- 複数列車制御:L298Nを複数用意し、ArduinoのPWMピン(D3, D5, D6, D9, D10, D11)を割り当て
- ブロック制御:リレーでレールを分割通電し、追い越し・待避を実現
- 音声・アナウンス:DFPlayer Mini等で発車メロディ・駅名放送を同期再生
- Wi-Fi/Bluetooth化:スマホからダイヤ編集・非常停止・状態監視
注意点
- L298Nは電圧降下が約2Vあるため、12V入力でレールへは約10V。車両の定格電圧に合わせて電源電圧を調整
- 大電流車両(HOゲージ大型機関車等)ではL298Nが発熱しやすい。ヒートシンク・ファン・またはTB6612FNG等の低損失ドライバへの置換を検討
- レールと車輪の接触不良で動作が不安定になる場合、レールクリーニング・車輪クリーニングを実施
- PWM周波数(Arduino標準490Hz/980Hz)がモーター音として聞こえる場合、
TCCR0B等で周波数変更可能
参考ファイル
- 完全なスケッチ:添付コード欄(Arduino / C++)
- 配線図:添付画像2枚
製造プロセス