Ajoneuvon nopeudenilmaisupiiri liikennepoliisille

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä aiomme rakentaa piirin, joka voi mitata minkä tahansa ajoneuvon nopeuden teillä ja moottoriteillä. Ehdotettu piiri pidetään paikallaan paikassa, jossa ajoneuvojen epäillään ylinopeutta. Jos jokin ajoneuvo ylittää nopeusrajoituksen, piiri hälyttää välittömästi. Etsimme koodia, piirikaaviota ja logiikkaa, kuinka ajoneuvon nopeus mitataan.

Tavoite

Ylinopeuden ylittäminen aiheuttaa 75% tieliikenneonnettomuuksista Intian vuoden 2015 onnettomuuskuolemien mukaan. Suurin osa liikennepoliisista yrittää pidättää autoilijat, jotka ajavat vaarallisesti ajoneuvoaan kaupungin nopeusrajoituksen ulkopuolella.



Ei aina, kun liikennepoliisi voi pysäyttää ylinopeutta ajavan ajoneuvon ja ladata niitä. Joten nopeuskameraksi kutsuttu laite on asennettu paikkaan, jossa moottoriajoneuvojen epäillään ylittävän nopeuden, kuten usein onnettomuusalttiit alueet, risteykset jne.

Aiomme rakentaa jotain samanlaista kuin nopeuskamera, mutta paljon yksinkertaisemmalla tavalla, joka voidaan asentaa kampuksen, kuten koulun, yliopiston tai IT-puistojen sisälle, tai vain hauska projekti.



Ehdotettu projekti koostuu 16 x 2 LCD-näytöstä, joka näyttää kunkin ajoneuvon nopeuden, joka kulkee kahden lasersäteen läpi, jotka on sijoitettu täsmälleen 10 metrin päähän ajoneuvon nopeuden mittaamiseksi katkaisemalla nämä lasersäteet.

Summeri antaa äänimerkin, kun ajoneuvo ohitetaan, mikä osoittaa, että ajoneuvo on havaittu ja kunkin ajoneuvon nopeus näkyy nestekidenäytössä. Kun ajoneuvo ylittää nopeusrajoituksen, summeri piippaa jatkuvasti ja ajoneuvon nopeus näkyy näytössä.

HUOMAUTUS: Ajoneuvon nopeus näytetään nestekidenäytöllä riippumatta siitä, onko ajoneuvo ylinopeutta tai liian nopeaa.

Katsotaan nyt piirin takana olevaa logiikkaa nopeuden mittaamiseksi.

Me kaikki tiedämme yksinkertaisen kaavan, jota kutsutaan nopeus - matka - aika kaavaksi.
Nopeus = Etäisyys / Aika.

• Nopeus metreinä sekunnissa
• Etäisyys metreinä,
• Aika sekunteina.

Nopeuden tuntemiseksi meidän on tiedettävä etäisyys sanomalla ”x”, jonka ajoneuvo on kuljettanut, ja aika, joka kuluu kyseisen matkan ”x” suorittamiseen.

Tätä varten perustamme kaksi lasersädettä ja kaksi LDR: ää 10 metrin etäisyydellä seuraavalla tavalla:

liikenteen ajoneuvon nopeusmitta

Tiedämme, että etäisyys on 10 metriä, mikä on kiinteä, nyt meidän on tiedettävä aika yhtälössä.

Ajan laskee Arduino, kun ajoneuvo keskeyttää 'käynnistyslaserin', ajastin käynnistyy ja kun ajoneuvo keskeyttää 'loppulaserin', ajastin pysähtyy ja arvojen soveltaminen yhtälöön Arduino löytää ajoneuvon nopeuden.

Huomaa, että ajoneuvon nopeus havaitaan vain yhteen suuntaan, ts. Käynnistetään laser pysäyttämään laser, ajoneuvon havaitsemiseksi toiseen suuntaan on asetettava toinen sama asetus vastakkaiseen suuntaan. Joten tämä on ihanteellinen paikkoihin, kuten koulu, kollaasi jne., Joissa heillä on sisään- ja ulospäin portit.

Katsotaan nyt kaaviokuva:

Yhteys Arduinon ja näytön välillä:

LCD-ajoneuvon nopeuden näyttö

Yllä oleva piiri on itsestään selvä ja kytke vain johdot piirin mukaisesti. Säädä 10K-potentiometriä näytön kontrastin säätämiseksi.

Muut johdotustiedot:

Nopeusajoneuvon etäisyysmittausjohdot on asennettu

Yllä oleva piiri koostuu Arduinosta, 4 painikkeesta, kahdesta 10K alasvetovastuksesta (älä muuta vastusten arvoa), kahdesta LDR: stä ja yhdestä summerista. Neljän painikkeen toiminta selitetään pian. Katsotaan nyt, kuinka LDR asennetaan oikein.

LDR-mouting ajoneuvon nopeuden havaitsemiseen

LDR on suojattava auringonvalolta kunnolla, vain lasersäteen tulisi osua LDR: ään. Varmista, että lasermoduulisi on riittävän tehokas toimimaan kirkkaassa auringonpaisteessa.
Voit käyttää PVC-putkea edellä mainittuun tarkoitukseen ja maalata sen mustaksi putken sisällä. Älä unohda peittää etuosaa, käytä luovuuttasi tämän saavuttamiseksi.

Ohjelmakoodi:

// ----------- 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 ---------//

Katsotaan nyt, kuinka tätä piiriä käytetään:

• Suorita piiri ja lataa koodi.
• Kahden laserin / LDR: n välisen etäisyyden tulisi olla täsmälleen 10 metriä, ei vähempää tai enempää, muuten nopeus lasketaan väärin (esitetty ensimmäisessä kaaviossa).
• Valitsemasi laser- ja LDR-tölkin välinen etäisyys ja olosuhteet.
• Piiri tarkistaa laserin väärän suuntauksen LDR: n kanssa, korjaa se tarvittaessa nestekidenäytössä näkyvien tietojen mukaisesti.
• Aluksi piiri pyytää sinua syöttämään nopeusrajoituksen arvon km / h, jonka ylittäessä piiri hälyttää, painamalla ylös (S1) ja alas (S2) voit vaihtaa numeron näytöllä ja painamalla asetusta (S3), tämä arvo tallennetaan.
• Muuta tätä nopeusrajoitusta painamalla painiketta S4 ja voit asettaa uuden nopeusrajoituksen.
• Ota nyt moottoripyörän nopeus 30 km / h ja keskeytä lasersäteet. Piirin tulisi näyttää luku, joka on lähellä 30 km / h.
• Olet valmis ja piiri on valmis palvelemaan kampuksen turvallisuutta.

Kirjoittajan prototyyppi:

ajoneuvon nopeuden havaitsemisen prototyyppi

Jos sinulla on kysyttävää tästä liikennepoliisin ajoneuvon nopeudenilmaisinpiiristä, kysy rohkeasti kommenttiosassa, saatat saada nopean vastauksen.




Edellinen: PIR-anturin tietolomake, Pinout-määritykset, työskentely Seuraava: Kauko-ohjaimen testauspiiri