Sensor temperatura DS18B20

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

DS18B20_1       DS18B20_2

 

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