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.