自动铁路道口控制器:Arduino电路与源代码实现
基于Arduino与超声波传感器的高速自动铁路道口控制器电路
本教程讲解如何设计简单高效的自动高速铁路道口控制系统。这是相对基础的实现思路,可作为基础模块进一步扩展(如检测列车通过速度等)。开始前先理解自动化概念及预期效果。
自动化旨在减少或消除人工干预。本教程将解释如何用Arduino配合舵机、Proteus软件实现铁路道口自动化。
自动化复杂度从简单“开/关”控制到复杂多变量算法。控制系统分开环/闭环:单输入参数或以输出反馈为输入。铁路行业自动化是进阶必需,因人为错误导致事故风险高,亟需智能设备接管。
- 相关阅读:汽车测速电路——工作原理与源代码
自动化利弊并存:
优点
- 生产率提升
- 质量可预测(质量改善)
- 鲁棒性增强
- 输出一致性高
- 降低人力成本
- 高精度
- 减少单调工作人力
缺点
- 易受安全威胁
- 开发成本可能超预期
- 部署成本高
- 导致多行业失业
优点远大于缺点,故全球迈入自动化时代。
本教程自动化铁路道口:检测列车到达自动开关栏杆,并用蜂鸣器报警超速列车。采用Arduino和舵机,传感器用超声波模块(也可选红外模块,视手头资源而定)。
- 相关阅读:智能家居自动化系统——电路与源代码
铁路道口控制器所需元件
- Arduino UNO
- 蜂鸣器
- 超声波传感器 (HC-SR04)
- 舵机
所需软件:
- Arduino IDE
- Proteus
铁路道口控制器电路图

元件说明
Arduino UNO
Arduino是开源开发板,核心为Microchip ATmega328P单片机,Arduino.cc出品。板载数/模拟I/O引脚可扩展外设电路。
14数字引脚+6模拟引脚,配合IDE(集成开发环境)编程,USB Type-B烧录。供电:USB或9V直流,接受7-20V。设计工作原理与Nano、Leonardo相近。
STK500仍为Uno通信协议。主要区别:不使用FTDI USB转串口芯片,改用ATmega16U2(R2前用Atmega8U2)编程为USB转串口转换器。
- 相关阅读:基于Arduino UNO的可调稳压电源——电路与代码

超声波传感器 (HC-SR04)
超声波传感器测物体距离,即测物体距参考点有多远。4引脚:
- Trig触发脚
- Echo回波脚
- GND地
- VCC (+5V)
原理:发射端(Trig)发高频声波,物体反射,接收端(Echo)收反射波。声速已知,可算距离。深受Arduino爱好者喜爱,日常项目常用。触发需≥10微秒高电平脉冲。
特性:
- 供电:+5V直流
- 静态电流:<2mA
- 工作电流:15mA
- 有效角:<15°
- 测距:2cm-400cm/1″-13ft
- 分辨率:0.3cm
- 测量角:30度
- 触发脉冲宽度:10μs
- 尺寸:45x20x15mm
相关阅读:Arduino自动浇水灌溉系统——电路、代码与项目报告

舵机
舵机为特定角度精确运动的特种电机。是允许角度/线性位置精确控制的旋转/线性执行器。舵机非单一实体,而是合适电机+位置反馈传感器的组合。
使用舵机需额外高级模块,不像直流电机那样简单。广泛用于机器人、大规模制造业。
与步进电机(开环控制)略似。步进电机有固有步距角,但无反馈系统,仅限设计用途。舵机有反馈,动态可按任务编程调整。厂商一般配专用控制模块。
机制——闭环伺服机构,利用反馈更新转子运动和终位。控制输入可模拟或数字。
- 相关阅读:Arduino超声波测距
编码器配合电机给控制器位置速度反馈,产生误差信号直到达标。为减小误差电机正反转直至误差归零。高端舵机输出轴配光电编码器测速。

蜂鸣器
蜂鸣器分机械、电子、机电、压电型。常用电子式(烤箱、游戏机、家电等)。内部有电路,铁氧体盘振动发声。属电流驱动器件,输入电压源。

自动铁路道口控制器工作原理
电路用两超声波传感器和舵机模拟铁路道口。两传感器经Arduino触发脚触发测距,后续逻辑完全依赖测距值。
轨道空闲时舵机不动;列车从任一侧驶入,对应传感器距离变化,Arduino立即将数字引脚7、8置高。引脚接两舵机,舵机转动90°关闭栏杆阻车。列车离开另一侧传感器检测到,Arduino获悉列车离去,舵机复位开栏杆。
为保障行人安全,增加高速列车报警功能:计算两传感器在一个周期内触发时间差。若时间小于阈值,蜂鸣器鸣响警示道口附近人员。
- 相关阅读:智能灌溉系统——电路图与代码
项目源代码与解析
代码定义5个int变量和4个long变量。tr1、tr2、eh1、eh2用于发脉冲和收微秒计时值;val1、val2、dis1、dis2存微秒时长和厘米距离。波特率9600位/秒,负责板卡与串口监视器通信。
const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;; int bz = 11; unsigned long val1, dis1, val2, dis2; #include <Servo.h> Servo myservo1; Servo myservo2; int pos=-1;
void setup()中代码仅运行一次:设置波特率、引脚模式。
void setup() { pinMode(tr1, OUTPUT); pinMode(tr2, OUTPUT); pinMode(bz, OUTPUT); pinMode(eh1, INPUT); pinMode(eh2, INPUT); myservo1.attach(8); myservo2.attach(7); Serial.begin(9600); }
void loop()持续运行:触发超声波测距,距离作为条件判断参数。条件真则pos递增驱动舵机关栏杆;假则pos递减复位开栏杆。另一条件判断两传感器连续触发间隔,过短则置引脚11高电平驱动蜂鸣器报警。复位或断电前循环执行。
void loop() { digitalWrite(tr1, LOW); delayMicroseconds(2); digitalWrite(tr1, HIGH); delayMicroseconds(10); digitalWrite(tr1, LOW); val1 = pulseIn(eh1, HIGH); dis1 = (val1 * 0.0343) / 2; digitalWrite(tr2, LOW); delayMicroseconds(2); digitalWrite(tr2, HIGH); delayMicroseconds(10); digitalWrite(tr2, LOW); val2 = pulseIn(eh2, HIGH); dis2 = (val2 * 0.0343) / 2; Serial.println("distance is "); Serial.println(dis1); Serial.println(dis2); if(dis1 < 100 || dis2 < 100) { if(pos==-1){ for (pos = 0; pos <= 90; pos += 1) { myservo1.write(pos); myservo2.write(pos); delay(15);} } delay(1000); digitalWrite(tr1, LOW); delayMicroseconds(2); digitalWrite(tr1, HIGH); delayMicroseconds(10); digitalWrite(tr1, LOW); val1 = pulseIn(eh1, HIGH); dis1 = (val1 * 0.0343) / 2; digitalWrite(tr2, LOW); delayMicroseconds(2); digitalWrite(tr2, HIGH); delayMicroseconds(10); digitalWrite(tr2, LOW); val2 = pulseIn(eh2, HIGH); dis2 = (val2 * 0.0343) / 2; if(dis1 < 100 || dis2 < 100) {digitalWrite(bz, HIGH); Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);} } else if(dis1 >= 100 && dis2 >= 100) { if(pos==91){ for (pos = 90; pos >= 0; pos -= 1) { myservo1.write(pos); myservo2.write(pos); delay(15); } } digitalWrite(bz, LOW); delay(200); } }
Hex文件对接Proteus仿真: Arduino IDE点File>Preferences,勾选“Show verbose output”编译和上传两项。编译后窗口复制hex文件路径,Proteus双击Arduino粘贴至Program file选项点OK。电路即可在Proteus仿真。
相关项目:
- Arduino物体检测自动门铃
- Arduino自动夜灯
- Arduino PWM编程及函数
- Arduino串口通信
- 电子毕业设计选题清单
- 电子工程专业项目创意
- 初学者简单基础电子迷你项目创意
工业技术
- Arduino自动列车控制器 – 可编程调度/加减速/双向运行
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
- Arduino 自动浇水系统:定时 + 土壤湿度双模式,轻松养护盆栽
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- NOR门SR锁存器:构建与理解数字存储器
- 成熟电气系统常见失效模式排序
- 理解TTL或非门与或门:电路分析与转换
- 高级电机控制电路:自锁、停止与延时技术
- 云监控:实时资产管理的远程控制系统
- M-TECH:Apollo雕刻机专用高阶CNC控制系统
- 基于PIR传感器的自动门开启系统:电路、原理与应用