original in de Stefan Blechschmidt
de to en Jürgen Pohl
en to es: Carlos Mayo
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.
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 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.
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 | -------- |
Puesto que el circuito de la interfaz es muy simple, elegí ensamblarlo en un circuito experimental. Me disculpo por mi trabajo de soldadura :-).
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.
Para nuestro circuito de intefaz sólo se requieren dos contactos del sensor, el conector VDD se puede eliminar. Simplemente lo corté :-).
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 |
El software esta disponible como un archivo tar,se puede instalar con el comando:
tar -xvzf digitemp-1.3.tar.gzen 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/ttyS0consigue 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 : 1092214400080089Nos 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
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]
.
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.loginicia 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.
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.