Cálculo da Velocidade com Sensor Ultrassonico HC-SR04

Boa noite. Sou iniciante no arduíno e estou tentando fazer um sensor de velocidade com 2 sensores ultrassonicos HC-SR04 espaçados de 1 metro.
Já li alguns tópicos aqui no fórum e fiz o programa abaixo, só que não estou conseguindo fazer com que mostre a velocidade.
Pelo o que eu li, o sensor envia um sinal alto no trigger e caso tenha algum obstáculo, ele recebe esse sinal de volta no echo. Baseado nisso e nos tópicos lidos, fiz o programa, mas acontece que ele sempre entra nos dois primeiros if mesmo sem ter objeto na frente, então mudei para que caso o Echo1 for = a 0, ele entra, mas continua entrando mesmo se não tiver objeto na frente, passando pelo sensor.
Já aumentei as distâncias entre os sensores pois achava que um estava interferindo no outro, mas o problema continua.
Caso possuam alguma sugestão eu agradeço.

#define Trigger1 2
#define Echo1 3
#define Trigger2 4
#define Echo2 5
unsigned long sensor1=0, sensor2=0, tempo=0;
unsigned byte sens1=0, sens2=0;

void setup() {

Serial.begin(9600); //inicia a porta serial
pinMode(Trigger1, OUTPUT); // define o pino 2 como saida (envia)
pinMode(Echo1, INPUT); // define o pino 3 como entrada (recebe)
pinMode(Trigger2, OUTPUT); // define o pino 4 como saida (envia)
pinMode(Echo2, INPUT); // define o pino 5 como entrada (recebe)

}

void loop() {

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

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

if(digitalRead(Echo1 == 1)) {
unsigned long sensor1 = millis();
byte sens1 = 1;
// Serial.println("fase1");
}

if (digitalRead(Echo2 == 1)) {
unsigned long sensor2 = millis();
byte sens2 = 1;
//Serial.println("fase2");
}

if (sens2 == 1 && sens1 == 1) {
tempo = (sensor2-sensor1)/1000;
float velocidade = 1/tempo; // velocidade em metros por segundo
Serial.println (velocidade);
//Serial.println ("final");
sens2 = 0;
sens1 = 0;
}
}

Já experimentaste só com um sensor para perceber se é realmente o que pensas?

Este sensor não me parece o mais indicado para fazer o que pretendes...

Realmente não é o mais indicado, tens razão, por ser muito sensível e no caso de passar alguma pessoa, ele irá fazer o cálculo, mas é o que tenho para montar o projeto e não tenho muito tempo de sobra para executá-lo.
Inicialmente tentei fazer com dois laços indutivos, mas não obtive sucesso no circuito eletrônicos dos laços, esses seriam os ideais, pois pegariam a massa metálica dos carros.
Estava pensando em fazer outro programa, em que cada sensor compararia com uma distância X, caso passasse um carro, essa distancia diminuiria e faria o cálculo, mas ainda estou tentando fazer esse programa dar certo, apesar das dificuldades.
Caso tenham alguma sugestão, agradeço.

Obrigado.

Refiz o programa de outro jeito, mas continuo com erro.

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.

Qualquer sugestão é bem vinda.

Obrigado.

#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;
int tempo;
int velocidade;

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)
}

void loop() {

if(ultra1.Ranging(CM) /font> 10){ // compara se a distancia e menor q 10cm, carro passou
start = millis(); // conta tempo
carroPassouStart = 1; // atribui 1 a flag
}

if(ultra2.Ranging(CM) /font> 10){ // compara se a distancia e menor q 10cm, carro passou
finish = millis(); // conta tempo
carroPassouFinish = 1; // atribui 1 a flag
}

if(carroPassouStart == 1 && carroPassouFinish == 1){
tempo = (finish - start)/1000; // tempo em segundos
velocidade = 2/tempo; // velocidade em m/s
Serial.println (velocidade);
}

carroPassouStart = 0;
carroPassouFinish = 0;
}

Onde está o contador de milissegundos para ir somando? Tem que haver uma variável para receber os valores somados tipo

se sensor igual menos 10cm então
variável recebe variável + 1.

Consegui fazer funcionar, segue o código

#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.15;
double fatorParaSegundos = 1000;

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)
}

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
Serial.print ("Tempo: ");
Serial.print (tempo);
Serial.println (“s”);
//delay(1000);
Serial.print ("Velocidade: ");
Serial.print (velocidade);
Serial.println (“km/h”);
//delay(1000);
carroPassouStart = 0;
carroPassouFinish = 0;
}

}

Quando compilei o código está dando o erro:
Velocidade_2_Sensores:55: error: ‘class Ultrasonic’ has no member named ‘Ranging’

if(ultra1.Ranging(CM) < 10){

^

Velocidade_2_Sensores:55: error: ‘CM’ was not declared in this scope

if(ultra1.Ranging(CM) < 10){

^

Velocidade_2_Sensores:61: error: ‘class Ultrasonic’ has no member named ‘Ranging’

if(ultra2.Ranging(CM) < 10){

^

Velocidade_2_Sensores:61: error: ‘CM’ was not declared in this scope

if(ultra2.Ranging(CM) < 10){

^

exit status 1
‘class Ultrasonic’ has no member named ‘Ranging’

Alguém poderia me ajudar?

A biblioteca instalada é a correcta? Está bem instalada?