V tomto příspěvku zkonstruujeme obvod, který dokáže měřit rychlost jakéhokoli vozidla na silnicích a dálnicích. Navrhovaný okruh je udržován v klidu na místě, kde je podezření na nadměrnou rychlost vozidel. Pokud jakékoli vozidlo překročí rychlostní limit, obvod okamžitě upozorní. Budeme hledat kód, schéma zapojení a logiku měření rychlosti vozidla.
Objektivní
Podle zprávy o nehodě z roku 2015 v Indii je překročení rychlosti 75% dopravních nehod, což je obrovské množství. Většina dopravních policistů se snaží zadržet motoristy, kteří nebezpečně řídí své vozidlo nad rychlostní limit města.
Ne pokaždé, když dopravní policie může zastavit překročení rychlosti vozidla a nabít je. Je tedy nainstalováno zařízení s názvem rychlostní kamera, kde je motorista podezřelý z nadměrné rychlosti, jako jsou oblasti náchylné k častým nehodám, křižovatky atd.
Chystáme se postavit něco podobného rychlému fotoaparátu, ale mnohem zjednodušenějším způsobem, který lze nainstalovat uvnitř kampusu, jako je škola, vysoká škola nebo IT parky, nebo jen jako zábavný projekt.
Navrhovaný projekt se skládá z LCD displeje 16 x 2, který zobrazuje rychlost každého vozidla procházejícího dvěma laserovými paprsky, které jsou umístěny od sebe přesně 10 metrů, aby změřily rychlost vozidla při přerušení těchto laserových paprsků.
Při projíždění vozidla zazní zvukový signál, který signalizuje detekci vozidla a na LCD displeji se zobrazí rychlost každého vozidla. Když vozidlo překročí rychlostní limit, bzučák bude nepřetržitě pípat a na displeji se zobrazí rychlost vozidla.
POZNÁMKA: Rychlost vozidla se zobrazí na LCD bez ohledu na to, zda vozidlo překračuje rychlost nebo je nižší než rychlost.
Nyní se podívejme na logiku měření obvodu za obvodem.
Všichni známe jednoduchý vzorec, který se nazývá vzorec rychlost - vzdálenost - čas.
Rychlost = vzdálenost / čas.
• Rychlost v metrech za sekundu,
• vzdálenost v metrech,
• Čas v sekundách.
Abychom věděli rychlost, musíme znát vzdálenost „x“ ujetou vozidlem a čas potřebný k překonání této vzdálenosti „x“.
K tomu nastavujeme dva laserové paprsky a dva LDR se vzdáleností 10 metrů následujícím způsobem:
Víme, že vzdálenost je 10 metrů, která je pevná, nyní musíme znát čas v rovnici.
Čas vypočítá Arduino, když vozidlo přeruší „startovací laser“, začne časovač a když vozidlo přeruší „koncový laser“, časovač se zastaví a aplikace hodnot na rovnici Arduino najde rychlost vozidla.
Mějte na paměti, že rychlost vozidla bude detekována pouze v jednom směru, tj. Spuštění laseru k zastavení laseru, k detekci vozidla v jiném směru musí být umístěno jiné stejné nastavení v opačném směru. To je ideální pro místa, jako je škola, koláž atd., Kde mají brány IN a OUT.
Nyní se podívejme na schematický diagram:
Spojení mezi Arduino a displejem:
Výše uvedený obvod je samozřejmý a stačí připojit kabeláž podle obvodu. Upravte 10K potenciometr pro nastavení kontrastu displeje.
Další podrobnosti o zapojení:
Výše uvedený obvod se skládá z Arduina, 4 tlačítek, dvou 10K stahovacích rezistorů (neměňte hodnotu rezistorů), dvou LDR a jednoho bzučáku. Funkce 4 tlačítek bude brzy vysvětlena. Nyní se podívejme, jak správně připojit LDR.
LDR mě musí správně zakrýt před slunečním zářením, na LDR by měl dopadat pouze laserový paprsek. Ujistěte se, že je váš laserový modul dostatečně silný, aby pracoval i za jasného slunečního svitu.
Pro výše uvedený účel můžete použít trubku z PVC a uvnitř trubky ji natřít černě. Nezapomeňte zakrýt přední část, použijte k tomu svou kreativitu.
Programový kód:
// ----------- 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 ---------//
Nyní se podívejme, jak tento obvod ovládat:
• Dokončete svůj okruh a nahrajte kód.
• Vzdálenost mezi dvěma lasery / LDR by měla být přesně 10 metrů, ne méně nebo více, jinak dojde k nesprávnému výpočtu rychlosti (zobrazeno v prvním schématu).
• Vzdálenost mezi laserem a LDR může být dle vašeho výběru a okolností.
• Obvod zkontroluje laserové vychýlení s LDR, pokud existuje, opravte jej podle informací zobrazených na LCD.
• Zpočátku vás okruh vyzve k zadání limitní hodnoty rychlosti v km / h, po jejímž překročení okruh upozorní, stisknutím tlačítek nahoru (S1) a dolů (S2) můžete změnit číslo na displeji a stisknout tlačítko set (S3), hodnota bude uložena.
• Chcete-li tento rychlostní limit změnit, stiskněte tlačítko S4 a můžete nastavit nový rychlostní limit.
• Nyní jeďte na motorce rychlostí 30 km / ha přerušte laserové paprsky, okruh by vám měl ukázat číslo velmi blízké 30 km / h.
• Hotovo a váš okruh je připraven sloužit bezpečnosti vašeho kampusu.
Autorův prototyp:
Máte-li jakékoli dotazy týkající se tohoto obvodu detektoru rychlosti vozidla dopravní policie, neváhejte se zeptat v sekci komentářů, můžete obdržet rychlou odpověď.
Předchozí: Datový list senzoru PIR, specifikace Pinout, funkční Další: Obvod testeru dálkového ovládání