Claculo de velocidad

Estoy realizando un pequeño proyecto que consiste en medir la velocidad de cualquier objeto que pase a través de dos barreras IR.

Inicialmente estoy realizando las pruebas sustituyendo las barreras por dos pulsadores y poder comprobar el funcionamiento del programa, para ello utilizo como valor estandar de distancia 100 milímetros.

En estos momentos la información que muestra la pantalla son dos datos, en la línea superior muestra la velocidad y en la inferior el tiempo.

El problema que quisiera solucionar es la mejora en la precisión de los cálculos, ya que al utilizar una distancia de separación entre el sensor 1 y 2 de 100 milímetros que es el valor que quiero usar la velocidad que muestra es 0.
¿habría alguna forma de solucionarlo?

#include <LiquidCrystal.h>  

//Definiendo los pines que se van a usar del LCD
LiquidCrystal lcd(12, 11, 10, 9, 8 ,7);

int espacio= 100;    //distancia inicial entre sensores en milimetros
int sensori= 3;          // sensor de inicio
int sensorf = 2;          // sensor de fin 
unsigned long tiempo_i;    // tiempo de inicio de medicion
unsigned long tiempo_t;    // diferencia de tiempo del movimiento
float velocidad;          // nùmero de coma flotante para mayor precisión

void setup()
//lcd.begin(16, 2);

 {
 lcd.begin(16, 2);

   lcd.setCursor(0, 1);
   
  pinMode(sensori,INPUT); 
  pinMode(sensorf, INPUT); 
  }
 
void loop()
{ 
 lcd.print("comience... ");
while (!digitalRead(sensori)) { }
tiempo_i=millis();
while (!digitalRead(sensorf)) { }
tiempo_t = millis()-tiempo_i;


velocidad=espacio/tiempo_t;
lcd.clear();
  lcd.print("Velocidad: ");
  lcd.println(velocidad);
 
    lcd.setCursor(0, 1); 
  lcd.print("Tiempo:   ");
  lcd.println(tiempo_t);  
 
  delay (4000);
   
lcd.clear();
 
 
}

Podrías usar la función micros(), con lo que tienes una precisión 10 veces mayor, pero habría que tener más cuidado con los overflow.

Gracias, pero efectivamente tendría mas precisión, pero ahora tengo el problema que esa precisión no puede mostrarse los cálculos Velocidad=espacio/tiempo) con lo cual al utilizar la función micro el problema se agudizaría aún más.
Otro fallo que se produce es que al final de cada una de las líneas aparecen errores extraños, aunque este problema es menos preocupante de momento.

¿A qué te refieres que no puede mostrarse los cálculos?

En la pantalla se muestran dos valores la velocidad y el tiempo, el tiempo aparece sin problemas, pero la velocidad aparece siempre con valor 0,00.
He comprobado que si en lugar de utilizar como distancia 100 utilizo por ejemplo 10000 si que aparece, por lo que deduzco que al realizar la división velocidad=espacio/tiempo_t; se produce el error.

Mira que estés usando las unidades correctamente

También ten en cuenta que cuanto más grande sea la distancia más precisa será la medida (también dentro de unos límite)

Hola,

Tienes que hacer cast, para forzar la division en float.

:wink:

Igor R.