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);
}