Mide la temperatura de tu casa con Arduino y el sensor Dallas DS18B20

En proyectos de domótica, la temperatura es un parámetro muy habitual de medir. Tener la estancia a una temperatura agradable es muy importante, de ella depende nuestro confort. ¿Qué temperatura hace en este momento en tu habitación? ¿Quieres aprender a medirla? ¡Vamos!

¿Qué necesitamos?

El sensor digital de temperatura DS18B20 es un pequeño integrado para medir temperatura en tus proyectos. Es un sensor muy preciso, presenta un error de ±0.5°C y puede dar hasta 12 bits de precisión en el convertidor analógico-digital de la placa. Funciona muy bien con microcontroladores cuyo sistema va de 3 a 5V, se conecta a un pin digital, pudiendo incluso conectar varios sensores de temperatura DS18B20 al mismo pin.ds18b20

Construimos el circuito

DS18B20 circuito

  1. Conectamos la breadboard a Arduino. Unimos un cable (rojo) desde el pin 5V de Arduino a la fila roja de la breadboard y, otro cable (negro) desde el pin GND de Arduino a la fila azul de la breadboard.
  2. Colocamos el DS18B20 en la zona central de la breadboard.
  3. Puenteamos los pines exteriores del DS18B20 (cable morado) y los conectamos a GND con un cable (azul) desde uno de los pines exterior a la fila azul.
  4. Conectamos el DS18B20 a la resistencia. Para ello, insertamos una de las patas de la resistencia al pin central del DS18B20. La otra pata de la resistencia la podemos colocar en cualquier otra columna cercana.
  5. Conectamos el DS18B20 a un pin digital de Arduino. Desde el pin central del sensor, la misma columna en la que están el DS18B20 y la resistencia, llevamos un cable (amarillo) hasta el pin 2 de Arduino.
  6. Conectamos el DS18B20 a 5V. Insertamos un cable (naranja) desde la pata que no está conectada a la resistencia a la fila roja de la breadboard.

¿Listo? ¡Vamos a programarlo!

Código

Para funcionar, utiliza un protocolo no estándar que no forma parte del núcleo de Arduino. Por suerte, existe una librería externa para Arduino IDE, así que aprender a usarlo es muy fácil.

Del siguiente enlace, descargamos la última versión disponible de Temperature Control Library (TCL) bajo “Latest”.

http://www.milesburton.com/?title=Dallas_Temperature_Control_Library#Download

Descarga librería Dallas DS18B20

Más abajo, en la misma web, podemos descargar la librería OneWire, bajo el título de “One Wire Library”.

Descarga librería OneWire 2

Ahora, la importamos a Arduino IDE. Para ello, en Arduino IDE, Programa > Importar Librería… > Añadir librería… y selecciona el archivo zip descargado. Haz esto para las dos librerías.

Para comprobar que se han importado correctamente, puedes ir a Archivo > Ejemplos, y al final de la lista de ejemplos debes encontrar dos nuevas categorías: dallas-temperature-control y OneWire.

ds18b20-ide-ejemplo

Finalmente, cargamos el programa.

En Arduino IDE, vamos a Archivo > Ejemplos > dallas-temperature-control > Simple

El bloque de líneas antes de llegar a setup() es necesario para usar el DS18B20.

#include <OneWire.h>
#include <DallasTemperature.h>
 
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
 
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

De este bloque es importante que encontremos la línea #define ONE_WIRE_BUS 2, que define el pin al que se conectan los DS18B20. En nuestro caso lo hemos conectado al pin 2, así que podemos dejarlo como está.

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}

Para inicializar el Dallas DS18B20 tan sólo tenemos que incluir la línea sensors.begin(); en nuestra función setup(). El resto de sentencias inicializan el monitor serie, donde obtendremos los datos de temperatura.

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0));  
}

Por último, hay dos sentencias que debemos conocer para obtener la temperatura del sensor. Por una parte, debemos “capturar” los datos de temperatura haciendo uso de la sentencia sensors.requestTemperatures(). Una vez ejecutada esta sentencia, podemos leer los datos obtenidos con sensors.getTempCByIndex(0), lo que nos dará la temperatura del primer sensor encontrado en el bus (que no tiene por qué ser el primero del hilo). Para encontrar la temperatura de otros sensores podemos ir incrementando 0 a 1, 2…

El resultado de la función sensors.getTempCByIndex() lo podemos guardar en una variable para operar con él, aunque en el ejemplo se envía directamente el dato al puerto serie.

Monitor serie

Podemos ver los valores que nuestro sensor de temperatura está recogiendo en cada momento en el “monitor serie”.

Ahora puedes personalizar el programa a tus necesidades. Yo he empezado por cambiarle el texto que devuelve el monitor serie. ¿Qué vas a hacer tú? ¡Cuéntanoslo!

0 Comentarios

Contesta

©2016 Fábrica Digital desde Jerez de la Frontera, España.

956 05 77 07 (llamadas) / 717 717 452 (Whatsapp) / hola@fabricadigital.org

De Lunes a Viernes de 10 a 14h y de 17 a 20h. Sábados de 10 a 14h.

Calle Manuel Yélamo Crespillo, Edif. Los Ramos, 11401 Jerez de la Frontera, Cádiz. - Cómo llegar

Información Legal - Aceptamos

 

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account