Cómo medir las temperaturas con DS18B20 y Arduino
El sensor DS18B20
Una de las formas más fáciles y baratas de añadir la detección de temperatura a tu proyecto Arduino es usar el sensor de temperatura de 1 cable DS18B20. Estos sensores son bastante precisos y no necesitan componentes externos para funcionar. Así que, con sólo unas pocas conexiones y un poco de código de Arduino, estarás detectando la temperatura en poco tiempo.
DS18B20 es un sensor de temperatura de interfaz de 1-Wire fabricado por Dallas Semiconductor Corp. La exclusiva interfaz de 1-Wire® requiere sólo un pin digital para la comunicación bidireccional con un microcontrolador.
El sensor viene generalmente en dos factores de forma. Uno que viene en el paquete TO-92 se ve exactamente como un transistor ordinario. Otro en un estilo de sonda a prueba de agua que puede ser más útil cuando se necesita medir algo lejano, bajo el agua o bajo tierra.
El sensor de temperatura DS18B20 es bastante preciso y no necesita componentes externos para funcionar. Puede medir temperaturas de -55°C a +125°C con una precisión de ±0,5°C.
La resolución del sensor de temperatura es configurable por el usuario a 9, 10, 11 o 12 bits. Sin embargo, la resolución por defecto en el momento de la puesta en marcha es de 12 bits (es decir, 0,0625°C de precisión).
El sensor puede ser alimentado con una fuente de alimentación de 3V a 5,5V y consume sólo 1mA durante las conversiones de temperatura activas.
Aquí están las especificaciones completas:
- Fuente de alimentación de 3V a 5.5V
- Consumo de corriente 1mA
- Rango de temperatura -55 a 125°C
- Precisión ±0,5°C
- Resolución 9 a 12 bits (seleccionable)
- Tiempo de conversión < 750ms
- Múltiples DS18B20 en un solo autobús
Una de las mayores ventajas de DS18B20 es que varios DS18B20 pueden coexistir en el mismo autobús de 1-Wire. Como cada DS18B20 tiene un código serial único de 64 bits grabado en la fábrica, es más fácil diferenciarlos entre sí.
Esta característica puede ser una gran ventaja cuando se quiere controlar muchos DS18B20s distribuidos en una gran área.
Pinout del sensor DS18B20
- GND es una pin de tierra.
- DQ es un bus de datos de un solo cable que debe conectarse a un pin digital en el microcontrolador.
- El Pin VDD suministra energía para el sensor que puede ser de entre 3,3 y 5V.
Cómo conectar el sensor de temperatura DS18B20 a Arduino
Las conexiones son bastante simples. Empieza por conectar el VDD a la clavija de salida de 5V de Arduino y la GND a tierra.
A continuación, conecta el pin de señal digital restante DQ al pin digital 2 en el Arduino. También tendrás que añadir la resistencia pull-up de 4.7k entre la señal y la clavija de alimentación para mantener la transferencia de datos estable. (los pull-ups internos en el arduino no funcionan)
Ten cuidado de que el DS18B20 esté en el lugar correcto. Si lo pones al revés, se calentará y luego se romperá.
Si estás usando la versión impermeable del DS18B20, conecta la banda roja a 5V, la negra a tierra y la amarilla a la clavija digital 2 del arduino. Todavía necesitas conectar una resistencia pullup de 4.7K de datos a 5V.
Instalación de la librería para el DS18B20
El protocolo de Dallas 1-Wire es algo complejo, y requiere un montón de código para analizar la comunicación. Para saltarnos esta complejidad innecesaria instalaremos la librería DallasTemperature.h para poder emitir comandos simples para obtener lecturas de temperatura del sensor.
Para instalar la librería ve al menú Sketch > Include Library > Manage Libraries.. Espera a que el Administrador de la Librería descargue el índice de las librerías y actualice la lista de librerías instaladas.
Filtra tu búsqueda escribiendo «ds18b20». Debería haber un par de entradas. Busca DallasTemperature de Miles Burton. Haz clic en esa entrada y luego selecciona Instalar.
Esta biblioteca de la temperatura de Dallas es una biblioteca de hardware específico que maneja funciones de nivel inferior. Necesita ser emparejada con la biblioteca One Wire para comunicarse con cualquier dispositivo de un solo cable, no sólo con el DS18B20. Instale esta biblioteca también.
Código de Arduino
El siguiente esquema te dará una completa comprensión de cómo leer las lecturas de temperatura del sensor de temperatura DS18B20 y puede servir como base para experimentos y proyectos más prácticos.
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into digital pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass oneWire reference to DallasTemperature library
DallasTemperature sensors(&oneWire);
void setup(void)
{
sensors.begin(); // Start up the library
Serial.begin(9600);
}
void loop(void)
{
// Send the command to get temperatures
sensors.requestTemperatures();
//print the temperature in Celsius
Serial.print("Temperature: ");
Serial.print(sensors.getTempCByIndex(0));
Serial.print((char)176);//shows degrees character
Serial.print("C | ");
//print the temperature in Fahrenheit
Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0);
Serial.print((char)176);//shows degrees character
Serial.println("F");
delay(500);
}
Entonces en el monitor serie tendría que aparecerte la temperatura reflejada como lo siguiente:
El programa comienza incluyendo las librerías OneWire.h y DallasTemperature.h y declarando el Pin de Arduino a la que está conectada la clavija de señal del sensor.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
A continuación creamos un objeto de un solo cable pasando la clavija de señal del sensor a su constructor. Este objeto de un solo cable nos permite comunicarnos con cualquier dispositivo de un solo cable, no sólo con el DS18B20. Para poder comunicarnos con el sensor DS18B20, necesitamos crear un objeto de la biblioteca de DallasTemperature y pasar la referencia del objeto de un solo cable como parámetro.
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Una vez creado un objeto de DallasTemperature, podemos emitir a continuación simples comandos para interactuar con el sensor.
- La función begin() busca los sensores conectados en el bus y establece la resolución de bits (12 bits) para cada uno.
- La función requestTemperatures() envía un comando para que todos los sensores del bus realicen una conversión de temperatura.
- La función getTempCByIndex(deviceIndex) lee y devuelve la lectura de temperatura del sensor. deviceIndex no es más que la ubicación del sensor en el bus. Si sólo usas un DS18B20 en el autobús, ponlo en 0.
Otras funciones útiles en la biblioteca de DallasTemperature.h
Hay algunas funciones útiles que puedes utilizar con el objeto DallasTemperature. Algunas de ellas se enumeran a continuación:
- La función setResolution() establece la resolución del convertidor analógico-digital interno del DS18B20 a 9, 10, 11 o 12 bits, que corresponde a incrementos de 0,5°C, 0,25°C, 0,125°C y 0,0625°C, respectivamente.
- La función bool getWaitForConversion() devuelve el valor de la bandera waitForConversion. Puede ser útil cuando se quiere comprobar si una conversión de temperatura está completa.
- La función setHighAlarmTemp() & setLowAlarmTemp() establece las alarmas internas de alta y baja temperatura de un dispositivo en grados centígrados. El rango válido es de -55 a 125°C
- La función «bool hasAlarm()» se activa si el dispositivo tiene una condición de alarma cuando la temperatura excede el ajuste de temperatura de alarma alta y baja.
Debe estar conectado para enviar un comentario.