Circuito detector de velocidade de veículos para polícia de trânsito

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post vamos construir um circuito que pode medir a velocidade de qualquer veículo em estradas e rodovias. O circuito proposto é mantido estacionário em um local onde os veículos são suspeitos de excesso de velocidade. Se algum veículo ultrapassar o limite de velocidade, o circuito alerta imediatamente. Estaremos olhando o código, o diagrama de circuito e a lógica de como a velocidade do veículo é medida.

Objetivo

Excesso de velocidade causa 75% de acidentes rodoviários, de acordo com o relatório de morte acidental de 2015 na Índia, que é um número enorme. A maioria da polícia de trânsito tenta deter os motoristas que dirigem perigosamente seus veículos além do limite de velocidade da cidade.



Nem toda vez que uma polícia de trânsito pode parar um veículo em alta velocidade e atacá-lo. Assim, um dispositivo chamado radar de velocidade é instalado onde os motoristas são suspeitos de excesso de velocidade, como áreas sujeitas a acidentes frequentes, cruzamentos etc.

Vamos construir algo semelhante a um radar de velocidade, mas de uma forma muito simplificada, que pode ser instalada dentro de um campus como escola, faculdade ou parques de TI ou apenas como um projeto divertido.



O projeto proposto consiste em um display LCD 16 x 2 para mostrar a velocidade de cada veículo passando por dois feixes de laser que são colocados separados por exatamente 10 metros para medir a velocidade do veículo enquanto interrompe esses feixes de laser.

Uma campainha soará quando um veículo for ultrapassado, indicando que um veículo foi detectado e a velocidade de cada veículo será exibida no visor LCD. Quando um veículo ultrapassa o limite de velocidade, a campainha soa continuamente e a velocidade do veículo é exibida no visor.

NOTA: A velocidade do veículo será exibida no LCD independentemente de o veículo estar ultrapassando ou diminuindo a velocidade.

Agora vamos ver a lógica por trás do circuito para medir a velocidade.

Todos nós conhecemos uma fórmula simples chamada fórmula velocidade - distância - tempo.
Velocidade = Distância / Tempo.

• Velocidade em metros por segundo,
• Distância em metros,
• Tempo em segundos.

Para saber a velocidade, temos que saber a distância “x” percorrida por um veículo e o tempo que leva para percorrer essa distância “x”.

Para fazer isso, estamos configurando dois feixes de laser e dois LDRs com 10 metros de distância da seguinte maneira:

medida de velocidade de trânsito de veículos

Sabemos que a distância é de 10 metros que é fixa, agora temos que saber o tempo na equação.

O tempo será calculado pelo Arduino, quando o veículo interromper o “iniciar laser”, o cronômetro inicia e quando o veículo interrompe o “finalizar laser” o cronômetro para e aplicando os valores à equação o Arduino encontrará a velocidade do veículo.

Observe que a velocidade do veículo só será detectada em uma direção, ou seja, iniciar o laser para parar o laser, para detectar o veículo em outra direção, outra mesma configuração deve ser colocada na direção oposta. Então, isso é ideal para lugares como escola, colagem, etc., onde há portas de entrada e saída.

Agora vamos ver o diagrama esquemático:

Conexão entre Arduino e display:

Visor LCD de velocidade do veículo

O circuito acima é autoexplicativo e apenas conecte a fiação conforme o circuito. Ajuste o potenciômetro de 10K para ajustar o contraste da tela.

Detalhes adicionais de fiação:

Configuração da fiação de medida de distância do veículo de velocidade

O circuito acima consiste em Arduino, 4 botões de pressão, dois resistores pull down de 10K (não altere o valor dos resistores), dois LDRs e um buzzer. A função dos 4 botões será explicada em breve. Agora vamos ver como montar o LDR corretamente.

LDR mouting para detecção de velocidade do veículo

O LDR deve ser coberto da luz solar adequadamente, apenas o feixe de laser deve atingir o LDR. Certifique-se de que seu módulo de laser é potente o suficiente para funcionar sob um sol forte.
Você pode usar um tubo de PVC para o propósito acima e pintar de preto dentro do tubo, não se esqueça de cobrir a parte frontal, use sua criatividade para conseguir isso.

Código do 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 ---------//

Agora vamos ver como operar este circuito:

• Complete o circuito e carregue o código.
• A distância entre dois lasers / LDRs deve ser exatamente 10 metros, nem menos nem mais, caso contrário, a velocidade será calculada mal (mostrado no primeiro diagrama).
• A distância entre o laser e o LDR pode ser de sua escolha e circunstâncias.
• O circuito verificará o desalinhamento do laser com LDR, se houver, corrija-o de acordo com as informações exibidas no LCD.
• Inicialmente, o circuito solicitará que você insira um valor de limite de velocidade em km / h além do qual o circuito alerta, pressionando para cima (S1) e para baixo (S2), você pode alterar o número no visor e pressionar definir (S3), este valor será salvo.
• Para alterar este limite de velocidade, pressione o botão S4 e você pode definir um novo limite de velocidade.
• Agora conduza uma moto a 30 km / he interrompa os feixes de laser, o circuito deve mostrar um número muito próximo de 30 km / h.
• Você terminou e seu circuito está pronto para servir à segurança de seu campus.

Protótipo do autor:

protótipo de detecção de velocidade de veículo

Se você tiver alguma dúvida sobre este circuito detector de velocidade de veículos da polícia de trânsito, sinta-se à vontade para perguntar na seção de comentários, você pode obter uma resposta rápida.




Anterior: Folha de dados do sensor PIR, especificações de pinagem, funcionamento Próximo: Circuito de teste de controle remoto