构建一个交警用车速检测电路

描述

在这篇文章中,我们将构建一个电路,可以测量道路和高速公路上任何车辆的速度。拟议的电路在怀疑车辆超速的地方保持静止。如果任何车辆超过限速,电路会立即发出警报。我们将查看如何测量车辆速度的代码、电路图和逻辑。

根据 75 年印度意外死亡报告,超速导致 2015% 的道路交通事故,这是一个巨大的数字。大多数交警试图拘留危险驾驶车辆超过城市限速的驾驶者。

并非每次交警都可以阻止超速车辆并向他们收费。因此,在怀疑驾驶者超速的地方安装了一种称为测速摄像头的设备,例如频繁发生事故的区域、十字路口等。

我们将构建类似于测速摄像头的东西,但要简化得多,它可以安装在校园内,例如学校,学院或IT园区,或者只是一个有趣的项目。

拟议的项目包括 16 x 2 LCD 显示屏,以展示每辆车通过的速度;两束激光束相距10米,以测量车辆的速度,同时中断这些激光束。

车辆通过时蜂鸣器会发出哔哔声;表示检测到车辆,每辆车的速度将显示在LCD显示屏上。当车辆超过速度限制时,蜂鸣器将连续发出哔哔声,车辆速度将显示在显示屏上。

注意:无论车辆超速还是欠速,车辆的速度都将显示在LCD上。

现在让我们看看测量速度的电路背后的逻辑。

我们都知道一个简单的公式,叫做速度-距离-时间公式。

速度=距离/时间。

• 速度以米每秒为单位,• 距离以米为单位,

• 时间以秒为单位。

要知道速度,我们必须知道车辆行驶的距离(例如“x”)以及覆盖该距离“x”所需的时间。

为此,我们按以下方式设置两个激光束和两个距离为 10 米的 LDR:

DIY

我们知道距离是固定的 10 米,现在我们必须知道等式中的时间。

时间将由Arduino计算,当车辆中断“启动激光”时,计时器开始,当车辆中断“结束激光”时,计时器停止并将值应用于方程Arduino将找到车辆的速度。

请注意,车辆的速度只会在一个方向上检测,即启动激光以停止激光,要在另一个方向检测车辆,必须在相反的方向上放置另一个相同的设置。因此,这是学校,拼贴画等场所的理想选择。他们有进出门的地方。

现在让我们看一下示意图:

Arduino和显示器之间的连接:

DIY

上面的电路是不言自明的,只需按照电路连接接线即可。调整 10K 电位计以调整显示对比度。

其他接线细节:

DIY

上述电路由Arduino,4个按钮,两个10K下拉电阻(不要改变电阻的值),两个LDR和一个蜂鸣器组成。4个按钮的功能将很快解释。现在让我们看看如何正确安装
LDR。

DIY

LDR必须正确遮挡阳光,只有激光束才能击中LDR。确保您的激光模块足够强大,可以在明亮的阳光下工作。

您可以将PVC管用于上述目的,并在管内将其涂成黑色;不要忘记覆盖前部,利用您的创造力来完成这项工作。

程序代码:

// ----------- Developed by 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;

LiquidCrystal 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 buzzer = 10;

const float km_h = 3.6;

int distance = 10; // In meters.

int variable = 0;

int count = 0;

int address = 0;

int value = 100;

int speed_address = 1;

int speed_value = 0;

int i = 0;

float ms = 0;

float Seconds = 0;

float Speed = 0;

boolean buzz = false;

boolean laser = false;

boolean x = false;

boolean y = false;

void setup()

{

pinMode(start, INPUT);

pinMode(End, INPUT);

pinMode(up, INPUT);

pinMode(down, INPUT);

pinMode(Set, INPUT);

pinMode(change, INPUT);

pinMode(buzzer, OUTPUT);

digitalWrite(change, HIGH);

digitalWrite(up, HIGH);

digitalWrite(down, HIGH);

digitalWrite(Set, HIGH);

digitalWrite(buzzer, LOW);

lcd.begin(16, 2);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(F(“ Vehicle Speed”));

lcd.setCursor(0, 1);

lcd.print(F(“ detector”));

delay(1500);

if (EEPROM.read(address) != value)

{

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Set Speed Limit”);

lcd.setCursor(0, 1);

lcd.print(“km/h:”);

lcd.setCursor(6, 1);

lcd.print(count);

while (x == false)

{

if (digitalRead(up) == LOW)

{

lcd.setCursor(6, 1);

count = count + 1;

lcd.print(count);

delay(200);

}

if (digitalRead(down) == LOW)

{

lcd.setCursor(6, 1);

count = count - 1;

lcd.print(count);

delay(200);

}

if (digitalRead(Set) == LOW)

{

speed_value = count;

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Speed Limit is”);

lcd.setCursor(0, 1);

lcd.print(“set to ”);

lcd.print(speed_value);

lcd.print(“ km/h”);

EEPROM.write(speed_address, speed_value);

delay(2000);

x = true;

}

}

EEPROM.write(address, value);

}

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Testing Laser”);

lcd.setCursor(0, 1);

lcd.print(“Alignment.。..”);

delay(1500);

while (laser == false)

{

if (digitalRead(start) == HIGH && digitalRead(End) == HIGH)

{

laser = true;

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Laser Alignment”);

lcd.setCursor(0, 1);

lcd.print(“Status: OK”);

delay(1500);

}

while (digitalRead(start) == LOW && digitalRead(End) == LOW)

{

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Both Lasers are”);

lcd.setCursor(0, 1);

lcd.print(“not Aligned”);

delay(1000);

}

while (digitalRead(start) == LOW)

{

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Start Laser not”);

lcd.setCursor(0, 1);

lcd.print(“Aligned”);

delay(1000);

}

while (digitalRead(End) == LOW)

{

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“End Laser not”);

lcd.setCursor(0, 1);

lcd.print(“Aligned”);

delay(1000);

}

}

lcd.clear();

}

void loop()

{

if (digitalRead(change) == LOW)

{

change_limit();

}

if (digitalRead(start) == LOW)

{

variable = 1;

buzz = true;

while (variable == 1)

{

ms = ms + 1;

delay(1);

if (digitalRead(End) == LOW)

{

variable = 0;

}

}

Seconds = ms / 1000;

ms = 0;

}

if (Speed 《 EEPROM.read(speed_address))

{

y = true;

}

Speed = distance / Seconds;

Speed = Speed * km_h;

if (isinf(Speed))

{

lcd.setCursor(0, 0);

lcd.print(“Speed:0.00”);

lcd.print(“ km/h ”);

}

else

{

lcd.setCursor(0, 0);

lcd.print(“Speed:”);

lcd.print(Speed);

lcd.print(“km/h ”);

lcd.setCursor(0, 1);

lcd.print(“ ”);

if (buzz == true)

{

buzz = false;

digitalWrite(buzzer, HIGH);

delay(100);

digitalWrite(buzzer, LOW);

}

if (Speed 》 EEPROM.read(speed_address))

{

lcd.setCursor(0, 0);

lcd.print(“Speed:”);

lcd.print(Speed);

lcd.print(“km/h ”);

lcd.setCursor(0, 1);

lcd.print(“Overspeed Alert!”);

if (y == true)

{

y = false;

for (i = 0; i 《 45; i++)

{

digitalWrite(buzzer, HIGH);

delay(50);

digitalWrite(buzzer, LOW);

delay(50);

}

}

}

}

}

void change_limit()

{

x = false;

count = EEPROM.read(speed_address);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Set Speed Limit”);

lcd.setCursor(0, 1);

lcd.print(“km/h:”);

lcd.setCursor(6, 1);

lcd.print(count);

while (x == false)

{

if (digitalRead(up) == LOW)

{

lcd.setCursor(6, 1);

count = count + 1;

lcd.print(count);

delay(200);

}

if (digitalRead(down) == LOW)

{

lcd.setCursor(6, 1);

count = count - 1;

lcd.print(count);

delay(200);

}

if (digitalRead(Set) == LOW)

{

speed_value = count;

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Speed Limit is”);

lcd.setCursor(0, 1);

lcd.print(“set to ”);

lcd.print(speed_value);

lcd.print(“ km/h”);

EEPROM.write(speed_address, speed_value);

delay(2000);

x = true;

lcd.clear();

}

}

}

// ----------- Developed by R.GIRISH ---------//

现在让我们看看如何操作这个电路:

•完成您的电路并上传代码。

• 两个激光器/LDR 之间的距离应正好为 10 米,不少于或不超过,否则速度将计算错误(如第一张图所示)。

•激光和LDR之间的距离可以由您选择的和情况决定。

• 电路将检查激光与LDR的未对准,如果有,请根据LCD上显示的信息进行更正。

•最初,赛道会要求您输入以公里/小时为单位的速度限制值,超过该值赛道会发出警报,通过按向上(S1)和向下(S2),您可以更改显示屏上的数字并按设置(S3),该值将被保存。

•要更改此速度限制,请按S4按钮,您可以设置新的速度限制。

•现在以30公里/小时的速度驾驶摩托车并中断激光束,电路应该向您显示一个非常接近30 km / h的数字。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分