DS18B20: un sensor de temperatura para líquidos

DS18B20

Hay varios sensores de humedad y temperatura disponibles, como el LM35. Algunos integrados en módulos para su uso específico con Arduino. Pero por lo general, son para medir temperatura en seco, es decir, temperatura del aire. Pero existe un modelo concreto que funciona para medir temperatura en líquidos y se llama DS18B20. Una peculiaridad que quizás te venga bien para algunos de tus proyectos de DIY más exóticos donde juegues también con algún tipo de líquido del que necesitas conocer este parámetro.

Realmente el DS18B20 no mide solo temperatura dentro de líquidos, sino que puede ser muy útil para medir temperatura en ambientes húmedos y también bajo algún líquido. Así que también lo podrás usar para medir la temperatura de aire si el entorno está bastante cargado de humedad. Y como digo, la característica de poderlo sumergir en un líquido para que mida su temperatura es una de las características que lo hacen increíblemente práctico.

¿Qué es el DS18B20?

Bueno, creo que ya ha quedado bastante claro, es un sensor electrónico capaz de medir la temperatura de medios gaseosos o líquidos. Además, existen diferentes encapsulados o empaquetados del DS18B20, como por ejemplo el básico que ves en la imagen principal, o también puede venir integrado en algunos PCBs, sondas sumergibles, etc. Para tu proyecto deberías elegir el formato más adecuado según lo que quieras.

Por ejemplo, aparte de los típicos TO-92, existe también el microSOP. Posiblemente para integrar con Arduino el más apropiado sea el TO-92, ya que con sus tres pines es muy sencillo de insertar en el protoboard para su conexión.

Pinout

Pines del ds18b20

El pinout del DS18B20 es sencillo de identificar. Por ejemplo, tomando como referencia el encapsulado TO-92 de Dallas, que es uno de los más populares, podrás ver que tiene tres pines o patillas. Si lo pones de frente, es decir, con la sección redondeada hacia atrás y mirando la cara plana donde aparecen las inscripciones, el pin que tienes a tu izquierda es el 1 y el de tu derecha el 3. Por tanto, el 1 sería para GND o tierra, el 2 es el de datos y el 3 el de voltaje de alimentación.

Aquí tenemos que decir que, los valores que debes conocer:

  • Pin 1: debes conectarlo al pin GND de Arduino, es decir, a 0v.
  • Pin 2: este pin es DQ o de datos, el que enviará las temperaturas medidas por el sensor a Arduino a través de un protocolo particular conocido como 1-Wire y que necesitará de unas funciones y biblioteca especial para Arduino IDE. Eso permitirá usar solo un pin de Arduino para conectar varios sensores con este protocolo…
  • Pin 3: puede alimentarse de 3 a 5,5v, así que puedes conectarlo a la salida de 5v de Arduino.

Características técnicas del DS18B20 y datasheet

Como siempre, es interesante conocer las características técnicas del sensor para saber cómo funciona, para no dañarlo, y sobre todo para que sepamos dónde están sus límites de medición, ya que si los valores que queremos medir no se encuentran entre ellos no nos servirá y deberías buscar otra alternativa.

Para ello, lo mejor es que descargues un datasheet del fabricante, como el de Dallas que puedes ver aquí. Allí encontrarás toda la información necesaria. Y recuerda que aunque todos los DS18B20 puedan ser similares, según el fabricante o encapsulado podrías encontrar algunos cambios…

Pero independientemente de las peculiaridades, aquí tienes algunos datos técnicos básicos:

  • Rango de temperatura: -55 a 125ºC, por tanto, puede medir en gas o líquido a temperaturas muy bajas y también elevadas.
  • Errores: el DS18B20 es sensible a ruido externo o alteraciones que pueden dar valores erróneos en las mediciones. El margen de error es de más menos 2ºC, aunque a temperaturas entre -10ºC y 85ºC, es decir, cuando no estamos cerca de los límites, podría ser de solo medio grado.
  • Resolución: puedes trabajar con varias resoluciones o variaciones mínimas que puedas detectar con los pines analógicos de Arduino. Admite 9-bit, 10-bit, 11-bit y 12-bit (por defecto). Es decir, puede medir de medio en medio grado, de un cuarto en un cuarto de grado, de 0,125 en 0,125ºC, o de 0,0625ºC respectivamente. Puedes alterar esta programación a través del código de programación.
  • Voltaje de alimentación: 3 a 5,5v
  • Precio: 1 a 3€

Integración con Arduino

esquema de conexión Arduino - ds18b20

Aunque hay varias formas de conectarlo, la más adecuada es la que ves en este esquema. Es bastante simple, con el pin GND en la conexión correspondiente de la placa Arduino, el de alimentación igual y luego el de datos al analógico de Arduino que hayas elegido en tu código de programación en Arduino IDE. Pero también es bueno configurar una resistencia pull-up de 4,7k (si la distancia del cable de la sonda del sensor es mayor, la resistencia debe ser más baja, por ejemplo, para 5m de 3,3k, para 10 de 2,2k,…) para el pin de datos y así mantenerlo siempre en alto.

Para la programación en Arduino IDE y su buena integración con el DS18B20 y ese protocolo tan particular, es recomendable que bajes las bibliotecas Dallas Temperature y OneWire desde el entorno. Y el código base, podría ser algo así como este ejemplo que muestro:


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

// Pin donde se conecta el bus 1-Wire (DQ)
const int pinDatosDQ = 9;

// Instancia a las clases OneWire y DallasTemperature
OneWire oneWireObjeto(pinDatosDQ);
DallasTemperature sensorDS18B20(&oneWireObjeto);
 
void setup() {
    // Iniciamos la comunicación serie a 9600 baudios
    Serial.begin(9600);
    // Iniciamos el bus 1-Wire del sensor
    sensorDS18B20.begin(); 
}
 
void loop() {
    // Indicamos que tome la temperatura
    Serial.println("Midiendo temperatura");
    sensorDS18B20.requestTemperatures();
 
    // Lee y muestra la temperatura (recuerda que puedes conectar más de uno con 1-wire)
    Serial.print("La temperatura del sensor 0 es de: ");
    Serial.print(sensorDS18B20.getTempCByIndex(0));
    Serial.println(" C");
    Serial.print("La temperatura del sensor x es de: ");
    Serial.print(sensorDS18B20.getTempCByIndex(1));
    Serial.println(" ºC");
    
    delay(1000); 
}

Más inforamción – Manual de programación de Arduino (PDF gratis)


Sé el primero en comentar

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.