InicioMis trabajosInformáticaUn display alfanumérico y un Arduino Uno (y II).

Bien, continuando con el tema del display…
En la primera parte de éste artículo, había construído un visualizador de alarmas con un pequeño barebone de Gigabyte y una pantalla de 7 pulgadas. Ahora abordaré el montaje teniendo como base un Arduino Uno.
El Arduino ha de visualizar unos 130 a 160 mensajes de texto de 2 x 40 caracteres (80 caracteres ASCII) y la manera de almacenarlos y después presentarlos en el display, es; guardando los mensajes en una tarjeta externa SD y recuperarlos de ahí. Afortunadamente en la red hay una cantidad inmensa de de información, de librerías, de montajes didácticos publicados por otra inmensa cantidad de usuarios que lo publican de forma libre. Tomando como punto de partida algunos de éstos proyectos y algunas ideas de los foros, he podido llevar a la prática éste proyecto. Por eso, muchas gracias a todos.

El proceso de lo que necesitaba para hacerlo funcionar es:

8 Entradas digitales -> Convertir el código binario a decimal -> Éste número decimal, que lea la línea correspondiente de un fichero de texto previamente guardado en -> Una tarjeta micro SD en un  lector de tarjetas -> Presentar (imprimir) la línea de texto en el display LCD de 40 x 2.

La conversión de código binario a decimal, la saqué de los foros de Arduino. He utilizado también el código para leer una línea de texto de un fichero en la SD, he adaptado el display de 40 x 2 a I2C mediante una placa de circuito impreso que se utiliza para los display de 16 x 2, también he utilizado un conversor DC a DC 12 – 24 Vcc de entrada a salida de 5Vcc. Las salidas del PLC son a 24Vcc, por lo que he puesto relés de 24Vcc que activan las entradas del Arduino de 5Vcc.

El primer prototipo es éste.

Visualizador alfanumérico de mensajes. Primer prototipo funcionando.

Si quieres ver un vídeo del funcionamiento y primeras pruebas, aquí.

Me surge un problema en las primeras pruebas del programa, ya que el LCD parpadea (al refrescar) constantemente, no lo hace mucho, y aunque en el vídeo no parece que lo haga, si que parpadea y no me gusta nada.
El programa “imprime” en la primera línea del LCD un mensaje con la variable correspondiente a la línea de texto (“ALARMA :” variable_leída), después, “imprime” la segunda línea con el contenido de la variable almacenada previamente en la SD y a continuación, “limpia” la pantalla con lcd.clear. Y es ésta precisamente la instrucción que provoca el parpadeo.
En algunos foros leo que éste problema puede ser debido al firmware de del display, que no está optimizado, en otros que es la librería…

Visualizador de mensajes con Arduino Uno. Fragmento de código con el «parpadeo».

La solución que opté y que me ha dado buenos resultados, es realizar los mensajes de texto de 80 caracteres teniendo la precaución de dividir la línea a 40 caracteres para que no quede cortada -como mostraré más adelante- y eliminando la impresión de la variable, la línea de texto directamente y el número de alarma, aparece en el mismo mensaje.

Primero aparece así:
lcd.print + variable  “ALARMA: 004”        (8 caracteres : variable)
string variable         “FALLO DEL MOTOR M64”         (19 caracteres)

Después quedará así:
string variable  “ALARMA 4                   SECTOR 14    |FALLO DEL MOTOR M64                 “ (80 caracteres)
El símbolo «|» es el carácter que hace 40, el siguiente, es en la línea de abajo

 

Realizar el fichero de texto.

Como he comentado, hay alrededor de 450 mensajes de alarma repartidos en tres ficheros de texto plano que hay que picar a mano, cada línea del fichero, ha de tener EXACTAMENTE 80 caracteres, las líneas en la que sobren caracteres, pues nada, espacios en blanco, y en las que falten, abreviar como se pueda.

Para no confundirme y no tener que ir contando caracteres, espacios y demás, utilicé el “Notepad++” configurado para mostrar los espacios en blanco (Vista → Mostrar símbolo → Mostrar espacios y tabulaciones).
El lenguaje es texto normal (Lenguaje → N → Normal text) y para mejorar la lectura y el contraste lo pongo con fondo negro y letras blancas (Configuración → Configuración de estilo → Seleccionar Tema → “Bespin” o “Blackboard”).
Para guiarme a la hora de no pasarse con los 40 + 40 caracteres, el Notepad++ se puede ajustar para ver una línea vertical en la columna que se quiera (Configuración → Preferencias → Edición → Mostrar límite vertical, y poner 40 u 80, según necesidad).

Visualizador de mensajes con Arduino Uno. Ajustes de Notepad++ para ver linea a 40 columnas.

Visualizador de mensajes con Arduino Uno. Ajustes de Notepad++ para ver linea a 80 columnas.

 

El prototipo, construido en contrachapado para probar encajar en la ubicación del estropeado, es éste:

Después de realizar las pruebas conectándolo al autómata, las mismas, son satisfactorias.
La gestión de todas las alarmas las gestiona el mismo PLC en un programa interno, por lo que la cadencia de los mensajes así como la cantidad de alarmas que van apareciendo se encarga el PLC.

Comentar que las salidas del autómata son de 24Vcc, por lo que activo las bobinas de unos pequeños relés de 24Vcc y los contactos libres de potencial, conectados a las entradas mediante resistencias “pull-up”.

Os dejo un vídeo del funcionamiento del que se podría clasificar como «Prototipo Beta-2″ aquí.
En las pruebas he de reconocer la «muerte» por sobredosis de voltios, de un lector de tarjetas SD así como de la tarjeta (2 GB). Las prisas no son buenas consejeras…  🙂

El código para el Arduino es el siguiente:

LCD 40×2

Gracias a todos los “Arduinómanos”.

 

Deja un Comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.