Sensor sr04 range da distancia

Estou com dois sensores sr04 que são acionados quando passa um objeto em frente aos mesmos.
No caso o sensor 1 é acionado, e começa a contar o tempo…
Quando o sensor 2 é acionado o arduino faz velocidade= distancia/tempo
A distancia já é definida no código.

Porem os sensores são acionados em apenas 3~5cm, caso o objeto esteja a mais de 5cm o sensor não aciona.

O que pode ser?

CODIGO:
#include “Ultrasonic.h”
#define trig1 2
#define echo1 3
#define trig2 4
#define echo2 5

unsigned long start = 0;
unsigned long finish = 0;
int carroPassouStart = 0;
int carroPassouFinish = 0;
double tempo;
double velocidade;
double distanciaSensores = 0.12; //distancia entre sensor 1 e 2
double fatorParaSegundos = 1000;
double velocidade2;

Ultrasonic ultra1(2 , 3);
Ultrasonic ultra2(4 , 5);

void setup() {
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)
Serial.println (“Bem Vindo”);

}

void loop() {

//seta o pino 2 com um pulso baixo “LOW” ou desligado ou ainda 0
digitalWrite(trig1, LOW);
// delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 2 com pulso alto “HIGH” ou ligado ou ainda 1
digitalWrite(trig1, HIGH);
//delay de 100 microssegundos
delayMicroseconds(100);
//seta o pino 2 com pulso baixo novamente
digitalWrite(trig1, LOW);

//seta o pino 4 com um pulso baixo “LOW” ou desligado ou ainda 0
digitalWrite(trig2, LOW);
// delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 4 com pulso alto “HIGH” ou ligado ou ainda 1
digitalWrite(trig2, HIGH);
//delay de 100 microssegundos
delayMicroseconds(100);
//seta o pino 4 com pulso baixo novamente
digitalWrite(trig2, LOW);

if(ultra1.Ranging(CM) < 10){
start = millis();
carroPassouStart = 1;
//Serial.println (“aqui1”);
}

if(ultra2.Ranging(CM) < 10){
finish = millis();
carroPassouFinish = 1;
//Serial.println (“aqui”);
}

if((carroPassouStart && carroPassouFinish )&& finish > start){
tempo = ((finish - start)/ fatorParaSegundos);
velocidade = ((distanciaSensores / tempo) * 3.6); //velocidade em km/h
velocidade2 = (velocidade / 3.6); //velocidade em m/s
//Serial.print (“Tempo: “);
//Serial.print (tempo);
//Serial.println (“s”);
//delay(1000);
Serial.print (“Velocidade: “);
Serial.print (velocidade);
Serial.print (” km/h”);
Serial.print (” ou “);
Serial.print (velocidade2);
Serial.println (” m/s”);
delay(1000);
carroPassouStart = 0;
carroPassouFinish = 0;
}

}

Voce esta acionando os dois triggers antes de comecar a leitura. Tente acionar um sensor e fazer a leitura do mesmo, para soh entao acionar o Segundo sensor.

Nao equeca que os sensores usam som para medir a distancia, portanto voce devera levar em conta este fator. Dependendo da velocidade do carro voce tb pode ter problemas para detectar dependendo da distancia e velocidade do veiculo.

Uma alternativa seria utilizar algum sensor optico, como um feixe de laser ou infravermelho e um sensor de luminosidade. Voce pode utilizar um espelho se nao quiser dividir o circuito...

joaolucas111:
Estou com dois sensores sr04 que são acionados quando passa um objeto em frente aos mesmos.
No caso o sensor 1 é acionado, e começa a contar o tempo…
Quando o sensor 2 é acionado o arduino faz velocidade= distancia/tempo
A distancia já é definida no código.

Porem os sensores são acionados em apenas 3~5cm, caso o objeto esteja a mais de 5cm o sensor não aciona.

O que pode ser?

CODIGO:
#include “Ultrasonic.h”
#define trig1 2
#define echo1 3
#define trig2 4
#define echo2 5

unsigned long start = 0;
unsigned long finish = 0;
int carroPassouStart = 0;
int carroPassouFinish = 0;
double tempo;
double velocidade;
double distanciaSensores = 0.12; //distancia entre sensor 1 e 2
double fatorParaSegundos = 1000;
double velocidade2;

Ultrasonic ultra1(2 , 3);
Ultrasonic ultra2(4 , 5);

void setup() {
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)
Serial.println (“Bem Vindo”);

}

void loop() {

//seta o pino 2 com um pulso baixo “LOW” ou desligado ou ainda 0
digitalWrite(trig1, LOW);
// delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 2 com pulso alto “HIGH” ou ligado ou ainda 1
digitalWrite(trig1, HIGH);
//delay de 100 microssegundos
delayMicroseconds(100);
//seta o pino 2 com pulso baixo novamente
digitalWrite(trig1, LOW);

//seta o pino 4 com um pulso baixo “LOW” ou desligado ou ainda 0
digitalWrite(trig2, LOW);
// delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 4 com pulso alto “HIGH” ou ligado ou ainda 1
digitalWrite(trig2, HIGH);
//delay de 100 microssegundos
delayMicroseconds(100);
//seta o pino 4 com pulso baixo novamente
digitalWrite(trig2, LOW);

if(ultra1.Ranging(CM) < 10){
start = millis();
carroPassouStart = 1;
//Serial.println (“aqui1”);
}

if(ultra2.Ranging(CM) < 10){
finish = millis();
carroPassouFinish = 1;
//Serial.println (“aqui”);
}

if((carroPassouStart && carroPassouFinish )&& finish > start){
tempo = ((finish - start)/ fatorParaSegundos);
velocidade = ((distanciaSensores / tempo) * 3.6); //velocidade em km/h
velocidade2 = (velocidade / 3.6); //velocidade em m/s
//Serial.print (“Tempo: “);
//Serial.print (tempo);
//Serial.println (“s”);
//delay(1000);
Serial.print (“Velocidade: “);
Serial.print (velocidade);
Serial.print (” km/h”);
Serial.print (” ou “);
Serial.print (velocidade2);
Serial.println (” m/s”);
delay(1000);
carroPassouStart = 0;
carroPassouFinish = 0;
}

}

Qual a ordem seria no void loop?
Estou meio perdido em relação ao acionamento dos sensores, como ficaria o code