راه اندازی ترموکوپل MAX6675 نوع K یکی از موضوعات آموزشی پرطرفدار و کاربردی در حوزه ساخت تجهیزات کنترل و اندازه گیری دما به شمار می آید و البته چگونگی نصب و کنترل این ماژول توسط یک برد آردوینو نیز به یک مبحث جدید برای متخصصان و دانشجویان این رشته تبدیل شده است.
اگر این سوال برایتان پیش آمده که سنسور ترموکوپل چیست و چه کاربردی دارد یا اندازه گیری دما با ماژول ترموکوپل MAX6675 به یک چالش جدید برای شما بدل شده است تا با تبدیل دما به ولتاژ ایدههای جالب خود را عملی کنید٬ زمان را بیشتر از این از دست ندهید و تا انتهای این مطلب همراه ما باشید. در این آموزش نحوه سنجش دما توسط یک ترموکوبل نوع k را با آردوینو یاد خواهیم گرفت. البته پیش از شروع بهتر است ابتدا به طور خلاصه با ماژول ترموکوپل نوع K و پایههای آن و سپس نحوه اتصال آن به ماژول آردوینو آشنا شوید. ما در کنار هم دو برنامهی آردوینو را بررسی خواهیم کرد که دمای خوانده شده از ماژول را برروی مانیتورسریال و همچنین برروی یک صفحه نمایش OLED نمایش میدهد.
ماژول ترموکوپل MAX6675 چیست؟
ماژول MAX6675 همراهبا یک ترموکوپل نوع K و نیز یک درایور و تقویتکننده استفاده میشود تا با تبدیل دما به ولتاژ٬ محدودهی دمایی 0 تا 1024 درجهی سانتیگراد را اندازه گیری کند. این ماژول مقاوم و دقیق یک انتخاب ایدهآل برای اندازه گیری بازه دمای بالایی است که سایر سنسورهای دما مانند LM35 قادر به اندازهگیری آن نیستند و به همین خاطر به ترموکوپل کوره ذوب یا ترموکوپل بویلر نیز معروف هستند. این ماژول شامل یک تراشه MAX6675 است که توسط ترموکوپل نوع K دما را اندازه گیری میکند و برای ارتباط با میکروکنترلر و انتقال دمای خوانده شده به خروجی از یک رابط SPI استفاده میکند.
مشخصات ترموکوپل MAX6675 نوع K:
در ادامه مشخصات فنی این ماژول ذکر شده است:
- رزولوشن 12 بیتی
- با دقت 8 بیت کم ارزش (LSB)
- دقت 0.25 درجهی سلسیوس
- ولتاژ کاری 5 ولت
- جریان کاری 50 میلیآمپر
ترموکوپل (Thermocouple) چیست؟
ترموکوپل ها نوعی سنسور برای اندازه گیری دما هستند و معمولاً دارای دو سیم با جنسهای مختلفند که درواقع انتهای این سیمها به یکدیگر و به ترموکوپل متصل میشود. هنگامی که قصد اندازه گیری دما با ترموکوپل را داریم، لازم است ابتدا سر هر دو سیم ترموکوبل را در محل مورد نظر قرار دهیم. با تغییر دما، این دو مادهی مختلف نیز تغییر شکل میدهند و در نتیجه مقاومت الکتریکی هر سیم تغییر میکند که باعث تغییر ولتاژ در سمت خروجی ترموکوپل میشوند.
- تغییر ولتاژ خروجی ترموکوپل:
خروجی ترموکوپل یک سیگنال ولتاژ در حدود میلیولت است و ولتاژ آن زمانی تغییر میکند که مقاومت آن تغییر کند و این تغییرات ولتاژ به آسانی با کمک ترموکوپل قابل اندازه گیری است.
دماسنج ترموکوپل چگونه کار می کند؟
حال که به طور خلاصه با نحوه اندازه گیری دما با ترموکوپل آشنا شدیم، بهتر است با یک نگاه تخصصی و علمی این فرایند را بررسی و تحلیل کنیم. اساس کار ترموکوپل طبق اثر ترموالکتریک (اثر سیبِک) است. در اثر Seebeck، وقتی دو فلز با جنسهای مختلف در یک نقطه به یکدیگر متصل شده باشند، یک اختلاف پتانسیل بین آنها به وجود میآید که مقدار آن با ترکیبات متفاوت ماده فلزی، متغیر خواهد بود. همچنین زمانی که ولتاژی به دو سر این فلزات اعمال میشود، گرما از یک سمت به سمت دیگر حرکت میکند و باعث ایجاد اختلاف دما میشود.
طبق تصویر بالا، دو فلز مختلف A و B برای ایجاد دو پایانه، به یکدیگر متصل شدهاند که به عنوان “پایانهی اندازهگیری” و “پایانهی مرجع” شناخته میشوند. به یاد داشته باشید که وجود این دو سر برای تشکیل هر ترموکوپلی ضروری است. در آغاز کار دمای سمت پایانهی مرجع مشخص است اما دمای سمت پایانهی اندازهگیری نامشخص است. پایانهی اندازهگیری در محلی قرار میگیرد که میخواهیم دمای آن را اندازه بگیریم، چنانچه هر دو پایانه در یک سطح دمایی باشند، هیچ اختلاف پتانسیلی ایجاد نخواهد شد. بنابراین جریان مدار صفر خواهد بود.
چنانچه دو پایانه در دو سطح دمایی متفاوت باشند، ولتاژی از این طریق القا میشود و در نتیجه جریانی در مدار برقرار میگردد. مقدار این ولتاژ و جریان به جنس فلز هر سیم ترموکوپل و همچنین دمای آنها وابسته است. با اندازهگیری مقدار این ولتاژ یا جریان، میتوانید به راحتی دمای محیط موردنظر را به دست آورید.
درحال حاضر با توجه به نوع فلزی که در ساخت ترموکوپلها به کار میرود، هشت نوع مختلف از آنها در بازار موجود است. در این آموزش از ترموکوپل نوع K با ماژول MAX6675 (نیکل – کروم یا نیکل – آلومل) که از رایجترین نوع ترموکوپلها است، استفاده میکنیم. از جمله ویژگیهای این ترموکوپل میتوان به قیمت کم، دقت بالا و قابلیت اطمینان بالای آن اشاره کرد. همچنین قادر به اندازهگیری محدوده دمای گسترده 454- الی 2300 درجه فارنهایت میباشد.
معرفی پایههای ماژول ترموکوپل MAX6675
در تصویر زیر پایههای ماژول MAX6675 نمایش داده شدهاست:
این ماژول دارای 7 پایه است که 2 پایهی آن همان دو سر مثبت و منفی ترموکوپل، 3 پایه مربوط به رابط SPI و 2 پایهی دیگر مربوط به تغذیه ماژول هستند.
نام پین | کارکرد |
GND | پایه زمین ماژول |
VCC | پایه VCC برای تغذیه ماژول که در رنج 3 تا 5.5 ولت است. |
SCK | پایه کلاک SPI |
CS | پایه انتخاب تراشه SPI |
SO | پایه خروجی سریال |
ترموکوپل + (TH+) | محل اتصال سر مثبت ترموکوپل |
ترموکوپل – (TH-) | محل اتصال سر منفی ترموکوپل |
مثال اول: راه اندازی ترموکوپل MAX6675 با آردوینو و نمایش دما در مانیتور سریال
پس از یادگیری های تئوری در باب نحوه عملکرد و مشخصات این قطعه خاص٬ همانطور که قول داده بودیم نوبت به راه اندازی ترموکوپل MAX6675 با آردوینو می رسد و برای این کار ابتدا لازم است تجهیزات لازم را آماده کرده و سپس با کمک شماتیک حاضر شده اتصالات ترموکوبل و آردوینو را برقرار سازیم:
تجهیزات لازم:
در این پروژه به قطعات زیر نیاز داریم:
مرحله اول) سیم بندی مدار ترموکوپل و آردوینو
جهت راه اندازی ترموکوپل MAX6675 ابتدا باید آن را به صورت زیر به ماژول آردوینو متصل کنید:
همانطور که در شماتیک بالا مشخص شده است٬ پایههای VCC ،GND ،SCK ،CS ،SO از ماژول MAX6675 به آردوینو متصل میشوند. دقت داشته باشید که پایه VCC و GND ماژول را به ترتیب به پایههای 5 ولت و GND آردوینو متصل کنید و پایههای SPI پیشفرض آردوینو را نیز به پایههای SPI ماژول MAX6675 متصل کنید. در تصویر زیر می توانید پایههای SPI پیشفرض آردوینو مشاهده کنید:
البته در جدول زیر نیز اتصالات بین ماژولهای آردوینو و MAX6675 بیان شدهاست تا در انتهای کار مورد بررسی قرار دهید و از برقراری این ارتباطات اطمینان حاصل کنید:
MAX6675 | Arduino |
GND | GND |
VCC | 5V |
SCK | GPIO13 |
CS | GPIO10 |
SO | GPIO12 |
ما نیز طبق الگوی بالا سیمکشیها را انجام میدهیم و ترموکوپل را نیز به ترمینالهای TH+ و TH- ماژول MAX6675 متصل میکنیم.
مرحله دوم) نصب کتابخانهی ماژول ترموکوپل MAX6675
خوشبختانه یک کتابخانهی آردوینو برای این ماژول وجود دارد که مقادیر دمای اندازهگیری شده توسط ترموکوپل را به راحتی در اختیارمان قرار میدهد. این کتابخانه توسط شرکت Adafruit ارائه شدهاست.
برای نصب این کتابخانه، نرمافزار Arduino IDE را باز کرده و به مسیرSketch > Include Libraries > Manage Libraries بروید. در نوار جستجو “MAX6675” را تایپ کرده و آخرین ورژن آن را نصب کنید.
مرحله سوم) آپلود کد در آردوینو
هم اکنون لازم است ابتدا IDE آردوینو خود را باز کرده و از مسیر File > New یک فایل جدید بسازید، کد زیر را در آن کپی و سپس ذخیره کنید.
در این کد از کتابخانهی max6675.h ارائه شده توسط شرکت Adafruit استفاده میکنیم و دما را برحسب درجهی سلسیوس در مانیتور سریال نمایش میدهیم.
#include "max6675.h"
int SO = 12;
int CS = 10;
int sck = 13;
MAX6675 module(sck, CS, SO);
void setup() {
Serial.begin(115200);
}
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
delay(1000);
}
توضیحات: نحوه عملکرد دستورات در آردوینو چگونه است؟
در این بخش قصد داریم برای درک بهتر برنامه اجرا شده، عملکرد هر دستور را برای شما توضیح دهیم:
- برنامه را با افزودن کتابخانهای که قبلاً نصب کرده بودیم، آغاز میکنیم:
#include "max6675.h"
- سپس سه متغیر از نوع عدد صحیح برای پایههای SPI تعریف میکنیم. در اینجا از پایههای SPI پیشفرض آردوینو استفاده کردیم.
int SO = 12;
int CS = 10;
int sck = 13;
- در ادامه یک شیء از MAX6675 تحت عنوان ()module ایجاد میکنیم و متغیرهای SCK، CS و SO را به عنوان ورودیهای آن درنظر میگیریم.
MAX6675 module(sck, CS, SO);
- در تابع ()setup، ارتباط سریال را با باودریت 115200 راهاندازی میکنیم.
void setup() {
Serial.begin(115200);
}
در تابع ()loop، ابتدا تابع ()readCelsius را روی شیء module فراخوانی کرده و مقدار دما را دریافت و آن را در یک متغیر اعشاری تحت عنوان temperature ذخیره میکنیم. سپس دمای خوانده شده را همراه با واحد در مانیتور سریال آردوینو چاپ خواهیم کرد و پس از یک ثانیه، مجدداً این فرآیند تکرار خواهد شد.
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
delay(1000);
}
اکنون کد را بر روی ماژول آردوینو خود بارگذاری کنید. قبل از آپلود کد، برد آردوینو و پورت COM صحیح را انتخاب کنید. برای انتخاب برد آردوینو به مسیر Tools > Board بروید.
برای انتخاب پورت به مسیر Tools > Port بروید و پورت صحیح را انتخاب کنید. برای آپلود کد بر روی دکمهی “Uplode” کلیک کنید. پس از بارگذاری کامل کد، دکمه ریست “RESET” آردوینو را فشار دهید.
مرحله آخر) نمایش تغییرات دما بر روی سریال مانیتور
اکنون مانیتور سریال آردوینو را باز کنید. دمایی که در هر یک ثانیه نمایش داده میشود را مشاهده خواهید کرد.
مثال دوم: راه اندازی ترموکوپل MAX6675 با آردوینو و نمایش دما بر روی نمایشگر OLED
در این قسمت خواهیم دید که چگونه دماهای خوانده شده از ماژول MAX6675 را به کمک آردوینو بر روی یک نمایشگر SSD1306 OLED نمایش دهیم.
با یادگیری آموزش ” راه اندازی ماژول نمایشگر OLED با آردوینو و ESP8266 NodeMCU” خصوصویات و نحوه کار با این مدل نمایشگر محبوب را به طور کامل بشناسید.
تجهیزات لازم:
در این پروژه به قطعات زیر نیاز داریم:
مرحله اول) نصب کتابخانهی SSD1306 OLED
پیش از هر چیز لازم است نرمافزار Arduino IDE را باز کرده و به مسیر Sketch > Library > Manage Libraries بروید. عبارت ‘SSD1306’ را در نوار جستوجو تایپ کرده و کتابخانهی Adafruit SSD1306 OLED را نصب کنید.
- همچنین به کتابخانهی Adafruit GFX نیاز خواهیم داشت که برای استفاده از SSD1306 باید آن را نصب کنیم. در نوار جستجو، ‘Adafruit GFX’ را تایپ کرده و این کتابخانه را نیز نصب میکنیم.
مرحله دوم) برقراری اتصالات
در اینجا نحوهی اتصال ماژول MAX6675 و یک صفحه نمایش OLED به ماژول آردوینو UNO نمایش داده شدهاست. همچنین اتصالات در دو جدول زیر ذکر شدهاست.
آردوینو | صفحه نمایش OLED |
5 V | VCC |
GND | GND |
A5 | SCL |
A4 | SDA |
ترموکوپل MAX6675 نوعK | آردوینو |
GND | GND |
VCC | 5V |
CS | GPIO10 |
SO | GPIO12 |
SCK | GPIO13 |
حال طبق تصویر زیر سیمکشیها را به آسانی انجام دهید:
- طبق این اتصالات ابتدا پایه VCC نمایشگر OLED و ماژول MAX6675 را به پایه 5 ولت آردوینو وصل می کنیم.
- سپس پایه SCL و SDA نمایشگر را به ترتیب به پایههای SCL و SDA برد آردوینو متصل می کنیم.
مرحله سوم) آپلود کد در آردوینو
پس از نصب کتابخانه های لازم و برقراری اتصالات بالا٬ در این مرحله باید کد زیر را در Arduino IDE خود کپی کرده و سپس بر روی برد آردوینو خود آپلود کنید.
#include "max6675.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int SO = 12;
int CS = 10;
int sck = 13;
MAX6675 module(sck, CS, SO);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
display.setTextSize(1);
display.setCursor(0,10);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,30);
display.print(temperature);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
delay(1000);
display.clearDisplay();
}
توضیحات: نحوه عملکرد دستورات در آردوینو چگونه است؟
در این بخش قصد داریم برای درک بهتر برنامه اجرا شده، عملکرد هر دستور را برای شما توضیح دهیم:
- ابتدا همه کتابخانههای مورد نیاز برای ماژول MAX6675 و همچنین نمایشگر OLED را که قبلاً نصب کرده بودیم، اضافه میکنیم.
#include "max6675.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
- سپس سه متغیر از نوع عدد صحیح برای پایههای SPI تعریف میکنیم. در اینجا از پینهای SPI پیشفرض آردوینو استفاده کردیم.
int SO = 12;
int CS = 10;
int sck = 13;
- سپس یک شیء تحت عنوان ( )module ایجاد می کنیم و متغیرهای sck، CS و SO را به عنوان ورودیهای آن درنظر میگیریم.
MAX6675 module(sck, CS, SO);
- اکنون یک شئ تحت عنوان “display” برای کنترل نمایشگر OLED ایجاد میکنیم و عرض، ارتفاع، شماره I2C (&Wire) و “1-” را به عنوان پارامترهای آن وارد میکنیم. “1-” مشخص میکند که نمایشگر OLED که ما استفاده میکنیم پایه RESET ندارد. اگر از پین RESET استفاده میکنید، پین GPIO که از طریق آن به برد آردوینو متصل میشود را مشخص کنید.
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
- در تابع ()setup، ارتباط سریال را با باودریت 115200 راهاندازی می کنیم.
Serial.begin(115200);
- علاوه براین، با فراخوانی تابع ()begin بر روی شیء display، نمایشگر OLED را راهاندازی میکنیم. مطمئن شوید که آدرس صحیح نمایشگر خود را وارد می کنید. در اینجا آدرس نمایشگر ما 0x3C است.
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
- سپس، با استفاده از () clearDisplayبافر روی شیء Adafruit_SSD1306 را پاک میکنیم. علاوه بر این، رنگ متن را به رنگ سفید تعیین میکنیم.
display.clearDisplay();
display.setTextColor(WHITE);
- در تابع ()loop، ابتدا دما را با استفاده از تابع ()readCelsius بر روی شیء module خوانده و آن را در یک متغیر اعشاری به نام “temperature” ذخیره میکنیم. این مقدار را همراه با واحد آن، هر1 ثانیه یک بار در مانیتور سریال چاپ میکنیم.
float temperature = module.readCelsius();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(F("°C "));
- تابع ()setTextSize برای تنظیم سایز فونت متن استفاده میشود. دراینجا از سایز کوچک برای یک متن ساده مانند “دما” و از سایز بزرگ برای نمایش دمای خوانده شده استفاده کردهایم. تابع ()setCursor تعیین میکند که میخواهیم متن خود را در کدام قسمت از نمایشگر اولد 64×128 نمایش دهیم. در نهایت، تابع ()print متن را در موقعیت تعریف شده چاپ میکند. ما در هر ثانیه، دمای خوانده شدهی جدید به همراه واحد آن را در صفحه OLED نمایش میدهیم.
display.setTextSize(1);
display.setCursor(0,10);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,30);
display.print(temperature);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
delay(1000);
display.clearDisplay();
اکنون کد را بر روی آردوینو خود بارگذاری کنید. اما قبل از بارگذاری کد از مسیر Tools > Board مطمئن شوید برد آردوینوی صحیح و همچنین از مسیر Tools > Port، پورت COM صحیح را انتخاب کرده باشید.
پس از آپلود کد، نمایشگر OLED هر ثانیه دمای خوانده شده را بر حسب درجه سانتیگراد نمایش خواهد داد.
پایان آموزش
در این مقاله یادگرفتیم که چگونه با راه اندازی ترموکوپل MAX6675 نوع K قابلیت اندازه گیری دمای بالا را به پروژه های خود اضافه کنیم و حتی بر روی یک نمایشگر میزان دمای یک محیط یا شئ خاصی را مشاهده نماییم.
چنانچه در طول یادگیری این مطلب و پیاده سازی مثال ها سوالی ذهن شما را درگیر کرده است٬ می توانید با ارسال پرسش خود در بخش دیدگاه این آموزش٬ در اسرع زمان پاسخ خود را از کارشناسان ما دریافت نمایید.