arduino-y-el-termometro-infrarrojo-a-distancia-mlx90614

Arduino y el termómetro infrarrojo a distancia MLX90614

El MLX90614 es un sensor de temperatura infrarrojo sin de contacto fabricado por la empresa Melexis. Es posible conectar estos sensores con un autómata o procesador como Arduino para medir la temperatura de un objeto a distancia.

Existen distintos modelos del MLX90614 cada uno con un sufijo de tres letras. Los diferentes sensores difieren en el voltaje de operación, el numero de sensores infrarrojos, y la posición del filtro.

La comunicación se realiza a través de SMBus, un subconjunto de bus I2C, por lo que resulta sencilla su lectura, y es posible conectar más de un sensor de forma simultáneamente.

Frecuentemente se encuentran termómetros MLX90614 integrados en módulos como la GY-906 que incorporan la electrónica necesaria para conectarla de forma sencilla a un Arduino. En la mayoría de los módulos, esto incluye un regulador de voltaje que permite alimentar directamente a 5V.

Este tipo de termómetros infrarrojos tienen un gran número de aplicaciones, incluyendo sistemas de control de temperatura en instalaciones térmicas en edificios, control industrial de temperatura, detección de movimiento, y aplicaciones de salud.

Precio

El MLX90614 es un sensor relativamente caro. Entre los modelos más baratos tenemos el modelo MLX90614ESF-BAA, con una tensión de alimentación de alimentación de 3V, ángulo de 80º, un único sensor infrarrojo y filtro interno. Podemos encontrarlo por unos 4€, buscando en vendedores internacionales de eBay y AliExpress.

arduino-sensor-temperatura-infrarrojo-mlx90614-componente

El modelo MLX90614ESF-DCI, que tiene un ángulo de visión de 5º, y puede verse en algunos proyectos para “emular” una cámara térmica mediante un barrido, es mucho más caro, unos 20€.

Existe otros módulos con el sensor MLX90615 que es una variación más pequeña del MLX90614, pero en general no estaremos interesados ya que tiene menor precisión y es algo más caro.

¿Cómo funciona el MLX90614

Según la ley de Stefan-Boltzmann, todo objeto por encima del cero absoluto (ºK) emite radiación cuyo espectro es proporcional a su temperatura. El MLX90614 recoge esta radiación y su salida es una señal eléctrica proporcional a la temperatura de todos los objetos en su campo de visión.

arduino-sensor-temperatura-infrarrojo-mlx90614-radiacion-cuerpo-negro

Internamente el MLX90614 está constituido con un chip de silicio con una fina membrana micromecanizada sensible a la radiación infrarroja, junto con la electrónica necesaria para amplificar y digitalizar la señal y calcular la temperatura.

El conjunto incluye un amplificador de bajo ruido, un conversor ADC de 17 bits, un DSP (procesador digital de señal) y compensación de la temperatura ambiente.

arduino-sensor-temperatura-infrarrojo-mlx90614-interior

El MLX90614 viene calibrado de fábrica en un amplio rango de temperaturas: -40 a 85 °C para la temperatura ambiente y -70 a 382 °C para la temperatura de objetos. La precisión estándar es de 0.5 °C referente a la temperatura ambiente, aunque existen versiones médicas que ofrecen una resolución de 0.1ºC en temperaturas entre 35-38ºC.

arduino-sensor-temperatura-infrarrojo-mlx90614-precision

El MLX90614 dispone de dos modos de salida. La estándar es SMBus, un conjunto del I2C, con una resolución de 0.02ºC. También puede emplear una salida PWM de 10 bits para mediciones continuas, aunque con menor resolución 0.14ºC.

Es importante tener en cuenta la lectura del sensor solo es estable cuando el sensor se encuentra en equilibrio térmico con el ambiente. También puede afectarle la suciedad en la ventana del sensor.

También es importante entender que el MLX90614 es sensible a todos los objetos ubicados en su campo de visión. El ángulo de visión depende del modelo, y varía desde 5º a 80ºC. En el ángulo más amplio de 80º, el área de medición a 0.5 tiene un diámetro de 0.83 metros

Es decir, los modelos de menos ángulo son apropiados para medidas puntuales en frente del sensor. Los sensores de ángulo amplio están diseñados para detectar incrementos de temperatura en una gran zona, por ejemplo, para detección de fallas en maquinaria.

Esquema de montaje

La conexión es sencilla, simplemente alimentamos el módulo desde Arduino mediante GND y 5V y conectamos el pin SDA y SCL de Arduino con los pines correspondientes del sensor.

arduino-sensor-temperatura-infrarrojo-mlx90614-esquema

Mientras que la conexión vista desde el lado de Arduino quedaría así.

arduino-sensor-temperatura-infrarrojo-mlx90614-conexion

En Arduino Uno, Nano y Mini Pro, SDA es el pin A4 y el SCK el pin A5. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.

Verificar que vuestra placa es compatible con 5V antes de conectarla a Arduino. Si no, tendréis que usar un adaptador de nivel lógico.

Ejemplos de código

Para realizar la lectura del MLX90614 usaremos la librería desarrollada por Sparkfun, disponible en este enlace.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. El siguiente ejemplo es una modificación a partir de los disponibles en la librería, que realiza la lectura del sensor y muestra los resultados por puerto serie.

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);

  mlx.begin();  
}

void loop() {
  Serial.print("Ambiente = ");
  Serial.print(mlx.readAmbientTempC()); 
  Serial.print("ºC\tObjeto = "); 
  Serial.print(mlx.readObjectTempC()); 
  Serial.println("ºC");
  delay(500);
}