آیا IC مدار شما آنقدر داغ میشود که حتی نمیتوانید آن را لمس کنید؟ آیا احساس میکنید نیاز دارید که تغییرات دمای قطعات مدار را دائما تحت نظر داشته باشید تا متناسبا فن را خاموش و روشن کنید؟ آیا چیزی که نیاز دارید یک دماسنج بدون تماس نیست که به راحتی قابل کنترل باشد؟ این دقیقا همان کاری ست که از سنسور دمای مادون قرمز MLX90614 قرار است از عهده آن بربیاید!
یا حتی ممکن است دوست داشته باشید که یک ماژول MLX90614 و تست برای این سنسور داشته باشید، که بتواند با آردوینو نیز ارتباط برقرار کند. چرا که نه! تصویر زیر همان چیزی است که مد نظر شماست، نه؟
چیزی که در تصویر فوق میبینید، یک برد آردوینو است که در آن از دماسنج مادون قرمز MLX90614-ABB استفاده شده است. استفاده از این دماسنج بسیار ساده است اما در عین حال قدرت اندازهگیری فوقالعادهای دارد و قادر است دماهای از 70- درجه تا 380 درجه سانتیگراد را اندازهگیری کند. همچنین اینترفیس این برد به صورت SMBus است( چیزی شبیه I2C اینترفیس) و برای ارتباط با آن کافی ست میان آن و میکروکنترلر به کمک دو عدد سیم اتصال برقرار کنیم.
در این آموزش چه مطالبی را خواهیم داشت؟
هدف این آموزش این است که اولا خیلی سریع شما را با این دماسنج مادون قرمز کاربردی آشنا کند و سپس نحوهی برقراری ارتباط آردوینو با آن( خود دماسنج به تنهایی با آردوینو و یا برد ماژول MLX90614 آن با آردویو) را توضیح خواهیم داد. تا جایی که لازم باشد سعی میکنیم که مفاهیم، جداول دیتاشیتها و اصطلاحات را به صورت دقیق و عمیق بررسی کنیم و آموزش را با انجام یک آزمایش عملی تکمیل کنیم. در ضمن این پروژه با یک کتابخانه جدید از آردوینو نیز آشنا خواهیم شد.
به این ترتیب فهرست عناوینی که در ادامه خواهیم خواند از این قرار است:
- مروری بر دماسنج مادون قرمز MLX90614 – مروری سریع بر نکات تئوری، ویژگیها و اینترفیس های این ماژول.
- مروری بر بورد ماژول MLX90614 – آشنایی مختصری با ویژگیهای این برد
- نحوه استفاده در مدارها – چگونه از این دماسنج (به تنهایی) در مدارها استفاده کنیم و یا اینکه چگونه ارتباط آن را با برد ارزیابش برقرار کنیم.
- آشنایی با کتابخانه MLX90614 Arduino – طریقه نصب و استفاده از کتابخانه SparkFunMLX90614، مربوط به دماسنج مادون قرمز.
پیشنهاداتی برای پیشمطالعه
در ادامهی این آموزش، بعضا از برخی مفاهیم پایهای مدارها و الکترونیک استفاده شده است که ممکن است با آنها آشنا نباشید. در زیر عناوین تعدادی از آنها و لینکهای مفیدی برای آشنایی با آنها را میآوریم که اگر نیاز داشتید پیش از شروع مطالعهی این متن و یا در حین آن به آنها سری بزنید.
مروری بر سنسور دمای مادون قرمز MLX90614
ساختار داخلی این دماسنج از دو مدار تزویج شده تشکیل شده است؛ یکی سنسور ترموپیل و دیگری پروسسور مبدل سیگنال( سیگنال کاندیشنر). براساس قانون استفان- بولتزمن، هر شیئی که دمای آن زیر صفر مطلق کلوین نباشد، از خود تشعشات مادون قرمزی ساطع میکند که شدت آنها دقیقا متناسب با دمای آنهاست. ( بدیهی ست که این تشعشات با چشم غیرمسلح انسانی قابل رویت نیستند.). سنسور ترموپیل درون این دماسنج ، میزان این تشعشات را برای اشیائی که در محدودهی میدان حساسیت آن باشند اندازه گیری میکند و متناسب با آنها یک سیگنال الکتریکی تولید میکند.
زیرنویس عکس: بلوک دیاگرام داخلی دماسنج MLX90614 که دو مدار تزویج شده آن را نشان میدهد. این عکس در صفحه 10ام دیتاشیت دماسنج موجود است.
سیگنال ولتاژ تولید شده توسط ترموپیل به به پروسسور 17-bit ADC منتقل میشود و پروسسور پیش از ارسال آن به میکروکنترلر، آن را به فرمت قابل استفاده برای آن تبدیل میکند.
شکل پایه های (پین اوت) MLX90614
بدنه این قطعه از جنس فلزی و از نوع TO-39 can است و چهار پایه دارد. دو پایه مخصوص اتصال به منبع تغذیه و دو تا پایه جهت اینترفیس SMBus. روی بدنه یک شکاف کوچک وجود دارد که کمک میکنید راحتتر بتوانید پایههای توان را از اینترفیس ها تشخیص دهید. ( تصویر زیر را ببینید.)
زیرنویس عکس: پین اوت MLX90614. به شکاف توجه کنید که پین بالایی آن پین شماره یک است. این تصویر از صفحه 5ام دیتاشیت گرفته شده است.
قابلیت های دماسنج مادون قرمز
این سنسور همواره دو دما را اندازهگیری میکند. اولی دمای شیئ یا همان قطعهای است که شما مدنظر دارید و به صورت مادون قرمز و بدون تماس اندازهگیری میشود و دومی دمای سطح خود دماسنج است که به عنوان دمای محیط اندازهگیری میشود. کاربرد دمای محیط در کالیبره کردن است زمانی که دمای قطعات مختلفی را میخواهیم اندازهگیری کنیم. اما کار اصلی دماسنج همان اندازهگیری اولی یعنی خواندن دمای قطعات مورد نظر ماست. بازهی این اندازهگیری از 70- درجه سانتی گراد تا 382.2 درجه سانتیگراد (از 94- تا 719.96 درجه فارنهایت) میتواند متغیر باشد. در حالیکه بازهی ممکن برای اندازهگیری دمای محیط از 40- است تا 125 درجه سانتیگراد. دقت اندازهگیری هردو دما 0.02 درجه سانتیگراد است.
MLX90614BAA
دماسنج MLX90614 دارای انواع مختلفی است که نامگذاری آنها به این صورت است که هر کدام پس از عبارت MLX90614، دارای یک پسوند 3 حرفی اختصاصی هستند. تفاوت آپشنهای آنها در ولتاژ کاری، تعداد ترموپیلهای مادون قرمز و فیلتر داخلی یا خارجی است. نوع MLX90614BAA دارای ولتاژ کاری 3V ، یک سنسور مادون قرمز و فیلتر داخلی است.
همچنین این انواع موجود هرکدام میدان دید متفاوتی نیز دارند. مثلا میدان دید MLX90614BAA ، 90 درجه است.
اما منظور از میدان دید چیست؟
میدان دید – فاصلهی یک بعدی یا شعاع ؟
میدان دید یا به اختصار (FOV (field-of-view در یک دماسنج مادون قرمز یکی از ویژگیهای مهم محسوب میشود که حتما باید به آن توجه داشته باشیم. این پارامتر رابطه میان فاصله قطعه تا دماسنج و مقداری از فضا که توسط دماسنج قابل رویت است را تعیین میکند. از طرفی میدان دید این دماسنج مخروطی شکل است به این معنا که هرچه قدر شیئ به سنسور نزدیک تر باشد، میدان دید سنسور باریکتر و هرچه دورتر باشد میدان دید وسیعتر خواهد بود. در مورد MLX90614BAA این میدان دید نسبتا وسیع و در حدود 90 درجه است. به این ترتیب هر 1 سانتی متری که از شیئ دورتر شوی، میدان دید تقریبا 2 سانتی متر بزرگتر میشود. و اگر فرض کنیم که حدود 1 فوت (30.48 سانتی متر) از سنسور دور باشیم، میدان دید سنسور تقریبا دو فوت(60.96 سانتی متر) خواهد بود.
اینترفیسهای خارجی
گفتیم که این دماسنج دو اینترفیس خارجی دارد که البته یکی از آنها تنها با واسطه دیگری قابل دسترسی است. برای ارتباط با سنسوراساسی ترین چیزی که نیاز داریم یک SMBus دوسیمی است. پس از اتصال این باس به سنسور، میتوان سنسور را به گونهای تنظیم کرد که دمای اندازهگیری شده را به صورت یک سیگنال PWM ( مدولاسیون پهنای پالس) به میکروکنترلر ارسال کند.
پروتکل (SMBus(I2C
SMBus دو سیمی، تا حد زیادی مشابه I2C Bus عمل میکند. به این ترتیب که سیگنال های SCL و SDA به ترتیب سیگنال های کلاک و داده خواهند بود . سیگنال کلاک توسط یک کنترلر خارجی کنترل میشود اما سیگنال داده تحت کنترل دوطرفه است.
آدرس I2C در تمامسنسور دمای مادون قرمز MLX90614 ، به صورت پیشفرض 0X5A است اما قابلیت تغییر دارد که این ویژگی یکی از قابلیتهای مهم این قطعه است چرا که با کمک تغییر آدرسها، میتوان دماسنج های متعددی را به یک باس وصل نمود ( حداکثر 127 تا) و به این ترتیب جدول بزرگتری از دماها ایجاد نمود. و اما نکته آخر در مورد اینترفیس SMBus اینکه هر انتقال دادهای که در آن انجام میشود( خواندن یا نوشتن)، حتما با اعمال یک کدکشف خطای 8 بیتی (8-bit CRC (CRC-8-CCITT) check) پایان مییابد که در بررسی صحت دادهها بسیار تاثیرگذار است.
PWM و رله حرارتی
دادههای سنسور دمای مادون قرمز MLX90614 را از طریق اینترفیس PWM نیز میتوان خواند و در این حالت تنها یک سیم برای خواندن داده ها نیاز است ؛ سیگنال SDA. برای استفاده از این اینترفیس باید تنظیمات دماسنج را از حالت SMBus تغییر داد.
با تغییر محدوده دمایی دماسنج ؛ یعنی تنظیم کردن حداکثر و حداقل دمای قابل خوانش دماسنج، خروجی PWM به یک رله حرارتی تبدیل میشود. سطح سیگنال PWM تا زمانی که دمای شیئ مورد نظر از یک آستانهی تعیین شده بالاتر نباشد، پایین میماند. برای آشنایی بیشتر و دقیقتر با دماسنج MLX90614، حتما به دیتاشیت آن مراجعه کنید.
لینک دانلود دیتاشیت ماژول MLX90614:
https://www.sparkfun.com/datasheets/Sensors/Temperature/MLX90614_rev001.pdf?_ga=2.82007953.665597979.1577611389-1003707515.1576252640
مروری بر ماژول MLX90614
این بورد به صورت آماده دماسنج MLX90614 را به یک میکرو ATmega328 متصل نموده و دیگر لازم نیست شما درگیر برقرار کردن اتصالات بین این دو شوید؛ آنهم با واسطه برد بورد!
میکرو موجود بر روی این بورد توسط یک کد UART-based و بوت لودر آردوینو از پیش برنامهریزی شده است. پس از اندارهگیری دما توسط اینترفیس سریال ، میتوانید از همان پورت سریال کمک بگیرید و برنامه خودتان را بر روی میکرو لود کنید.
پیناوت ماژول MLX90614
هدرهایی که در ضلعهای مختلف این بورد قرار دارند دسترسی خوبی را به سیگنالهای میکروپروسسور، باسهای تغذیه فراهم کردهاند. همچنین اینترفیس SPI میکرو نیز بر روی هدر ICSP قرار دارد.
نگران نباشید؛ برچسبهای نامگذاری پینها را در سمت پشتی بورد میتوانید ببینید و نیازی نیست که هر بار بخواهید به این عکس یا دیتا شیت مراجعه کنید.
با استفاده از پینهای ورودی و خروجی عاممنظوره(GPIO )ی اضافی، شما میتوانید از این برد در دل پروژههای دیگر استفاده کنید. مثلا یک نمایشگر سریال سون-سگمنت یا LCD یا هر IC دیگری که در آن پروژه وجود داشته باشد را به بورد دماسنج متصل کنید. همچنین به کمک پروتکل I2C بورد میتوان سنسورهای دیگری نیز به آن متصل کرد مثلا سنسور تشخیص نور یا تشخیص حرکت.
زیرنویس عکس: متصل کردن بورد MLX90614 به یک میکرو LED به منظور ساختن یک ماژول سادهی دماسنج مادون قرمز!
LEDهای راهنما
بورد دارای دو LED سبز و قرمز مجاور است. LED سبز به پین دیجیتال شماره 8 ( PB0) متصل است و به حساس به ولتاژ پایین (َactive low) است یعنی در صورت وصل بودن به زمین روشن میشود و در صورت اتصال به ولتاژ بالاتر خاموش خواهد شد. LED قرمز رنگ نیزمربوط به روشن بودن بورد است. با روشن شدن آن روشن شده و با خاموش شدن بورد این LED نیز خاموش میشود.
نحوه استفاده از سنسور دمای مادون قرمز MLX90614 و ماژول آن در مدارها
نحوه اتصال دادن MLX90614
اگر نمیخواهید از بورد ماژول استفاده کنید و یا به آن دسترسی ندارید، خودتان هم میتوانید آن را به هر میکروکنترلری که قالبیت اتصال به آردوینو داشته باشد اتصال دهید ( یا به طور کلی هر میکرویی که اینترفیس I2C داشته باشد.)
- پایه ی تغذیه ی دماسنج را به ولتاژ 3.3V وصل کنید.
- پایه های SDA و SCL را به ترتیب به SDA و SCA وصل کنید.
- یک مقاومت 4.7K Ω را به عنوان مقاومت پول آپ بین دو سیگنال های I2C وصل کنید.
و محض یادآوری: برای تشخیص اینکه هرکدام از پایههای دماسنج کدام است، همانطور که در بخشهای قبلی توضیح دادیم، از شکاف روی بدنه آن استفاده کنید!
نحوه استفاده از بورد ماژول دماسنج در مدارها
برای استفاده از بورد، ابتدا لازم است مقداری لحیم کاری کنید! حداقل در مورد 6 پین سریال باید حتما این کار را بکنید. اما چه چیزی را قرار است به آنها وصل کنیم؟ ما از پین هدر نری رایت استفاده میکنیم ؛ هرچند که از نوع مستقیم آنها نیز میتوانید استفاده کنید.
ممکن است بخواهید همین کار را در مورد GPIO هدر ها یا ICSP هدر ها هم انجام دهید؛ اگر قصد دارید با اینترفیس SPI یا ورودیهای آنالوگ ارتباط برقرار کنید مشکلی نیست.
وصل کردن ماژول مبدل USB به سریال
ساده ترین راه برای ارتباط برقرار کردن با این بورد در مدارها استفاده از ماژول مبدل USB به سریال (و برعکس) است که هم تغذیهی آن را تامین میکند و هم یک اینترفیس سریال میان بورد و کامپیوتر برقرار میکند.
توجه کنید که در هنگام وصل کردن مبدل، به برچسب های GRN و BLK دقت داشته باشید (مشخص کننده سیمهای سبز و مشکی ). همچنین توجه کنید که مبدل FTDI حداکثر میتواند 50mA جریان را تامین کند. این مقدار جریان برای برد دماسنج کافی است اما اگر بخواهید ماژولهای دیگری را نیز به پروژه اضافه کنید حتی باید منبع تامین جریان اضافهای را نیز متناسبا در نظر بگیرید. رابطی که این بورد برای برنامه نویسی ارائه میدهد از بوت لودر سریال از پیش برنامه نویسی شده و IDE آردوینو استفاده میکند.
استفاده از فرم ویر از پیش برنامه نویسی شده (Pre-Programmed Firmware)
یکی از مزیت های این بورد این است که با یک سری کدهای ساده از پیش برنامهنویسی شده است که به ما این امکان را میدهند که پیش از درگیر شدن با کدهای پیچیدهای که برای پروژههای خودمان مینویسیم، صحت عملکرد دماسنج را به کمک آنها بررسی کنیم. یکی از این دمو کدها دمای شیئ و دمای محیط را با نرخ 38400 بیت بر ثانیه (bps) اندازه گرفته و از طریق اینترفیس سریال منتشر میکند. برای مشاهدهی این خروجی، یک ترمینال سریال را به دلخواه خود باز کنید (اگر هیچ ترمینال سریالی از قبل ندارید و با آنها نیز آشنا نیست آموزش مربوط به ارتباط سریال و نرم افزار ترمینال سریال را مطالعه کنید.) و بادریت را روی 38400 bps تنظیم کنید. ( 8 بیت داده ، بدون پریتی چک و 1 بیت هم به عنوان stop bit). شما باید رشتهی تولیدی از خوانش دمای شیء را ببینید که در هر 1 دقیقه یا همین حدود دمای جدیدی خوانده میشود.
هربار دمای جدیدی خوانده شود ، ال ای دی “STAT” یک بار چشمک میزند.
هر زمان که احساس کردید به عملکرد بورد تسلط کافی دارید و از صحت آن نیز اطمینان پیدا کردید، سراغ مرحله بعدی بروید که چیزی نیست به جز نوشتن کد اینترفیس با دماسنج مادون قرمز در پروژه منحصر به فرد خودتان!
آشنایی با کتابخانه MLX90614 Arduino
با کمک این کتابخانه ، استفاده از آردوینو برای ارتباط برقرار کردن با این دماسنج، دقیقا به سادگی اتصال آن در مدارهاست.
دانلود و نصب کتابخانه
این کتابخانه را میتوانید از اینجا دانلود کنید. یا بر روی لینک زیر کلیک کنید تا فایل زیپ آن به صورت مستقیم دانلود شود. اگر در مورد گیت هاب اطلاع ندارید مطلب آموزش گیت هاب را بخوانید.
https://github.com/sparkfun/SparkFun_MLX90614_Arduino_Library/archive/master.zip
برای اضافه کردن این کتابخانه به آردوینو، IDE را باز کنید و به مسیر زیر بروید:
Sketch > Include Library > Add .ZIP Library
و فایل زیپی که دانلود کردید را انتخاب کنید.
اجرای دمو کد (MLX90614_Serial_Demo)
این مدل از بورد کد کاربردی را به عنوان مثالل در درون خود دارد. از جمله کد مخصوص برای قرائت دماهای خوانده شده توسط سنسور و یا کد تغییر آدرسهای 7 بیتی (که در قسمت های قبل توضیحات لازم در مورد آنها داده شد.) ما در اینجا ساده ترین مثال را باز میکنیم. برای این کار ابتدا به مسیر زیر بروید:
File > Examples > SparkFun MLX90614 > MLX90614_Serial_Demo
کد را بارگذاری کنید و سپس سریال مانیتور را باز کنید و بادریت را بر روی 9600 bps تنظیم کنید. خروجی ای که مشاهده میکنید باید در فرمتی مشابه فرمت تصویر زیر، دماهای قرائت شده از شیء و محیط را نمایش دهد.
تلاش کنید دماسنج را در نزدیکی اشیائی قرار دهید که در اطرافتان وجود دارند. مثلا میلهی هویه! یا مثلا آن را به گوش خودتان نزدیک کنید و از تب داشتن یا نداشتن تان مطلع شوید!
استفاده از کتابخانه MLX90614
تکه هایی از کد در تمام کدهایی که برای ارتباط با MLX90614 مینویسید مشترک هستند و فقط کافی ست آنها را کپی کنید. این قسمت ها را با هم مرور میکنیم. در آغاز کتابخانه the SparkFunMLX90614 را include میکنید. سپس یک متغیر گلوبال با عنوانی مانند IRTherm تعریف کنید که در ادامهی قسمتها بتوانید از آن استفاده کنید.
#include <Wire.h> // Include Wire.h - Arduino I2C library #include <SparkFunMLX90614.h> // Include IR thermometer library IRTherm temp; // Create an IRTherm object called temp
پس از آن و معمولا از طریق تابع ()setup ، سنسور را با ()begin مقداردهی اولیه میکنیم. این تابع یک پارامتر دلخواهد دریافت میکند، مثلا آدرس 7 بیتی سنسور را ( در صورتی که آدرس را تغییر نداده باشید و از ماژول های متعدد نیز استفاده نکرده باشید، آدرس پیش فرض سنسور 0x5A است. یا مثلا فرض کنید که بخواهید از در خواندن دماها از واحدی غیر از سلسیوس ( که پیش فرض برنامه است) استفاده کنید؛ مثلا کلوین یا فارنهایت. در این صورت از تابع ()setunit میتوانید استفاده کنید.
temp.begin(); // Initialize I2C library and the MLX90614 temp.setUnit(TEMP_F); // Set units to Farenheit (alternatively TEMP_C or TEMP_K)
خروجی گرفتن از سنسور هم یک کد دو تکهای ساده دارد. خواندن دما توسط دماسنج و سپس به روز کردن جدول دما های خوانده شده. برای آنکه سنسور بتواند دما را بخواند از تابع ()read استفاده میکنیم که در صورت موفقیت در خواندن 1 را برمیگرداند و در صورت بروز خطا و عدم موفقیت 0 را برمیگرداند. اگرعملکرد تابع read موفقیت آمیز باشد، برای بروز رسانی واعلام دماهای خوانده شده از شیء و محیط، به ترتیب از توابع ()object و ()ambient کمک میگیریم.
if (temp.read()) // Read from the sensor { // If the read is successful: float ambientT = temp.ambient(); // Get updated ambient temperature float objectT = temp.object(); // Get updated object temperature Serial.println("Ambient: " + String(ambientT)); Serial.println("Object: " + String(objectT)); Serial.println(); }
اگر قبلا از دستور ()setunit استفاده کرده باشید، دماهای خوانده شده براساس واحدی که شما تنظیم کرده باشید محاسبه و نمایش داده میشوند. اگر دوست داشتید بیشتر با کتابخانه SparkFunMLX90614 آشنا شوید ، برخی از مثالهای دیگری که در آن وجود دارند را مطالعه کنید.
امیدوارم از مقاله را اندازی سنسور دمای مادون قرمز MLX90614 مطالب مفیدی را یادگرفته باشید. اگر علاقمند بودید توصیه میکنم لیست پروژه های آردوینو را چک کنید و راه اندازی سنسورهای دیگر را هم ببینید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
ضمن عرض سلام و خسته نباشید خدمت شما اساتید محترم
بنده سوالی داشتم در این مورد آیا میتوانیم این ماژول رو به مگا 8 وصل کنیم لطفا در مورد مرا راهنمایی بفرمایید
قبلا از زحمات شما سپاسگزارم