In this article we create a thermometer based project using an LCD shield, Arduino Uno and an MLX90615 sensor.
Lets discuss the sensor first
The MLX90615 is a miniature infrared thermometer for non-contact temperature measurements. Both the IR sensitive thermopile detector chip and the signal conditioning ASIC are integrated in the same miniature TO-46 can.
Here is a module that I bought
The infrared thermometer comes factory calibrated with a digital SMBus output giving full access to the measured temperature in the complete temperature range(s) with a resolution of 0.02 °C. The sensor achieves an accuracy of ±0.2°C within the relevant medical temperature range. The user can choose to configure the digital output to be PWM.
Features and benefits
Factory calibrated in wide temperature range: -20 to 85°C for sensor temperature and -40 to 115°C for object temperature
High accuracy of 0.5°C over wide temperature range (0..+50 C for both Ta and To)
Medical accuracy of 0.2°C in a limited temperature range
Measurement resolution of 0.02°C
SMBus compatible digital interface for fast temperature readings and building sensor networks
Customizable PWM output for continuous reading
3V supply voltage with power saving mode
Parts List
I used the following parts for this project
Connection
An easy sensor to connect to an LCD – here we show this

lcd shield and mlx90615 layout
Code
This MLX90615 sensor code comes from the following library which I installed – https://github.com/skiselev/MLX90615
#include <Wire.h>
#include <LiquidCrystal.h>
#include <mlx90615.h>
//setup for the LCD keypad shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
MLX90615 mlx = MLX90615();
void setup()
{
//init serial for some debug
Serial.begin(9600);
Serial.println("Melexis MLX90615 infra-red temperature sensor test");
//init MLX90615 sensor
mlx.begin();
Serial.print("Sensor ID number = ");
Serial.println(mlx.get_id(), HEX);
//init LCD
lcd.begin(16,2);
//line 1 - temperature
lcd.setCursor(0,0);
lcd.print("AMB = ");
//line 2 - humidity
lcd.setCursor(0,1);
lcd.print("OBJ = ");
}
void loop()
{
//display temperature on lcd
lcd.setCursor(0,0);
lcd.print("AMB = ");
lcd.print(mlx.get_ambient_temp());
lcd.print(" *c");
lcd.setCursor(0,1);
lcd.print("OBJ = ");
lcd.print(mlx.get_object_temp());
lcd.print(" *c");
delay(500);
}
Output
The following video shows the sensor in action, watch the object temperature rise as I put my finger near the sensor. You will also notice the ambient temperature not changing.
Links
https://www.melexis.com/-/media/files/documents/datasheets/mlx90615-datasheet-melexis.pdf