El día de hoy terminaremos el tutorial del velocímetro, haciendo recuerdo de lo que ya hemos realizado, logramos calcular la cantidad de revoluciones de la rueda, con esto ademas hemos logrado determinar la distancia recorrida, hemos medido los tiempos en que se realizan las revoluciones, además se ha calculado la velocidad de desplazamiento. Finalmente incorporaremos una pantalla LCD 2x16 para visualizar la velocidad y distancia recorrida en este display.
Conexión pantalla LCD
Añadiremos la pantalla LCD al circuito, por lo cual utilizaremos los pines (7,8,9,10,11,12) al circuito solo debemos añadir las conexiones de la pantalla y mantener las conexiones anteriores (sensor de efecto hall)
En el siguiente enlace pueden ver como conectar la pantalla LCD.
Código final
Para este código ya no se muestran los tiempos que eran innecesarios para etapas posteriores y se ha añadido la programación de la pantalla LCD 2x16
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); int estadoActual1=0; int estadoActual2=0; int estadoUltimo=0; int contador=0; float radioEnCm=30.0; //INGRESAR radio de la rueda en cm float pi=3.1416; float perimetroRueda=2*pi*(radioEnCm/100); //Calcula Perimetro en metros float distRecorrida=0; float distKM=0; int tiempo1=0; int tiempo2=0; int tiempo3=0; float tiempo4=0; float velocidad=0; void setup(){ pinMode(4,OUTPUT); pinMode(3,INPUT); Serial.begin(9600); lcd.begin(16,2); } void loop(){ estadoActual1=digitalRead(3); delay(10); estadoActual2=digitalRead(3); //Si los estados no son iguales, el sketch no hace gran cosa if (estadoActual1 == estadoActual2) { if (estadoActual1 != estadoUltimo){ if (estadoActual1 == HIGH) { contador = contador + 1; Serial.print ("Vueltas "); Serial.println(contador); distancia(); VEL(); } } } estadoUltimo= estadoActual1; if (contador%2 == 0 ) { digitalWrite(4, LOW); } else { digitalWrite(4, HIGH); } PantallaLCD(); } void distancia(){ distRecorrida=perimetroRueda*contador; distKM=distRecorrida/1000; if(distRecorrida<=999){ Serial.print("Distancia recorrida en m= "); Serial.println(distRecorrida); } else{ Serial.print("Distancia recorrida en Km= "); Serial.println(distKM); } } void VEL(){ if (contador%2 == 0 ) { tiempo1=millis(); } else { tiempo2=millis(); } tiempo3=abs(tiempo2-tiempo1); //hay que pasar el tiempo a hrs tiempo4=(((tiempo3/1000.0)/60)/60); velocidad=((perimetroRueda/1000)/tiempo4); Serial.print("velocidad= "); Serial.println(velocidad); } void PantallaLCD(){ lcd.clear(); lcd.write("V="); lcd.print(velocidad); lcd.write("Km/s"); lcd.setCursor(0,1); if(distRecorrida<=999){ lcd.write("D="); lcd.print(distRecorrida); lcd.write("m"); } else{ lcd.write("D="); lcd.print(distKM); lcd.write("Km"); } return; }Finalmente solo resta ponerlo en una bicicleta, pero esto de los dejo a ustedes, no olviden medir el radio de la rueda (cms) y reemplazarlo en el código para que calcule correctamente la distancia recorrida y con ello la velocidad de desplazamiento. Cuando lo monte en mi bicicleta, mandare fotos :)
Fotos del proyecto
Aquí presento algunas fotos del resultado final, espero subir fotos de cuando lo implemente en una bicicleta :3
Como implementar en una bicicleta
Para ser implementado en una bicicleta tienen que asegurarse de ponen un imán pegado en la rueda, ademas tienen que probar que el imán active de forma efectiva el sensor de efecto hall, viendo a que distancia queda bien puesto este sensor. Otro punto importante es la alimentación del microcontrolador, tienen que asegurarse de alimentarlo con una batería pequeña de 9v, esta batería se conecta por medio de un plug de 2,1 mm o incluso puede ser un pequeño panel solar que le de energía suficiente para el funcionamiento
No olvides visitar la pestaña Tutoriales arduino y también 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.
me gustaría usar una pantalla de Nokia 5110 , sería posible
ResponderBorrarBuenas, he visto tu tutorial y se me a abierto la mente para un proyecto que quiero iniciar. Únicamente comentarte una duda, seria posible hacer esto pero con tres sensores inductivos. Seria como tener 3 ruedas controladas con el mismo Arduino pero mostrando la información en solo LCD
ResponderBorrarQue tal, una consulta ya lo armé todo pero a la hora de conectar mi arduino no lo detecta ningún puerto usb, es raro ya que primero hice el contador de vueltas y funcionó a la perfección, pero al agregar la tarjeta LCD y conectarlo de nuevo, en el programa no me acepta ningún puerto, me podría asesorar en esta parte por favor... se lo agradecería.
ResponderBorrarQ tal disculpa en que pines del arduino conectas el sensor efecto hall
Borraren q pines conectas el sensor efecto hall
ResponderBorrarEste comentario ha sido eliminado por el autor.
Borrarfalta una partecita para que vuelva a 0 km/h despues de 5 segundos.Sería algo asi? if(tiempo4>=5000)lcd.print("0km/h") ??
ResponderBorrarpero ahí el tiempo4 está dconvertido en horas, osea tendria que esperar 5000 horas para que recién la velocidad sea 0 km/h ?
Borrartengo un amigo que le acaban de poner la segunda válvula en el corazón y el medico le ha recomendado después de la ultima prueba que haga bici estática, casualidades de la vida tenemos la misma bici" trojan trainer super 1000, mi amigo es ciego a causa de que padece marfan, así que había pensado en usar el sensor magnético de la bici conectado a un arduino y aprovechando la ranura micro sd de shield ethernet hacer que cada vez que el quiera pulsar un botón sepa cuantos kilómetros lleva recorridos, ¿sabéis si este proyecto ya ha sido desarrollado por alguien?
ResponderBorrarCreo que no amigo, pero trata de buscar algo referente como reproducir audio en arduino, pregrabas los audios con los numeros y le agregas la funcion que cada cierto tiempo o cada tantos kms, reproduzca un x audio.
BorrarAlgo asi http://intelirobot.com.mx/blog/arduino/toca-sonidos-wav-en-arduino/
excelente blog amigo, solo es una observación, creo que debes de corregir la sentencia (lcd.write("Km/s"); ) por (lcd.write("Km/h"); ), de lo contrario te desintegraras a esa velocidad jaja. Lo probare y comentare que tal me fue. pero de nuevo reitero, muy buen blog.
ResponderBorrarMuy buen programa. Le agregué un interruptor.Solo tuve que hacer una pequeña corrección: comencé el contador en -1 y en el loop puse la condición de que si el contador es =0, velocidad sea 0, de lo contrario VEL().Es para que cuando no se mueva tenga velocidad=0 y distancia=0. También lcd.print("Km/h");,ya observado.Gracias.
ResponderBorrar¿disculpa amigo tienes el diagrama para la conexión?
ResponderBorrarahora estoy trabajando en este proyecto, lo estoy haciendo en una moto electrica utilizando uno de los sensores del motor para calcular la velocidad, despues de 23 pulsos del sensor se completa la vuelta, el problema que tengo es que cuando se detiene la velocidad no se queda en 0
ResponderBorrarAlguien que me ayude estoy en un proyecto con El sensor de efecto hall pero contextada a una pantalla nextion como puedo corregir en base a esta programación que es muy buena para que me dé las lecturas correctas
ResponderBorrar