自动铁路闸门控制系统 - 电路和源代码
使用Arduino和超声波传感器的高速汽车铁路闸机控制器电路
在本教程中,我们将学习如何设计一个简单高效的自动化高速铁路闸机控制系统。这是该项目的一种相对简单的方法,但您可以将其作为基本构建块,在进一步修改中,我们还可以跟踪它通过的火车的速度等等。但在我们直接进入教程之前,我们需要了解什么是自动化以及人们可以从中获得什么。
自动化基本上意味着设计一种方法来减少或消除人工/干预。在本教程中,我们将解释如何使用 Arduino 使用伺服电机和 Proteus 软件自动化铁路闸门。
自动化的复杂性可以从基本的“开/关”控制到高度复杂的多变量算法。用于自动化目的的控制系统可以是开环或闭环,这意味着它可以使用单个输入参数或响应作为输入馈送的输出,如闭环系统的情况。随着我们步入先进时代,铁路行业的自动化是一项重要需求,为了降低人为错误导致的事故风险,让这些任务由这些智能机器处理非常重要。
- 相关文章:车速检测电路 - 工作原理和源代码
就像每一种技术自动化一样,也各有利弊:
优点
- 提高生产力
- 可预测的质量(质量改进)
- 增强稳健性
- 出色的输出一致性
- 减少人工费用
- 高度准确
- 减少单调工作的人力
缺点
- 容易受到安全威胁
- 开发成本可能超出预期
- 设置成本高
- 许多行业的失业原因
利大于弊,这就是为什么整个世界正在步入自动化时代。
在本教程中,我们将尝试在电路检测到火车沿轨道时自动打开和关闭铁路闸门,我们还将启动蜂鸣器或警报来描述速度火车的最高值高于特定阈值,为了实现这一目标,我们将使用两个非常广泛使用的电子元件,即 Arduino 和伺服电机。
我们将在本教程中使用的传感器是超声波传感器,但不是必须使用这个传感器,我们也可以使用红外传感器制作这个项目的不同版本模块,这取决于我们的选择,我们想要使用什么以及我们可以随时使用什么。
- 相关文章:智能家居自动化系统 - 电路和源代码
铁路闸机控制器所需组件
- Arduino UNO
- 蜂鸣器
- 超声波传感器 (HC-SR04)
- 伺服电机
需要软件:
- Arduino IDE
- 变形杆菌
道闸控制器电路图
组件说明
Arduino UNO
Arduino 基本上是一个开源的开发板,主要使用Microchip ATmega328P 微控制器,由Arduino.cc 制造。该板带有一组输入/输出引脚,包括数字和模拟,可以连接到不同的扩展板和外部电路。
该板带有 14 个数字引脚和 6 个模拟引脚,这些引脚在 Arduino 随附的 IDE(集成开发环境)的帮助下使用或可编程IDE。程序通过 B 型 USB 电缆烧录。电路板的供电方法可以通过 USB 电缆或连接 9 伏直流电源。可接受的电压范围为 7 至 20 伏。从设计和工作的角度来看,它与其他家族成员 Arduino Nano 和 Arduino Leonardo 并没有太大区别。
STK500 仍然是 Uno 通信的原始协议。与前代产品的主要区别在于它不使用 FTDI USB 转串口驱动芯片。相反,它使用 ATmega 16U2(Atmega8U2 至版本 R2),其编程类似于 USB 转串口转换器。
- 相关文章:使用 Arduino UNO 的可变电源 - 电路和代码
超声波传感器 (HC-SR04)
超声波传感器是我们用来确定物体距离的基本传感器。换句话说,我们可以说它用于测量对象距特定参考点的距离。它基本上有4个引脚;
- 触发针
- 回声针
- 接地引脚
- VCC 引脚 (+5V)
超声波是如何工作的?发射器(触发)发送高频声音信号,然后被物体反射,然后反射信号在接收器处接收(回声)。因此,我们知道空气中的声速,我们可以计算距离。这种传感器在 Arduino 修补匠中非常受欢迎,他们每天在他们的项目中使用它,要触发这个传感器,我们需要 10 微秒或更多的高脉冲。
超声波传感器的特点:-
- 电源:+5V DC
- 静态电流:<2mA
- 工作电流:15mA
- 作用角度:<15°
- 测距距离:2 厘米 - 400 厘米/1 英寸 - 13 英尺
- 分辨率:0.3 厘米
- 测量角度:30度
- 触发输入脉冲宽度:10uS
- 尺寸:45 毫米 x 20 毫米 x 15 毫米
相关文章:自动植物浇水和灌溉系统 - 电路、代码和项目报告
伺服电机
这些是一种特殊的电机,用于在特定角度进行非常特定的运动。它是一种旋转或线性致动器,可在某些角度或线性位置进行精确控制。伺服电机不是一个单一的实体,而是一个合适的电机和一个反馈电机当前位置的传感器的组合。
为了使用这个伺服电机,需要使用其他几个高级模块,因为它在使用直流电机方面并不相似。这些电机基本上用于机器人技术和大型制造业。
这些电机与代表开环控制的步进电机有点相似。步进电机具有内置的旋转步进,但由于缺乏反馈系统,因此只能用于设计和制造它们的特定应用。
这种反馈的缺乏使伺服电机与这些步进电机区分开来,并让它们占据上风,因为它们是动态的,可以根据手头的任务定制程序的改动很小。伺服电机一般由厂家提供专用的控制器模块。
机制 – 它基本上是一个闭环伺服机构,利用反馈系统更新转子的运动和最终位置。电机控制的输入可以是模拟输入,也可以是数字输入。
- 相关文章:使用 Arduino 和超声波传感器进行距离测量
某种类型的编码器与电机配对,以便向控制系统提供位置和速度反馈,控制系统会产生错误信号,直到未达到所需输出。为了减少这个误差信号,电机可以向任一方向移动,最终将误差信号减少到零。当达到这个条件时,就达到了预期的输出。增强型和精密的伺服电机在输出轴处有一个光学旋转编码器来测量其速度。
蜂鸣器
蜂鸣器本质上可以是机械的、电子的、机电的和压电的。通常我们在烤箱、游戏节目和电器等中使用电子蜂鸣器。这些蜂鸣器有一个内部电路。产生的声音是由于磁盘的运动。磁盘本质上是铁磁性的。它是一种电流驱动装置,有一个电压源作为输入。
自动道闸控制器的工作
在这个电路中,我们使用超声波传感器和伺服电机来复制铁路道口的工作。两个传感器都在连接到 Arduino 板上的触发销的帮助下触发,并计算距离。电路的进一步工作完全取决于测量的距离。
如果轨道畅通无阻,那么伺服电机将什么也不做,但如果火车到达轨道的任一侧,则其中一个传感器测量的距离将与之前的距离不同。通过这种方式,我们将获知火车的到来,并且很快,Arduino 会将其数字引脚 7 和 8 设置为高电平。
这些引脚与两个伺服电机连接,然后伺服将覆盖90°的角距离 o 因此大门将关闭以阻挡车辆的路径。当火车离开另一个传感器时,Arduino 会收到火车离开的通知,伺服电机将再次到达之前的位置以打开大门。
考虑到人们的安全,我们在这条线路上增加了一项功能,即在高速列车发生时提醒他们。这是通过计算两个传感器在一个周期内转换之间的时间来实现的。如果发现时间小于某个值,则蜂鸣器会发出蜂鸣声,提醒路口附近的人。
- 相关文章:智能灌溉系统 - 电路图和代码
项目源码及说明
在这个草图中,我们定义了五个整数类型的变量和四个长类型的变量。变量 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 myservo1;
Servo myservo2;
int pos=-1;
void setup()中包含的函数在执行过程中只运行一次,它们的任务是定义波特率和引脚模式为输入或输出。
void setup() {
// put your setup code here, to run once:
pinMode(tr1, OUTPUT);
pinMode(tr2, OUTPUT);
pinMode(bz, OUTPUT);
pinMode(eh1, INPUT);
pinMode(eh2, INPUT);
myservo1.attach(8);
myservo2.attach(7);
Serial.begin(9600);
}
根据需要的功能,我们通过触发超声波传感器连续测量距离,并将计算的距离设置为条件语句的参数。如果条件为真,则变量“pos”增加其值以运行伺服电机,当发现条件不正确时,“pos”变量减少其值以使伺服电机恢复到之前的位置。
还有一个条件语句,检查两个传感器是否快速感应到物体,然后将引脚11设置为高电平,为蜂鸣器供电,以提醒人们。所有这些过程都包含在 void loop() 中,它们会一直重复,直到 Arduino 重置或停止供电。
void loop() {
// put your main code here, to run repeatedly:
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 中单击文件>首选项,然后在“显示详细输出”中检查选项编译和上传。并且,在下面的窗口中编译代码后,选择并复制 hex 文件的位置,然后在 Proteus 中双击 Arduino 并将文件位置粘贴到 Program file 选项中,然后单击 OK。现在您的电路就可以在 Proteus 中进行仿真了。
相关项目:
- Arduino 对象检测自动门铃
- 使用 Arduino 的自动夜灯
- Arduino PWM编程及其在Arduino中的功能
- Arduino Serial:Arduino 的串行通信
- 电子学最后一年项目创意列表
- 工科学生电子工程项目思路
- 适合初学者的简单基本电子迷你项目创意
工业技术