lunes, 8 de febrero de 2016

MONITOR PARA YAMAHA SR250 CON ARDUINO

Actualmente las modernas motocicletas y automóviles disponen de un completo sistema de monitoreo de parámetros relativos al estado del vehículo y motor. Temperaturas, equipo eléctrico, niveles de carburante y fluidos, amén de los universales velocímetros, tacómetros o relojes, nos informa del estado del equipo en todo momento.

Sin embargo esto no ha sido siempre así. Coches con varias décadas de vida solían prescindir de estos útiles sistemas y se limitaban a las funciones básicas que unos "relojes" nos mostraban con sendas agujas. Peor aún es el caso en motocicletas, que como mucho mostraban velocidad y revoluciones.

En fechas recientes he tenido la ocasión de adquirir una elegante motocicleta Yamaha SR250 SP que aunque se fabricó hasta el 2003, heredó la sobriedad del primer diseño, allá por principios de los Ochenta. Sus relojes solo nos muestran velocidad y revoluciones de motor.

Como todo vehículo con ciertos años, esta moto presenta ciertos achaques propios de la edad, que se pueden solucionar fácilmente. Uno de los problemas más frecuentes se debe al envejecimiento de la instalación eléctrica, que provoca problemas de carga de batería y otros fallos. Con un sistema que nos informe de la tensión de la batería, podemos prevenir posibles averías y optimizar el rendimiento general de la moto.

Voy a exponer en este artículo el diseño de un monitor basado en Arduino, que nos mostrará mediante una pantalla LCD, la temperatura del motor y del aire ambiente, la tensión de la batería y la hora en tiempo real. Me limitaré solo al circuito eléctrico y su programación, dejando de lado la caja que pudiera alojarlo, que en cada caso, cada uno puede decidir cómo hacer.

Este articulo contempla un simple trabajo de experimentación y no me hago responsable del uso que de  la información aquí vertida se pueda derivar. El lector que quiera usar esta información, debe asumir cualquier riesgo para sí o sus bienes. 


COMPONENTES:

1 Módulo Arduino Nano.
1 Módulo DS3231 RTC reloj en tiempo real, con termómetro.
1 Pila botón tipo CR2032 de 3 voltios
1 Pantalla LCD 16 x 2 con luz de fondo.
1 Sensor de temperatura TMP36
3 Resistencias 10K 1/4 de W
1 Trimmer 10K
1 Regulador de tensión LM7809
2 Metros de hilo para conexiones, funda termo-retráctil.

Todos estos componentes son fáciles de conseguir y muy económicos. Doy por supuesto que el lector conoce el entorno Arduino y la manera de cargar el programa. De no ser así, hay cientos de tutos en la red para aprender de forma rápida y sencilla. 

Para este proyecto vamos a utilizar la librería DS3231 que se encarga de leer los datos del reloj de forma muy sencilla. También utilizaremos la librería LiquidCrystal para el manejo de la LCD. Esta ya viene con el entorno Arduino.En la descarga va adjunto, en Examples, el código del Monitor.

DESCARGAR LIBRERÍA Y MONITOR



ESQUEMA DE CABLEADO:



El montaje lo dejo a elección del lector. Recomiendo utilizar la trasera de la pantalla LCD para pegar el módulo Arduino y el módulo reloj D3231 y cablear al aire. De esta forma ocupa muy poco y lo podemos montar en una pequeña caja a nuestro gusto.


 

Comenzaremos montando los componentes según el esquema. Es muy conveniente hacer las primeras pruebas en protoboard para corregir posibles fallos de cableado. Podemos utilizar cualquier placa Arduino para esto, y una vez satisfechos, pasar a un Nano que es lo más pequeño para nuestro propósito.


 




Para alimentar en pruebas nos sirve perfectamente la conexión USB que alimenta Arduino, pero una vez en la moto debemos poner el regulador de tensión 7809 para atacar la entrada Vin de Arduino. No debemos pasar de 12 voltios en ningún caso al alimentar por esta entrada, ya que Arduino no soporta más de esa tensión. Es importante que el consumo de la luz de fondo de la pantalla sea los más bajo posible, para no sobrecargar el regulador de 5v que lleva Arduino, que alimenta por esta salida de 5v, esa pantalla y el reloj.

Debemos revisar a conciencia todas las conexiones, sobre todo las de alimentación, si no queremos sorpresas. Nada mejor que las prisas para el fracaso. Ponemos la pila al reloj.

Una vez cableado todo, pasamos a cargar el programa en la placa Arduino. Lo primero será descomprimir el archivo zip de la descarga. Nos encontraremos con una carpeta D3231 que debemos poner en la carpeta C/..../Arduino/libraries. Ahora abrimos Arduino y cargamos el ejemplo Monitor_Yamaha_3, que se encuentra en esa librería. Lo subimos a la placa. Si todo es correcto la pantalla nos mostrará hora, temperatura en el reloj, tensión en la sonda y temperatura en la sonda TMP36.


CONFIGURAR RELOJ:

Vamos a configurar la hora en el reloj. Si hemos cargado el programa tal cual, veremos que la hora no está ajustada. El reloj empieza en 00:00:00. Echemos un vistazo a estas lineas del código:

  //rtc.setDOW(LUNES);         // Set día de la semana en mayúsculas
  //rtc.setTime(02, 24, 00);       // Set hora formato hh:mm:ss (24 H)
  //rtc.setDate(1, 2, 2016);       // Set fecha dia, mes, año

Debemos descomentar (quitar la doble barra // ) y poner el día de la semana (en mayúsculas), la hora y la fecha actual y quedaría por ejemplo, de esta forma:
  
  rtc.setDOW(LUNES);        // Set día de la semana en mayúsculas
  rtc.setTime(02, 24, 00);      // Set hora formato hh:mm:ss (24 H)
  rtc.setDate(1, 2, 2016);      // Set fec
ha día, mes, año

Veremos que al descomentar cambian los colores del texto y se convierte en código. Ahora lo volvemos a cargar a la placa y el reloj se ajustará. Si lo dejaramos tal cual tendríamos un problema: cada vez que se apagara la alimentación o hicieramos un reset, el programa nos volvería a poner el reloj con la hora programada. Para que esto no pase, volvemos a comentar (con // ) las tres líneas y volvemos a cargar el código en la placa. Ahora la hora no se reajustará  aunque apaguemos o hagamos un reset, ya que la pila que lleva lo mantiene siempre en hora




Espero que este pequeño aporte sirva para pasar un buen rato. y si alguien se decide a montarlo, en comentarios trataré de aclarar cualquier posible duda.













7 comentarios:

  1. Hola, amigo, muy buen proyecto para nuestras maquinas que no tienen relojes que nos proporcionen mas datos. Estoy viendo realizar esto mismo en mi moto, al igual que la tuya, solo tengo velocímetro, tacometro y medidor de temperatura del motor. Todos estos relojes son análogos y para ser sincero, solamente el velocímetro esta operativo.
    Ahora quisiera hacer unas consultas:
    - En mi moto, al llegar a revoluciones altas, el voltaje aumenta a 15V (tema técnico de la moto: a mayor RPM, mas carga el estator a la batería), esto afectaría la lectura del voltaje de la batería ?
    - Seria posible realizar un upgrade al proyecto?, me explico, una vez que el motor llegue a cierta temperatura, el arduino active el electro-ventilador por algún rele, esto seria posible ?

    Ojala que este claro lo que trate de explicar, mis saludos y muchas gracias.

    Sebastian Asenjo Fuentes.

    ResponderEliminar
  2. Hola Sebastián
    A tu primera pregunta: Precisamente se trata de eso, saber en todo momento la tensión que adquiere la batería, tanto en parado como en marcha y tener control de si el alternador o lo que lleve tu moto está funcionando bien y nos carga la batería. Es normal que suba la tensión a 15 v durante la marcha, síntoma de que el sistema está cargando bien. El monitor te dará en todo momento el valor del voltaje de la batería.

    A la segunda: Si conoces el entorno Arduino eso es muy fácil de implementar con un bucle condicional:

    If temperatura > 100 activar ventilación; por ejemplo.

    Tienes miles de ejemplos de cómo hacerlo por la red. Busca "termostato con arduino" y te saldrán temas a patadas. De todas formas si me das un poco tiempo miro de poner una versión con esa opción.

    Saludos y gracias por tu visita.

    ResponderEliminar
  3. Hola .... al final me hice un blogg para ir subiendo información ya sea de este proyecto como de otros que quiero realizar.

    Primero, gracias por tu respuesta, me es útil ir aprendiendo mas de algo que me agrada mucho.
    Lo segundo, para mejorar el proyecto, en un tiempo mas subire la idea de lo que quisiera realizar (por ahora estoy en plena tesis de la universidad) pero es la combinación de tu proyecto mas la activación del electro-ventilador en el mismo arduino.

    Saludos y muchas gracias.

    Sebastian Asenjo Fuentes.

    ResponderEliminar
  4. es posible mostrar fuera de la tension de la bateria las rpm?

    ResponderEliminar
  5. Se puede. No se si quieres decir que en lugar de la tensión se muestren la rpm o ambas a la vez. En principio es bastante fácil, solo se debe tomar la señal del pick-up que viene del volante y va al CDI o la que va de este al primario de la bobina de alta. Hacer un conteo cada x segundos y mostrar previa conversión a vueltas por minuto, etc.

    Mira por la red, que hay mil ejemplos de contador de revoluciones o similar. El código lo incrustas en el void loop. Ten en cuenta que este metodo es un poco lento ya que para obtener una buena resolución el muestreo debe ser largo y entonces ya no sería en tiempo real, que es lo idoneo en un vehiculo. Yo lo estuve valorando y al final no lo implementé por eso, aparte de que mi moto ya lleva cuentavueltas analógico.

    Gracias por tu interes.
    Fernando

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. perdon me equivoque, vuelvo y comento.
      Muchas gracis por tu respuesta, y ya lo tengo bastante avanzado, mi moto no trae cuentas revoluciones por eso lo inclui ademas de un indicador de cambios, para saber en que cambio esta la caja, pero me surgio la duda es porque la mayoria de proyectos usa sensor hall o sensor optico para eso, pero me doy cuenta que los sensores de las motos son sensores pick up y no hay mucho en internet de esto para arduino para no hablar de ninguno. mi duda es este sensor pick-up igual es igual o similar a un hall? voy a probar con lo que encontre y te cuento, gracias igualmente.

      Eliminar