亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 自制 DCC 命令站:蓝牙控制模型铁路,免费 App 支持 CV 读写

项目亮点

系统架构

Arduino 自制 DCC 命令站:蓝牙控制模型铁路,免费 App 支持 CV 读写

数据流向:

  1. App 通过 HC-06 发送 ASCII 指令串,如 DD,3,63,12,48,(机车 3、速度步数、速度值、XOR 校验)。
  2. Arduino 解析指令,填充 DCC 报文结构体(前导码 + 数据字节 + 分隔符 + XOR)。
  3. Timer2 中断以 58 µs/116 µs 交替翻转 D5/D6 引脚,生成标准 DCC 双极性方波。
  4. LMD18200 接收 DIR(D5)/PWM(D6) 信号,向轨道输出 ±14 V / 2 A 轨道电压。

硬件清单与 PCB 关键参数

器件规格关键参数
Arduino Pro Mini5 V / 16 MHz焊接 12Pin 排针
LMD18200T3 A H 桥需散热片,DIR/PWM 接 D5/D6
HC-06从机模块Tx↔Tx, Rx↔Rx(非交叉),波特率 9600
78055 V 稳压输入 12~20 V,配合 220 µF/10 µF 滤波
采样电阻0.1 Ω / 2 WA0 采样,1.08 mV/步 @ 1.1 V 内部基准
齐纳二极管3.6 V / 0.5 W保护 HC-06 RX 端
PCB双层 1.6 mmeBay/PCBWay 购买,预留 4/6/12Pin 座

天线增强改造

HC-06 板载天线增益低,建议在天线焊盘焊接 31.2 mm 单股铜线(2.4 GHz 1/4 波长),并套热缩管绝缘,通讯距离可从 5 m 提升至 15 m 以上。

固件核心:Timer2 精确波形生成

中断服务程序 (ISR) 逻辑


ISR(TIMER2_OVF_vect) {
  if (every_second_isr) {          // 每两次中断翻转一次电平
    PORTD = B01100000;             // D5=1(DIR), D6=1(PWM) → 正脉冲
    TCNT2 = latency + last_timer;  // 补偿延迟
  } else {
    PORTD = B01000000;             // D5=1, D6=0 → 负脉冲/间隔
    // 状态机推进:前导码→分隔符→数据位→下一字节
    switch(state) {
      case PREAMBLE:  /* 发送 16/24 个 '1' */ break;
      case SEPERATOR: /* 发送单个 '0' */   break;
      case SENDBYTE:  /* 按位发送数据字节 */ break;
    }
  }
  every_second_isr ^= 1;
}

关键常量:TIMER_SHORT=0x8D (58 µs)、TIMER_LONG=0x1B (116 µs),严格符合 NMRA S-9.1 标准。

指令解析与报文组装

过流保护与电流回传


void current() {
  int val = 0;
  for (int i=0;i<5;i++) { val += analogRead(A0); delay(1); }
  sensorValue = val/5;
  C = 10.8 * sensorValue;  // mA,内部 1.1 V 基准下 1 步≈10.8 mA
  if (C > 2000) {          // 2 A 触发保护
    digitalWrite(6, LOW);  // 关 DCC 波形
    digitalWrite(13, HIGH); // 拉高 Brake 引脚短路输出
    bluetooth.println("Short!");
  }
}

App 每秒请求电流值(发送 G),实时显示轨道负载,过流自动锁定需 App 发送 C 复位。

App 功能对比

功能LocoMotive (免费)LocoMotive DCC (¥45)
机车数量1~201~20
速度等级128 步128 步
功能键 F1~F8✅✅ (可编辑名称/瞬时/锁存)
道岔控制8 对8 对 (可编辑名称)
CV1 编程✅✅
CV 1~255 读写❌✅
最大速度预设❌✅

组装与调试步骤

  1. 焊接 PCB:按 BOM 顺序焊接电阻、电容、IC 座、端子、排针,最后插入 Pro Mini、LMD18200、HC-06。
  2. 上传固件:locomotive_dcc_sep19.ino(含 CV 读写版)。
  3. 接线:轨道接 2Pin 端子,电源接 14 V 笔记本适配器(外径 5.5/内径 2.1 mm)。
  4. 手机安装 App,蓝牙配对 HC-06(密码 1234),App 点击连接。
  5. 新机车首次使用:编程轨模式写入 CV1 地址,或主线编程(需隔离)。
  6. 实测电流:App 主界面显示实时 mA,确认无短路后正常运行。

常见问题 FAQ

机车不走、灯不亮
检查轨道极性、LMD18200 散热片是否短路、电源电压是否 ≥12 V。
蓝牙搜不到 HC-06
模块未上电或天线短路;检查 3.6 V 齐纳二极管焊接方向。
CV 读写失败
确认机车解码器支持 CV 读回(需编程轨或 RailCom);调整 Cs = C+50 灵敏度阈值。
多机车控制冲突
DCC 协议本身支持多机车,App 切换机车号即可;同一地址机车会同步动作。

扩展建议

制造工艺

  1. MrRobot:Ubuntu移动端控制Rapiro机器人,支持语音、触控与摇晃交互
  2. Arduino驱动的六发鸡尾酒自动调配站 – 打造你的专属智能调酒机
  3. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  4. DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
  5. Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
  6. 智能自系鞋带鞋:内置压电发电与计步功能
  7. Arduino 声纳实时测距与 Processing 可视化
  8. Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
  9. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  10. 自制 10 美元便携 Arduino 气象站 - Nano + DHT22 + BMP180 + LCD
  11. Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
  12. eDOT:基于 Arduino 的精密时钟与气象站,内置红外遥控