📚 本文目錄

    Arduino 控制鐵道模型自動運轉

    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(速度控制)
    D7L298N IN1(方向)
    D8L298N 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」——大量實作影片

    🛠️ 先從基礎做起

    ⚡ DC vs DCC 比較 🚦 自動運轉入門