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  

}  

}

Exibições: 3597

Responder esta

Respostas a este tópico

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

Tudo bem Rui? Já aumentei a distância entre os sensores para 2 m para verificar e mesmo assim continua o problema. Att

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!

Obrigado Marcelo, vou ver se tento outra lógica, não tinha reparado o caso do if.

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.

Obrigado José . Já verifiquei cada sensor, estão funcionando bem. Vou tentar as tuas outras dicas. Att.

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. 

Seria esse sensor José?

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço