DS18B20
En el post Sensor de temperatura ds18b20 Se explica a detalle la definición y caracteristicas de este sensor, lo que vamos a mostrar a continuación es un resumen y las imagenes de referencia para poder conectar él sensor a cualquier controlador, en este caso el esp8266 (wemos d1).
CARACTERÍSTICA | VALOR |
---|---|
Voltaje de alimentación | 3V a 5,5V |
VDD | voltaje de alimentación |
GND | Tierra |
DQ | Datos |
Rango de temperaturas | -55ºC a 125ºC |
Error (-10ºC a 85ºC) | ±0,5ºC |
Error (-55ºC a 125ºC) | ±2ºC |
Resolución programable | 9-bit, 10-bit, 11-bit o 12-bit (default) |
Elementos utilizados
- Tarjeta wemos d1 mini
- Sensor ds18b20
- Resistencia 4.7kΩ
- Cables de conexión
Circuito
- Conecta el pin VCC del DS18B20 al pin 3.3V del Wemos D1.
- Conecta el pin GND del DS18B20 al pin GND del Wemos D1.
- Conecta el pin DQ (datos) del DS18B20 al pin D5 (o cualquier otro pin digital compatible) del Wemos D1.
- Coloca una resistencia de 4.7k ohmios entre el pin VCC y el pin DQ del DS18B20 para establecer la conexión pull-up.
Resolución del sensor de temperatura DS18B20
Se refiere a la precisión con la que el sensor puede medir y reportar la temperatura. El DS18B20 es un sensor de temperatura digital de 1-Wire fabricado por Maxim Integrated. Tiene la capacidad de ajustar su resolución para adaptarse a diferentes aplicaciones y requisitos de precisión
El DS18B20 ofrece varias opciones de resolución que afectan directamente la precisión de la medición de temperatura y el tiempo necesario para realizar una conversión. Las opciones de resolución incluyen:
-
Resolución de 9 bits: En esta configuración, el sensor tomará muestras de temperatura con una precisión de 0.5°C. Cada conversión tomará aproximadamente 93.75 milisegundos.
-
Resolución de 10 bits: En esta configuración, la precisión mejora a 0.25°C, pero cada conversión tomará alrededor de 187.5 milisegundos.
-
Resolución de 11 bits: Con esta opción, la precisión se establece en 0.125°C y el tiempo de conversión es de aproximadamente 375 milisegundos.
-
Resolución de 12 bits: Esta es la configuración de mayor resolución, con una precisión de 0.0625°C. Cada conversión requerirá cerca de 750 milisegundos.
Librerías
- OneWire permite acceder a dispositivos que se comunican por un cable, documentación oficial OneWire Arduino Library, connecting 1-wire devices (DS18S20, etc) to Teensy (pjrc.com)
- DallasTemperature permite usar el sensor DS18b20, su documentación oficial Biblioteca de Control de Temperatura de Dallas - MilesBurton.com
Código de prueba
Obtener la direccion del sensor
// 1
#include <OneWire.h>
#include <DallasTemperature.h>
// 2
#define ONE_WIRE_BUS D%
// 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
// 4
Serial.begin(9600);
sensors.begin();
// 5
DeviceAddress deviceAddress;
sensors.getAddress(deviceAddress, 0);
Serial.print("Dirección del sensor: ");
for (uint8_t i = 0; i < 8; i++) {
Serial.print(deviceAddress[i], HEX);
}
Serial.println();
}
void loop() {
}
- Cargamos las librerías de OneWire y de DallasTemperature.
- Definimos en una variable el pin D5 para la comunicación con el sensor.
- Procedemos a crear los objetos de OneWire y DallasTemperature para poder acceder a las funciones y métodos de estas librerías.
- Inicializamos la comunicación del sensor con el arduino.
- Obtenemos la dirección del sensor digital:
- DeviceAddress deviceAddress: declara una variable llamada deviceAddress del tipo DeviceAddress. DeviceAddress es un tipo de dato proporcionado por la biblioteca DallasTemperature que se utiliza para almacenar la dirección única de un dispositivo en el bus OneWire.
- sensors.getAddress(deviceAddress, 0): Esta línea de código solicita al objeto sensors que obtenga la dirección del dispositivo en la posición 0 (en caso de que tengas varios sensores conectados al mismo bus OneWire). La dirección única se almacena en la variable deviceAddress.
- for (uint8_t i = 0; i < 8; i++) { ... }: Este bucle for se utiliza para recorrer cada byte de la dirección del sensor (8 bytes en total). El índice i va desde 0 hasta 7.
- Serial.print(deviceAddress[i], HEX);: En cada iteración del bucle, se imprime el valor del byte en la posición i de la dirección del sensor en formato hexadecimal. Esto mostrará un número de dos dígitos que representa el valor del byte en hexadecimal.
Obtener la temperatura
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
Serial.print("Temperatura: ");
Serial.println(temperature);
delay(1000);
}
- sensors.requestTemperatures();: Esta función solicita a los sensores DS18B20 que realicen una medición de temperatura. Cuando se llama a esta función, los sensores empiezan a medir la temperatura en su entorno. Es importante tener en cuenta que esta función no devuelve directamente la temperatura, sino que prepara a los sensores para medir y leer posteriormente la temperatura.
- float temperature = sensors.getTempCByIndex(0);: Después de haber solicitado las mediciones con requestTemperatures(), esta línea de código obtiene la lectura de temperatura en grados Celsius utilizando la función getTempCByIndex(0). En este caso, se está obteniendo la temperatura del primer sensor (índice 0) en caso de que tengas varios sensores conectados en el mismo bus OneWire.