在这篇文章中,我们将构建一个电路,可以测量任何车辆在道路和高速公路上的速度。拟议的电路是固定在一个地方,车辆被怀疑超速。如果任何车辆超过限速,电路就会立即发出警报。我们将看代码,电路图和逻辑如何速度的车辆是测量的。
客观的
根据2015年印度的意外死亡报告,超速导致75%的交通事故,这是一个巨大的数字。大多数交警试图拘留那些危险驾驶汽车超过城市车速限制的司机。
并不是每一次交警都能拦下超速的车辆并向他们收费。因此,一种名为超速相机的装置被安装在司机被怀疑超速的地方,如事故频发的地区,十字路口等。
我们打算建造一些类似于测速相机的东西,但以一种更简单的方式,它可以安装在校园内,如学校、大学或IT公园,或只是作为一个有趣的项目。
拟议的项目包括16 x 2液晶显示屏,以显示每辆经过的车辆的速度;两束相隔10米的激光束在打断这些激光束的同时测量车辆的速度。
当车辆经过时,蜂鸣器会发出哔哔声;表示检测到车辆,每辆车的速度将显示在液晶显示屏上。当车辆超过限速时,蜂鸣器会连续鸣叫,并在显示屏上显示车辆的车速。
注意:车辆的速度将显示在LCD上,无论车辆是超速或低速。
现在让我们看看测量速度的电路背后的逻辑。
我们都知道一个简单的公式,叫做速度-距离-时间公式。
速度=距离/时间。
•速度(米/秒)
•距离(米)
•时间单位为秒。
要知道速度,我们必须知道一辆车走过的距离x以及走过这段距离x所花费的时间。
为此,我们设置了两束激光和两束距离为10米的LDRs,方式如下:
我们知道距离是10米,这是固定的,现在我们要知道方程中的时间。
时间将由Arduino计算,当车辆中断“开始激光”时,计时器开始,当车辆中断“结束激光”时,计时器停止,并将值应用到Arduino的方程中,将得到车辆的速度。
请注意,车辆的速度将只在一个方向检测,即启动激光停止激光,以检测车辆在另一个方向,另一个相同的设置必须在相反的方向。所以,这是理想的地方,如学校,大学等,他们有进出门。
现在让我们看看原理图:
Arduino与显示的连接:
上面的电路是不言自明的,只是按电路连接线路。调整10K电位器,调整显示对比度。
额外的布线细节:
上述电路由Arduino、4个按钮、2个10K下拉电阻(不改变电阻值)、2个ldr和1个蜂鸣器组成。4个按钮的功能将很快解释。现在让我们看看如何正确地安装LDR。
LDR必须遮好,不被阳光照射,只有激光束才能射到LDR上。确保你的激光模块足够强大,可以在明亮的阳光下工作。
您可以使用PVC管用于上述目的,并将其内部漆成黑色;不要忘记遮住前面的部分,用你的创造力来完成它。
程序代码:
// -----------由R.GIRISH开发---------//
# include < LiquidCrystal.h >
# include < EEPROM.h >
Const int rs = 7;
Const int en = 6;
Const int d4 = 5;
Const int d5 = 4;
Const int d6 = 3;
Const int d7 = 2;
lcd(rs, en, d4, d5, d6, d7);
const int up = A0;
const int down = A1;
const int Set = A2;
const int change = A3;
Const int start = 8;
const int End = 9;
Const int蜂鸣器= 10;
Const float km_h = 3.6;
Int距离= 10;/ /米。
Int变量= 0;
Int count = 0;
Int address = 0;
Int value = 100;
Int speed_address = 1;
Int speed_value = 0;
Int I = 0;
浮点ms = 0;
秒= 0;
浮点速度= 0;
Boolean buzz = false;
布尔激光=假;
Boolean x = false;
Boolean y = false;
无效的设置()
{
pinMode(开始,输入);
pinMode(最终,输入);
pinMode(输入);
pinMode(下降,输入);
pinMode(设置、输入);
pinMode(变化,输入);
pinMode(蜂鸣器、输出);
digitalWrite(改变,高);
digitalWrite(高);
digitalWrite(下来,高);
digitalWrite(组、高);
digitalWrite(蜂鸣器、低);
液晶显示器。开始(16日2);
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(F(“车速”);
液晶显示器。setCursor (0,1);
液晶显示器。打印(F(探测器));
延迟(1500);
if (EEPROM.read(address) != value)
{
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“限速”);
液晶显示器。setCursor (0,1);
lcd.print(“km / h:”);
液晶显示器。setCursor (6,1);
lcd.print(数);
While (x == false)
{
if (digitalRead(up) == LOW)
{
液晶显示器。setCursor (6,1);
Count = 1;
lcd.print(数);
延迟(200);
}
if (digitalRead(down) == LOW)
{
液晶显示器。setCursor (6,1);
Count = 1;
lcd.print(数);
延迟(200);
}
if (digitalRead(Set) == LOW)
{
speed_value =计数;
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“限速”);
液晶显示器。setCursor (0,1);
液晶显示器。打印(“设置为”);
lcd.print (speed_value);
液晶显示器。打印(公里/小时);
eepm。写(speed_address speed_value);
延迟(2000);
x = true;
}
}
eepm。写(地址、价值);
}
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“测试激光”);
液晶显示器。setCursor (0,1);
lcd.print(“对齐…”);
延迟(1500);
While (laser == false)
{
if (digitalRead(start) == HIGH && digitalRead(End) == HIGH)
{
激光= true;
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“激光准直”);
液晶显示器。setCursor (0,1);
液晶显示器。打印(“状态:OK”);
延迟(1500);
}
while (digitalRead(start) == LOW && digitalRead(End) == LOW)
{
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“激光”);
液晶显示器。setCursor (0,1);
液晶显示器。打印(“不一致”);
延迟(1000);
}
while (digitalRead(start) == LOW)
{
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“开始激光不是“);
液晶显示器。setCursor (0,1);
lcd.print(“对齐”);
延迟(1000);
}
while (digitalRead(End) == LOW)
{
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“激光不是终结”);
液晶显示器。setCursor (0,1);
lcd.print(“对齐”);
延迟(1000);
}
}
lcd.clear ();
}
无效循环()
{
if (digitalRead(change) == LOW)
{
change_limit ();
}
if (digitalRead(start) == LOW)
{
变量= 1;
buzz = true;
While(变量== 1)
{
Ms = Ms + 1;
延迟(1);
if (digitalRead(End) == LOW)
{
变量= 0;
}
}
秒= ms / 1000;
女士= 0;
}
if (Speed < EEPROM.read(speed_address)))
{
y = true;
}
速度=距离/秒;
速度=速度* km_h;
如果(isinf(速度))
{
液晶显示器。setCursor (0,0);
lcd.print(“速度:0.00”);
液晶显示器。打印(公里/小时);
}
其他的
{
液晶显示器。setCursor (0,0);
lcd.print(“速度:”);
lcd.print(速度);
液晶显示器。打印(公里/小时);
液晶显示器。setCursor (0,1);
液晶显示器。打印(" ");
If (buzz == true)
{
buzz = false;
digitalWrite(蜂鸣器、高);
延迟(100);
digitalWrite(蜂鸣器、低);
}
if (Speed > EEPROM.read(speed_address))
{
液晶显示器。setCursor (0,0);
lcd.print(“速度:”);
lcd.print(速度);
液晶显示器。打印(公里/小时);
液晶显示器。setCursor (0,1);
液晶显示器。打印(“超速警报!”);
If (y == true)
{
y = false;
For (i = 0;我< 45;我+ +)
{
digitalWrite(蜂鸣器、高);
延迟(50);
digitalWrite(蜂鸣器、低);
延迟(50);
}
}
}
}
}
空白change_limit ()
{
x = false;
数= EEPROM.read (speed_address);
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“限速”);
液晶显示器。setCursor (0,1);
lcd.print(“km / h:”);
液晶显示器。setCursor (6,1);
lcd.print(数);
While (x == false)
{
if (digitalRead(up) == LOW)
{
液晶显示器。setCursor (6,1);
Count = 1;
lcd.print(数);
延迟(200);
}
if (digitalRead(down) == LOW)
{
液晶显示器。setCursor (6,1);
Count = 1;
lcd.print(数);
延迟(200);
}
if (digitalRead(Set) == LOW)
{
speed_value =计数;
lcd.clear ();
液晶显示器。setCursor (0,0);
液晶显示器。打印(“限速”);
液晶显示器。setCursor (0,1);
液晶显示器。打印(“设置为”);
lcd.print (speed_value);
液晶显示器。打印(公里/小时);
eepm。写(speed_address speed_value);
延迟(2000);
x = true;
lcd.clear ();
}
}
}
// -----------由R.GIRISH开发---------//
现在让我们看看如何操作这个电路:
•完成电路并上传代码。
•两个激光器/ LDRs之间的距离不能小于或大于10米,否则会误判速度(如图1所示)。
•激光与LDR之间的距离可以根据您的选择和环境。
•电路会检查激光与LDR是否有偏差,如有请根据液晶屏上显示的信息进行纠正。
•初始时,电路会要求你输入一个限速值(km/h),超过这个值电路会报警,通过按上(S1)和下(S2),你可以改变显示屏上的数字,然后按下设置(S3),这个值会被保存。
•要改变这个速度限制,按下S4按钮,你可以设置新的速度限制。
•现在,让摩托车以30公里/小时的速度行驶,并中断激光束,电路应该会显示一个非常接近30公里/小时的数字。
•你完成了,你的电路已经准备好为你的校园安全服务。
作者的原型:
如果对此交警车辆测速电路有任何疑问,请在评论区提问,您可以得到快速回复。
也许不能在不遵守规则的国家工作,比如印度!!