boa noite, estou tentando desenvolver um projeto de um radar que tem como objetivo funcionar da seguinte forma.

2 sensores indutivos fixados ao chão com uma distancia fixa conhecida de 20cm.

calcular o tempo que o veiculo demorou passar pelos 2 sensores 

e assim calcular a velocidade utilizando a formula: 

Velocidade= distancia/tempo gasto para o veiculo passar pelos sensores e indicar esse valor em um display lcd.

alguem pode me ajudar como faço pra calcular esse tempo que função uso ?

desde ja agradeço

Wilson

Exibições: 708

Responder esta

Respostas a este tópico

Que função? não entendi, vai fazer exatamente o calculo que você descreveu, usando a formula.

não sei que função de tempo usar para contar o tempo que o veiculo leva para passar pelos sensores.

conseguindo pegar o intervalo de tempo ta sendo a maior dificuldade.

encontrei a programação de um velocimetro e queria saber se tem como modificar para determinar a velocidade utilizando 2 sensores ao inves de 1 (como no caso do velocimetro)

#include <LiquidCrystal.h>
#define PMS_PIN 2
#define LED_PIN 13
LiquidCrystal lcd(8,9,4,5,6,7);
float start, finished;
float elapsed, time;
float circMetric=0.16;
float speedk;
void setup()
{
  pinMode(PMS_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);  
attachInterrupt(0, speedCalc, RISING);
  start=millis();
  lcd.begin(16,2);   
  lcd.clear();
}
void speedCalc()
{
  elapsed=millis()-start;
  start=millis();
  speedk=(3600*circMetric)/elapsed;
}
void loop()
{
  lcd.setCursor(5,0);
  lcd.print(int(speedk));
  lcd.print("  km/h              ");
  lcd.setCursor(0,1);
  lcd.print("   Medindo...   ");
digitalWrite(LED_PIN, digitalRead(PMS_PIN));
}

Oi WSF, boa noite,

estas soluções são erroneamente chamadas de radar.

Na realidade são sistemas baseados em "laços indutivos".

veja se estes links ajudam:

http://sine.ni.com/cs/app/doc/p/id/cs-14905

http://oneti.com.br/detector_veiculos.html

http://www.mecatronicaatual.com.br/educacao/1251-semforos-inteligentes

Quanto ao cálculo, deve é feito usando matemática básica.

Medi-se o primeiro pulso, e incia a contagem do tempo, e seguida ao segundo pulso para a contagem.

Como a distancia entre os laços que geram os pulsos  é conhecida, é  Vel = Distancia/Tempo.

O tempo foi determinado, então ten-se a velocidade do veículo.

Rui

qual funcao uso para ligar a contagem no sensor 1 e para finalizar contagem no sensor 2 e mostrar esse tempo na tela do monitor serial?

millis(), mas acho que teria mais precisão com um rtc

Para contar o tempo uma solução é gerar uma interrupção temporizada, por exemplo, 100 useg.

Cada vez que a interrupção roda incrementa um contador se um flag for 1.    (if (flag ==1) contador++;)

Quando detetar o veiculo no primeiro loop seta o flag e zera o contador.

Ao detetar o veiculo no segundo loop zera o flag.  O contador sera o numero de interrupções rodadas e portanto

voce tera o tempo entre os acionamentos dos loops

Encontrei esse codigo na internet de um trabalho similar de um radar veicular porem nesse caso ele esta usando um microcontrolador pic queriia saber se tem como fazer alterações para usa-la no arduino, e se alguem sabe me informa qual a função de #include
DESDE JÁ OBRIGADO !

#include
#include
#include

// ----- Variáveis globais

float time; // Variável para armazenar o tempo
float speed; // Variável para armazenar a velocidade
unsigned short int frequencia; // Variável para armazenar a frequencia de clock
unsigned short int distance; // Variável para armazenar a distancia entre os sensores em mm
int i, k, aux; // Variáveis auxiliares

// ------ IMPORTANTE:
// Para testar na serial eliminar '\r' e '\n'
char msg[15] = {'S', 't', 'a', 't', 'u', 's', ' ', 'O', 'K', ' ', ' ', ' ', ' '};
char msgv[15] = {'V', 'e', 'l', 'o', 'c', 'i', 'd', 'a', 'd', 'e', ' ', ' ', ' '};
// Delay
void delay(void) {
for(k=0; k<10000; k++) continue; for(k=0; k<10000; k++) continue; for(k=0; k<10000; k++) continue; for(k=0; k<10000; k++) continue; for(k=0; k<10000; k++) continue; } // Transmite a velocidade pela serial void trans_velocidade() { i = 0; while(msgv[i]!= NULL) { //ADSON, [i] diferente de NULL // Config timer 1 TR1 = 0; TH1 = 0XFD; TL1 = 0; TR1 = 1; TI = 0; SBUF = msgv[i]; while(!TI); i += 1; } } // Interrupção externa 0 void i0_irq(void) interrupt 0 { if( TR0 == 0 ) { // Zera timer TH0 = 0; TL0 = 0; // Abaixa a bandeira do timer TF0 = 0; // Dispara o relogio TR0 = 1; } } // Interrupção externa 1 void i1_irq(void) interrupt 2 { if (TR0 == 1) { // Pausa o relogio TR0 = 0; // Transfere o tempo do timer para a variavel time em segundos time = (TH08) + TL0; time = time/frequencia; // Calcula a velocidade do veículo speed = abs(distance/time); // Como serão dois dysplays, velocidades acima de 99 serão mostradas com 99mm/s no mesmo if(speed > 99)
speed = 99;
// Concatena o valor da velocidade na sua respectiva mensagem
aux = abs(speed/10);
msgv[11] = (aux + 48);
msgv[12] = ((speed - aux*10) + 48);
// Converte para BCD
speed = speed + aux*6;
P1 = speed;
// Envia mensagem com o valor da velocidade pela serial
trans_velocidade();
// Tolerancia de 10%
// Acima de 44mm/s dispara a camera e aciona leds
if(speed > 44) {
P2_2 = 0x01;
P2_0 = 0x01;
delay();
P2_2 = 0x00;
P2_0 = 0x00;
}
// Delay para mostrar velocidade no display
else
delay();
// Display em alta impedância
P1 = 0xff;
}
}
// transmite caracter pela serial
void rx_serial(char c) {
// Config timer 1
TR1 = 0;
TH1 = 0XFD;
TL1 = 0;
TR1 = 1;
TI = 0;
SBUF = c;
19
while(!TI);
}
//Transmite mensagem pela serial
void trans_serial(char msg[]) {
aux = 0;
while(msg[aux]!= NULL) {
rx_serial(msg[aux]);
aux += 1;
}
}
// Programa principal
int main()
{
// Habilita interrução externa 0 e externa 1
IE = 0x85;
// Configuração Serial
PCON = 0x80;
SCON = 0x40;
// Habilita rampa da interrupção 0 e 1
TCON = 0x07;
TR0 = 0;
// Habilita o timer 0 para o modo 1 e o timer 1 para o modo 2
TMOD = 0x25;
// Zera P2 - Porta para disparo da camera, led de infração e led de funcionamento
P2 = 0;
// Inicializa as variáveis
distance = 100;
frequencia = 400;
// Loop
for(;;) {
// Led de funcionamento
P2_1 ^= 0x01;
// Mensagem "Status OK" pela serial
trans_serial(msg);
// Delay para novo ciclo
delay();
}
return 0;
}

#include REGX51.H
#include math.h
#include stdio.h

#include - inclui as bibliotecas

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço