Skip to Content

La guía completa para sensores de temperatura digital DS18B20 con Arduino

La guía completa para sensores de temperatura digital DS18B20 con Arduino

Este tutorial incluye todo lo que necesitas saber sobre el uso de DS18B20 sensores de temperatura digitales 1-Wire con Arduino.

Para este tutorial, usaremos la librería DallasTemperature junto con la librería OneWire de Arduino. Estas librerías facilitan mucho la comunicación con uno o varios sensores. En la primera parte de este artículo, encontrarás las especificaciones e información sobre los diferentes tipos de sensores DS18B20. Luego, veremos cómo conectar el sensor al Arduino.

En el primer ejemplo de código, te mostraré cómo tomar lecturas de temperatura de un solo sensor y mostrar el resultado en el Monitor Serial. Los ejemplos siguientes explican cómo leer múltiples sensores con un solo pin del Arduino. Por último, te mostraré cómo mostrar la temperatura en un I2C LCD.

Materiales

Componentes de hardware

DS18B20 digital temperature sensor (TO-92) × 3 Amazon
Waterproof DS18B20 (alternativa) × 1 Amazon
DS18B20 breakout board (alternativa) × 1 Amazon
Arduino Uno × 1 Amazon
Breadboard × 1 Amazon
Jumper wires ~ 15 Amazon
4.7 kΩ pull-up resistor × 1 Amazon
16×2 character I2C LCD × 1 Amazon
USB cable type A/B × 1 Amazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Acerca del sensor de temperatura 1-Wire DS18B20

El DS18B20 es un sensor de temperatura digital fabricado por Maxim Integrated (antes Dallas Semiconductor). Es uno de los sensores de temperatura más populares del mercado y ofrece una precisión bastante alta (±0,5 °C) en un amplio rango de temperaturas (-55 °C a +125 °C). Debido a que el voltaje de operación del sensor es de 3.0 a 5.5 V, puedes usarlo tanto con Arduino (que funciona a 5 V) como con dispositivos como ESP32 y Raspberry Pi que tienen pines GPIO de 3.3 V.

Una de las principales ventajas de este sensor es que solo requiere un pin digital del Arduino para comunicarse. El sensor utiliza el protocolo Dallas Semiconductor 1-Wire. Este protocolo funciona de manera similar al I2C, pero con velocidades de datos más bajas y mayor alcance.

Otra ventaja es que cada sensor DS18B20 tiene un código serial único de 64 bits, lo que permite que múltiples sensores funcionen en el mismo bus 1-Wire. Así, puedes leer datos de varios sensores conectados juntos usando solo un pin del Arduino (ver ejemplos de código más abajo).

La resolución del sensor puede configurarse programáticamente a 9, 10, 11 o 12 bits. Esto corresponde a incrementos de temperatura de 0,5 °C, 0,25 °C, 0,125 °C y 0,0635 °C, respectivamente. La resolución por defecto al encender es de 12 bits.

Puedes encontrar más especificaciones en la tabla a continuación.

Especificaciones del sensor de temperatura digital DS18B20

Voltaje de alimentación 3.0 a 5.5 V
Corriente en espera 1 μA
Corriente activa 1.5 mA
Rango de medición -55 °C a +125 °C (-67 °F a +257 °F)
Precisión
(Error del termómetro)
±0.5 °C de -10 °C a +85 °C
±1 °C de -30 °C a +100 °C
±2 °C de -55 °C a +125 °C
Resolución De 9 a 12 bits (programable)
Tiempo de conversión < 750 ms (resolución de 12 bits)
Protocolo de comunicación Protocolo de bus 1-Wire®
Encapsulado TO-92 de 3 pines
Fabricante Maxim Integrated
Costo Check price

Para más información, también puedes consultar la hoja de datos aquí:

Tipos de sensores DS18B20

El sensor suele venir en tres formatos. El tipo más común es el 3-pin TO-92 encapsulado, que se parece a un transistor.

DS18B20 as TO-92 package
DS18B20 en encapsulado TO-92 (source)

Este tipo de sensor a veces se monta en una breakout board que puede incluir un LED de alimentación y la resistencia pull-up de 4.7 kΩ necesaria. Siempre asegúrate de revisar las marcas en la PCB, ya que el orden de los pines puede variar según el fabricante.

DS18B20 Breakout board
Placa breakout DS18B20 (source)

Por último, puedes comprar el sensor en formato sonda impermeable con un cable ya conectado. Este formato es útil si quieres medir algo a distancia, bajo el agua o bajo tierra.

DS18B20 as waterproof probe
DS18B20 en sonda impermeable (source)

Ten en cuenta que el cable del sensor impermeable suele estar recubierto de PVC, por lo que se recomienda mantenerlo por debajo de 100 °C.

Cableado – Conectar el DS18B20 a un Arduino

Conectar un DS18B20 al Arduino es bastante sencillo, ya que solo necesitas conectar 3 pines. Comienza conectando el pin GND a tierra y el pin V DD al pin de 5 V del Arduino.

Luego, conecta el pin central (DQ) a cualquiera de los pines digitales del Arduino. En este caso, usé el pin digital 2. También debes añadir una resistencia pull-up de 4.7 kΩ entre el pin DQ y 5 V. Esto mantendrá el estado inactivo del bus 1-Wire en alto.

DS18B20-digital-temperature-sensor-with-Arduino-connections-wiring-diagram-schematic-circuit-tutorial
Diagrama de conexión del sensor de temperatura digital DS18B20 con Arduino Uno

Las conexiones también se muestran en la tabla a continuación.

DS18B20-digital-temperature-sensor-pinout
Asignación de pines del DS18B20

Ten en cuenta que el pin 1 (GND) es el pin más a la izquierda cuando el lado plano del sensor (con el texto impreso) está frente a ti.

Conexiones del sensor de temperatura digital DS18B20

DS18B20 Arduino
Pin 1 (GND) GND
Pin 2 (DQ) Pin 2 Arduino y a través de una resistencia de 4.7 kΩ a 5V
PIN 3 (V DD ) 5V

Un sensor DS18B20 impermeable se conecta de la misma manera. Sin embargo, el color de los cables puede variar según el fabricante. El cable de tierra (GND) suele ser negro o azul, el cable de alimentación (VDD) generalmente es rojo, y el cable de señal (DQ) suele ser amarillo o blanco. Te recomiendo siempre revisar la hoja de datos de tu sensor si tienes dudas.

Conexiones del sensor de temperatura digital DS18B20 impermeable

DS18B20 impermeable Arduino
Cable negro (GND) GND
Cable amarillo (DQ) Pin 2 Arduino y a través de una resistencia de 4.7 kΩ a 5V
Cable rojo (V DD ) 5V

Instalación de las librerías DallasTemperature y OneWire para Arduino

El protocolo de comunicación 1-Wire es algo complejo y requiere bastante código para manejar la comunicación. Por eso, usaremos la librería Arduino-Temperature-Control-Library de Miles Burton para facilitar la programación de estos sensores.

Para instalar la librería, ve a Tools > Manage Libraries (Ctrl + Shift + I en Windows) en el Arduino IDE. Se abrirá el Library Manager y actualizará la lista de librerías instaladas.

Installing an Arduino library step 1 open Library Manager
Library Manager

Puedes buscar ‘ds18b20’ y buscar la librería DallasTemperature de Miles Burton. Selecciona la versión más reciente y haz clic en Install.

DallasTemperature library in Library Manager
DallasTemperature librería en Library Manager

La librería DallasTemperature depende de la OneWire Arduino library que también debes instalar. Esta librería se encarga del protocolo de comunicación 1-Wire.

Busca ‘onewire’ y selecciona la librería OneWire de Jim Studt.

OneWire library in Library Manager
OneWire librería en Library Manager

Ejemplo de código para sensor de temperatura DS18B20 con Arduino

Con el siguiente código de ejemplo, puedes leer la temperatura de un sensor DS18B20 y mostrarla en el Monitor Serial.

/* DS18B20 1-Wire digital temperature sensor with Arduino example code. 
   https://www.makerguides.com */

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"

// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);

// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();
}

void loop() {
  // Send the command for all devices on the bus to perform a temperature conversion:
  sensors.requestTemperatures();

  // Fetch the temperature in degrees Celsius for device index:
  float tempC = sensors.getTempCByIndex(0); // the index 0 refers to the first device
  // Fetch the temperature in degrees Fahrenheit for device index:
  float tempF = sensors.getTempFByIndex(0);

  // Print the temperature in Celsius in the Serial Monitor:
  Serial.print("Temperature: ");
  Serial.print(tempC);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.print("C  |  ");

  // Print the temperature in Fahrenheit
  Serial.print(tempF);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("F");

  // Wait 1 second:
  delay(1000);
}

Deberías ver la siguiente salida en el Monitor Serial (Ctrl + Shift + M).

Serial Monitor output
Salida del Monitor Serial

Asegúrate de que la velocidad en baudios del Monitor Serial también esté configurada a 9600.

Cómo funciona el código

El primer paso es incluir las librerías de Arduino necesarias:

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"

Luego, definí a qué pin del Arduino está conectado el pin DQ del sensor. La instrucción #define se usa para dar un nombre a un valor constante. El compilador reemplazará todas las referencias a esta constante con el valor definido cuando se compile el programa. Así que donde menciones ONE_WIRE_BUS, el compilador lo reemplazará por el valor 2 al compilar el programa.

// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

Después, creé un nuevo objeto de la clase OneWire y pasé el pin DQ a su constructor. También necesitas crear un objeto de la clase DallasTemperature y pasarle el objeto oneWire como parámetro.

Ten en cuenta que llamé al objeto DallasTemperature ‘sensors’, pero puedes usar otros nombres también.

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

En la sección setup del código, iniciamos la comunicación serial a 9600 baudios. Luego, inicialicé el bus con la función begin().

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();
}

En la sección loop del código, comenzamos con el comando para que todos los sensores en el bus inicien una conversión de temperatura.

  // Send the command for all devices on the bus to perform a temperature conversion:
  sensors.requestTemperatures();

Luego, usé las funciones getTempCByIndex(deviceIndex) y getTempFByIndex(deviceIndex) para obtener la temperatura en grados Celsius y Fahrenheit respectivamente. En este caso, solo tenemos 1 sensor conectado al bus. Como la cuenta empieza en cero, establecí el índice para nuestro sensor en 0.

  // Fetch the temperature in degrees Celsius for device index:
  float tempC = sensors.getTempCByIndex(0); // the index 0 refers to the first device
  // Fetch the temperature in degrees Fahrenheit for device index:
  float tempF = sensors.getTempFByIndex(0);

Por último, las temperaturas se imprimen en el Monitor Serial:

  // Print the temperature in Celsius in the Serial Monitor:
  Serial.print("Temperature: ");
  Serial.print(tempC);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.print("C  |  ");
  // Print the temperature in Fahrenheit
  Serial.print(tempF);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("F");

Como la conversión de temperatura en modo de 12 bits puede tardar hasta 750 ms, añadí un retardo de un segundo entre cada medición.

Uso de múltiples sensores DS18B20 con Arduino

Como mencioné en la introducción, puedes leer la temperatura de varios sensores DS18B20 con solo un pin del Arduino. A continuación, encontrarás dos ejemplos de código. Con el primer ejemplo, puedes leer la temperatura de los sensores conectados por su índice. Como todos los sensores están conectados al mismo bus 1-Wire, el primer sensor tiene índice 0, el segundo índice 1, y así sucesivamente.

En el segundo ejemplo, te mostraré cómo leer la dirección única de 64 bits de cada sensor. Esta dirección puede usarse para leer cada sensor individualmente.

Cableado – Conectar múltiples sensores DS18B20 al Arduino

Conectar múltiples sensores DS18B20 al Arduino es tan sencillo como conectar uno solo. Todos los sensores se conectan en paralelo, es decir, todos los mismos pines están conectados juntos. Igual que antes, los pines GND se conectan a tierra, los pines V DD a 5 V, y los pines DQ al pin 2 del Arduino. No olvides la resistencia pull-up de 4.7 kΩ entre el pin DQ y 5 V.

Multiple DS18B20 1-Wire digital temperature sensors connected to an Arduino
Múltiples sensores digitales de temperatura DS18B20 1-Wire conectados a un Arduino

Ejemplo de código para múltiples sensores DS18B20 con Arduino

Con el siguiente ejemplo, puedes leer la temperatura de cada sensor por su índice y mostrarla en el Monitor Serial.

/* Multiple DS18B20 1-Wire digital temperature sensors with Arduino example code. M
   https://www.makerguides.com */

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"


// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);

// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);

int deviceCount = 0;
float tempC;
float tempF;

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();

  // Locate the devices on the bus:
  Serial.println("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices");
}

void loop() {
  // Send the command for all devices on the bus to perform a temperature conversion:
  sensors.requestTemperatures();

  // Display temperature from each sensor
  for (int i = 0;  i < deviceCount;  i++) {
    Serial.print("Sensor ");
    Serial.print(i + 1);
    Serial.print(" : ");
    tempC = sensors.getTempCByIndex(i);
    tempF = sensors.getTempFByIndex(i);
    Serial.print(tempC);
    Serial.print(" \xC2\xB0"); // shows degree symbol
    Serial.print("C  |  ");
    Serial.print(tempF);
    Serial.print(" \xC2\xB0"); // shows degree symbol
    Serial.println("F");
  }

  Serial.println();
  delay(1000);
}

La salida en el Monitor Serial debería verse así:

Multiple-DS18B20-temperature-sensors-Serial-Monitor-output
Salida del Monitor Serial para múltiples sensores DS18B20

Cómo funciona el código

El código en este ejemplo es casi igual que antes.

En la sección setup, añadí una función extra que cuenta el número de dispositivos conectados al bus 1-Wire.

  // Locate the devices on the bus:
  Serial.println("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices");

En la sección loop del código, usé un for loop para recorrer un bloque de código que obtiene la temperatura de cada sensor conectado al bus por su índice.

  // Display temperature from each sensor
  for (int i = 0;  i < deviceCount;  i++) {
    Serial.print("Sensor ");
    Serial.print(i + 1);
    Serial.print(" : ");
    tempC = sensors.getTempCByIndex(i);
    tempF = sensors.getTempFByIndex(i);
    Serial.print(tempC);
    Serial.print(" \xC2\xB0"); // shows degree symbol
    Serial.print("C  |  ");
    Serial.print(tempF);
    Serial.print(" \xC2\xB0"); // shows degree symbol
    Serial.println("F");
  }

Leer sensores por dirección

Para leer los sensores por su dirección individual, primero necesitamos saber cuál es la dirección de cada sensor. Para esto, puedes usar el sketch de ejemplo a continuación.

El sketch imprime las direcciones de los sensores conectados en el Monitor Serial. Para saber cuál sensor es cuál, puedes conectar un sensor a la vez o ir añadiendo sensores sucesivamente. Luego, puedes etiquetar cada sensor conectado al bus 1-Wire.

Buscador de direcciones DS18B20

/* Multiple DS18B20 1-Wire digital temperature sensors with Arduino example code. More info: https://www.makerguides.com */

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"

// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);

// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);

// Create variables:
int deviceCount = 0; // variable to store the number of devices connected
DeviceAddress deviceAddress; // variable to store the device address

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();

  // Locate the devices on the bus:
  Serial.println("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices");

  Serial.println("Printing addresses...");
  for (int i = 0;  i < deviceCount;  i++) {
    Serial.print("Sensor ");
    Serial.print(i + 1);
    Serial.print(" : ");
    sensors.getAddress(deviceAddress, i);
    printAddress(deviceAddress);
  }
}

void loop() {
}

void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++) {
    Serial.print("0x");
    if (deviceAddress[i] < 0x10) {
      Serial.print("0");
    }
    Serial.print(deviceAddress[i], HEX);
    if (i < 7) {
      Serial.print(", ");
    }
  }
  Serial.println();
}

La salida en el Monitor Serial debería verse algo así:

Serial Monitor Output
Salida del Monitor Serial

Ahora anota las direcciones de todos los sensores, porque las necesitarás en el siguiente ejemplo.

Ejemplo de código Arduino para leer sensores por dirección

Con el siguiente ejemplo, puedes leer la temperatura de cada sensor especificando su dirección única.

/* Read multiple DS18B20 1-Wire digital temperature sensors by address. 
   More info: https://www.makerguides.com */

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"

// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);

// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);

// Addresses of DS18B20 sensors connected to the 1-Wire bus
byte sensor1[8] = {0x28, 0x18, 0xB4, 0x49, 0x0C, 0x00, 0x00, 0x7C};
byte sensor2[8] = {0x28, 0xCC, 0x19, 0x49, 0x0C, 0x00, 0x00, 0xBB};
byte sensor3[8] = {0x28, 0x19, 0xEF, 0x48, 0x0C, 0x00, 0x00, 0x21};

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();
}

void loop() {
  // Send the command for all devices on the bus to perform a temperature conversion:
  sensors.requestTemperatures();

  Serial.print("Sensor 1: ");
  printTemperature(sensor1); // call the printTemperature function with the address of sensor1 as input
  Serial.print("Sensor 2: ");
  printTemperature(sensor2);
  Serial.print("Sensor 3: ");
  printTemperature(sensor3);

  Serial.println(); // prints an empty line
  delay(1000);
}

void printTemperature(DeviceAddress address) {
  // Fetch the temperature in degrees Celsius for device address:
  float tempC = sensors.getTempC(address);
  // Fetch the temperature in degrees Fahrenheit for device address:
  float tempF = sensors.getTempF(address);
  Serial.print(tempC);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.print("C  |  ");

  // Print the temperature in Fahrenheit
  Serial.print(tempF);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("F");
}

Ten en cuenta que debes reemplazar las direcciones en las líneas 17 a 19 con las direcciones que encontraste usando el código de ejemplo anterior.

// Addresses of DS18B20 sensors connected to the 1-Wire bus
byte sensor1[8] = {0x28, 0x18, 0xB4, 0x49, 0x0C, 0x00, 0x00, 0x7C};
byte sensor2[8] = {0x28, 0xCC, 0x19, 0x49, 0x0C, 0x00, 0x00, 0xBB};
byte sensor3[8] = {0x28, 0x19, 0xEF, 0x48, 0x0C, 0x00, 0x00, 0x21};

Deberías ver la siguiente salida en el Monitor Serial.

Serial Monitor Output
Salida del Monitor Serial

Explicación del código

La dirección de cada sensor consta de 64 bits. En el código, especificamos la dirección como un arreglo de ocho bytes de 8 bits.

// Addresses of DS18B20 sensors connected to the 1-Wire bus
byte sensor1[8] = {0x28, 0x18, 0xB4, 0x49, 0x0C, 0x00, 0x00, 0x7C};
byte sensor2[8] = {0x28, 0xCC, 0x19, 0x49, 0x0C, 0x00, 0x00, 0xBB};
byte sensor3[8] = {0x28, 0x19, 0xEF, 0x48, 0x0C, 0x00, 0x00, 0x21};

La sección setup del código es igual que en los ejemplos anteriores.

En el loop, llamamos a la función printTemperature(DeviceAddress address). En esta función personalizada, usamos getTempC(address) y getTempF(address) para obtener la temperatura de un sensor cuya dirección se pasa como parámetro.

void printTemperature(DeviceAddress address) {
  // Fetch the temperature in degrees Celsius for device address:
  float tempC = sensors.getTempC(address);
  // Fetch the temperature in degrees Fahrenheit for device address:
  float tempF = sensors.getTempF(tempC);
  Serial.print(tempC);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.print("C  |  ");

  // Print the temperature in Fahrenheit
  Serial.print(tempF);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("F");
}

Otras funciones de la librería DallasTemperature para Arduino

La librería DallasTemperature tiene otras funciones útiles integradas que aún no he cubierto en los ejemplos anteriores. Por eso, he listado algunas a continuación:

setResolution()

Esta función se usa para configurar la resolución de la conversión de temperatura a digital. Como mencioné en la introducción, puede configurarse a 9, 10, 11 o 12 bits, correspondientes a incrementos de 0,5 °C, 0,25 °C, 0,125 °C y 0,0625 °C, respectivamente.

Quizás te preguntes por qué querrías cambiar la resolución, ¿no es mejor siempre la más alta? Una ventaja de seleccionar una resolución menor es que la conversión de temperatura a digital toma mucho menos tiempo. Esto significa que puedes tomar más lecturas de temperatura en el mismo tiempo.

Según la hoja de datos, obtuve la siguiente información:

Resolución Incremento de temperatura Tiempo máximo de conversión
9 bits 0.5 °C 93.75 ms
10 bits 0.25 °C 187.5 ms
11 bits 0.125 °C 375 ms
12 bits 0.0625 °C 750 ms

La librería DallasTemperature te permite configurar la resolución con la función setResolution(). Esta función puede añadirse en la sección setup o loop de tu código.

Puedes configurar la resolución para todos los sensores conectados así:

// Set the resolution for all devices to 9, 10, 11, or 12 bits:
sensors.setResolution(9);

O puedes configurarla individualmente para un sensor específico especificando su dirección:

// Addresses of DS18B20 sensors connected to the 1-Wire bus
byte sensor1[8] = {0x28, 0x18, 0xB4, 0x49, 0x0C, 0x00, 0x00, 0x7C};

// Set the resolution of a specific device to 9, 10, 11, or 12 bits:
sensors.setResolution(sensor1, 9);

toFahrenheit()

Esta función se usa para convertir la temperatura de grados Celsius a Fahrenheit.

float tempC = sensors.getTempCbyIndex(0);
float tempF = DallasTemperature::toFahrenheit(tempC);

setHighAlarmTemp() y setLowAlarmTemp()

Estas funciones configuran las alarmas internas de temperatura alta y baja para un dispositivo en grados Celsius.

bool hasAlarm()

Esta función devuelve true cuando un dispositivo tiene una condición de alarma. Consulta el sketch AlarmHandler.ino para un ejemplo de cómo usar esta función.

Mostrar las lecturas de temperatura DS18B20 en un LCD I2C

Si quieres hacer un proyecto independiente que no necesite un ordenador, puede ser útil saber cómo mostrar las lecturas de temperatura en una pantalla LCD.

Con el código de ejemplo a continuación, puedes mostrar las lecturas de temperatura en un LCD I2C de 16×2 caracteres.

Conectar el LCD I2C es muy fácil, como puedes ver en el diagrama de cableado a continuación. Puedes consultar mi tutorial detallado para más información. How to control a character I2C LCD with Arduino. Si prefieres usar un LCD estándar sin I2C, echa un vistazo a este artículo: How to use a 16×2 character LCD with Arduino

DS18B20 with 16x2 character I2C LCD and Arduino
DS18B20 con LCD I2C de 16×2 caracteres y Arduino

Las conexiones también se muestran en la tabla a continuación:

Conexiones LCD I2C

LCD de caracteres I2C Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

Para usar un LCD I2C, necesitarás instalar la librería LiquidCrystal_I2C para Arduino.

Abre el gestor de librerías en el IDE de Arduino y busca ‘liquidcrystal_i2c’. Luego desplázate hacia abajo y busca la librería de Frank de Brabander. Selecciona la versión más reciente y haz clic en Install.

Installing the LiquidCrystal_I2C Arduino library
Instalación de la librería LiquidCrystal_I2C para Arduino

Ejemplo de código DS18B20 con LCD I2C

/* DS18B20 1-Wire digital temperature sensor with 16x2 I2C LCD and Arduino example code. 
  https://www.makerguides.com */

// Include the required Arduino libraries:
#include "OneWire.h"
#include "DallasTemperature.h"
#include "LiquidCrystal_I2C.h"

// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2

// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);

// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

void setup() {
  // Start up the library:
  sensors.begin();
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();
  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Send the command for all devices on the bus to perform a temperature conversion:
  sensors.requestTemperatures();

  // Fetch the temperature in degrees Celsius for device index:
  float tempC = sensors.getTempCByIndex(0); // the index 0 refers to the first device

  // Print the temperature on the LCD;
  lcd.setCursor(0,0);
  lcd.print("Temperature:");
  lcd.setCursor(0,1);
  lcd.print(tempC);
  lcd.write(0); // print the custom character
  lcd.print("C");

  // Wait 1 second:
  delay(1000);
}

Deberías ver la siguiente salida en el LCD:

DS18B20 LCD Display Output
Salida en pantalla LCD

Conclusión

En este tutorial, te he mostrado cómo usar sensores de temperatura digitales DS18B20 1-Wire con Arduino. Espero que te haya resultado útil e informativo.

Si quieres aprender más sobre otros sensores de temperatura, consulta los artículos a continuación.

Si tienes alguna pregunta, por favor deja un comentario abajo.