د میلیکسیس MLX90614 انفراریډ ترمامیتر د Arduino LCD1602 سره کارول
پرته له فزیکي تماس څخه د تودوخې اندازه کول یوه په زړه پورې وړتیا ده چې د ډیرو عملي او تخلیقي پروژو لپاره دروازه پرانیزي. د Melexis MLX90614 انفراریډ ترمامیتر دا ممکنه کوي چې د شیانو لخوا خارج شوي حرارتي وړانګې کشف کړي، تاسو ته اجازه درکوي چې له خوندي فاصلې څخه تودوخه اندازه کړئ. دا لارښود به تاسو ته وښیې چې څنګه دا څو اړخیز سینسر له Arduino سره وصل کړئ او د شیانو او محیطي تودوخې دواړه په I2C LCD سکرین کې ښکاره کړئ (یا د 16x2 یا 20x4 کرکټر ښودنه).


دا پروژه د پراخو غوښتنلیکونو لپاره مناسبه ده، لکه:
- د کلینیک یا دفتر د ننوتلو په نقطه کې د تماس پرته د تبه سکرینینګ سټیشن جوړول.
- د 3D چاپګر بستر یا ګرم سر تودوخه څارل پرته له دې چې په چاپ کې مداخله وکړي.
- د پخلي یا شرابو جوړولو لپاره د خوړو د تودوخې خوندي، غیر تماس چیکر جوړول.
- د بدن د تودوخې نښو په اندازه کولو سره د ساده انساني شتون کشف کونکي پراختیا.
- د خوځنده ماشین برخو یا بریښنایی پینلونو تودوخه له خوندي فاصلې څخه معاینه کول.
د MLX90614 سینسر د I2C پروتوکول له لارې اړیکه نیسي، چې معنی یې دا ده چې یوازې دوه ډیټا پنونو (SDA او SCL) ته اړتیا لري سربیره پردې بریښنا او ځمکې ته. دا تارونه مستقیم کوي او ډیر پنونه د نورو برخو لپاره آزاد پریږدي. د دې ټیوټوریل په پای کې، تاسو به یو کار کوونکی د تودوخې ښودنه ولرئ چې کولی شي لوستل په سیلسیس، فارنهایټ، یا کیلوین کې وښیې، او تاسو به پوه شئ چې څنګه کوډ د خپلو ځانګړو اړتیاو لپاره تنظیم کړئ.
اړین هارډویر
د دې پروژې د جوړولو لپاره، تاسو به لاندې برخو ته اړتیا ولرئ:
- Arduino بورډ (Uno، Nano، Mega، او داسې نور)
- د MLX90614 انفراریډ تودوخې سینسر ماډل
- I2C LCD ښودنه (16x2 یا 20x4 کرکټرونه)
- جمپر تارونه
- بریډبورډ (اختیاري، د اسانه اړیکو لپاره)
د تارونو لارښود
د دې پروژې لپاره تارونه ساده دي ځکه چې دواړه د MLX90614 سینسر او LCD ښودنه د I2C مخابراتي پروتوکول کاروي. دا پدې مانا ده چې دوی کولی شي ورته دوه ډیټا لینونه (SDA او SCL) شریک کړي، کوم چې په موازي ډول وصل دي. سینسر په 3.3V منطق کې کار کوي، مګر دا د Arduino د 3.3V محصول څخه بریښنا کیدی شي. د LCD ماډل، په هرصورت، معمولا د خپل بیک لایټ او منطق لپاره 5V ته اړتیا لري (په ویډیو کې په 03:15).
دلته د اړیکو ماتول دي:
- MLX90614 VCC → Arduino 3.3V
- MLX90614 GND → Arduino GND
- MLX90614 SCL → Arduino A5 (SCL)
- MLX90614 SDA → Arduino A4 (SDA)
- LCD VCC → Arduino 5V
- LCD GND → Arduino GND
- LCD SCL → Arduino A5 (SCL)
- LCD SDA → Arduino A4 (SDA)
څرنګه چې I2C د بس پروتوکول دی، تاسو کولی شئ په ورته دوو لینونو کې تر 128 پورې وسایل وصل کړئ (په ویډیو کې په 03:44). که تاسو د Arduino Uno یا Nano کاروئ، د SDA او SCL پنونه په ترتیب سره په A4 او A5 کې موقعیت لري. د نورو بورډونو لپاره لکه Mega، دا پنونه په مختلفو ځایونو کې دي (20 او 21)، نو ډاډه اوسئ چې د خپل بورډ پن آوټ وګورئ.

د کتابتونونو تنظیمول
د کوډ اپلوډ کولو دمخه، تاسو اړتیا لرئ دوه اړین کتابتونونه نصب کړئ. لومړی د Adafruit MLX90614 کتابتون دی، کوم چې د تودوخې سینسر سره اړیکه اداره کوي. دوهم د LiquidCrystal I2C کتابتون دی، کوم چې د I2C بس له لارې د LCD ښودنې کنټرول ساده کوي. دا کتابتونونه د Arduino کتابتون مدیر له لارې د دوی د نومونو په لټون کولو سره نصب کیدی شي.
د کتابتونونو له نصبولو وروسته، تاسو باید د خپلو وصل شویو وسایلو I2C پتې وټاکئ. دا یو مهم ګام دی ځکه چې دواړه سینسر او LCD خپل ځانګړي پتې لري. چمتو شوی کوډ یو ځانګړی "I2C سکینر" سکیچ شاملوي چې تاسو کولی شئ د دې پتو موندلو لپاره خپل Arduino ته اپلوډ کړئ. کله چې تاسو سکینر د دواړو وسایلو سره وصل کړئ، دا به دوه پتې سریال مانیټر ته چاپ کړي. په ویډیو کې، LCD په 0x3F او د MLX90614 سینسر په 0x5A کې وموندل شو (په ویډیو کې په 06:28). ستاسو وسایل ممکن مختلف پتې ولري، نو دا اړینه ده چې سکینر پرمخ یوسئ او ارزښتونه یاد کړئ.
د کوډ تشریح
کوډ د انعطاف وړ ډیزاین شوی، تاسو ته اجازه درکوي چې په اسانۍ سره تنظیم کړئ چې کوم تودوخې واحدونه ښودل کیږي او څنګه معلومات په LCD کې وړاندې کیږي. دلته د کوډ کلیدي کارن-قابل تنظیم برخې دي (په ویډیو کې په 04:31):
LCD تنظیم
د کوډ په سر کې، تاسو به د خپل ځانګړي LCD ښودنې لپاره ترتیبات ومومئ. تاسو اړتیا لرئ دا ارزښتونه د خپل هارډویر سره سمون لپاره تنظیم کړئ:
const uint8_t I2C_ADDRESS = 0x3f; // ستاسو د LCD I2C پته
const uint8_t LCD_CHAR = 16; // په هر کرښه کې د کرکټرونو شمیر (16 یا 20)
const uint8_t LCD_ROW = 2; // په ښودنه کې د کرښو شمیر (2 یا 4)
I2C_ADDRESS د هغه پتې ته بدل کړئ چې تاسو د I2C سکینر په کارولو سره وموندله. که تاسو د 20x4 LCD کاروئ، LCD_CHAR په 20 او LCD_ROW په 4 وټاکئ.
د تودوخې واحدونو ښودل
کوډ د مختلفو تودوخې لوستلو استازیتوب لپاره د تورو هوښیار سیسټم کاروي. اصلي فنکشن printTemp('X') یو واحد کرکټر دلیل اخلي ترڅو معلومه کړي چې څه ښکاره کړي. نقشه په لاندې ډول ده:
'C'- د شیانو تودوخه په سیلسیس کې'D'- محیطي تودوخه په سیلسیس کې'F'- د شیانو تودوخه په فارنهایټ کې'G'- محیطي تودوخه په فارنهایټ کې'K'- د شیانو تودوخه په کیلوین کې'L'- محیطي تودوخه په کیلوین کې
په loop() فنکشن کې، تاسو کولی شئ هغه لوستنې غوره کړئ چې غواړئ یې ښکاره کړئ، د هغو کرښو په غیر تبصره کولو سره چې ورته اړتیا لرئ. د مثال په توګه، د دواړو شیانو او محیطي تودوخې لپاره یوازې د سیلسیس لوستنې ښودلو لپاره، ستاسو لوپ به داسې ښکاري:
void loop() {
printTemp('C'); // د شیانو تودوخه په C کې
delay(2000);
printTemp('D'); // محیطي تودوخه په C کې
delay(2000);
}
که تاسو غواړئ دواړه فارنهایټ او سیلسیس ښکاره کړئ، په ساده ډول اضافي کرښې غیر تبصره کړئ. د لوستنو ترمنځ د 2000 ملی ثانیو (2 ثانیو) ځنډ تاسو ته وخت درکوي چې ښکاره شوي لوستنې ولولئ.
د ښکاره شویو نښو دودیز کول
تاسو کولی شئ هغه متن نښې بدلې کړئ چې په LCD باندې ښکاري. typeName[] لړۍ د شیانو او محیطي تودوخې لپاره نښې لري:
char *typeName[]={"شیان:","محیطي:"};
تاسو کولی شئ دا تارونه بدل کړئ ترڅو په خپله خوښه ژبه کې متن ښکاره کړئ، تر هغه چې دا د لاتیني تورو څخه کار اخلي (په ویډیو کې په 05:08 کې).
د شرایطو پر بنسټ کړنو اضافه کول
کوډ کې یو ګټور فنکشن getTemp('X') هم شامل دی چې تودوخه د فلوټینګ پوائنټ عدد په توګه بیرته راګرځوي. دا تاسو ته اجازه درکوي چې د تودوخې حدونو پر بنسټ کړنې ترسره کړئ. د مثال په توګه، تاسو کولی شئ یو ریلې یا بزر فعال کړئ که چیرې تودوخه له یو ټاکلي ارزښت څخه لوړه شي:
if( getTemp('C') > 40)
{
// دلته یو څه وکړئ، لکه ریلې یا بزر فعالول
}
دا په ځانګړي ډول د الارم سیسټمونو یا د تودوخې بدلونونو ته اتوماتیک ځوابونو جوړولو لپاره ګټور دی.
ښکارونه
یوځل چې کوډ پورته شي او تارونه سم وي، LCD به د تودوخې لوستنې ښکاره کول پیل کړي. په ښکارونه کې، سینسر مختلفو شیانو ته اشاره شوی و ترڅو وښیې چې څنګه ځواب ورکوي. کله چې د یو کس تندي ته اشاره شوې وه، سینسر د بدن تودوخه شاوخوا 33-34°C اندازه کړه (په ویډیو کې په 09:39 کې). کله چې یخې سطحې ته اشاره شوې وه، لوستنې د شیانو لپاره شاوخوا 26°C او د محیطي تودوخې لپاره 28°C ته راټیټې شوې (په ویډیو کې په 09:52 کې).
سینسر خورا باثباته دی او دوامداره لوستنې چمتو کوي. ویډیو دا هم ښیې چې څنګه کوډ بدل کړو ترڅو یوازې د سیلسیس لوستنې ښکاره کړو، د فارنهایټ او کیلوین لپاره د کرښو په تبصره کولو سره. دا د کرښو په غوره کولو او د Arduino IDE د تبصرې ځانګړتیا (Ctrl+/ یا Cmd+/) په کارولو سره ترسره کیږي، کوم چې د هرې کرښې په پیل کې دوه سلیشونه (//) اضافه کوي.
په ډیفالټ ډول، کوډ د دواړو شیانو او محیطي تودوخې لپاره لوستنې په سیلسیس کې ښکاره کوي. تاسو کولی شئ په اسانۍ سره فارنهایټ یا کیلوین ته واړوئ، د loop() فنکشن کې د مناسبې کرښو په غیر تبصره کولو سره. LCD به بیا د هر دوو ثانیو وروسته د شیانو او محیطي لوستنو ترمنځ بدیل وکړي.
فصلونه
- [00:00] د MLX90614 د LCD پروژې پیژندنه
- [01:20] د ښکاره کولو اختیارونه: LCD2004 او LCD1602
- [02:29] د تارونو تشریح
- [04:28] د کوډ تشریح
- [04:53] د I2C پتې موندل
- [08:35] ښکارونه
- [10:47] پایلي خبرې او کریډیټونه
++
/***************************************************
This is a library example for the MLX90614 Infrared Temperature Sensor with LCD1602
Original Library and code source: https://github.com/adafruit/Adafruit-MLX90614-Library
This code has been mostly updated.
It displays the temperature on LCD1602 or LCD2004 in C, F, and K for object and for ambient.
*
* Watch video instructions for this code: https://youtu.be/_iO2L4P_irw
Updated/written by Ahmad Shamshiri on June 28, 2020
* in Ajax, Ontario, Canada. www.robojax.com
Introduction to MLX90614 Infrared Temperature Sensor: https://youtu.be/cFDSqiEIunw
* Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a 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 downloaded 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();
#include <LiquidCrystal_I2C.h>
const uint8_t I2C_ADDRESS =0x3f;
const uint8_t LCD_CHAR= 16;
const uint8_t LCD_ROW= 2;
LiquidCrystal_I2C lcd(I2C_ADDRESS, LCD_CHAR,LCD_ROW);
void setup() {
Serial.begin(9600);
Serial.println("Robojax MLX90614 test");
if (!mlx.begin()) //Begin returns 0 on a good init
{
lcd.print("MLX90614 Failed");
lcd.setCursor(0,1);
lcd.print("check wiring!");
while (1)
;
}
Wire.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax MLX90614");
lcd.setCursor(0,1);
lcd.print("Infrared Temp.");
delay(2000);
clearCharacters(LCD_ROW-1,0, LCD_CHAR-1);
}//setup() end
void loop() {
//Robojax Example for MLX90614 with LCD
printTemp('C');//object temperature in C
delay(2000);
printTemp('D');//ambient temperature in C
delay(2000);
//
// printTemp('F'); //object temperature in F
// delay(2000);
//
// printTemp('G'); //ambient temperature in F
// delay(2000);
// if( getTemp('C')>40)
// {
// //do something here
// }
//
// printTemp('K'); //object temperature in K
// delay(2000);
// printTemp('L');//ambient temperature in K
// delay(2000);
//Robojax Example for MLX90614
}
/*
* @brief returns temperature or relative humidity
* @param "type" is a character
* C = Object Celsius
* D = Ambient Celsius
*
* K = Object Kelvin
* L = Ambient Kelvin
*
* F = Object Fahrenheit
* G = Ambient 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 March 30, 2020.
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
float getTemp(char type)
{
// Robojax.com MLX90614 Code
float value;
float tempObjec = mlx.readObjectTempC();//in C object
float tempAmbient = mlx.readAmbientTempC();
if(type =='F')
{
value = mlx.readObjectTempF(); //Fahrenheit Object
}else if(type =='G')
{
value = mlx.readAmbientTempF();//Fahrenheit 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 a character
* C = Object Celsius
* D = Ambient Celsius
*
* K = Object Kelvin
* L = Ambient Kelvin
*
* F = Object Fahrenheit
* G = Ambient 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 March 30, 2020 at 21:51
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
void printTemp(char type)
{
clearCharacters(1,0, LCD_CHAR-1 );
// Robojax.com MLX90614 Code
float tmp =getTemp(type);
lcd.setCursor(0,1);
if(type =='C')
{
lcd.print(typeName[0]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("C");
}else if(type =='D')
{
lcd.print(typeName[1]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("C");
}else if(type =='F')
{
lcd.print(typeName[0]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("F");
}else if(type =='G')
{
lcd.print(typeName[1]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("F");
}
else if(type =='K')
{
lcd.print(typeName[0]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("K");
}
else if(type =='L')
{
lcd.print(typeName[1]);
lcd.print(" ");
lcd.print(tmp);
lcd.print((char)223);//
lcd.print("K");
}
// Robojax.com MLX90614 Code
}//printTemp(char type)
/*
clearCharacters(uint8_t row,uint8_t start, uint8_t stop)
* @brief clears a line of display (erases all characters)
* @param none
* @return does not return anything
* Written by Ahmad Shamshiri
* www.Robojax.com code May 28, 2020 at 16:21 in Ajax, Ontario, Canada
*/
void clearCharacters(uint8_t row,uint8_t start, uint8_t stop )
{
for (int i=start; i<=stop; i++)
{
lcd.setCursor (i,row); //
lcd.write(254);
}
}//clearCharacters
هغه شیان چې تاسو ورته اړتیا لرئ
-
امازون
-
امازونMLX90614 Non-Contact sensor on Amazon Canadalink.amazon
-
ای بی
-
علی ایکسپریسMLX90614 Non-Contact sensor on AliExpresss.click.aliexpress.com
سرچینې او حوالې
فایلونه📁
نور فایلونه
-
Adafruit MLX90614 library (from Robojax)
robojax_MLX90614-_Adafruit_Library-master.zip -
Melexis MLX90614 datasheet (PDF)
robojax_MLX90614_Datasheet-Melexis.pdf