Description:
The GY-906 MLX90614 is a high precision infrared non-contact thermometer module with I2C interface and 5V or 3.3V operation.
شرح :
The main difference between this and most other thermometers is that the temperature reading is taken without contacting the object whose temperature is being monitored. This can be very useful for monitoring the temperature of something moving like a spinning motor shaft or objects on a moving conveyor built for instance.
Because the sensor is not necessarily exposed to the same temperature that it is measuring, it can read a wide range of temperatures. It has measurement a range of -70°C (-94°F) to +380°C (+720°F) with an accuracy of 0.5°C around room temperature. The sensor itself is rated for -40°C to +125°C.
The sensor has a 90 degree field of view and the reported temperature is the average temperature within that field of view. The appropriate measurement distance therefore depends on how wide of a field of view is desired. If measuring the surface temperature of an an object like an IC or rotating shaft, a measuring distance of about 1 cm is typically used.
The sensor has a built-in optical filter that cuts off the visible and near infrared light to minimize their impact on the reading.
The module has 3 basic modes of operation. It can communicate the temperature or have settings configured using the I2C bus. It can communicate the temperature continuously using a PWM signal where the duty cycle of the signal represents the temperature. It can act as a thermal switch where the output is toggled at a preprogrammed trip point such as when used in a thermostat.
Note:
The primary interface to the device is the SMBus which is basically the same as I2C and uses the same SDA (Data) and SCL (Clock) lines. The module has 4.7K pull-up resistors on these lines. The SCL and SDA pins connect to the SCL and SDA pins on the MCU.
The temperature of the object as well as the ambient temperature of MLX90614 can be read in °C and °F. The device uses a high resolution 17-bit ADC and DSP unit which provides a large range, high resolution and very good accuracy.
In addition the device can be programmed over the interface to have one of 127 I2C addresses so that up to 127 of the devices can operate on one I2C bus. A number of other settings can also be configured using the I2C interface such as using the PWM output or thermal switch mode of operation.
Features:
When placed into PWM mode, the module outputs a continuous 10-bit PWM signal on the SDA pin which represent the measured object temperature. The module PWM signal by default covers the range of -20C to 120C with an output resolution of 0.14C, but this default range can be adjusted via the I2C bus.
When using as a thermal switch, a preset temperature can be programmed into the device. When the temperature is reached, the PWM pin is triggered which can be used as an interrupt input to an MCU or can be used to directly drive a relay or similar device. The output drive capability is 25mA.
The module has a 662K 3.3V regulator on it. It can handle up to 6V max on the VIN power input pin though 5V is typical. If the module is powered with 3.3V on the VIN pin, the voltage passes through the regulator with minimal voltage drop, so the module is compatible with both 5V and 3.3V MCUs.
Mikroelectron Code:
/* MLX90614 Test Program Basic program to read the data output of the sensor. Uses Adafruit MLX90614.h library Connect sensor to I2C SCL and SDA lines, 5V and ground */ #include <Wire.h> #include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); //=============================================================================== // Initialization //=============================================================================== void setup() { Serial.begin(9600); mlx.begin(); } //=============================================================================== // Main //=============================================================================== void loop() { Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); Serial.print("\xC2\xB0"); Serial.print("C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.print("\xC2\xB0"); Serial.println("C"); Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); Serial.print("\xC2\xB0"); Serial.print("F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.print("\xC2\xB0"); Serial.println("F"); Serial.println(); delay(1000); }