Información, configuración y programación del sensor de temperatura DS18B20
Resumen de las características técnicas del DS18B20
CARACTERISTICAS
CARACTERÍSTICAS | 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) |
Cada uno de los sensores tiene un identificador único de 64 bit ( 8 bytes).
ENCAPSULADO
Para el buen funcionamento, de unirse Vdd y DQ, mediante una resistencia 4K7.
Hay tres tipos de cable, sus conexiones son:
TIPO 1 | TIPO 2 | TIPO 3 | PIN DS18B20 |
---|---|---|---|
Negro | Verde | Amarillo | GND |
Rojo | Rojo | Rojo | Vdd |
Amarillo | Amarillo | Verde | DQ |
PROGRAMACION
El sensor funciona bajo el protocolo 1Wire, Con el arduino son necesarias las librerías:
- OneWire.
- DallasTemperature.
Si alguna no la tienes instalada, se puede hacer mediante el gestor de librerías.
#include <OneWire.h> #include <DallasTemperature.h> const int pin_DQ =2; // Pin donde se conectara el bus 1-Wire OneWire oneWireObjeto(pin_DQ); // creamos el objeto oneWireObjeto DallasTemperature sensorDS18B20(&oneWireObjeto);
Ejemplo de su funcionamiento, mostrando los datos en el puerto serie, presentamos el caso de dos sensores, sin identificarlos, se leen según este colocados en el bus.
#include <OneWire.h> #include <DallasTemperature.h> const int pin_DQ =2; // Pin donde se conectara el bus 1-Wire OneWire oneWireObjeto(pin_DQ); // creamos el objeto oneWireObjeto DallasTemperature sensorDS18B20(&oneWireObjeto); void setup() { Serial.begin(9600); sensorDS18B20.begin(); //// Iniciamos el bus 1-Wire } void loop() { sensorDS18B20.requestTemperatures(); // Comandos para toma de temperatura a los sensores // Leer y mostrar los datos de los sensores DS18B20 Serial.print("Sensor 0: "); Serial.print(sensorDS18B20.getTempCByIndex(0)); Serial.println("º C"); Serial.print("Sensor 1: "); Serial.print(sensorDS18B20.getTempCByIndex(1)); Serial.println(" ºC"); delay(1000); }
Puden existir problemas cuando hay varios sensores, la mejor forma es utilizar su dirección única.
Código usando las direcciones de los sensores.
#include <OneWire.h> #include <DallasTemperature.h> // Pin donde se conecta el bus 1-Wire const int pinDatos = 2;// Instancia a las clases OneWire y DallasTemperature OneWire oneWireObjeto(pinDatos2); DallasTemperature sensorDS18B20(&oneWireObjeto); // Variables con las direcciones únicas de los 4 sensores DS18B20 DeviceAddress sensor_A0 = {0x28, 0xA8, 0xA7,0xA6, 0xA5, 0xA4, 0xA3, 0xA0}; DeviceAddress sensor_A1 = {0x28, 0xA8, 0xA7,0xA6, 0xA5, 0xA4, 0xA3, 0xA1}; DeviceAddress sensor_A2 = {0x28, 0xA8, 0xA7,0xA6, 0xA5, 0xA4, 0xA3, 0xA2}; DeviceAddress sensor_A3 = {0x28, 0xA8, 0xA7,0xA6, 0xA5, 0xA4, 0xA3, 0xA3}; void setup() { Serial.begin(9600); // Iniciamos la comunicación serie sensorDS18B20.begin(); // Iniciamos el bus 1-Wire } void loop() { Serial.println("Mandando comandos a los sensores"); // Comandos para toma de temperatura a los sensores sensorDS18B20.requestTemperatures(); Serial.print("Temperatura sensor A0: "); Serial.print(sensorDS18B20.getTempC(sensor_A0)); Serial.println(" ºC"); Serial.print("Temperatura sensor A1: "); Serial.print(sensorDS18B20.getTempC(sensor_A1)); Serial.println(" ºC"); Serial.print("Temperatura sensor A2: "); Serial.print(sensorDS18B20.getTempC(sensor_A2)); Serial.println(" ºC"); Serial.print("Temperatura sensor A3: "); Serial.print(sensorDS18B20.getTempC(sensor_A3)); Serial.println("º C"); delay(1000); }