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 conversor analógico-digital del chip. Funciona muy bien con microcontroladores cuyo sistema va de 3 a 5.5V, se conecta a un pin digital, pudiendo incluso conectar varios sensores de temperatura DS18B20 al mismo pin.

En Fábrica Digital lo puedes encontrar tanto en su encapsulado original, como en un encapsulado sumergible para tomar temperatura en líquidos, a la intemperie o bajo tierra.

Sensor de temperatura digital sumergible DS18B20

3,30 (2,73 IVA excl.)
En tienda

Sensor digital de temperatura Dallas DS18B20

1,60 (1,32 IVA excl.)
En tienda

¿Para qué sirve cada pin del DS18B20?

El sensor de temperatura digital DS18B20 tiene 3 pines, como se muestra en la imagen siguiente.

Del 1 al 3, estos pines son:

GND: Conexión a tierra del sensor, este pin tiene que estar común con el pin GND de Arduino. En su versión sumergible, este pin es el cable negro.

DQ (datos): Es el único pin de datos que tiene este sensor. Es un pin bidireccional, que quiere decir que Arduino podrá enviar comandos al sensor y recibir las medidas por el mismo pin. Este pin necesita una resistencia de pull-up (de 4,7kOhm a 10kOhm) a VDD que lo mantenga a nivel alto mientras no se produce ninguna transacción. En su versión sumergible, este pin es el cable amarillo.

VDD: Alimentación del sensor, que puede ir de 3 a 5,5V. En su versión sumergible, este pin es el cable rojo.

¿Cómo se conecta el DS18B20 a Arduino?

Instalación de librerías

Este sensor utiliza un protocolo digital llamado OneWire y es relativamente complejo de utilizar. Por suerte, hay unas librerías que van a simplificarnos muchísimo su uso.

Para instalar estas librerías necesitamos Arduino IDE 1.6.5 o superior y conexión a internet.

En Arduino IDE, vamos a Programa > Incluir librería > Gestionar librerías.

Nos aparecerá la ventana del gestor de librerías. Cuando haya cargado todas las librerías, veremos arriba a la derecha una caja de texto para filtrarlas. Vamos a buscar “dallastemperature”. Una vez encontremos la librería DallasTemperature de Miles Burton (y otros), hacemos click sobre ella, nos aparece el botón Instalar y lo pulsamos, que para eso la hemos buscado.

Ahora buscamos la librería OneWire de Jim Studt (y otros) y hacemos lo mismo.

Cuando hayamos instalado ambas librerías podemos cerrar la ventana del gestor y volver a nuestro sketch en blanco.

Programando un sketch con el DS18B20

Después de conectar nuestro circuito e instalado las librerías DallasTemperature y OneWire, ya estamos listos para empezar a programar nuestro sketch.

Vamos a hacer un programa que tome la temperatura del sensor y la muestre por el monitor serie. Para ello, empezamos por incluir las librerías necesarias al inicio del sketch:

#include <OneWire.h>
#include <DallasTemperature.h>

A continuación, y porque somos buenos programadores, creamos una constante que represente el pin al que hemos conectado el sensor:

const int DS18B20_PIN = 7;

Y tenemos que crear dos objetos, uno para manipular el bus de datos (tipo OneWire) y otro para manipular el sensor (tipo DallasTemperature). Al primero tendremos que pasarle el pin que hemos definido como argumento, y al segundo la referencia del primero:

OneWire oneWire(DS18B20_PIN);
DallasTemperature ds18b20(&oneWire);

Por qué hay que hacer esto así es un tema avanzado de programación, que en el nivel para el que este tutorial va dirigido puede confundir más de lo que aclara. Lo que debemos entender es que ahora tenemos un objeto llamado ds18b20 con el que realizaremos varias operaciones con nuestro sensor escribiendo algo como ds18b20.accion(), de forma similar a cuando escribimos por el monitor serie con Serial.print().

Por último, necesitaremos una variable en la que almacenar la temperatura obtenida. El sensor DS18B20 nos da la temperatura con decimales, por lo que necesitamos una variable de tipo real:

float temperatura;

Siguiendo con la función setup(), debemos inicializar el monitor serie y el sensor de la siguiente forma:

void setup()
{
  Serial.begin(9600); // Inicializa el puerto serie
  ds18b20.begin(); // Inicializa el sensor
}

Y, después de inicializarlos, vamos a ver qué tenemos que hacer en la función loop() para obtener la temperatura y mostrarla por el monitor serie.

El DS18B20 es un sensor digital al que podemos enviar diferentes comandos y nos dará una respuesta. Para obtener la temperatura tenemos que enviarle el comando correspondiente con la función requestTemperatures(), con una sentencia que nos queda tal que:

ds18b20.requestTemperatures();

¿Has notado que la palabra “temperatura” está en plural en la función? Eso es porque podemos tener conectados a la vez varios sensores DS18B20 en un mismo pin, y esta sentencia pide la temperatura a todos los sensores, aunque en este caso solo tenemos uno.

Ahora tenemos que leer la respuesta, que lo hacemos con la siguiente sentencia:

temperatura = ds18b20.getTempCbyIndex(0);

Vaya sentencia… vamos a analizarla por partes. Primero estamos diciendo que el resultado lo vamos a guardar en la variable temperatura que hemos creado antes. Respecto a la función que hace esto, analicemos por separado cada una de las palabras que componen su nombre [get][Temp][C][byIndex], que traducido al español es algo como [obtener][temperatura][en grados centígrados][del sensor índice…] y, a continuación, tenemos el argumento 0 entre paréntesis, lo que quiere decir que obtenemos la temperatura del sensor 0, el primero y único que hay.

Esta es la forma más básica de obtener la temperatura con un DS18B20.

Por último, queremos mostrarlo por el monitor serie, así que nos falta la sentencia:

Serial.println(temperatura);

Si quieres, puedes añadir un delay() al final para que la salida del monitor serie sea más legible:

delay(500);

Sketch completo

Deja un comentario