El sensor DS18B20

El DS18B20 es un sensor digital de temperatura que utiliza el protocolo 1-Wire para comunicarse, este protocolo necesita solo un pin de datos para comunicarse y permite conectar más de un sensor en el mismo bus.

El sensor DS18B20 es fabricado por Maxim Integrated, el encapsulado de fabrica es tipo TO-92 similar al empleado en transistores pequeños. La presentación comercial más utilizada por conveniencia y robustez es la del sensor dentro de un tubo de acero inoxidable resistente al agua, con el que trabajemos este tutorial.

Con este sensor podemos medir temperatura desde los -55°C hasta los 125°C y con una resolución programable desde 9 bits hasta 12 bits.

Cada sensor tiene una dirección unica de 64bits establecida de fábrica, esta dirección sirve para identificar al dispositivo con el que se está comunicando, puesto que en un bus 1-wire pueden existir más de un dispositivo.

El sensor tiene dos métodos de alimentación:

Alimentación a través del pin de datos:

De esto forma, el sensor internamente obtiene energía del pin de datos cuando este se encuentra en un estado alto y almacena carga en un condensador para cuando la línea de datos esté en una estado bajo, a esta forma de obtener energía se le llama “Parasite Power” y se usa cuando el sensor debe conectarse a grandes distancias o en donde el espacio es limitado, puesto que de esta forma no se necesita la línea de VDD. El diagrama para su conexión debe ser de la siguiente forma:

DS18B20 Parasite Power

Notar que el pin GND y VDD están ambos conectados a GND, esto es indispensable para que se active el  Parasite Power . El MOSFET en la imagen es necesario para cuando se realicen conversiones de temperatura o copiar datos desde la memoria de circuito de la EEPROM, en estas operaciones la corriente de operación aumenta y si solo se suministra energía a través de la resistencia pueden causar caídas de voltaje en el condensador interno.

Alimentación usando una fuente externa:

De esta forma el sensor se alimenta a través del pin VDD, de esta forma el voltaje es estable e independiente del tráfico del bus 1-wire.

El diagrama de conexión es de la siguiente forma:

DS18B20 External Power

Esta forma de alimentación es la más recomendada y es la utilizada en este tutorial.

Si se quiere probar estos dispositivos con una Raspberry pi pico, Raspberry pi, o Arduino, se debe contar con un resistor de 4.7 kΩ (o un potenciómetro calibrado a ese nivel de resistencia), y cables jumper para realizar conexiones, a los pines 5V, GND, y un pin digital enumerados de los micro-controladores mencionados anteriormente.

El diagrama de conexión para conectar los sensores a un Arduino Uno, se muestra en la figura a continuación.

Se puede observar que tenemos el sensor en formato TO-92 y no como sonda, pero la disposición de la conexión es la misma, solo que con los terminales del sensor, en vez de pins de un chip.

El color de los cables indica el terminal al cual corresponde. El color rojo simboliza VCC o 5V, el color negro GND o tierra, y el color amarillo es el cable de señal, el cual tiene color verde en la figura mostrada anteriormente.

#include <OneWire.h>
#include <DallasTemperature.h>
 
// Pin donde se conecta el bus 1-Wire
const int pinDatosDQ = 9;
 
// Instancia a las clases OneWire y DallasTemperature
OneWire oneWireObjeto(pinDatosDQ);
DallasTemperature sensorDS18B20(&oneWireObjeto);

void setup() {
    // Se inicia la comunicación serial
    Serial.begin(9600);
    // Iniciamos el bus 1-Wire
    sensorDS18B20.begin(); 
}

void loop() {
    // Comando para medicion de temperatura.
    Serial.println("Mandando comandos a los sensores");
    sensorDS18B20.requestTemperatures();
 
    // Lee y muestra los datos de los sensores DS18B20.
    Serial.print("Temperatura sensor 0: ");
    Serial.print(sensorDS18B20.getTempCByIndex(0));
    Serial.println(" C");
    Serial.print("Temperatura sensor 1: ");
    Serial.print(sensorDS18B20.getTempCByIndex(1));
    Serial.println(" C");
    
    delay(1000); 
}