sensor de temperatura

Sensor de temperatura y data logger con Arduino

En esta publicación presentamos los pasos para armar y programar un sensor de temperatura con Arduino. Sin embargo este proyecto tiene una función adicional, registra la temperatura en una base de datos externa. Por lo que siendo así, obtendremos un práctico data logger de temperatura interconectado.

 

Componentes necesarios para el proyecto


Para poner a funcionar este proyecto necesitamos de dos grupos de partes:

 

1- Para el sensor

  • Un Arduino UNO
  • Un sensor de temperatura DTH11
  • Un shield ethernet
  • Un display LCD de 16×2 (opcional)

Aspecto de los componentes electrónicos del proyecto:

sensor de temperaturasensor de temperaturasensor de temperaturasensor de temperatura
Shield EthernetSensor DTH11Arduino UNODisplay LCD

 

Construcción del sensor de temperatura con Arduino


La unión del shield ethernet con la placa de Arduino debe quedar tal como la siguiente imagen:

sensor de temperatura

Placa de Arduino UNO

La conexión con el display debe quedar tal como la siguiente imagen de una simulación:

sensor de temperatura

Modelo de conexión

PINES DISPLAYPINES ARDUINO
K (16)-
A (15) - conectado con resistencia de 820 Ohm-
D7 (14)2
D6 (13)3
D5 (12)4
D4 (11)5
E (6)8
RW (5) - Tierra-
RS (4)9
VO (3) - Pin para el potenciometro-
VDD (2)-
VSS (1) - Tierra-

 

Luego, conectamos el pin de datos del DTH11 al pin 7 del Arduino.

 

Para el servidor (el servidor puede ser tu computador)

  • Que tenga sistema operativo Linux o Windows
  • El motor de base de datos MySQL instalado y funcionando
  • Servidor web Apache y PHP 5.6

Ambas partes del data logger se comunican por medio de una red LAN. De manera que tenemos suficiente con un switche Ethernet sencillo y un par de cables UTP categoría 5e o 6.

sensor de temperatura

Algoritmo en el IDE de programación

Para este proyecto usamos la distribución Ubuntu Mate 16.04 trabajando como servidor. Además, programamos la placa de Arduino por medio de su software Arduino IDE, corriendo sobre esta misma plataforma.

Puede descargar el software multiplataforma Arduino IDE, aquí

 

Te puede interesar: Migrar de Windows a Linux, aquí

Descripción del funcionamiento


De la lectura de la temperatura se encarga el Arduino por medio del sensor DTH11. Luego, esa información viaja por la red LAN hasta el servidor, y aquí, valiéndose de un algoritmo programado en PHP, se registra en la base de datos MySQL. Por otra parte, la información sobre la temperatura se muestra en el display LCD. Finalmente un módulo de informe albergado en el mismo servidor, presenta en pantalla el registro diario de la temperatura.

sensor de temperatura

Informe gráfico de registros de temperatura

Programación en la placa de Arduino


A partir de este momento grabamos en la placa del Arduino el siguiente algoritmo:

#include <LiquidCrystal.h>
#include <DHT.h>
#include <SPI.h>
#include <Ethernet.h>

const int rs = 9, en = 8, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

DHT dht(7, DHT11);

//Definicoes de IP, mascara de rede e gateway
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,132); //Define o endereco IP
IPAddress gateway(192,168,0,72); //Define o gateway
IPAddress subnet(255, 255, 255, 0); //Define a máscara de rede
byte server[] = { 192,168,0,205 }; // ip del Hosting
EthernetClient client;

void setup() {

 Serial.begin(9600);
 Ethernet.begin(mac, ip, gateway, subnet);
 // PREPARAR LA COMUNICACION SERIAL
 Serial.println("Prueba del sensor DHT11");

 // PREPARAR LA LIBRERIA PARA COMUNICARSE CON EL SENSOR
 dht.begin();
 // ESCRIBE EN LA PANTALLA LCD LA PALABRA TEMPERATURA
 lcd.begin(16,2);
 lcd.setCursor(0,0);
 lcd.print("TEMPERATURA:");
 lcd.write(1);

 // LEER LA TEMPERATURA USANDO EL METODO READTEMPERATURE
 // LUEGO MUESTRALO EN EL DISPLAY LCD
 float tt = dht.readTemperature();

 lcd.setCursor(0,1);
 lcd.print(tt);
}

void loop() {
 // INTERVALO DE MEDICIONES, 20 MINUTOS
 delay(1200000);

 // LEER LA TEMPERATURA USANDO EL METODO READTEMPERATURE
 float t = dht.readTemperature();

 // REVISAR QUE LOS RESULTADOS SEAN VALORES NUMERICOS VALIDOS, INDICANDO QUE LA COMUNICACION ES CORRECTA
 if (isnan(t)) {
 Serial.println("Falla al leer el sensor DHT11!");
 return;
}

// IMPRIMIR RESULTADO AL MONITOR SERIAL
 Serial.print("Temperatura: ");
 Serial.print(t);
 Serial.println(" *C");

 lcd.setCursor(0,1);
 lcd.print(t);


if (client.connect(server, 80)>0) {
 Serial.println("connected"); // Conexión con el servidor

 client.print("GET http://192.168.0.205/temp.php?valor=");
 client.print(t); // valor de temperatura
 client.println(" HTTP/1.0");
 client.println("User-Agent: Arduino 1.0");
 client.println();
}

 client.stop();
 client.flush();
//delay(3000); // Espero un minuto antes de tomar otra muestra

}

Curso práctico de electrónica, aquí

Programación del lado del servidor


Del lado del servidor tenemos el fichero temp.php que se encarga de recibir la lectura desde el sensor de temperatura. Acto seguido, lo registra en el campo temperature de la tabla temperatura de la base de datos MySQL:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
include("dbT.php");

$valor=$_GET['valor'];
mysql_query("INSERT INTO temperatura(temperature) VALUES('$valor')");
?>

Seguidamente tenemos el modulo de informes. Esta es la pieza que finalmente le da forma al proyecto como un data logger de temperatura. Gracias a esto podemos hacerle seguimiento a la temperatura desde cualquier cualquier dispositivo, navegador (Firefox o Chrome) y punto de una red de datos.

<?php

$self = $_SERVER['PHP_SELF'];
header("refresh:180; url=$self");

include("db_temp.php");
include("phpgraphlib/phpgraphlib.php");

$graph=new PHPGraphLib(1140,300);
$dataArray=array();
$date=strftime("%Y-%m-%d", time());


//get data from database
$sql="SELECT temperature, DATE_FORMAT(fecha, '%H:%i') as hora FROM temperatura WHERE DATE(fecha)='$date'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());

if ($result) {
 while ($row = mysql_fetch_assoc($result)) {
 $time=$row['hora'];
 $te=$row['temperature'];
 $temp=substr($te, 0, 2);
//add to data array
 $dataArray[$time]=$temp;
 }
}

//configure graph
//$graph-> new PHPGraphLib(520, 280);
$graph->addData($dataArray);

$graph->setTitle('Registro diario de temperatura, Cuarto Tecnico Principal - SENSOR: 192.168.0.132');
$graph->setBars(false);
$graph->setLine(true);
$graph->setDataPoints(true);
$graph->setDataPointColor('maroon');
$graph->setDataValues(true);
$graph->setDataValueColor('maroon');
$graph->setGoalLine(.0025);
$graph->setGoalLineColor('red');
$graph->createGraph();

?>

Base de datos para los registros de la temperatura


Para guardar los registros de la temperatura, podemos usar cualquier motor de bases de datos soportada por PHP. Sin embargo, para este proyecto usamos una base de datos MySQL. Su tabla se define con los campos que se muestran a continuación:

sensor de temperatura

Tabla MySQL donde se almacenan los registros de temperatura

Finalmente integramos todo el sistema por medio de una red de datos y listo. Para verificar la conectividad IP entre las dos partes del data logger de temperatura, podemos usar el comando ping del sistema operativo.

 

Relevancia en la Seguridad Informática


Este proyecto hace parte de un articulo publicado en este blog sobre La Introducción General a la Seguridad Informática. En dicho articulo consideramos este dispositivo como un componente más del monitoreo ambiental, del recinto donde se procesa y se almacena la información.

Puede ver Introducción a la Seguridad Informática, aquí

En mi oficio como administrador de redes informáticas, integré este proyecto en el sistema de monitoreo de tráfico de Internet del ISP, el cual es en tiempo real. Este sistema me permite tomar decisiones rápidamente cuando el data logger muestra un incremento de la temperatura en el cuarto de servidores. Muchas veces ese incremento se debe a fallas en el sistema de enfriamiento, por lo que se debe actuar con evidencia y diligencia.

Puede ver el artículo Monitorear tráfico de red en Linux, aquí

 

Nota

El dispositivo DTH11 viene con un margen de error de 2 °C, por lo que se debe comparar con otro sensor de temperatura para calibrar su lectura desde el algoritmo (por ejemplo, sumándole 2 a la variable t en el código del Arduino). Aunque también podemos sustituirlo por un DTH22, que es más preciso.

 

Articulo relacionado


Data logger de temperatura con WiFi

 

Comparte esto en
Publicado en GNU Linux.

2 Comentarios

    • Bueno, solo no le conectes el display y al código le quitas los segmentos de comunicación con el LCD. El resto de código lo dejas intacto. Por otra parte, si tienes GNU/Linux instalado en la tarjeta Galileo, puedes instalarle mysql con el comando apt install mysql-server

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *