Siguiendo con el sensor magnético (Sensor de efecto hall), me he interesado en realizar un velocímetro para bicicletas que ademas de poder visualizar la velocidad a la que nos desplazamos podamos visualizar la distancia recorrida. para ello estudiando el código por partes. Este tutorial estará dividido en varias partes. Ahora nos centraremos en hacer un contador de vueltas que al dar una vuelta se enciende un led y al dar otra vuelta se apaga el led y de esa manera podremos saber si esta funcionando el código, ademas de ellos visualizaremos en pantalla cuantas vueltas llevamos.
Objetivos
- Realizar un velocímetro de bicicleta que muestre la distancia recorrida
- Realizar un contador de vueltas de bicicleta
- Con el contador de vueltas realizar la medición de distancia recorrida
- Poner en uso el sensor de efecto hall
- Mostrar los parámetros de velocidad y distancia recorrida en una pantalla LCD
- Poner en practica instrucciones de bloques condicionales (if/else)
Materiales
- Arduino UNO, Picaro, o similares.
- Cable USB para arduino
- Sensor de efecto hall
- LED
- Resistencia de 220 Ohm
- Imán de neodimio u otro imán
- Conectores
- Pantalla LCD 2x16
- Potenciometro o Trim Pot
- Protoboard
- Una bicicleta
Como determinaremos la cantidad de vueltas
Para el medidor de velocidad hay datos que conocemos que nos pueden ser de utilidad a la hora de realizar el calculo de la velocidad. El dato que conocemos es el radio de la rueda de la bicicleta. Supondremos que el radio de la rueda es de 30cm (cada uno tendrá que medir cual es el radio de su rueda para ponerlo en el código).
Para el medidor de velocidad hay datos que conocemos que nos pueden ser de utilidad a la hora de realizar el calculo de la velocidad. El dato que conocemos es el radio de la rueda de la bicicleta. Supondremos que el radio de la rueda es de 30cm (cada uno tendrá que medir cual es el radio de su rueda para ponerlo en el código).
- Medimos el radio de nuestra bicicleta: r=30cm
- Calculamos el perimetro de la rueda P=2*pi*r =188,49 cm =1,88 metros
- Ahora sabemos que por cada vuelta que de la rueda recorreremos 1,88 metros
- La distancia recorrida sera (numero de vueltas)*(1,88 metros)
Fotos del proyecto
A continuación se presentan unas fotos del contador de vuelta, esta conectado el modulo sensor de efecto hall, el led con su resistencia de 220 ohm y el iman con el que activaremos cada vuelta.
Circuito Arduino
He escogido poner el Sensor de efecto hall y el LED en los pines 3 y 4 respectivamente para dejar espacio para integrar una pantalla LCD 2x16 al velocímetro posteriormente.
La conexión del sensor hall es la siguiente:
Sketch "Contador de vueltas de la rueda"
He escogido poner el Sensor de efecto hall y el LED en los pines 3 y 4 respectivamente para dejar espacio para integrar una pantalla LCD 2x16 al velocímetro posteriormente.
La conexión del sensor hall es la siguiente:
Y también conectamos un led en el pin 4 con su resistencia respectiva.
En el sketch siguiente realizamos dos lecturas del estado, separadas por 10 milisegundos, del pin 3 donde se encuentra la salida digital del sensor de efecto hall. Comprobamos que las dos salidas sean iguales. De ser asi se deduce que el sensor esta en posición estable y podemos ejecutar toda la logica del conteo de vueltas de la rueda y del encendido del LED.
Lo anterior lo realizamos para solucionar el fenómeno de "bounce" o rebote. El fenómeno de "bounce" es un efecto producido al ejecutar un conteo de vueltas, el sensor no reacciona o aveces cuenta mas de una vuelta. Esto se produce durante el primer milisegundo de cada conteo produciendo pequeñas variaciones de la señal de entrada que hacen que los valores HIGH y LOW obtenidos alternen rápidamente (esto también ocurre con los pulsadores).
Lo anterior lo realizamos para solucionar el fenómeno de "bounce" o rebote. El fenómeno de "bounce" es un efecto producido al ejecutar un conteo de vueltas, el sensor no reacciona o aveces cuenta mas de una vuelta. Esto se produce durante el primer milisegundo de cada conteo produciendo pequeñas variaciones de la señal de entrada que hacen que los valores HIGH y LOW obtenidos alternen rápidamente (esto también ocurre con los pulsadores).
int estadoActual1=0; int estadoActual2=0; int estadoUltimo=0; int contador=0; void setup(){ pinMode(4,OUTPUT); pinMode(3,INPUT); Serial.begin(9600); } void loop(){ estadoActual1=digitalRead(3); delay(10); estadoActual2=digitalRead(3); //Si los estados no son iguales, el sketch no hace nada. if (estadoActual1 == estadoActual2) { if (estadoActual1 != estadoUltimo){ if (estadoActual1 == HIGH) { contador = contador + 1; Serial.print ("Vueltas "); Serial.println(contador); } } } estadoUltimo= estadoActual1; if (contador%2 == 0 ) { digitalWrite(4, LOW); } else { digitalWrite(4, HIGH); } }
Resultados del contador de vueltas
Los resultados que debemos apreciar al completar este tutorial deben los que se aprecian en el monitor serial, el correcto conteo de las vueltas de la rueda o cada vez que pasan el imán por el sensor. Ademas la iluminación del led cada vez que este se encuentra en una vuelta par, si es la vuelta 2, 4, 6 o algún numero par, el led debe estar encendido.
Ahora podemos decir que funciona de manera correcta este contador de vueltas de bicicleta. En el próximo tutorial mostrare como medir la distancia que recorremos con este contador.
No olvides visitar la pestaña Tutoriales arduino y Lenguaje arduino, donde podrás encontrar la lista de tutoriales que he hecho hasta el momento. Como siempre muchas gracias por visitar mi blog y si tienen alguna consulta o consejo puede comentarlo por medio de este mismo blog.
Disculpa, el sensor de efecto hall debe ser ese o puede ser uno tipo A3144?
ResponderBorrarBuenos días Sebastian.
ResponderBorrarEn primer lugar enhorabuena por este fantástico tutorial!
Por otro lado, tengo un problema y es que cuando la rueda gira demasiado rápido pierdo vueltas y no me cuenta correctamente. El led del sensor siempre se enciende correctamente, pero la señal recogida por el puerto serie no recoge exactamente lo mismo.
Se te ocurre alguna solución??
Muchas gracias por adelantado!
Saludos.
Alejandro
Tengo el mismo problema, si lo pudiste resolver avisame juan.mercado1986@gmail.com
Borraraumenten la velocidad de conexion del puerto serial, si lo si lo tienen en 9600 baudios deben aumentarlo...
Borrares mejor hacer un codigo usando la interrupcion 0 del pin 2 del arduino.
ResponderBorrarDisculpa apenas estoy aprendiendo sobre Arduino, por que sería mejor la interrupción 0 del Pin2?
BorrarUna consulta como puedo representar la distancia cada 500 metros recorrido encendiendo un Led asta llegar a 3 kilómetros. Lo que quiero hacer es representar las distancias recorridas en una barra Led prendiendo un Led cada 500 metros asta llegar a 3 kilómetros,
ResponderBorrarcon switch case
BorrarAlguien sabe vual es el código para calcular las calorias? URGENTE!!
ResponderBorrar