Vamos a programar #51 - Terminando el velocímetro.

Hola de nuevo a todos, el día de hoy vamos a terminar con el velocímetro para bicicleta. Hoy veremos los esquemas, conexiones y el código par hacerlo funcional.
Así luce en el empaque menos prolijo.

El hardware

Para empezar veamos las conexiones.

  • De la pantalla 1602A
    • VSS va a tierra.
    • VDD va a5v.
    • VO controla el contraste de la pantalla, un valor aceptable son 2.2KOhms.
    • RS va al pin 12 del arduino (se puede modificar).
    • RW va a tierra.
    • E va al pin 11 del arduino.
    • D4 al pin 9 (se puede modificar).
    • D5 al pin 8.
    • D6 al pin 7.
    • D7 al pin 6.
    • A va a 5V.
    • K va a tierra.
  • Del sensor de efecto Hall 1
    • Data va al pin 3.
  • Del sensor de efecto Hall 2
    • Data va al pin 4.
Con la conexiones anteriores, tendremos listo lo necesario, la pantalla puede ser un poco diferente pero esta al ser la mas barata, funcionara de maravilla, puedes omitir el segundo sensor de efecto hall, tendrá utilidad pero no por ahora.

Con lo anterior, empezaremos con el montaje. Lo principal es montar el sensor y los imanes. procurando que todo este lo mas asilado posible, usar plástico termo-contraible es una buena opción para esto.

Para conectar el sensor, use cable de red, solo separe tres hilos y los trencé, luego los aseguré a la tijera que sostiene la llanta usando cinchos de plástico, procurando dejar la longitud adecuada para que cuando el amortiguador recupere su posición original, no tense o afloje de más el cable y pueda atorarse en la llanta.
Dicen que en una bicicleta el polvo es sinónimo de uso rudo (o de que no se limpia seguido).

Después, solo busque una caja de plástico que tenía por ahí, le hice una perforación en donde ajustara la pantalla y simplemente metí todos los componentes.

Para alimentar todo el circuito, uso un power bank, al inicio planeaba usar una batería de litio de un teléfono viejo, pero por cuestiones de espacio, no fue posible, además por ahora, la carcasa será temporal por lo que todo se puede remover fácilmente (exceptuando la caja). Toda la alimentación se hace directo del power bank, incluso si miras bien el esquema, verás que se hace uso de los pines VIN y GND del arduino.

El software.

Ahora pasemos a la parte del software, el código esta listo para usarse, lo único que debes de modificar es la circunferencia de la llanta, en mi caso es una de 24x1.125, pero la más común es de 26xX.XXX, además también debes de incluir la librería para controlar la pantalla.

// Incluir la libreria para la pantalla
#include <LiquidCrystal.h>
// Pines usados en la pantalla extraido de los ejemplos incluidos en la libreria
const int rs = 12, en = 11, d4 = 9, d5 = 8, d6 = 7, d7 = 6;
// iniciar el objeto LiquidCrystal
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Este es el valor que debes de modificar para que funcione correctamente
// Puedes ver instrucciones en https://xworkforall.blogspot.mx/2018/03/vamos-programar-49.html
const float Llanta = 1.9572;
//Algunas variables
const int HallSensor1 = 3;
const int LED =  13;
int HallState = 0;
int Vuelta = 0;
int OldState = 0;
unsigned long OldTime = 0;
float Distancia = 0;
float Speed = 0;
//Incializar todo
void setup() {
 Serial.begin(9600);
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("@XWork");
 pinMode(HallSensor1, INPUT);
 attachInterrupt(digitalPinToInterrupt(HallSensor1), GetVelocity, LOW);
 pinMode(LED, OUTPUT);
}
// Calcular la velocidad
void GetVelocity() {
 if (millis() - OldTime > 70) {
  Speed = Llanta / ((float)( millis() - OldTime) / 1000) * 3.6;
  OldTime = millis();
  Distancia = Distancia + Llanta / 1000; 
 }
}
//Bucle principal
void loop() {
 Serial.println("Velocidad en m/s");
 Serial.println(Speed);
 lcd.setCursor(0, 0);
 lcd.print("v= Km/h D = Km");
 lcd.setCursor(0, 1);
 lcd.print(Speed);
 lcd.setCursor(8, 1);
 lcd.print(Distancia);
  if ((millis() - OldTime) > 2000)
  Speed=0.0; 
}

Las conexiones se hacen de acuerdo al hardware.

Conclusion.

Con esto hemos creado un velocímetro, debo de admitirlo, aun no lo he probado (al menos en el momento en que este post se publicó), pero en cuanto lo haga, pondré cualquier actualización necesaria.

El segundo sensor de efecto hall, se va a usar para activar una luz de frenado, usando el mismo principio, en cuanto la palanca de freno se presiona, si acercamos un imán al sensor que estará fijo al manubrio, esto activará una luz roja en la parte posterior de la bicicleta (tal y cómo los autos). Probablemente también en un futuro se agregue la función de luces direccionales, aun no figuro cómo hacerlo de manera eficiente.

Y bien, por ahora es todo, el código completo para arduino lo puedes descargar de mi dropbox, recuerda que puedes modificarlo a tu gusto.

Los leo luego.

6 comentarios

  1. En la imagen del esquema hay un corto terrible, vamos, esperaba más.

    ResponderBorrar
  2. disculpa, que dato pusiste en tu constante llanta como lo obtuviste ?

    ResponderBorrar
    Respuestas
    1. Lo explico en el post: http://xworkforall.blogspot.com/2018/03/vamos-programar-49.html Pero básicamente hay tres opciones, mirar una tabla y ver si la medida ya está, medir el diámetro y calcular o simplemente medir con una cinta métrica la circunferencia. Saludos y gracias por pasar.

      Borrar
  3. disculpe podria explicarme como obtuve la constante "llanta" que calculos realizo

    ResponderBorrar