Saltar al contenido
Blog Arduino, LabVIEW y Electrónica

Módulo de Temperatura IR MLX90614

¿QUÉ ES EL INFARROJO?

El Infrarrojo (IR) es una radiación electromagnética con una mayor longitud de onda que las de luz visible, se extienden desde el borde rojo nominal del espectro visible a 700 nanómetros (frecuencia 430 THz) a 1 mm (300 GHz), aunque algunas personas pueden percibir infrarrojos hasta al menos 1050 nm en los estudios que se han realizado. La mayor parte de la radiación térmica emitida por objetos cercanos a la temperatura ambiente es infrarroja.

Luz infrarroja

CARACTERÍSTICAS DE MÓDULO DE TEMPERATURA MLX90614

La principal diferencia entre este y la mayoría de los otros termómetros es que la lectura de temperatura se toma sin contacto directo con el objeto cuya temperatura se está monitoreando. Esto puede ser muy útil para obtener la temperatura de algo que se mueve como un eje de motor giratorio u objetos en un transportador móvil construido, por ejemplo.

Debido a que el sensor no está necesariamente expuesto a la misma temperatura que está midiendo, puede leer un amplio rango de temperaturas. Tiene un rango de medición de -70 ° C (-94 ° F) a + 380 ° C (+ 720 ° F) con una precisión de 0.5 ° C alrededor de la temperatura ambiente. El sensor en sí está clasificado para -40 ° C a + 125 ° C.

 

El sensor tiene un campo de visión de 90 grados y la temperatura entregada es la promedio dentro de ese campo de visión. Por lo tanto, la distancia de medición adecuada depende de qué tan amplio se desee el campo de visión. Si se mide la temperatura de la superficie de un objeto, como un eje giratorio, normalmente se usa una distancia de medición de aproximadamente 1 cm.

El sensor tiene un filtro óptico incorporado que corta la luz infrarroja visible y cercana para minimizar su impacto en la lectura.

El módulo tiene 3 modos básicos de operación. Puede comunicar la temperatura o tener configuraciones configuradas usando el bus I2C. Puede comunicar la temperatura continuamente usando una señal PWM donde el ciclo de trabajo de la señal representa la temperatura. Puede actuar como un interruptor térmico donde la salida se alterna en un punto de disparo preprogramado, como cuando se usa en un termostato.

módulo de temperatura IR

PRINCIPALES FUNCIONES DE UN MÓDULO DE TEMPERATURA IR MLX90614

 USO DEL I2C / SMBUS

La interfaz principal para el dispositivo es el SMBus, es básicamente el mismo que I2C, utiliza las mismas líneas SDA (datos) y SCL (reloj). El módulo tiene resistencias pull-up de 4.7K integradas en estas salidas. Los pines SCL y SDA se conectan a los pines SCL y SDA en la MCU.

La temperatura del objeto y la temperatura ambiente de MLX90614 se pueden leer en ° C y ° F. El dispositivo utiliza una unidad ADC y DSP de 17 bits de alta resolución que proporciona un amplio rango, alta resolución y muy buena precisión.

Además, el dispositivo se puede programar a través de la interfaz para tener una de las 127 direcciones I2C de modo que hasta 127 de los dispositivos puedan funcionar en un bus I2C. También se pueden configurar otras preferencias utilizando la interfaz I2C, como la salida PWM o el modo de operación del interruptor térmico.

USANDO EL MODO PWM

Cuando se coloca en modo PWM, el módulo emite una señal PWM continua de 10 bits en el pin SDA que representa la temperatura del objeto medido. La señal PWM del módulo por defecto cubre el rango de -20C a 120C con una resolución de salida de 0.14C, pero este rango predeterminado se puede ajustar a través del bus I2C.

Uso del modo de interruptor térmico

Cuando se utiliza como interruptor térmico, se puede programar una temperatura preestablecida en el dispositivo. Cuando se alcanza la temperatura, se activa el pin PWM que puede usarse como una entrada de interrupción a una MCU o puede usarse para conducir directamente un relé o dispositivo similar. La capacidad del variador de salida es de 25 mA.

 

SUMINISTRO DE ENERGÍA

El módulo tiene un regulador 3.3V integrado. Puede manejar hasta 6 V máx en el pin de entrada de alimentación VIN, aunque 5 V es el valor típico. Si el módulo se alimenta con 3.3V en el pin VIN, el voltaje pasa a través del regulador con una caída de voltaje mínima, por lo que el módulo es compatible con MCU de 5V y 3.3V.

Nota*  el sensor por su cuenta es el MLX90614, cuando es módulo de Arduino se llama gy906

EJEMPLO DE PRUEBA CON MODELO MLX90614

Se necesita Arduino UNO, el módulo GY 906, y dependiendo pueden usar el LCD de 16×2.  También necesitan estas librerías #include <LiquidCrystal_I2C.h>

#include <Wire.h>

#include <Adafruit_MLX90614.h>

 

Diagrama de Conexión:

circuito de diagrama arduino módulo de temperatura IR

 

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

#define I2C_ADDR 0x27 //I2C adress, you should use the code to scan the adress first (0x27) here
#define BACKLIGHT_PIN 3 // Declaring LCD Pins
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  
  mlx.begin();
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH); //Lighting backlight
  lcd.home ();

}

void loop() {
 lcd.setCursor(0,0);
 lcd.print("Ambient ");
 lcd.print(mlx.readAmbientTempC());
 lcd.print(" C");
 
 lcd.setCursor(0,1);
 lcd.print("Target  ");
 lcd.print(mlx.readObjectTempC());
 lcd.print(" C");

 delay(1000);

}

circuito de diagrama de módulo de temperatura IR

 

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

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit MLX90614 test");  
  mlx.begin();  
}

void loop() {
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 
  Serial.print("*F\\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");

  Serial.println();
  delay(500);
}