Cómo medir la temperatura con el sensor DS18B20

Smelpro > Tutoriales  > Arduino  > Cómo medir la temperatura con el sensor DS18B20

Cómo medir la temperatura con el sensor DS18B20

Hoy les enseñaremos a usar el sensor DS18B20, muy conocido por su eficacia para medir la temperatura en ambientes húmedos, incluso bajo el agua. Nosotros usaremos el modelo con encapsulado TO-92, porque su diseño nos facilita su montaje en una protoboard.

Puedes elegir entre los otros tipos de encapsulado dependiendo de si lo prefieres montar en PCB o protobard. También hay un modelo con un protector de acero inoxidable para que pueda ser sumergido en el agua, esta es la versión más comercial y reconocible.

Sin importar que modelo adquieras, siempre dispondrá de tres pines útiles: GND, DQ, Vdd. Y siempre contaran con el protocolo 1-WIRE que permite usar un solo pin. Además, cada sensor tiene una dirección de 64 bits que nos ayudará a identificarlos.

Incluso almacenan la temperatura y en base a eso puede activar un par de alarmas que indican si la temperatura es mayor o menor a un rango de temperatura máxima y mínima.

Voltaje de trabajo3V a 5.5V DC
Temperatura-55°C a +125°c
Tipo de salidaDigital
Resolución9 a 12 bits
Tiempo de capturaInferior a 750ms

   

 El sensor DS18B20 trabaja por defecto con la resolución de 12 bits. Pero podemos modificarla al programar. Debemos elegir entre una resolución u otra dependiendo de la precisión que necesitemos.

ResoluciónTemperatura
9-bit0.5°C
10-bit0.25°C
11-bit0.125°C
12-bit0.0625°C

   

Adjuntamos el Datasheet para que tengas mayor información sobre el sensor.

   

Conexión

Colores de los cables

Si has adquirido el modelo con protector sumergible puede que te hayas percatado de que no es tan fácil saber que cable es el VDD, GND o DQ debido a que solo son cables de colores conectados a los respectivos spines sin dar señal de a cuál se conectan.

Hay modelos comunes para la distribución de colores, aquí dejamos una tabla para que puedas ubicarlos. En algunas ocasiones tendrás que buscar información del fabricante, o probar hasta averiguarlo.

TIPO  1TIPO 2TIPO 3PIN
NegroVerdeAmarilloGND
RojoRojoRojoVdd
AmarilloAmarilloVerdeDQ

 

Resistencia Pull-up

Necesitarás una resistencia pull-up conectada al pin DQ. No es una resistencia especial. Solo es la forma en la que se conecta la que nos ayudará. En este caso nos permitirá mantener al pin DQ en modo HIGH.

El valor de la resistencia depende de la longitud del cable que estés utilizando.

Valor de la resistencia pull-upLongitud del cable (metros)

4,7 kΩ

0m a 5m

3,3 kΩ5m a 10m
2,2 kΩ10m a 20m
1,2 kΩ20m a 50m

 

Modos de conexión

 

Usando una fuente externa

Se procede conectando el pin Vdd. De esa forma el pin de datos se mantiene independiente del de alimentación. Es el que usaremos para el tutorial.

 

Modo parásito

Cuando el pin de datos este en modo alto el sensor recibe energía, y cuando está en modo bajo almacena energía en un condensador. Este tipo de conexión es preferible si se conectará el sensor a distancias muy largas o sí no hay mucho espacio para el cable de alimentación.

El pin GND y Vdd deben de estar conectados a GND en la protoboard.

   

Programación

 

Instalar librerías

Después de haber conectado todos los componentes podemos empezar a programar. Resultaría muy complicado hacerlo así nada más debido al protocolo 1-Wire. Pero es bueno que contemos con librerías, dos en este caso, que nos permitirán simplificar esta tarea.

Usaremos las librerías OneWire y DallasTemperature. A continuación, te enseñamos a instalarlas:

En el IDE de Arduino hacemos clic en el menú de Programas, Incluir librería, Administrar bibliotecas. O podemos usar un atajo de teclado: Ctrl+Mayus+I.

 

 

Luego buscamos Dallas Temperature by  Miles Burton y otros, y OneWire by Jim Studt y otros.

 

   

Ahora podemos incluir las librerías en nuestro código, recibir la medición de la temperatura y mostrarla en el Monitor Serie.

//Incluimos las librerías a nuestro código
#include <OneWire.h>                
#include <DallasTemperature.h>
 
OneWire ourWire(2); //El pin 2 será el de datos

DallasTemperature sensors(&ourWire); //Declaramos una variable u objeto para nuestro sensor

void setup() {
delay(1000);
Serial.begin(9600); //Iniciamos el Monitor Serie
sensors.begin();   //Iniciamos el sensor
}
 
void loop() {
sensors.requestTemperatures();   //Se lee la temperatura
float temp= sensors.getTempCByIndex(0); //Temperatura en grados Celcius

//Mostrar temperatura en el Monitor Serie
Serial.print("Temperatura= ");
Serial.print(temp);
Serial.println(" C");
delay(100);                     
}

  Si abres el Monitor Serie deberías ver algo como esto:

 

   

Dos o más sensores

En caso de que quieras instalar dos o más sensores te mostramos una ilustración de como realizar las conexiones.

 

 Y esta si lo necesitas conectar en modo parásito.

 

   

El código para programar sería el siguiente.

 

//Incluimos las librerías
#include <OneWire.h>
#include <DallasTemperature.h>

const int pinDatosDQ = 2; //Declaramos al pin 2 como d
 
//
OneWire oneWireObjeto(pinDatosDQ);
DallasTemperature sensorDS18B20(&oneWireObjeto);
 
void setup() {
    // Iniciamos la comunicación serie
    Serial.begin(9600);
    // Iniciamos el bus 1-Wire
    sensorDS18B20.begin(); 
}
 
void loop() {
    // Comandos para toma de temperatura a los sensores
    Serial.println("Mandando comandos a los sensores");
    sensorDS18B20.requestTemperatures();
 
    // Leemos y mostramos 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); 
}

  Y este el resultado:

   

Esperamos haberte ayudado. ¿Qué tienes planeado para este sensor? Cualquier idea o sugerencia dínosla en los comentarios.

Puedes contactarte con nosotros para ayudarte personalmente con tu proyecto.

Blog
No Comments

Sorry, the comment form is closed at this time.