[LinuxFocus-icon]
Hogar  |  Mapa  |  Indice  |  Busqueda

Noticias | Arca | Enlaces | Sobre LF
Este documento está disponible en los siguientes idiomas: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por Guido Socher (homepage)

Sobre el autor:

Guido ama Linux, no solo porque es divertido descubrir las grandes posibilidades de estos sistemas, sinó también por la gente involucrada en su diseño.



Taducido al español por:
Alberto Clifton Goldney <sauronx00(at)yahoo.com>

Contenidos:

 

Un panel de control LCD para tu servidor Linux

[Illustration]

Resumen:

En este artículo vamos a diseñar un panel de control LCD basado en un visor LCD Hitachi HD44780 y el Microcontrolador RISC AT90S4433 AVR 8-Bit de Atmel. Ambos componentes son muy comunes y baratos. El panel de control incluye un dispositivo de vigilancia que supervisa la computadora y tiene dos botones para facilitar el diálogo con el usuario.
Puedes setear direcciones IP, mascaras de red, direcciones de pueras de enlace, apagar la computadora, leer estadísticas, básicamente cualquier cosa que quiera, porque la mayoría de la lógica es implementada con un conjunto de instrucciones (script) en perl y puede ser modificado facilmente. El panel está conectado a la computadora a través de una linea serie RS232.

Para este artículo necesitará por lo menos una instalación parcial del entorno de desarrollo para Linux AVR. La configuración de esto está descripto en este artículo: Programando el Microcontrolador AVR con GCC.



 

Introducción

Este dispositivo básicamente combina funcionalidades de hardware que fueron utilizadas en artículos anteriores: Nuestro nuevo diseño sin embargo va mucho mas allá de eso. Incluye botones para interactuar con el usuario e incluye un dispositivo de vigilancia por hardware para supervisar al servidor. Como ampliación, el hardware provee una línea de ingreso analógica. No la utilizaremos aquí, pero usted puede conectarle por ej.: un sensor de temperatura.

Para diseñarlo, necesitará algunos elementos de hobby electrónico. Los elementos que utilizaremos son baratos, y el costo total, será menor a 40 euros.

La idea detrás de este panel es que va a permitirle controlar un servidor sin monitor ni teclado. Linux es un sistema operativo servidor muy confiable y puede ser facilmente controlado remotamente. Sin embargo cuando uno se conecta por primera vez a una red, necesitará configurar la dirección IP, puerta de enlace, y la mascara de red. Este panel de control permite configurar estas direcciones. Brinda igualmente la posibilidad de apagar el servidor mientras se está dentro del cuarto de servidores.

El diseño de este panel es muy genérico. Todas las partes "especificas del servidor" están implementadas en un conjunto de instrucciones (script) en perl. El hardware completo, el estado de los botones, el texto en la pantalla, LEDs ..., pueden ser controlados a través de comandos ASCII. Por eso usted puede usar el diseño para construir un reproductor mp3, o para controlar su grabadora de CD, o cualquier cosa que quiera.  

Qué necesita?

Para contruir esto usted necesita los siguientes componentes:

1 x Atmel At90S4433 Microcontrolador
1 x 28pin 7.25 mm IC zócalo
1 x 16pin IC zócalo
1 x MAX232
1 x small 5V relé
1 x 4MHz cristal
2 x LEDs (verde y rojo)
1 x BC547 NPN transistor
1 x BC557 PNP transistor
4 x 1uF capacitor (común o polarizado)
2 x 27pF capacitor cerámico
1 x 10nF capacitor
1 x 100nF capacitor
3 x resistencia 4k7
2 x resistencia 2k2
1 x resistencia 10K
1 x resistencia 3k3
2 x resistencia 100 Ohm
3 x resistencia 470 Ohm
3 x resistencia 1k
1 x resistencia 220 Ohm
1 x 4K7 potenciómetro (lo más pequeño posible)
1 x Z-diodo 4.3V
2 x botones al tacto pequeños
1 x diodo standard pequeño (e.g 1N4148, cualquier diodo barato)
1 x 2 lineas de 20 carácteres LCD pantalla con HD44780 interface compatible.

Todas las pantallas LCD que he visto con 14 o 16 pins en el conector eran compatibles con el HD44780. Igualmente usted puede utilizar una pantalla de 3 o 4 lineas pero luego necesitará modificar un poco el software.

Además de eso usted necesitará algunos cables y conectores para la fuente de poder y el RS232. Si tiene una pantalla de 2 líneas entonces usted puede montarla en una fina hoja de metal de aluminio y encajarla en una bahía de 5.25" en el servidor.  

Esquema y placa

Utilicé "eagle" para Linux para diseñar el esquema y la placa. Es un software excelente pero necesitará algún tiempo para aprender como utilizarlo. Puede obtener la versión gratis para uso particular en cadsoftusa.com.

El esquema (haga click para una imagen mayor):
[Schematic]

La placa (haga click para una imagen mayor):
[board]


Distribución de la placa con fondo blanco para una mejor impresión: placa con fondo blanco (Nota: Este no es el archivo que necesita para realizar la placa del circuito impreso.)

Los archivos de "Eagle" (comprimidos con gzip, algunos navegadores inteligentes los descomprimiran durante la bajada):  

El circuito

Voy a explicar brevemente el siguiente diagrama del circuito. El AT90s4433 tiene 3 puertos: PB, PC y PD. PC puede ser utilizado como un puerto de ingreso tanto analógico como digital. Todos los puertos pueden ser utilizados como líneas digitales de ingreso o de salida. Esto es controlado por programa vía la DDR (Registro de dirección de datos). Utilizaremos todos los pines para líneas digitales (0 o 5 voltios), excepto la 23. El Max232 es un convertidor de nivel de voltaje. La interface RS232 utiliza +-10V y el Max232 convierte esto a 0-5V. En la pin 1 (pin de reset) del AT90S4433 encontrará algo denominado circuito de "apagado parcial". Este circuito mantiene el reset bajo (activo) durante los momentos de insuficiente carga electrica para prevenir a la CPU de ejecutar intrucciones erroneas o mal funcionamiento general. Esto puede suceder por unos pocos milisegunodos durante el encendido y el apagado. Asegura basicamente que el programa en el Microcontrolador es inicializado correctamente.

Algunos de ustedes se preguntaran porqué hay un diodo en paralelo a la bobina del relé y porque la polaridad tal como se vé, nunca va a tener nada que hacer. Este diodo es muy importante! Cuando apaga el relé, luego la bobina genera un voltaje muy grande. Este puede destruir al Microcontrolador. Este voltaje tiene una polaridad opuesta al voltaje suministrado en la bobina. El diodo puede ser cualquier diodo pequeño y barato, nada especial, pero es importante tener el diodo.  

Como hacer la placa del circuito impreso

Para grabar la placa del circuito impreso necesitará primero imprimir este archivo postscript (linuxlcdpanel.ps.gz) en una lámina transparente. En negocios para arquitectos puede obtener algunos láminas plasticas semi-transparentes plastic denominadas Sinolit. Es producido por "Regulus" y es utilizado normalmente para impresión en offset. Otra buena alternativa es papel de 60 grs. + aerosol transparente (pausklar 21 de Química Kontakt). La ventaja del papel y el Sinolit es que el toner de las impresoras Laser realmente se pega en el papel/lámina y provee un buen contraste.
He convertido el archivo postscript a PDF en caso de que no tenga un sistema de impresión postscript. La calidad sin embargo es bastante pobre.
El tiempo de exposición para las placas fotograficas recubriertas de cobre depende de la fuente de luz. Una exposición casera normal está entre 1 y 2 Minutos. Usted puede igualmente utilizar luz dia pero intente evitar luz solar directa (es muy fuerte). Debe experimentar un poco con pequeñas tiras de placas fotograficas para obtener el mejor tiempo de exposición antes de utilizar la verdadera placa.
[before etching]
La placa expuesta y revelada antes de grabar.


La placa expuesta necesita luego ser revelada por varios minutos en NaOH (hidróxido de sodio - soda cáustica). Después deberá comprobar cuidadosamente el resultado y hacer las correcciones con un marcador Edding 780 negro (no los marcadores permanentes para gastos generales, es un marcador con real pensamiento pintura). Usualmente realizo los placas un poco más grande porque encontré que los placas de Eagle son muy pequeños para utilizar en hobbys.
[after etching]
La plaqueta confeccionada antes de realizar las orificios


Nota: De algún modo parece imposible para los fabricantes ponerse de acuerdo en y convenciones de nombres para relés. Yo utilicé un pequeño relé de 5V fabricado por Matsushita. Vuestro relé puede tener distinta distribución de pines por eso cambie la plaqueta según necesite. (con un marcador de pintura resistente a la grabación - grabado -). (with an etch resistant paint marker).

Cuando usted esté satisfecho puede grabar la placa en cloruro férrico (FeCl3). FeCl3 tiene buena velocidad de grabación a temperatura ambiente. Es muy fácil de usar y por eso bueno para usar en casa. Usted obtendrá los mejores resultados si la placa está en posición vertical en un recipiente alto. Los iones de cobres son más pesados que los iones de hierro y si usted derrama el FeCl3 dentro de un tubo delgado y plano, luego los iones de cobre se acumularán en el fondo, donde está la placa.
Cuando la placa este lista, limpie la tinta del marcador Edding con trementina. Puede dejarle la "tinta" foto resistente. Esta se evaporará cuando suelde y proteja el cobre.  

El software para el Microcontrolador

El software para el Microcontrolador está organizado en los siguientes archivos. Para comprender el software en detalle, recomiendo que usted lea la hoja de datos del Microcontrolador. Está disponible en la sección de referencia al final del artículo (o en www.atmel.com)
Sin embargo para utilizar este panel usted no necesita comprender el software, usted solo necesita desempaquetar el archivo del código fuente (tomar el linuxlcdpanel-0.7.tar.gz desde página para bajarlo) y escribir:

make
make load

O usted igualmente puede utilizar el software pre-compilado y cargarlo con el comando:
make "cargarpreconstruido"

Muy simple. Encontrará una descripción de como programar el Micontrolador en el primer artículo:Programando el Microcontrolador con GCC.  

Comrobando el panel LCD

El panel LCD es diseñado para trabajar con la fuente de poder interna de 5V del servidor (cable rojo=5V, cable negro=tierra). Sin embargo no debe conectarlo desde el primer momento a la fuente de poder. Usted pudo hacer cometido un pequeño error durante la soldadura y en el proceso de montaje. La fuente de poder de la computadora es muy fuerte y ambos, tu computadora y la plaqueta pueden ingresar en una nobe de humo si cometes un error. Primero pruébala con una fuente de poder externa, electrónicamente limitada y estabilizada !. Ahora debe bajar el software a la EEPROM como se describió arriba. Luego de eso deberá ver en la pantalla LCD un banner que diga "linuxfocus.org". Ahora conecte la interface RS232.

MAX232 pin 14 to CTS (DB-9 pin 8)
MAX232 pin 7 to RXD (DB-9 pin 2)
MAX232 pin 13 to TXD (DB-9 pin 3)
Necesita igualmente conectar DTR, DSR y CD con cada una (DB-9 pin 4, 6 and 1)

Esto igualmente está bien documentado arriba en el diagrama del circuito.

[talking to the LCD panel over the serial line] Para utilizar la línea serie usted necesita inicializarla. El archivo del código fuente linuxlcdpanel-0.7.tar.gz contiene un programa denominado ttydevinit el cual realiza exactamente esta inicialización. Vamos a decir que hemos conectado el panel al COM2 (ttyS1) luego necesitará ejecutar una vez el comando:

./ttydevinit /dev/ttyS1

Ahora el controlador de la linea serie es inicializado para utilizar 9600 baudios y usted puede comenzar a "hablar" con el panel LCD. Abra 2 pantallas Xterm. En una tipee "cat /dev/ttyS1" y en la otra tipee "cat > /dev/ttyS1". Ahora puede por ejemplo tipear el comando l=11 (enciende LED 1) or l=10 (apaga LED 1). Puede ver en la primera sesión (xterm), que el panel LCD reconoce los comandos con un "ok".
Todos los comandos disponibles están explicados en el archivo README.commands .

El archivo del código fuente contiene un script perl denominado ttytest.pl que no hace más que encender y apagar el led rojo a intervalos. Esto quiere decir que es para ser utilizado como un simple programa de ejemplo que muestra como manejar el panel LCD. Puede utilizarlo como base para tu propio programa. Revise el código fuente. Esto requiere algún conocimiento de perl, pero es más bien un programa corto.  

Conectando el dispositivo de vigilancia

El dispositivo de vigilancia por defecto está apagado. Puede encenderlo con el comando w=1 y se establece el tiempo de espera con s=x donde x es un valor entre 1 y 255. Ejemplo: s=10 permitirá que el tiempo de espera del dispositivo de vigilancia sea 10*16 seg. = 160 seg. El programa controlador necesita establecer el tiempo de espera periodicamente para evitar que el dispositivo de vigilancia se dispare. Si el servidor alguna vez se bloqueara, entonces el programa controlador no va a reestablecer el tiempo de espera y el dispositivo de vigilancia se disparará. Yo conozco servidores Linux que casi nunca se han colgado. Sin embargo si ellos se cuelgan y quedan trabados, usualmente no hay nadie en el sitio para presionar el boton de reset o nadie conoce donde esta el servidor puesto que no hubo problemas con el en los ultimos 2 años.

El dispositivo de vigilancia esta diseñado de tal modo que solo se dispará una vez. Esto es para evitar que se dispare nuevamente durante el chequeo del sistema de archivos que probablemente seguira luego del reseteo. Cuando un servidor levante, el programa controlador necesita estar listo nuevamente.

Para conectar físicamente el dispositivo de vigilancia necesitara encontrar los 2 cables que van al boton de reset del servidor. Necesita conectar este boton de reset en paralelo con el relé desde el dispositivo de vigilancia.  

Cómo utilizar el dispositivo de vigilancia

El dispositivo de vigilancia garantiza que el sistema está siempre disponible para ejecutar programas. Esto no garantiza que un Servidor Web o una aplicación de base de datos va a continuar corriendo y respondiendo. Para verificar tal cosa deberá utilizar una entrada en la tabla de tareas programadas del "cron" u otro programa. Puede estar realmente seguro que la tabla de cron probablemente esté trabajando porque el dispositivo de vigilancia asegura que el software en general está todavía ejecutándose.

Usted por ejemplo puede diseñar un "script" que sea activado por un "cronjob" y baje una página Web del servidor cada 15 minutos, pero tiene que ser cauteloso con eso: Un servidor Web puede ponerse pesado por muchas solicitudes y luego es normal que no responda a todas ellas. Por eso debe contar que tan frecuentemente el servidor Web no responde y si por ejemplo no responde ni una vez entre las 10 comprobaciones se restaurará el servidor Web o lanzar un reboot normal (no un reset a través del dispositivo de vigilancia).

Aparte de la aplicación usted debe igualmente monitorear la utilización del disco. Los siguientes comandos shell van a retornar algo sí una de las particiones del disco llegara a estar lleno más del 80%:

df | egrep ' (8.%|9.%|100%) '

Esto (nuevamente) puede utilizarse en combinación con una entrada en la tabla de tareas programadas del "cron", como una comprobación regular del uso del disco.  

Los scripts en el Servidor

Casi toda la lógica de nuestro panel LCD est implementada en un script en perl denominado llp.pl, copiar este archivo en /usr/sbin/. Después copie el programa ttydevinit a /usr/bin y el archivo ifconfig_llp.txt (del directorio etc del archivo del código fuente) a /etc. Ahora edite el ifconfig_llp.txt y cambie las direcciones como necesite:

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

Ahora realice un backup del script original /etc/rc.d/init.d/network y copie el script de etc/network del archivo del código fuente a /etc/rc.d/init.d/network. Este script y los nombres de directorios son sólo válidos para Redhat y Mandrake. El script etc/network_all_distributions es más básico y va a funcionar con cualquier distribución Linux pero necesitará averiguar donde tiene su distribución Linux los directorios init-rc. Es ligeramente diferente de distribución a distribución.

Edite el archivo /etc/rc.d/init.d/network y cambie la línea

/usr/sbin/llp.pl /dev/ttyS1&

si no utiliza el COM2.

Ahora puede correr

/etc/rc.d/init.d/network start

y verá su panel LCD en acción. Nota: es más seguro tocar alrededor y modificar la dirección IP. Los cambios sólo tendrán efecto luego del próximo reboot. Por eso pruébelo y luego cambielo nuevamente, antes de apagar el servidor (igualmente puede editar /etc/ifconfig_llp.txt para deshacer los cambios).  

Archivos de Log

El script llp.lp escribe un archivo de log /var/log/llp.log. Este log crecerá lentamente. Normalmente no habrá necesidad de rotarlo automáticamente. Puede rotarlo con un programa como "logrotate" si desea. No hay necesidad de avisar cuando hubo una rotación. Una línea del archivo config para el logrotate puede verse como esto:

/var/log/llp.log {
nocompress
monthly
}

El log contendrá entradas cuando el sistema fue apagado manualmente, una dirección IP fue modificada (IP, GW, netmask) o cuando el hardware del dispositivo de control disparó un reset. Naturalmente puede loggear el tiempo de espera del dispositivo de vigilancia cuando esto suceda (porque el sistema se cuelga) pero en su lugar se va a registrar en el proximo encendido)  

El panel en operacion

Aqui hay algunas capturas de pantallas del panel LCD en operacion. Estas no son todas las funciones ofrecidas por este panel. Hay mas y usted puede incluir las suyas.

La pantalla principal. Mostrando algun nombre (linuxfocus en este caso), el tiempo de operacion y de carga. Esto se actualiza periodicamente.
[main]

Menu de configuracin de la direccion IP
[IP configuration menu]

Ejemplo de una direccion IP que esta siendo modificada
[change IP]

Como modificar la direccion del gateway (ruta por defecto)
[GW]  

Conclusion

[the final panel] Para construir este panel LCD requiere algunas habilidades de hobby electronico pero no es un circuito muy complejo. Nuestro panel LCD Linux ofrece mas funcionalidad que otros paneles de control que cualquier otro que haya visto, y es muy generico y barato.

Feliz soldadura :-)
 

References

 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Guido Socher, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
en --> -- : Guido Socher (homepage)
en --> es: Alberto Clifton Goldney <sauronx00(at)yahoo.com>

2002-08-26, generated by lfparser version 2.21