Boa noite.
Primeiramente quero agradecer a todos que deram dicas para que pudesse resolver o problema, todas foram úteis. Consegui refazer o projeto de um modo que funcionasse, agora vou realizar testes para calibração do mesmo. Mais uma vez obrigado.
Segue o código. PS: ainda vou colocar um LCD 16x2 para dar informação da velocidade.
Att.
Mensagem Inical do tópico
boa noite.
Sou iniciante no arduíno e tenho que fazer um projeto e o seu funcionamento é o seguinte:
Estou utilizando 2 sensores ultrassom separados por uma distância de 10 cm, e fiz o código para que os sensores atuem quando uma distância for menor que 10 cm, isto é, se passar um carro a uma distância menor que 10 cm, o programa contará o tempo de cada sensor, no final diminuirá os dois tempos e fará o cálculo da velocidade em m/s.
Estou tendo problema, pois a velocidade está marcando sempre -1.
Tentei resolver, mas não consegui. Acho que deve ser na declaração das variáveis, mas já alterei e não obtive sucesso.
Sei que o ideal seria fazer o radar com dois laços indutivos, mas não consegui construir o circuito eletrônico dos laços então quero garantir que esse com os ultrassonicos funcionem para poder entregar e depois tendo tempo, tento com os laços indutivos.
Qualquer sugestão é bem vinda.
Obrigado.
Agora o programa corrigido:
#include"Ultrasonic.h"
#define trig1 2
#define echo1 3
#define trig2 4
#define echo2 5
#define led1 6
#define led2 7
unsigned long inicio=0;
unsigned long fim=0;
int passouInicio=0;
int passouFim=0;
double tempo, velocidade;
double distanciaSensores =0.15;//distancia dos sensores na protoboard, caso aumente a distancia, trocar aqui
double fatorParaSegundos=1000;//conversão de ms para segundos
Ultrasonic
ultra1(2,3);//define sensor ultra1 como trigger no pino 2 arduino e echo no pino 3
Ultrasonic
ultra2(4,5);//define sensor ultra2 como trigger no pino 4 arduino e echo no pino 5
voidsetup(){
Serial
.begin(9600);//inicia a porta serial
pinMode(trig1,OUTPUT);// define o pino 2 como saida (envia)
pinMode(echo1,INPUT);// define o pino 3 como entrada (recebe)
pinMode(trig2,OUTPUT);// define o pino 4 como saida (envia)
pinMode(echo2,INPUT);// define o pino 5 como entrada (recebe)
pinMode(led1,OUTPUT);//define pino 6 como saida;
pinMode(led2,OUTPUT);//define pino 7 como saida;
digitalWrite(led1,LOW);//led1 apagado;
digitalWrite(led2,LOW);//led2 apagado;
}
voidloop(){
if(ultra1.Ranging(CM)/font>10){//caso carro passe a menos de 10cm do sensor, conta o inicia (tempo1). Aumenta-se essa distancia dependendo do projeto
inicio=millis();//inicio recebe o tempo em ms em que o carro passou pelo sensor 1
passouInicio=1;//seta a flag
digitalWrite(led1,HIGH);//led1 ligado;
digitalWrite(led2,LOW);//led2 apagado;
}
if(ultra2.Ranging(CM)/font>10){//caso carro passe a menos de 10cm do sensor, conta o inicia (tempo1). Aumenta-se essa distancia dependendo do projeto
fim=millis();//fim recebe o tempo em ms em que o carro passou pelo sensor 2
passouFim=1;//seta a flag
digitalWrite(led2,HIGH);//led2 ligado;
}
if((passouInicio&&passouFim)&&fim>inicio){//compara para ver se o carro passou pelos 2 sensores
tempo=((fim-inicio)/fatorParaSegundos);//calculo do tempo em ms que levou pra passar pelos 2 sensores e transforma em segundos
velocidade=((distanciaSensores/tempo)*3.6);//calculo da velocidade em km/h
Serial
.print("Tempo: ");
Serial
.print(tempo);
Serial
.println("s");
Serial
.print("Velocidade: ");
Serial
.print(velocidade);
Serial
.println("km/h");
passouInicio=0;//zera as flags para nao ficar imprimindo no monitor serial
passouFim=0;//zera as flags para nao ficar imprimindo no monitor serial
}
}
Tags:
Oi FA, bom dia,
ainda não analisei o seu código pra ver se tem algum erro de lógica, mas será que um ultrassom não
está detectando a emissão do outro e assim confundindo as medidas.
Você pode encontra informações sobre laço indutivo neste site:
http://sine.ni.com/cs/app/doc/p/id/cs-14905
Rui
Fábio,
Pelo que eu vejo aqui, a sua lógica tem problema.
Você só executa o 3o "if" se as duas flags são "1". Ou seja, enquanto o carro está na frente dos dois sensores. Dessa maneira, as variáveis start e finish são iguais e sua subtração resulta em zero, a velocidade é calculada então com uma divisão por zero.
Sugestão é revisar a lógica.
Boa sorte!
Boa tarde Fabio!
Sugestão:
Primeiramente verifique o funcionamento dos sensores de distância.
Faça um projeto para testar cada um separadamente e depois testá-los em conjunto.
Use a Serial para verificar os resultados
Se estiver tudo ok, volte ao projeto principal
Obs:
1) Se a velocidade é pequena, é melhor usar o tipo float para ela
2) Se está retornando o valor -1: Ou finish é menor que start, ou os sensores não estão funcionando corretamente.
Não pude analisar o código, mas verifique a lógica do programa, como disse o Marcelo.
Caro Fábio , qual módulo de Ultra-som esta usando ?
Fiz um artigo descrevendo o funcionamento do módulo HC-SR04:
http://labdegaragem.com/forum/topics/sensor-hc-sr04-ultrasom-como-f...
O sensor emite exatamente 8 pulsos na frequência de 40khz. E cada trem de pulsos é emitido na frequência de 20 Hz, isto é 20 trens de pulsos por segundo. Se o seu carro passar com uma velocidade mais rápida do que a varredura do sensor ele nem será percebido.
O tempo entre cada trem de pulsos é de 1/20Hz = 50 milisegundos.
Se o carro passar na frente do sensor e gastar um tempo bem menor do que 50 ms, ele não será percebido.
Sabia disso ?
Obrigado pela informação, li o artigo, elucidou mais ainda, parabéns. No momento não estou usando um objeto e até mesmo um carrinho de fricção para passar na frente dos 2 sensores, acredito que não está passando em um tempo menor que o intervalo entre os pulsos, mas irei dar uma verificada. Att.
Pode usar sensores foto-sensíveis para ter uma precisão maior.
Como já disse, talvez esse sensor possa atender à sua necessidade.
O que talvez possa prejudicar é a luz ambiente. Mas creio que o sinal emitido deva ser de uma determinada frequência (39KHz, por exemplo).
Só testando-o.
Gustavo, bom dia!
Esse sensor de luz é muito usado em robôs seguidores de linha. Qual seria o alcance dele? Será que pode ser usado na detecção de veículos em ambientes abertos?
Obrigado,
José Cintra
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por