¡Bienvenidos al tutorial sobre cómo utilizar el sensor de temperatura DS18B20 con Arduino! En este artículo te explicaremos paso a paso cómo conectar y programar este versátil sensor para que puedas medir la temperatura con precisión en tus proyectos Arduino. Sigue leyendo para descubrir todas las instrucciones necesarias para sacar el máximo provecho de este sensor.
Esta guía muestra cómo utilizar el sensor de temperatura DS18B20 con la placa Arduino. Aprenderá cómo cablear el sensor, instalar las bibliotecas necesarias y determinar la temperatura de uno o más sensores DS18B20.
Quizás también quieras leer otras guías de DS18B20:
- Sensor de temperatura ESP32 DS18B20 con Arduino IDE
- Sensor de temperatura ESP8266 DS18B20 con Arduino IDE
- Sensor de temperatura ESP32/ESP8266 DS18B20 con MicroPython
- ESP32 con múltiples sensores de temperatura DS18B20
Presentamos el sensor de temperatura DS18B20
El Sensor de temperatura DS18B20 Es un sensor de temperatura digital de un solo cable. Esto significa que sólo se requiere una línea de datos (y GND) para comunicarse con Arduino.
La energía se puede suministrar a través de una fuente de alimentación externa o a través de la línea de datos (el llamado «modo parásito»), eliminando la necesidad de una fuente de alimentación externa.
La siguiente tabla muestra cómo debes conectar el sensor DS18B20 a tu placa Arduino:
DS18B20 | arduino |
Tierra | Tierra |
DQ | Cada pin digital (con resistencia pull-up de 4,7 kOhm) |
VDD | 5V (modo normal) o GND (modo parásito) |
Cada sensor de temperatura DS18B20 tiene un código de serie único de 64 bits. Esto le permite conectar varios sensores a la misma línea de datos. Esto significa que puedes determinar la temperatura de múltiples sensores con un solo pin Arduino digital.
El sensor de temperatura DS18B20 también está disponible en diseño impermeable.
A continuación se muestra un resumen de las especificaciones clave del sensor de temperatura DS18B20:
- Se comunica a través de comunicación de bus de un solo cable
- Rango de fuente de alimentación: 3,0 V a 5,5 V
- Rango de temperatura de funcionamiento: -55°C a +125°C
- Precisión +/-0,5ºC (rango -10ºC a 85ºC)
Se puede encontrar más información en el Hoja de datos DS18B20.
Piezas requeridas
Para mostrarle cómo funciona el sensor, crearemos un ejemplo simple que utiliza Arduino para leer la temperatura del sensor DS18B20 y mostrar los valores en el monitor serie Arduino.
Aquí hay una lista de las piezas que necesitará para completar este tutorial.
- Arduino UNO – leer Los mejores kits de inicio de Arduino
- Sensor de temperatura DS18B20 (uno o más sensores) – versión impermeable
- Resistencia de 4,7k ohmios
- tablero de circuitos
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Esquema
El sensor puede funcionar en dos modos:
- Modo normal: Se requiere una conexión de 3 cables. Proporcionan energía al pin VDD. Aquí está el diagrama del circuito que debe seguir:
- Modo parásito: Sólo necesitas datos y GND. El sensor obtiene su energía de la línea de datos. En este caso, es necesario seguir el siguiente esquema:
Con solo un pin digital Arduino, puedes leer la temperatura de más de un sensor al mismo tiempo. Todo lo que necesitas hacer es conectar todos los pines de datos del sensor a un pin digital Arduino.
Cargar código: único DS18B20
Para conectarse al sensor de temperatura DS18B20, debe Biblioteca One Wire de Paul Stoffregen y eso Biblioteca de temperatura de Dallas. Siga los siguientes pasos para instalar estas bibliotecas.
Instalar bibliotecas
1. Abra su IDE de Arduino y vaya a Bosquejo > incluir biblioteca > Administrar bibliotecas. El administrador de la biblioteca debería abrirse.
2. Ingrese «Un cable”en el campo de búsqueda e instale la biblioteca OneWire de Paul Stoffregen.
3. Luego busque «dallas”e instale la biblioteca Dallas Temperature de Miles Burton.
Después de instalar las bibliotecas necesarias, cargue el siguiente código en su placa Arduino. Este boceto se basa en un ejemplo de la biblioteca Dallas Temperature.
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
Based on the Dallas Temperature Library example
*********/
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
void setup(void)
{
// Start serial communication for debugging purposes
Serial.begin(9600);
// Start up the library
sensors.begin();
}
void loop(void){
// Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
sensors.requestTemperatures();
Serial.print("Celsius temperature: ");
// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
Serial.print(sensors.getTempCByIndex(0));
Serial.print(" - Fahrenheit temperature: ");
Serial.println(sensors.getTempFByIndex(0));
delay(1000);
}
Hay muchas formas diferentes de determinar la temperatura a partir de sensores de temperatura DS18B20. Si solo utiliza un único sensor, esta es una de las formas más sencillas y sencillas.
Cómo funciona el código
Comience por incluir el Un cable y eso Dallastemperatura Bibliotecas.
#include <OneWire.h>
#include <DallasTemperature.h>
Cree las instancias necesarias para el sensor de temperatura. El sensor de temperatura está conectado a Pluma 4.
// Data wire is conntec to the Arduino digital pin 4
const int oneWireBus = 4;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
En el configuración()Inicialice el monitor serie con una velocidad de 9600 baudios.
Serial.begin(9600);
Inicialice el sensor de temperatura DS18B20:
sensors.begin();
En el Cinta() es de donde se obtiene la temperatura. Tienes que Solicitar temperaturas() método antes de obtener el valor de temperatura real.
sensors.requestTemperatures();
Luego encuentra la temperatura en grados Celsius e imprímela. Para obtener la temperatura en grados Celsius, use el obtenerTempCByIndex() Método:
Serial.print(sensors.getTempCByIndex(0));
O usa eso obtenerTempFByIndex() para obtener la temperatura en Fahrenheit.
Serial.println(sensors.getTempFByIndex(0));
El obtenerTempCByIndex() y eso obtenerTempFByIndex() Los métodos aceptan el índice del sensor de temperatura. Como solo usamos un sensor, su índice es 0. Si tiene más de un sensor, use el índice 0 para el primer sensor, el índice 1 para el segundo sensor, y así sucesivamente.
Cada segundo se solicitan nuevos valores de temperatura.
delay(5000);
demostración
Después de cargar el código, abra el monitor serie Arduino IDE con una velocidad de baudios de 9600. Debería ver la temperatura en grados Celsius y Fahrenheit:
Captura de temperatura de múltiples sensores DS18B20
El sensor de temperatura DS18B20 se comunica mediante un protocolo de un solo cable y cada sensor tiene un código de serie único de 64 bits, lo que le permite leer la temperatura de múltiples sensores usando un solo pin digital Arduino.
Esquema
Para leer la temperatura de varios sensores, solo necesita conectar todas las líneas de datos como se muestra en el siguiente diagrama esquemático:
Cargar código: varios DS18B20
Luego cargue el siguiente código. Busca todos los dispositivos en el pin 4 y genera la temperatura de cada uno. Este boceto se basa en el ejemplo de la biblioteca DallasTemperature.
/*
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 4 on the Arduino
#define ONE_WIRE_BUS 4
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
int numberOfDevices; // Number of temperature devices found
DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address
void setup(void) {
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
// Grab a count of devices on the wire
numberOfDevices = sensors.getDeviceCount();
// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(numberOfDevices, DEC);
Serial.println(" devices.");
// Loop through each device, print out address
for(int i=0;i<numberOfDevices; i++) {
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i)) {
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
printAddress(tempDeviceAddress);
Serial.println();
} else {
Serial.print("Found ghost device at ");
Serial.print(i, DEC);
Serial.print(" but could not detect address. Check power and cabling");
}
}
}
void loop(void) {
sensors.requestTemperatures(); // Send the command to get temperatures
// Loop through each device, print out temperature data
for(int i=0;i<numberOfDevices; i++) {
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i)){
// Output the device ID
Serial.print("Temperature for device: ");
Serial.println(i,DEC);
// Print the data
float tempC = sensors.getTempC(tempDeviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
Serial.print(" Temp F: ");
Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}
}
delay(5000);
}
// function to print a device address
void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
Así es como funciona el código
El código utiliza varios métodos útiles para manejar múltiples sensores DS18B20.
ellos usan el getDeviceCount() Método para determinar la cantidad de sensores DS18B20 en la línea de datos.
numberOfDevices = sensors.getDeviceCount();
El obtener dirección() El método encuentra las direcciones del sensor:
if(sensors.getAddress(tempDeviceAddress, i)){
La dirección es única para cada sensor. Esto significa que cada sensor puede identificarse por su dirección.
Entonces usa eso obtenerTempC() Método que acepta la dirección del dispositivo como argumento. Puede utilizar este método para obtener la temperatura de un sensor específico:
float tempC = sensors.getTempC(tempDeviceAddress);
Para obtener la temperatura en grados Fahrenheit puedes usar: obtenerTemF(). Alternativamente, puedes convertir la temperatura en Celsius a Fahrenheit de la siguiente manera:
DallasTemperature::toFahrenheit(tempC)
Resumen
El sensor de temperatura DS18B20 es un sensor digital de un solo cable. Para utilizar este sensor con Arduino necesitarás las bibliotecas OneWire y DallasTemperature. Puede utilizar uno o más sensores en la misma línea de datos porque puede identificar cada sensor por su dirección única.
Ahora puedes llevar este proyecto más allá y mostrar los valores de tus sensores en una pantalla OLED, por ejemplo.
Tenemos más tutoriales para otros sensores compatibles con Arduino que pueden resultarle útiles:
- Sensor de humedad y temperatura DHT11/DHT22 con Arduino
- BME280 (temperatura, humedad, presión) con Arduino
- Módulo de relé con Arduino
- Sensor ultrasónico HC-SR04 con Arduino
Esperamos que esta guía le haya resultado útil.
Si desea obtener más información sobre Arduino, consulte nuestros recursos:
- Curso de proyecto Arduino paso a paso.
- Proyectos y tutoriales gratuitos de Arduino
- mini curso arduino
¡Gracias por leer!
Actualizado el 2 de julio de 2019
Instrucciones para el sensor de temperatura DS18B20 con Arduino
Este tutorial muestra cómo usar el sensor de temperatura DS18B20 con la placa Arduino. Aprenderás cómo conectar el sensor, instalar las librerías necesarias y obtener la temperatura de uno o varios sensores DS18B20.
Introducción al sensor de temperatura DS18B20
El sensor de temperatura DS18B20 es un sensor digital de una sola línea. Esto significa que solo requiere una línea de datos (y GND) para comunicarse con Arduino.
Puede ser alimentado por una fuente de alimentación externa o puede derivar energía desde la línea de datos (llamado «modo parásito»), lo que elimina la necesidad de una fuente de alimentación externa.
Cada sensor de temperatura DS18B20 tiene un código único de serie de 64 bits. Esto te permite conectar múltiples sensores a la misma línea de datos. Por lo tanto, puedes obtener la temperatura de varios sensores usando solo un pin digital de Arduino.
El sensor de temperatura DS18B20 también está disponible en versión impermeable.
Especificaciones relevantes del sensor DS18B20:
- Comunicación a través de bus de una sola línea
- Rango de alimentación: 3.0V a 5.5V
- Rango de temperatura de operación: -55ºC a +125ºC
- Precisión +/-0.5 ºC (en el rango -10ºC a 85ºC)
Para obtener más información, consulta la hoja de datos del DS18B20.
Partes requeridas:
- Arduino UNO
- Sensor de temperatura DS18B20 (uno o varios sensores) – versión impermeable
- Resistor de 4.7k Ohm
- Protoboard
- Cables jumper
Puedes encontrar todas las partes para tus proyectos al mejor precio en MakerAdvisor.com/tools.
Esquemático:
El sensor puede funcionar en dos modos: normal (3 cables) o parásito (solo datos y GND). Sigue el esquemático correspondiente según el modo de operación elegido.
Cargar código – Solo DS18B20:
Para interactuar con el sensor de temperatura DS18B20, debes instalar la librería OneWire de Paul Stoffregen y la librería Dallas Temperature. Sigue los siguientes pasos para instalar esas librerías:
- Abre tu Arduino IDE y ve a Sketch > Include Library > Manage Libraries.
- Escribe «OneWire» en el cuadro de búsqueda e instala la librería OneWire de Paul Stoffregen.
- Luego, busca «Dallas» e instala la librería Dallas Temperature de Miles Burton.
Después de instalar las librerías necesarias, carga el siguiente código en tu placa Arduino. Este sketch se basa en un ejemplo de la librería Dallas Temperature.
…
Para una explicación detallada sobre cómo funciona el código y cómo obtener la temperatura del sensor DS18B20, visita nuestra página de documentación.
Para obtener más tutoriales sobre sensores compatibles con Arduino, visita nuestras guías sobre el sensor DHT11/DHT22, el BME280, el módulo de relé y el sensor ultrasónico HC-SR04.
Esperamos que este artículo te haya sido útil. ¡Gracias por leer!
¡Me salvaste la vida con este tutorial! Gracias por compartir.
Este tutorial me aclaró todas las dudas que tenía sobre cómo usar el sensor DS18B20 con Arduino.¡Gracias por la ayuda!