El sensor DS18B20 ha ganado popularidad gracias a su fiabilidad y versatilidad para la medición de temperatura. Es muy utilizado en proyectos de electrónica con microcontroladores como Arduino, PIC o ESP8266 debido a su simplicidad de uso y su capacidad de conectar múltiples sensores en el mismo bus, lo que lo convierte en una opción ideal tanto para amateurs como profesionales.
Uno de los principales atractivos de este sensor es que utiliza solo un cable para la comunicación de datos mediante el protocolo 1-Wire, lo cual facilita su integración en una amplia variedad de proyectos. Además, el DS18B20 puede funcionar en hasta dos modos de alimentación diferentes, lo que lo hace aún más flexible. A lo largo de este artículo, te explicaremos en profundidad cómo funciona, cómo puedes conectar varios sensores y cómo optimizar tus mediciones de temperatura.
Características del DS18B20
El DS18B20 es fabricado por Maxim Integrated, entre otras, y se presenta en varios encapsulados, siendo el formato TO-92 (similar al de muchos transistores) uno de los más comunes. Además, también se puede encontrar en versiones selladas y resistentes al agua, lo que lo hace ideal para medir temperaturas en entornos difíciles o húmedos.
Entre las características más destacadas del DS18B20 se encuentran:
- El rango de temperatura que puede medir abarca desde los -55°C hasta los 125°C, lo que lo hace adecuado para aplicaciones industriales y domésticas.
- Su resolución programable puede variar entre 9 y 12 bits, lo que permite un ajuste preciso en función de las necesidades de cada proyecto.
- Cada sensor tiene una dirección única de 64 bits, facilitando la identificación de múltiples sensores conectados en un mismo bus.
Modos de alimentación del DS18B20
El sensor puede operar en dos modos de alimentación, lo que proporciona flexibilidad a la hora de integrarlo en diferentes proyectos, cada uno con sus ventajas.
Alimentación a través del pin de datos (Parasite Power)
Este modo es ideal cuando el espacio es limitado o cuando se necesitan conexiones a largas distancias. El DS18B20 obtiene la energía directamente del pin de datos cuando este se encuentra en alto y almacena la energía en un pequeño condensador para cuando la línea de datos esté en bajo. A este tipo de alimentación se le llama Parasite Power.
Sin embargo, es importante tener en cuenta que para que funcione correctamente, es necesario conectar los pines GND y VDD a tierra. Además, es recomendable incluir un transistor MOSFET que ayude en situaciones donde las conversiones de temperatura necesitan más corriente.
Alimentación usando una fuente externa
La forma más común y recomendada de alimentar el DS18B20 es a través de una fuente externa conectada al pin VDD. Este método garantiza un voltaje estable e independiente del tráfico de datos en el bus 1-Wire, lo que es ventajoso para proyectos que requieren precisión constante.
Cómo usar el DS18B20 con Arduino
Para trabajar con este sensor en la plataforma Arduino, es necesario usar dos librerías fundamentales: OneWire y DallasTemperature. Estas librerías facilitan la comunicación y permiten realizar lecturas y configuraciones de manera sencilla.
Librería OneWire: Permite la comunicación mediante el protocolo 1-Wire. Se puede descargar desde el repositorio de GitHub.
Librería DallasTemperature: Contiene las funciones necesarias para leer la temperatura y configurar el sensor. Descárgala desde este enlace.
Una vez que hayas instalado ambas librerías, podrás empezar a trabajar con el sensor sin complicaciones. A continuación, te explicamos algunos ejemplos de cómo leer la temperatura y cómo trabajar con múltiples sensores.
Ejemplo 1: Lectura de temperatura con un solo sensor
Para realizar una lectura de temperatura con un solo DS18B20 conectado a un Arduino, el circuito básico incluye simplemente la conexión del pin de datos del sensor al pin digital 2 del Arduino, junto con una resistencia Pull-Up de 4.7kΩ.
Este es el código básico para leer la temperatura del sensor:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); Serial.print("Temperatura= "); Serial.print(tempC); Serial.println(" °C"); delay(1000); }
El código es bastante simple. Solo se requieren un par de líneas en el bucle principal para solicitar la temperatura y leerla, lo que hace que sea muy fácil de implementar y personalizar para diferentes usos.
Ejemplo 2: Usando múltiples sensores en diferentes pines
Al trabajar con más de un DS18B20, existen dos maneras de conectar los sensores. La primera es asignando un pin digital diferente de Arduino a cada sensor. En este caso, se necesitará una resistencia Pull-Up de 4.7kΩ por cada sensor.
Aquí te mostramos un ejemplo de cómo trabajar con dos sensores conectados en diferentes pines:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds1(2); OneWire ds2(3); DallasTemperature sensors1(&ds1); DallasTemperature sensors2(&ds2); void setup() { Serial.begin(9600); sensors1.begin(); sensors2.begin(); } void loop() { sensors1.requestTemperatures(); float temp1 = sensors1.getTempCByIndex(0); sensors2.requestTemperatures(); float temp2 = sensors2.getTempCByIndex(0); Serial.print("Temperatura 1 = "); Serial.print(temp1); Serial.print(" °C Temperatura 2 = "); Serial.println(temp2); delay(1000); }
Ejemplo 3: Múltiples sensores conectados a un solo pin
La otra posibilidad de conectar varios DS18B20 en un proyecto es hacerlo usando un único pin y el mismo bus 1-Wire para todos. En este caso, cada sensor debe tener su número de identificación único, que se asigna de fábrica. Aquí te explicamos cómo obtener esas direcciones utilizando el siguiente código:
#include <OneWire.h> OneWire ds(2); void setup(void) { Serial.begin(9600); } void loop(void) { byte address[8]; if (!ds.search(address)) { Serial.println("No more addresses."); ds.reset_search(); delay(250); return; } Serial.print("Address: "); for (int i = 0; i < 8; i++) { Serial.print(address[i], HEX); if (i < 7) Serial.print(", "); } Serial.println(); delay(250); }
Una vez que tienes las direcciones de todos los sensores, puedes realizar la lectura del sensor específico utilizando su dirección única. El siguiente código te muestra cómo hacerlo:
#include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); DeviceAddress sensor1 = {0x28, 0xFF, 0xCA, 0x4A, 0x5, 0x16, 0x3, 0xBD}; DeviceAddress sensor2 = {0x28, 0xFF, 0x89, 0x3A, 0x1, 0x16, 0x4, 0xAF}; void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temp1 = sensors.getTempC(sensor1); float temp2 = sensors.getTempC(sensor2); Serial.print("Temp sensor 1: "); Serial.println(temp1); Serial.print("Temp sensor 2: "); Serial.println(temp2); delay(1000); }
Las ventajas de este método son que ahorras pines en el Arduino y puedes conectar muchos sensores en paralelo al mismo bus de datos.
Con estos ejemplos, puedes ver la versatilidad y potencia del sensor DS18B20. Es muy fácil de implementar, y si necesitas conectar múltiples sensores, tienes flexibilidad total para hacerlo de diferentes maneras. El DS18B20 es uno de los sensores más confiables para medir temperatura, y gracias a su bajo consumo de energía y su fácil programación, es perfecto para todo tipo de proyectos.
El sensor DS18B20 no solo es fácil de usar con Arduino, sino que también se puede emplear en una amplia gama de aplicaciones industriales y residenciales como el monitoreo de temperatura en sistemas de aire acondicionado, maquinaria o incluso invernaderos.