lunes, 2 de noviembre de 2015

[Arduino 12] Velocímetro de bicicleta (3/3)

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.

15 comentarios:

  1. me gustaría usar una pantalla de Nokia 5110 , sería posible

    ResponderBorrar
  2. Buenas, 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

    ResponderBorrar
  3. Que 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.

    ResponderBorrar
    Respuestas
    1. Q tal disculpa en que pines del arduino conectas el sensor efecto hall

      Borrar
  4. en q pines conectas el sensor efecto hall

    ResponderBorrar
  5. falta una partecita para que vuelva a 0 km/h despues de 5 segundos.Sería algo asi? if(tiempo4>=5000)lcd.print("0km/h") ??

    ResponderBorrar
    Respuestas
    1. pero ahí el tiempo4 está dconvertido en horas, osea tendria que esperar 5000 horas para que recién la velocidad sea 0 km/h ?

      Borrar
  6. tengo 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?

    ResponderBorrar
    Respuestas
    1. Creo 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.
      Algo asi http://intelirobot.com.mx/blog/arduino/toca-sonidos-wav-en-arduino/

      Borrar
  7. 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.

    ResponderBorrar
  8. Muy 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
  9. ¿disculpa amigo tienes el diagrama para la conexión?

    ResponderBorrar
  10. ahora 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

    ResponderBorrar
  11. Alguien 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