Circuit de detecció de velocitat de vehicles per a la policia de trànsit

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un circuit que pugui mesurar la velocitat de qualsevol vehicle per carreteres i autopistes. El circuit proposat es manté estacionari en un lloc on es sospita que els vehicles sobrepassen la velocitat. Si algun vehicle supera el límit de velocitat, el circuit avisa immediatament. Veurem el codi, el diagrama de circuits i la lògica de com es mesura la velocitat del vehicle.

Objectiu

Segons l’informe de morts accidentals de 2015 a l’Índia, l’excés de velocitat provoca un 75% d’accidents de trànsit. La majoria de la policia de trànsit intenta detenir els conductors que condueixen perillosament el seu vehicle més enllà del límit de velocitat de la ciutat.



No cada vegada que una policia de trànsit pot aturar un vehicle que excedeix la velocitat i carregar-lo. Per tant, s’instal·la un dispositiu anomenat càmera de velocitat on se sospita que els conductors sobrepassen la velocitat, com ara zones freqüents d’accidents, interseccions, etc.

Construirem alguna cosa semblant a la càmera ràpida, però d’una manera molt simplificada, que es pot instal·lar dins d’un campus com ara parcs escolars, universitaris o informàtics o simplement com un projecte divertit.



El projecte proposat consisteix en una pantalla LCD de 16 x 2 per mostrar la velocitat de cada vehicle que passa a través de dos feixos làser que es col·loquen exactament 10 metres per mesurar la velocitat del vehicle mentre interromp els feixos làser.

Un timbre sonarà quan es passi un vehicle que indica que es detecta un vehicle i que la velocitat de cada vehicle es mostrarà a la pantalla LCD. Quan un vehicle supera el límit de velocitat, el timbre emet un so continu i la velocitat del vehicle es mostrarà a la pantalla.

NOTA: La velocitat del vehicle es mostrarà a la pantalla LCD independentment que el vehicle passi per sobre o per sota de la velocitat.

Ara vegem la lògica del circuit per mesurar la velocitat.

Tots coneixem una fórmula senzilla anomenada fórmula velocitat - distància - temps.
Velocitat = Distància / Temps.

• Velocitat en metre per segon,
• Distància en metres,
• Temps en segons.

Per saber la velocitat, hem de conèixer la distància, per exemple, “x” recorreguda per un vehicle i el temps que es triga a recórrer aquesta distància “x”.

Per fer-ho, estem configurant dos feixos làser i dos LDR amb una distància de 10 metres de la manera següent:

mesura de la velocitat del vehicle de trànsit

Sabem que la distància és fixa de 10 metres, ara hem de saber el temps de l’equació.

El temps serà calculat per Arduino, quan el vehicle interrompi el “làser d’inici”, comenci el temporitzador i quan el vehicle interrompi el “làser final” el temporitzador s’atura i aplicant els valors a l’equació Arduino trobarà la velocitat del vehicle.

Tingueu en compte que la velocitat del vehicle només es detectarà en una direcció, és a dir, iniciar el làser per aturar el làser, per detectar el vehicle en una altra direcció, s’ha de situar una altra configuració en sentit contrari. Per tant, això és ideal per a llocs com l’escola, el collage, etc., on tenen portes d’entrada i sortida.

Ara vegem el diagrama esquemàtic:

Connexió entre Arduino i pantalla:

Pantalla LCD de velocitat del vehicle

Allà, el circuit anterior s’explica per si mateix i només cal connectar el cablejat segons el circuit. Ajusteu el potenciòmetre de 10K per ajustar el contrast de la pantalla.

Detalls de cablejat addicionals:

Configuració del cablejat de la mesura de la distància del vehicle de velocitat

El circuit anterior consta d’Arduino, 4 botons polsadors, dues resistències de 10K cap avall (no canvieu el valor de les resistències), dos LDR i un zumbador. En breu s’explicarà la funció de 4 botons. Ara vegem com muntar el LDR correctament.

Mouting LDR per a la detecció de velocitat del vehicle

El LDR ha de ser cobert de la llum del sol correctament, només el raig làser hauria de colpejar el LDR. Assegureu-vos que el mòdul làser sigui prou potent per funcionar amb un sol brillant.
Podeu utilitzar una canonada de PVC per a l’objectiu anterior i pintar-la de negre a l’interior del tub. No oblideu tapar la part frontal; utilitzeu la vostra creativitat per aconseguir-ho.

Codi del programa:

// ----------- Developed by R.GIRISH ---------//
#include
#include
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 {
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 ---------//

Ara anem a veure com s'utilitza aquest circuit:

• Completa el teu circuit i penja el codi.
• La distància entre dos làsers / LDR ha de ser exactament de 10 metres, ni més ni menys, en cas contrari la velocitat es calcularà malament (es mostra al primer diagrama).
• La distància entre el làser i el LDR pot segons la vostra elecció i circumstàncies.
• El circuit comprovarà si hi ha desalineació del làser amb LDR, si n'hi ha cap, si us plau, corregiu-lo segons la informació que es mostra a la pantalla LCD.
• Inicialment, el circuit us demanarà que introduïu un valor límit de velocitat en km / h per sobre del qual el circuit avisa, prement cap amunt (S1) i cap avall (S2) podeu canviar el número de la pantalla i prémer set (S3), es guardarà el valor.
• Per canviar aquest límit de velocitat, premeu el botó S4 i podeu establir un límit de velocitat nou.
• Ara agafeu una motocicleta a 30 km / h i interrompeu els feixos làser; el circuit us mostrarà un nombre molt proper als 30 km / h.
• Ja heu acabat i el vostre circuit està preparat per a la seguretat del vostre campus.

Prototip de l'autor:

prototip de detecció de velocitat del vehicle

Si teniu alguna pregunta sobre aquest circuit de detecció de velocitat de vehicles de la policia de trànsit, no dubteu a fer-ho a la secció de comentaris, és possible que obtingueu una resposta ràpida.




Anterior: full de dades del sensor PIR, especificacions de pinout, funcionant Següent: Circuit de prova de control remot