Monitoreo de temperatura con Linux

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Hardware

AuthorImage:[Here we need a little image from you]

Stefan Blechschmidt

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in de Stefan Blechschmidt

de to en Jürgen Pohl

en to es: Carlos Mayo

AboutTheAuthor:[A small biography about the author]

Electricista confirmado, me encontré a mi mismo en 1990 delante de una estación de trabajo CAD para desarrollar una estación de control y conmutación. Obviamente, me infecté por un 'virus' entonces desconocido.

Abstract:[Here you write a little summary]

Los servidores Linux funcionan de una manera fiable y segura, no necesitan ninguna atención especial, funcionan y funcionan y funcionan. Pero qué ocurre si el pequeño pingüino se calienta. El verano pasado nos lo mostró: deberíamos dar a nuestro pequeño amigo un sistema de monitoreo de temperatura. Este artículo le mostrará cómo instalar uno con un esfuerzo pequeño, por unos 10 euros.

ArticleIllustration:[One image that will end up at the top of the article]

title image

ArticleBody:[The main part of the article]

Los componentes

Brian C.Lane ha escrito un programa para el sensor de temperatura DS1820 de DALLAS Semiconductor. No es difícil ensamblar un sistema de monitoreo de temperatura con estos dos componentes y algunas que otras partes.

Nota:
Brian C.Lane ha modificado su página y eliminó la versión que uso. De todas formas puede bajarlo desde aquí: digitemp-1.3.tar.gz

Aquellos que deseen usar su versión actual digitem-3.2.0.tar.gz, pueden bajarlo desde http://www.digitemp.com/software.shtml.

El sensor

Sensor pinout Sensor picture
El sensor fue producido en principio por DALLAS Semiconductor quien se ha fusionado a Maxim/Dallas Semiconductor. De acuerdo con la especificación de datos, el sensor puede medir temperaturas desde -55°C a 125°C. Los datos de las mediciones son generados como una señal digital con un ancho de 9 bits. Además cada sensor posee un número de identificación de 64 bits, permitiendo interconectar a través de un bus varios sensores. Es posible utilizar 100 sensores en un bus de una longitud de 300m.
El circuito que estamos presentando aquí funcionará con sólo 10 sensores en un bus de 60m. Actualmente estoy usando 4 sensores en un bus de unos 12m.

Puede encontrar mas información sobre el sensor en esta hoja de especificaciones.

Quiero añadir que el circuito presentado aquí puede medir sólo hasta 75°C, lo cual debe ser adecuado para nuestra aplicación.

Los otros componentes

Para poder conectar el sensor a la interfaz serie, necesitamos componentes adicionales. Los encontrará en la mayoría de los minoristas de componentes de electrónica, en Internet o -incluso mejor- en la tienda de electrónica de la esquina.

Cantidad Identificación Tipo alter.Tipo
1 Resistencia 1,5 k Ohm --------
2 Diodo Schottky 1N5818 BAT 43
1 Diodo Zener 1N5228 ZPY 3,9V
1 Diodo Zener 1N5234 ZPY 6,2V
1 Sensor DS18S20 --------
1 Socket, Serial RS232C/9 --------
1 Connector Shell SUB-D/9 --------
1 Breadboard Papel laminado --------

Diseño de la interfaz

Puesto que el circuito de la interfaz es muy simple, elegí ensamblarlo en un circuito experimental. Me disculpo por mi trabajo de soldadura :-).


circuit diagram


board front side board back
side

Con un poco de habilidad, los componentes pueden ser instalados en el conector de la interfaz serie.

Nota
En esta página de LinuxNetMag podemos encontrar un artículo de digitemp, también un foro describiendo un circuito para mediciones por encima de 75°C. No he comprobado todavía ese circuito.

El circuito de la interfaz serie

Para nuestro circuito de intefaz sólo se requieren dos contactos del sensor, el conector VDD se puede eliminar. Simplemente lo corté :-).

pin not used

Aquí se muestra una tabla del circuito de la tarjeta de la interfaz, los sensores y el interfaz serie.

Descripción DB-25 DB-9 Sensor
DTR 20 4 Data (PIN 2)
RXD 3 2 GND (PIN 1)
TXD 2 3
GND 1 and 7 5

Instalación del software

El software esta disponible como un archivo tar,se puede instalar con el comando:

 tar -xvzf digitemp-1.3.tar.gz
en el directorio actual.

En el nuevo directorio instalado digitemp1-3 encontraremos el código fuente, documentación y algunos scripts en PERL, pero también los binarios digitemp, que se usarán tal como son.

Si se invoca a digitemp sin parámetros obtendremos una visión general de los parámetros.

DigiTemp v1.3 Copyright 1997-99 by Nexus Computing

Usage: digitemp -s [-i -d -l -r -v -t -p -a]
                -i                            Initalize .digitemprc file
                -s/dev/ttyS0                  Set serial port
                -l/var/log/temperature        Send output to logfile
                -f5                           Fail delay in S
                -r500                         Read delay in mS
                -v                            Verbose output
                -t0                           Read Sensor #
                -a                            Read all Sensors
                -d5                           Delay between samples (in sec.)
                -n50                          Number of times to repeat
                -o2                           Output format for logfile
                -o"output format string"      See description below

Logfile formats:  1 = One line per sensor, time, C, F (default)
                  2 = One line per sample, elapsed time, temperature in C
                  3 = Same as #2, except temperature is in F
        #2 and #3 have the data seperated by tabs, suitable for import
        into a spreadsheet or other graphing software.

        The format string uses strftime tokens plus 3 special ones for
        digitemp - %s for sensor #, %C for centigrage, %F for fahrenheight.
        The case of the token is important! The default format string is:
        "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" which gives you an
        output of: May 24 21:25:43 Sensor 0 C: 23.66 F: 74.59

Tal y como nos indica la 'ayuda', los sensores instalados necesitan ser inicializados. Para esto necesitamos definir la interfaz a la cual se conectará nuestro circuito, así como los parámetros para la inicialización.

El comando

digitemp -i -s/dev/ttyS0
consigue eso, en este caso la interfaz del circuito se conecta a la primera interfaz serie.

El software detecta los sensores, aparece un mensaje similar a este:

DigiTemp v1.3 Copyright 1997-99 by Nexus Computing

ROM #0 : 1032724700080086
ROM #1 : 1092214400080089
Nos damos cuenta que el software detectó 2 sensores. Además el archivo .digitemprc se creará en el directorio actual, contrendrá los datos de los sensores, la interfaz y el formato de salida.

Con el comando ./digitemp -a ahora podremos leer la salida de los sensores. Observe el caracter ./, aún estamos en un directorio que no es parte de la ruta actual.

Salida de la medición

DigiTemp v1.3 Copyright 1997-99 by Nexus Computing

Sep 24 21:53:35 Sensor 0 C: 37.94 F: 100.29
Sep 24 21:53:38 Sensor 1 C: 10.62 F: 51.129

Adaptando el sistema

Para integrar nuestro programa a nuestro sistema necesitamos hacer algunos ajustes.

Primero, necesitamos copiar los binaros, p.e. digitemp, en un directorio que nos permita la ejecución de programas sin tener que definir la ruta absoluta. Yo he seleccionado /usr/local/bin/ para esto. Aquellos que no estén seguros sobre esto pueden encontrar las rutas con echo $PATH. Además, el archivo .digitemprc con los datos de inicialización necesita copiarse en el directorio del usuario que va a llevar a cabo las mediciones. Para grabar los datos en un archivo y no en la consola, se debe aplicar la opción -l[PATH/FILE NAME].

Mediciones automáticas

Ahora necesitamos automatizar nuestras mediciones, el bien probado cron lo hará. Con crontab -u [USUARIO] -e podemos establecerlo por cada usario. La entrada

0-59/15 * * * * /usr/local/bin/digitemp -a -l/var/log/digitemp.log
inicia digitemp para ejecutar una medición cada 15 minutos y escribirlas en /var/log/digitemp.log.

Con el comando tail /var/log/digitemp.log podemos leer las últimas líneas de las mediciones. Si el archivo /var/log/digitemp.log no está siendo generado, por favor compruebe los permisos de acceso al archivo.

Comentarios finales

El archivo contiene algunos scripts en PERL para la interpretación gráfica. No los voy a describir aquí. Estoy barajando la idea de escribir otro artículo sobre cómo recoger los datos del sensor en la base de datos MySQL y cómo interpretarlos a través de una interfaz web.

Esto se hará principalmente con PERL, MySQL, y CGIs.

Descarga

Enlaces/Referencias