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
Code
This MLX90615 sensor code comes from the following library which I installed – https://github.com/skiselev/MLX90615
[codesyntax lang=”cpp”]
#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); }
[/codesyntax]
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