Arduino自动列车控制器 – 可编程调度/加减速/双向运行
极简物料
- Arduino UNO/Nano/MEGA任意型号 ×1
- L298N双H桥驱动模块 ×1(含5V稳压输出可供Arduino)
- 直流轨道电源(12-18V/1A+)
- 跳线若干
核心功能
- 时序调度:通过修改代码数组定义“启动-运行-停车-折返”全周期
- 平滑加减速:PWM阶跃控制,模拟真实列车惯性
- 自动换向:翻转H桥输入逻辑实现往返
- 即插即运:上电自动执行,无需按键干预
接线图解
L298N → Arduino:
- ENA(PWM调速) → D5
- IN1(方向) → D6
- IN2(方向) → D7
- 电机两端子 → 列车轨道两股轨
- 电源输入 → 外部12V,5V输出接Arduino VIN(或USB供电)
调度代码详解
// 可调参数
int brakingDelta = 5; // 减速步进(数值越大越急)
int accelerateDelta = 6; // 加速步进
// 调度计数器(秒)
int counterScheduler = 0;
unsigned long timerScheduler = 0;
void loop() {
// 1秒心跳更新计数器
if (millis() > timerScheduler + 1000) {
counterScheduler++; timerScheduler = millis();
}
// ---- 阶段1: 0-5秒 加速启动 ----
if (counterScheduler <= 5) {
rampUp(accelerateDelta); // 逐步增PWM至255
}
// ---- 阶段2: 10-15秒 减速停车 ----
if (counterScheduler >= 10 && counterScheduler <= 15) {
rampDown(brakingDelta); // 逐步降PWM至0
}
// ---- 阶段3: 16秒 换向 ----
if (counterScheduler == 16) {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); // 反向
}
// ---- 阶段4: 20-30秒 反向运行 ----
if (counterScheduler >= 20 && counterScheduler <= 30) {
rampUp(accelerateDelta);
}
// ---- 阶段5: 31-40秒 停车 ----
if (counterScheduler >= 31 && counterScheduler <= 40) {
rampDown(brakingDelta);
}
// ---- 阶段6: 40秒+ 循环 ----
if (counterScheduler > 40) {
counterScheduler = 0;
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); // 恢复正向
}
}
void rampUp(int delta) {
if (millis() > timerLocal + 100) { // 100ms周期
speedAuto = min(speedAuto + delta, 255);
analogWrite(ENA, speedAuto);
timerLocal = millis();
}
}
void rampDown(int delta) {
if (millis() > timerLocal + 100) {
speedAuto = max(speedAuto - delta, 0);
analogWrite(ENA, speedAuto);
timerLocal = millis();
}
}
自定义时刻表指南
修改if判断区间即可任意编排:
- 增加中途停站:插入
rampDown→delay→rampUp区间 - 变速运行:分段设定不同
accelerateDelta - 多列车协同:增设第二路L298N,错峰调度
进阶方向
- 加入红外/霍尔传感器实现定点停车闭环
- 蓝牙模块+手机App可视化编辑时刻表
- 声效模块播放启动/汽笛/轨道咔哒声
- 供电升级:DCC数字编码信号叠加供电,兼容商业模型
制造工艺