📚 本文目錄
AI 生成示意圖
如果你玩過自動運轉的基本概念,想更進一步——讓列車按照時刻表自動跑、精確停在月台、聽到感應器就自動切換岔軌——Arduino 就是你的最佳朋友。不需要 DCC 系統,你現有的 DC 佈局就能開始玩。
Arduino 能做什麼?
- 🚄 自動控制車速——用 PWM 精確控制馬達電壓,低速超穩
- 🔴 自動停車——紅外線感應器偵測到車就減速停車
- 🔀 自動岔軌——用伺服馬達控制岔軌切換
- ⏱️ 定時發車——停靠 30 秒後自動發車
- 🚥 信號燈控制——LED 信號燈根據區塊狀態自動變色
- 💻 串口監控——在電腦上即時看到每列車的位置和狀態
需要的零件
| 零件 | 用途 | 台灣價格 |
|---|---|---|
| Arduino Uno R3 | 微控制器主板 | NT$250~400 |
| L298N 馬達驅動板 | 控制軌道供電方向和電壓 | NT$80~150 |
| 紅外線避障感應器 | 偵測車輛位置 | NT$30~50/個 |
| SG90 伺服馬達 | 控制岔軌轉轍 | NT$40~60/個 |
| LED(紅黃綠) | 自製信號燈 | NT$10/組 |
| 麵包板 + 杜邦線 | 免焊接接線 | NT$100 |
| 12V 電源供應器 | 軌道供電 | NT$200 |
總計約 NT$700~1,000就能開始。如果你已經有 Arduino,那更便宜了。
💡 去哪買零件?Arduino 和電子零件在台灣非常好買。露天拍賣、蝦皮搜「Arduino Uno」就有大量賣家。台北的話可以去光華商場或三創。
專案一:自動停車系統
最簡單的入門專案。目標:火車開到月台位置,自動減速停車,等30秒後自動發車。
接線圖
| Arduino 腳位 | 接到 |
|---|---|
| D9(PWM) | L298N ENA(速度控制) |
| D7 | L298N IN1(方向) |
| D8 | L298N IN2(方向) |
| D2 | 紅外線感應器 OUT |
| 5V / GND | 感應器 VCC / GND |
| 12V 電源 | L298N 12V / GND |
| L298N OUT1/OUT2 | 軌道兩根供電線 |
程式碼
// Arduino 鐵道模型自動停車系統
// ROKHELM.com
const int SPEED_PIN = 9; // PWM 速度控制
const int DIR1_PIN = 7; // 方向控制 1
const int DIR2_PIN = 8; // 方向控制 2
const int SENSOR_PIN = 2; // 紅外線感應器
int trainSpeed = 180; // 巡航速度 (0-255)
int stopDuration = 30000; // 停車時間 (毫秒)
void setup() {
pinMode(SPEED_PIN, OUTPUT);
pinMode(DIR1_PIN, OUTPUT);
pinMode(DIR2_PIN, OUTPUT);
pinMode(SENSOR_PIN, INPUT);
Serial.begin(9600);
// 預設前進方向
digitalWrite(DIR1_PIN, HIGH);
digitalWrite(DIR2_PIN, LOW);
Serial.println("系統啟動,等待發車...");
}
void loop() {
// 加速到巡航速度
Serial.println("發車!加速中...");
for (int spd = 80; spd <= trainSpeed; spd += 2) {
analogWrite(SPEED_PIN, spd);
delay(50);
}
// 巡航,等待感應器觸發
while (digitalRead(SENSOR_PIN) == HIGH) {
// 高電位 = 沒車經過,持續巡航
delay(10);
}
// 感應器觸發!減速停車
Serial.println("偵測到車輛,減速停車...");
for (int spd = trainSpeed; spd >= 0; spd -= 3) {
analogWrite(SPEED_PIN, spd);
delay(40);
}
analogWrite(SPEED_PIN, 0);
// 停車等待
Serial.println("停靠中...");
delay(stopDuration);
}
⚠️ 注意電壓。N 軌模型車的工作電壓是 0~12V。Arduino 的 PWM 透過 L298N 控制的是 12V 電源的占空比,不要直接用 Arduino 的 5V 輸出接軌道,電流不夠推動馬達。
專案二:自動岔軌控制
用 SG90 伺服馬達控制 KATO 或 TOMIX 的電動岔軌。感應器偵測到車來了,自動切換岔軌方向。
#include <Servo.h>
Servo turnoutServo;
const int SERVO_PIN = 3;
const int SENSOR_A = 4; // A 路線感應器
const int SENSOR_B = 5; // B 路線感應器
void setup() {
turnoutServo.attach(SERVO_PIN);
pinMode(SENSOR_A, INPUT);
pinMode(SENSOR_B, INPUT);
turnoutServo.write(90); // 中間位置
}
void loop() {
if (digitalRead(SENSOR_A) == LOW) {
// A 路線有車→切到 B 路線
turnoutServo.write(45);
delay(500);
}
if (digitalRead(SENSOR_B) == LOW) {
// B 路線有車→切到 A 路線
turnoutServo.write(135);
delay(500);
}
}
進階應用
Arduino 的可能性是無限的。以下是一些進階玩法的方向:
- 多區塊閉塞系統——用多個感應器把軌道分成區塊,實作閉塞信號
- Arduino + DCC——用 Arduino 產生 DCC 訊號,省下 DCC 控制器的錢。開源專案 DCC++ 可以把 Arduino 變成 DCC 指揮站
- LCD 顯示——加一塊 LCD 螢幕顯示列車狀態、車速、位置
- WiFi 控制——用 ESP32 代替 Arduino Uno,用手機 APP 遠端控制
- 音效——用 DFPlayer Mini 模組播放火車音效
🌟 推薦開源專案:DCC++EX(dcc-ex.com)是一個開源的 Arduino DCC 指揮站專案,可以把一塊 Arduino Mega + 馬達驅動板變成完整的 DCC 控制器——成本不到 NT$1,000,功能比 NT$8,000 的商業控制器還強。
學習資源
- Arduino 官方教學——arduino.cc/en/Tutorial 有完整的入門教學
- DCC++EX——dcc-ex.com 把 Arduino 變成 DCC 控制器
- Model Railroader Magazine——經常有 Arduino 鐵道專案
- YouTube 搜「Arduino model train」——大量實作影片