¡Hola DS18B20! (Previsualizar)

DS18B20 conexión a Arduino-Genuino

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
    Sensor de temperatura digital sumergible DS18B20
    Añadir al carrito
    Vista rápida
    6,30  (5,21  excl. IVA)
    En tienda
  • Sensor digital de temperatura Dallas DS18B20 y pull-up
    Sensor digital de temperatura Dallas DS18B20 y pull-up
    Añadir al carrito
    Vista rápida
    3,50  (2,89  excl. IVA)
    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.

TO-92-DS18B20

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/Genuino. 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 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?

DS18B20 conexión a Arduino-Genuino

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.

Arduino IDE > 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.

Instalar Librería DallasTemperature en Arduino IDE

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

Instalar Librería OneWire en Arduino IDE

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, en lecciones posteriores veremos las otras muchas opciones que este sensor nos da para hacerlo.

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

Serial.println(temperatura);

Y, por qué no, vamos añadir un delay() al final para que la salida del monitor serie sea legible:

delay(500);

 

Sketch completo

Demuestra qué has aprendido

Modifica el sketch para hacer otras cosas, por ejemplo, haz que el monitor serie muestre un mensaje tipo “Temperatura: 25,0 ºC” y no solo el valor. Si sabes utilizar algún tipo de pantalla, utilízala para que muestre la temperatura por ella.

 

¿Tienes alguna duda? ¡Busca ayuda en el foro!

 

 

Volver a: Controla la temperatura con Arduino y el sensor DS18B20

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

717 717 452 (Teléfono y Whatsapp) / hola@fabricadigital.org

De Lunes a Jueves de 09:00 a 18:00. Viernes de 09:00 a 14:00.

Calle del Comercio, 18, 11407 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