The MLX90614 is a non-contact infrared thermometer with a measurement range from -70 to +380 degree Celsius. Just connect the four leads to your Wemos and you will have a accurate thermometer with a resolution of 0.01 and a accuracy of 0.5 degrees, or for that matter you can use any microcontroller that can communicate with it through it’s I2C interface.
Being an I2C device you simply need to connect to the SDA, SCL and choose a suitable GND and Vin. I used 3.3v to be safe, although the breakout states 3 to 5v.
This version I chose comes with a breakout board with all of the components needed for operation. Here is a picture of that breakout board
Features:
Small size, low cost
Mounted on a breakout board with two types of pins
10k Pull up resistors for the I2C interface with optional solder jumpers
Factory calibrated in wide temperature range:
-40 … + 125 ° C for sensor temperature and
-70 … + 380 ° C for object temperature.
High accuracy of 0.5 ° C over wide temperaturerange (0 … + 50 ° C for both Ta and To) High (medical) accuracy calibration
Measurement resolution of 0.02 ° C
Single and dual zone versions
SMBus compatible digital interface
Customizable PWM output for continuous reading
Sleep mode for reduced power consumption
Connection and Layout
VIN -> Linkit 3.3v
GND -> Linkit GND
SCL -> Linkit SCL
SDA -> Linkit SDA
Code
There is a library from Adafruit which I used, here is the basic code example. You could also connect an LCD, warning LED or perhaps a buzzer to warn if a certain maximum temperature was reached
The sketch below is fairly straightforward, most of the work is done in the Adafruit MLX96014 library which outputs the result via the serial monitor
[codesyntax lang=”cpp”]
#include <Wire.h> #include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(9600); 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(1000); }
[/codesyntax]
Output
Open up the Serial monitor window and you should see something like the following
Ambient = 23.69*C Object = 22.07*C
Ambient = 74.64*F Object = 71.73*F
Ambient = 23.69*C Object = 22.13*C
Ambient = 74.64*F Object = 71.83*F
Ambient = 23.71*C Object = 22.17*C
Ambient = 74.68*F Object = 71.91*F
Ambient = 23.71*C Object = 22.19*C
Ambient = 74.68*F Object = 71.94*F
Ambient = 23.71*C Object = 22.13*C
Ambient = 74.68*F Object = 71.83*F
Links
Here is a link to the datasheet and also the breakout I used
MLX90614 non-contact infrared temperature sensor module iic Interface GY-906