Vamos a programar #49 - Inútil apps #3 - Cómo calcular la velocidad.

Hola de nuevo a todos, el día de hoy vamos a continuar con la construcción de un velocimetro para bicicleta, en el post anterior vimos cómo hacer uso del sensor de efecto hall para poder detectar cuando es que la rueda da una vuelta completa (o cuando un imán es detectado por el sensor). Asi que ahora vamos a ver una parte importante.

Para que el velocimetro quede bien, pienso que al menos debe de medir lo siguiente:

  1. Velocidad (obviamente).
  2. Distancia.
  3. RPM (revoluciones por minuto).
Bien, con lo anterior solo necesitaremos saber cual es la forma de calcular la velocidad. La forma más simple de hacerlo, es usando la formula fisica: v= d/t; donde v es la velocidad en Km/h, d es la distancia en Km y t es el tiempo en horas.

Al mirar el enunciado anterior, podemos determinar que es lo que ya tenemos; la velocidad, es lo que queremos saber, distancia, esta la podemos obtener y el tiempo; para este, arduino cuenta con varias formas de "contar el tiempo".

Obteniendo la distancia.

Para poder obtener la distancia, tenemos que medir cual es la circunferencia de la rueda, hay varias forma de obtenerla.

La primera es mirando la siguiente tabla:

Diámetro Medida rueda (mm)
16x1.75x2 1272
20x1.75x2 1590
24x1 3/8 1948
24x1.75x2 1907
26x1 1973
26x1.5 2026
26x1.6 2051
26x1.75x2 2070
26x1.90 2089
26x1.95 2050
26x2.00 2114
26x2.125 2133
26x1 3/8 2105
26x1 3/8x11/2 2086
26x3/4 1954
27x1 1/4 2199
27x1 1/4 Fifty 2174
27.5x2.10 2150
27.5x2.25 2195
28x1.5 2224
28x1.75 2268
28x1 1/2 2265
28x1 3/8x1 5/8 2205
29 x 2.10 2300
Para saber cual es tu llanta, bastará con revisar un costado de la misma, en mi caso es 24x2.125 (que no esta en la tabla), al revisar, no hay una medida para esa, por lo que pasaremos al siguiente metodo.

Si al revisar la tabla no viste un valor igual al tuyo, podemos obtener la circunferencia si usamos la siguiente formula: C = D * π, Donde C = a la circunferencia en centimetros, D = al diametro en centimetros y π = al numero pi (3.141592654), el diametro lo podemos obtener si usamos una regla para medir. En mi caso, la llanta tiene un diámetro de 62.3 cm, al aplicarlo a la formula anterior, tenemos que la rueda tiene una circunferencia de 195.72 cm.

Otra opción y la mas viable, es medir la circunferencia dando una vuelta, es decir poner una marca en la rueda y en el suelo; pedalear hasta dar una vuelta completa y medir la longitud de la linea.En mi caso la mediad resultante fue de 194.6 cm y esta medida es la mejor, porque ya cuenta con mi peso y si vemos no es muy diferente a la del calculo anterior.

Ahora ya podemos tener la distancia, sabemos, que en mi caso, cada vuelta representan 195.72 cm, la manera simple, es sumar cada medición, por lo que si al dar una vuelta sumamos 195.72 cm, al dar la segunda tendremos 391.44 cm y asi sucesivamente, por lo que la distancia la podemos definir de la siguiente manera: d=195.72 * N° de vuelta, para hacer más fácil la visualización, vamos a convertir los 195.72 cm a m lo que resulta que cada vuelta son 1.9572 m.


Obteniendo la velocidad.

Ahora que tenemos la distancia, podemos obtener la velocidad, de la formula v=d/t, solo nos queda determinar el tiempo. al inicio pensaba usar el modulo de reloj ds1302, pero no se me hacía rentable, dado que solo podria medir tiempo en segundos, cómo programador, se que cada procesador es capaz de llevar la cuenta del tiempo (relativamente), al investigar un poco, vi que arduino cuenta con las funciones millis() y micros() que; respectivamente, llevan la cuenta de los milisegundos y los microsegundos desde que se empezo a ejecutar el programa (desde que se incendio?), para nuestros fines, podemos usar la función millis().

Con un temporizador, podemos tomar el tiempo de cada cuanto el sensor se activo, para eso, primero haremos la medicion de "en que momento estamos" y cuando el sensor detecte un cambio, anotar el tiempo, despues restaremos el tiempo de inicio con el del final y ese lapso de tiempo nos indicará, cuanto tiempo le toma avanzar 1.9572 m (en mi caso).

Con esa información, podemos crear una función en arduino cómo la que sigue:

// {...}
//obtener la velocidad
float GetVelocity(){
	float Velocity = Distancia/((float)(millis()-OldTime)/1000);
	OldTime=millis();
	return Velocity;
}
// {...}

Con esta estaremos midiendo la velocidad en metros por segundo. para hacer la conversion a Km/h, debemos de multiplicar por 3600 (segundos en una hora) y dividir entre 1000 (metros por cada kilometro).

Hay que tener en cuenta algunas consideraciones, ¿cuando es prudente decir que la bicicleta se detuvo? en mi experiencia, el usuario normal, no puede ir muy lento asi que haremos las preparaciones para que cuando el sensor no se active en al menos tres segundos, asumamos que la bicicleta se ha detenido.

Y bien, por ahora es todo, en el siguiente post implementaremos todo el código neceario.

Los leo luego.

No hay comentarios.