Lesson 38: Using MLX90614 Infrared Temperature Sensor with Arduino
Related or required files and link to this lesson
- Adafruit MLX90614 Library (from Robojax)(zip)
- Adafruit MLX90614 Library (from GitHub)
- BME280 manufacturer website
- Melexis MLX90614 Datasheet (pdf)
- Melexis Website Official Web Site
Part 4: Temperature Sensors
In this lesson we learn how to use MLX90614 Infrered Temperature Sensor and measure the temperature and display it on the serial monitor.
/***************************************************
* Robojax Arduino Step By Step Course
* Part 4: Temperature Sensors
This is a library example for the MLX90614 Temp Sensor
Original Library and code source: https://github.com/adafruit/Adafruit-MLX90614-Library
The code has been updated. I have added two funcitons. Also the Kelivin
value added into the C and F units.
1-First function to print the temperature on Serial Monitor
2-2nd Funciton return the temperature so it can be used for Display or other purpose
Please watch video instruction here https://youtu.be/548PLHgZkoQ
This code is available at http://robojax.com/course1/?vid=lecture37
with over 100 lectures Free On YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
*
If you found this tutorial helpful, please support me so I can continue creating
content like this. You can support me on Patreon http://robojax.com/L/?id=63
or make donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Origin
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Wire.h>
#include <Adafruit_MLX90614.h>
char *typeName[]={"Object","Ambient"};
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
Serial.begin(9600);
Serial.println("Robojax MLX90614 test");
mlx.begin();
}
void loop() {
//Robojax Example for MLX90614
printTemp('C');
printTemp('D');
printTemp('F');
printTemp('G');
if( getTemp('C')>40)
{
//do something here
}
printTemp('K');
printTemp('L');
Serial.println("======");
delay(3000);
//Robojax Example for MLX90614
}
/*
* @brief returns temperature or relative humidity
* @param "type" is character
* C = Object Celsius
* D = Ambient Celsius
*
* K = Object Keliven
* L = Ambient in Keilven
*
* F = Object Fahrenheit
* G = Ambient in Fahrenheit
* @return returns one of the values above
* Usage: to get Fahrenheit type: getTemp('F')
* to print it on serial monitor Serial.println(getTemp('F'));
* Written by Ahmad Shamshiri on Mar 30, 2020.
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
float getTemp(char type)
{
// Robojax.com MLX90614 Code
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
float value;
float tempObjec = mlx.readObjectTempC();//in C object
float tempAmbient = mlx.readAmbientTempC();
if(type =='F')
{
value = mlx.readObjectTempF(); //Fah. Object
}else if(type =='G')
{
value = mlx.readAmbientTempF();//Fah Ambient
}else if(type =='K')
{
value = tempObjec + 273.15;// Object Kelvin
}else if(type =='L')
{
value = tempAmbient + 273.15;//Ambient Kelvin
}else if(type =='C')
{
value = tempObjec;
}else if(type =='D')
{
value = tempAmbient;
}
return value;
// Robojax.com MLX90614 Code
}//getTemp
/*
* @brief nothing
* @param "type" is character
* C = Object Celsius
* D = Ambient Celsius
*
* K = Object Keliven
* L = Ambient in Keilven
*
* F = Object Fahrenheit
* G = Ambient in Fahrenheit
* @return prints temperature value in serial monitor
* Usage: to get Fahrenheit type: getTemp('F')
* to print it on serial monitor Serial.println(getTemp('F'));
* Written by Ahmad Shamshiri on Mar 30, 2020 at 21:51
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
void printTemp(char type)
{
float tmp =getTemp(type);
if(type =='C')
{
Serial.print(typeName[0]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println("C");
}else if(type =='D')
{
Serial.print(typeName[1]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println("C");
}else if(type =='F')
{
Serial.print(typeName[0]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println("F");
}else if(type =='G')
{
Serial.print(typeName[1]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println("F");
}
else if(type =='K')
{
Serial.print(typeName[0]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println(" K");
}
else if(type =='L')
{
Serial.print(typeName[1]);
Serial.print(" ");
Serial.print(tmp);
Serial.print("°");
Serial.println(" K");
}
}//printTemp(char type)