Detector de velocidade do carro usando Arduino
Conteudo
Projeto de detector de velocidade do carro
Neste projeto, vou mostrar como medir a velocidade de um carro (ou homem) em movimento de fora. O departamento de polícia usa esse tipo de sistema para evitar o excesso de velocidade dos veículos. Nosso projeto é um pouco diferente do sistema usado pela polícia, mas o conceito geral do detector de velocidade do carro é o mesmo.
Neste projeto, dois sensores IR são colocados separados em um lado da estrada. Quando qualquer veículo cruza os sensores, o cronômetro interno do Arduino conta o tempo entre a ativação do sensor. Agora a velocidade é medida usando uma relação simples de tempo de distância.
Trabalhando
Ambos os sensores IR são conectados ao pino de interrupção do Arduino e detectam a onda descendente. O objetivo de usar interrupção é melhorar a eficiência do sistema. Um LCD é conectado ao Arduino e a velocidade medida é mostrada no LCD.
Quando o carro se move na frente do primeiro sensor, ele dá o sinal de saída para o Arduino, o Arduino detecta a onda caindo, agora o cronômetro interno do Arduino é iniciado e quando o carro se move na frente do segundo sensor, o cronômetro é parado.
Agora o Arduino mede a velocidade do carro, que é medida pela relação distância-tempo
Velocidade = Distância ÷ Tempo
- Velocidade: velocidade do carro
- Distância: distância entre sensores
- Tempo medido pelo Arduino
Sensor IR:
O sensor IR inclui um LED IR e um fototransistor. Quando um objeto passa entre os sensores, a luz é refletida do objeto e atinge o fototransistor. Um amplificador operacional IC (LM358) é usado e o fototransistor é conectado a ele. Quando o objeto chega na frente do sensor, ele envia um sinal lógico HIGH para o Arduino.
Arduino:
Um Arduino Nano é usado como unidade de controle. Você pode usar quaisquer outras variantes do Arduino de acordo com sua escolha.
Componentes Usados
Componente | Especificação | Quantidade |
---|---|---|
Arduino Nano | Nano | 1 |
IR Sensor | 2 | |
LCD | 16X2 | 1 |
Power Adaptor | 12 Volt | 1 |
Switch | DPDT | 1 |
Circuito detector de velocidade do carro
O diagrama do circuito é mostrado na figura abaixo. Se você for fazer um circuito em uma placa de ensaio ou PCB de uso geral, a figura abaixo é útil.
Para gravação
No Arduino, os pinos D2 e D3 são interrompidos, onde D2 é INT0 e D3 é INT1. Os pinos de saída dos sensores IR são conectados a esses pinos.
O LCD está conectado aos pinos D4 a D9 do Arduino, onde D4 está conectado a EN, D5 está conectado a RS e D6 a D9 do Arduino estão conectados aos pinos D4 a D7 do Arduino. Uma predefinição é conectada ao terceiro pino do LCD, que é o controle de contraste. Os pinos 15 e 16 são usados para a luz de fundo do LCD.
Programa / Código
#include<LiquidCrystal.h> LiquidCrystal lcd(4, 5, 6, 7, 8, 9); int sensor1 = 2; int sensor2 = 3; int Time1; int Time2; int Time; int flag = 0; int distance = 27; float Speed; void setup() { attachInterrupt(0,fun1,RISING); attachInterrupt(1,fun2,FALLING); lcd.begin(16,2); lcd.clear(); lcd.print("MEDIÇÃO DE VELOCIDADE"); } void fun1() { Time1 = millis(); if (flag == 0) { flag = 1; } else { flag = 0; } } void fun2() { Time2 = millis(); if (flag == 0) {flag = 1;} else {flag = 0;} } void loop() { if (flag == 0) { if (Time1 > Time2) { Time = Time1 - Time2; Speed = (distance*1000)/Time; } else if (Time2 > Time1) { Time = Time2 - Time1; Speed = (distance*1000)/Time; } else { Speed = 0; } } if (Speed == 0) { lcd.setCursor(0, 1); lcd.print(".......OK......."); } else { lcd.setCursor(2, 1); lcd.print(Speed); lcd.print(" cm/sec"); delay(10000); Time1 = 0; Time2 = 0; } }
No início do código, um arquivo de cabeçalho é declarado pelo nome “LiquidCrystal.h”, que é usado para o display LCD. Na próxima linha os pinos do LCD são declarados na função “LiquidCrystal lcd (4,5,6,7,8,9)”, o número entre colchetes mostra os pinos do Arduino que estão conectados ao LCD.
Nas linhas 4 e 5, dois inteiros são declarados pelo nome sensor1 e sensor2, são pinos de pinos do Arduino que são conectados a sensores IR.
Depois disso, 4 inteiros são declarados por nome Time1, Time2, Time e flag. Onde “Time1” é o tempo medido quando “sensor1” é ativado e “Time2” é o tempo medido quando “senaor2” é ativado. O tempo inteiro é a diferença de “Time1” e “Time2”, que é equivalente ao tempo gasto pelo carro para ir de “sensor1” para “sensor2” ou “sensor2” para “sensor1”
Agora, um flutuador é declarado pelo nome “Velocidade”, que é a velocidade medida do carro em execução.
No início de “void setup()”, duas interrupções são anexadas pela função “attachInterrupt (0, fun1, Falling)” que significa que quando “interrupt0 (INT0)” detecta a onda em queda, fun1 será executado.
Agora o LCD é iniciado usando a função “lcd.begin(16,2)”. O LCD é limpo usando a função “lcd.clear()” e “MEDIÇÃO DE VELOCIDADE” é impresso no LCD usando a função “lcd.print”
No “void fun1()” será executado quando “interrupt0 (INT0)” ativado, nesta função o tempo atual é medido usando “Time1 = millis()”. Depois disso, uma condição “if else” é usada, torna o “sinalizador” 1 quando é 0 e torna 0 quando é 1.
Depois que “void fun2()” é usado, é exatamente o mesmo que “void fun1 ()”, mas é executado quando “interrupt1 (INT1)” é ativado.
No “void loop()”, em primeiro lugar, o tempo é medido usando “Time1” e “Time2”, o “Time” deve ser positivo, então “if else” é usado para torná-lo positivo. Mas este loop é executado quando o sinalizador é igual a zero, portanto, uma condição “se” é usada. Se “Time1” e “Time2” forem iguais, “Speed” será zero.
Na linha 47 uma condição ativada quando a velocidade é igual a zero, neste momento “… .OK….” é impresso no segundo raw do LCD, que indica que o sistema está pronto para uso.
Na linha 51, a velocidade é impressa no LCD após a impressão de “Time1” e “Time2” se tornará zero.
Calibração
Na medição da distância de velocidade, a relação de tempo é usada. Portanto, a distância entre os sensores é muito importante, por isso precisamos calibrar o sistema.
Na linha, um inteiro é declarado por nome de distância que é igual a 27, essa é a distância entre os dois sensores. Essa distância pode variar de acordo com o seu arranjo, então meça a distância em centímetros e mude aqui.