
سنسور ترموکوپل: از تئوری تا راهاندازی عملی با آردینو
تاریخچه ترموکوپل
پدیدهای که ترموکوپل بر اساس آن کار میکند، برای اولین بار در سال ۱۸۲۱ توسط فیزیکدان آلمانی-استونیایی، توماس یوهان سیبک کشف شد. او مشاهده کرد که وقتی دو سیم غیرهمجنس از دو انتها به هم متصل شده و محل اتصال در معرض گرما قرار گیرد، یک ولتاژ الکتریکی بسیار کوچک در مدار ایجاد میشود. این پدیده که امروزه به نام “اثر سیبک” شناخته میشود، پایه و اساس علم ترموالکتریسیته و سنسورهای ترموکوپل است. در ابتدا این پدیده یک کشف علمی محض بود، اما به مرور زمان و با پیشرفت صنعت، به یکی از پرکاربردترین و قابل اعتمادترین روشهای اندازهگیری دما تبدیل شد.
نحوه کار کرد ترموکوپل
اساس کار ترموکوپل بر “اثر سیبک” استوار است. هنگامی که محل اتصال دو فلز متفاوت (که “اتصال گرم” یا Hot Junction نامیده میشود) حرارت ببیند، الکترونهای موجود در فلزات، انرژی گرمایی را جذب کرده و از ناحیه داغ به ناحیه سرد حرکت میکنند. به دلیل تفاوت در ساختار اتمی و انرژی سطح فرمی دو فلز، سرعت و میزان این حرکت الکترونها متفاوت است. این تفاوت منجر به ایجاد یک نیروی محرکه الکتریکی (EMF) یا به عبارت سادهتر، یک ولتاژ بسیار کوچک (در حد میکروولت) بین دو سر سیمها (که “اتصال سرد” یا Cold Junction نامیده میشود) میشود.

مهم: این ولتاژ تولیدشده مستقیماً با اختلاف دما بین اتصال گرم و اتصال سرد رابطه دارد. برای بدست آوردن دمای واقعی اتصال گرم، باید دمای اتصال سرد نیز اندازهگیری شود (عملیاتی که به آن “جبران اتصال سرد” یا Cold Junction Compensation میگویند). تراشههایی مانند MAX31855 این کار را به طور خودکار انجام میدهند.
ترموکوپل نوع K و سایر انواع
ترموکوپلها در انواع مختلفی با ترکیبات فلزی گوناگون ساخته میشوند که هر کدام برای محدوده دمایی و محیط کاری خاصی بهینه شدهاند.
ترموکوپل نوع K (مهمترین و پرکاربردترین نوع)
- ترکیب فلزی: سیم مثبت (+) از آلیاژ نیکل-کروم (Chromel) و سیم منفی (-) از آلیاژ نیکل-آلومینیوم (Alumel) ساخته شده است.
- محدوده دمایی: قادر به اندازهگیری دما از ۲۰۰- درجه سانتیگراد تا ۱۲۶۰+ درجه سانتیگراد است.
- مزایا: مقرون بهبهصرفه، در دسترس، محدوده دمایی وسیع، و مقاومت خوب در برابر اکسیداسیون.
- معایب: در محیطهای احیایی (کماکسیژن) آسیبپذیر است.
- کاربردها: کورههای صنعتی، اکسترودرها، سیستمهای گرمایشی و آزمایشگاهها.
سایر انواع رایج ترموکوپل
| نوع | ترکیب فلزی | محدوده دمایی (°C) | حساسیت (تقریبی) | کاربردها |
|---|---|---|---|---|
| J | آهن / کنستانتان | ۲۱۰- تا ۱۲۰۰+ | ۵۰ µV/°C | محیطهای خلاء، کاربردهای قدیمی صنعتی |
| T | مس / کنستانتان | ۲۵۰- تا ۴۰۰+ | ۴۰ µV/°C | اندازهگیریهای کمدما (کرایوژنیک)، صنایع غذایی |
| E | نیکل-کروم / کنستانتان | ۴۰- تا ۹۰۰+ | ۶۰ µV/°C | بالاترین خروجی ولتاژ، صنایع شیمیایی |
| N | نیکروسیل / نیسیل | ۲۷۰- تا ۱۳۰۰+ | ۳۹ µV/°C | پایداری و عمر طولانیتر نسبت به نوع K |
مقایسه ترموکوپل با سایر سنسورهای دما
ترموکوپل تنها گزینه برای اندازهگیری دما نیست. درک نقاط قوت و ضعف آن در مقایسه با سایر سنسورها حیاتی است.
| ویژگی | ترموکوپل | RTD (سنسیستور پلاتینی) | ترمیستور (NTC/PTC) | سنسیستور دیجیتال (مانند DS18B20) |
|---|---|---|---|---|
| محدوده دما | بسیار وسیع (تا ۲۳۰۰°C+) | متوسط (۲۵۰- تا ۸۵۰°C) | محدود (۱۰۰- تا ۳۰۰°C) | محدود (۵۵- تا ۱۲۵°C) |
| دقت | متوسط (نیاز به کالیبراسیون) | بسیار بالا | بالا (در محدوده کوچک) | خوب |
| سرعت پاسخ | بسیار سریع | کند | سریع (بسته به بستهبندی) | کند تا متوسط |
| دوام و پایداری | عالی در برابر لرزش و شوک | حساس به لرزش | متوسط | خوب |
| هزینه | کم تا متوسط | بالا | کم | کم |
| سادگی مدار | نیاز به تقویت و جبران اتصال سرد | نیاز به پل وتستون و تقویت | نیاز به مقاومت کششی ساده | بسیار ساده (خروجی دیجیتال) |
جمعبندی:
- ترموکوپل را برای دماهای بسیار بالا، سرعت پاسخدهی سریع، و شرایط سخت مکانیکی انتخاب کنید.
- RTD را برای بالاترین دقت و پایداری در محدوده دمایی متوسط انتخاب کنید.
- ترمیستور یا سنسیستور دیجیتال را برای کاربردهای عمومی، کمهزینه و با محدوده دمایی پایینتر انتخاب کنید.
نحوه راهاندازی سنسور ترموکوپل با میکروکنترلرها
به دلیل ولتاژ بسیار پایین خروجی ترموکوپل (میکروولت) و مشکل جبران اتصال سرد، اتصال مستقیم آن به میکروکنترلر غیرممکن است. بنابراین باید از یک ماژول مبدل ترموکوپل به دیجیتال استفاده کرد. این ماژولها وظایف زیر را انجام میدهند:
- تقویت سیگنال: ولتاژ ضعیف ترموکوپل را به سطح قابل پردازش تقویت میکنند.
- جبران اتصال سرد: دمای محیط اتصال سرد (همان پایههای ماژول) را اندازهگیری و اثر آن را حذف میکنند.
- تبدیل آنالوگ به دیجیتال: سیگنال نهایی را به داده دیجیتال تبدیل میکنند.
معرفی ماژول سنسور دمای ترموکوپل نوع K با تراشه MAX31855 با رابط SPI
ماژول MAX31855 یک راهحل کامل و حرفهای برای کار با ترموکوپل نوع K است.
ویژگیهای کلیدی:
- تراشه: MAX31855
- پشتیبانی از ترموکوپل: نوع K (انواع دیگر مانند J, T, N, S, R, E نیز وجود دارند)
- رابط خروجی: SPI (Serial Peripheral Interface) – یک پروتکل سریال پرسرعت و همگام.
- رزولوشن: ۱۴ بیتی، با دقت ۰.۲۵ درجه سانتیگراد.
- جبران اتصال سرد: دارای سنسور دمای داخلی برای جبران خودکار اتصال سرد.
- تشخیص خطا: قابلیت تشخیص خطاهای اتصال باز (قطع سیم)، اتصال کوتاه و خطای سختافزاری را دارد.
پینهای مهم ماژول:
- VCC و GND: تغذیه ۳.۳V یا ۵V.
- SCK (Serial Clock): پین کلاک از سمت میکروکنترلر.
- CS (Chip Select): پین انتخاب تراشه (Active Low).
- SO (Serial Output): پین خروجی داده از تراشه MAX31855.
- T+ و T-: پایههای اتصال ترموکوپل نوع K.
نحوه راهاندازی با آردوینو و نمایش دما بر روی ماژول OLED
در این بخش، یک پروژه عملی از اتصال ماژول MAX31855 و نمایشگر OLED به آردوینو را مرحله به مرحله اجرا میکنیم.

لوازم مورد نیاز
- برد آردوینو Uno
- ماژول ترموکوپل MAX31855
- ترموکوپل نوع K
- نمایشگر OLED 0.96 اینچی با رابط I2C
- برد بورد و سیم جامپر
شماره ۱: مدار (سیمکشی)
| ماژول MAX31855 | -> | پین آردوینو |
|---|---|---|
| VCC | -> | 3.3V یا 5V |
| GND | -> | GND |
| SCK | -> | پین 13 |
| CS | -> | پین 10 |
| SO | -> | پین 12 |
| نمایشگر OLED | -> | پین آردوینو |
|---|---|---|
| VCC | -> | 3.3V |
| GND | -> | GND |
| SCL | -> | A5 |
| SDA | -> | A4 |
شماره ۲: نصب کتابخانهها
در محیط Arduino IDE، از منوی Tools > Manage Libraries کتابخانههای زیر را جستجو و نصب کنید:
Adafruit MAX31855 libraryAdafruit SSD1306Adafruit GFX Library
شماره ۳: کد نهایی (اسکچ آردوینو)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
// بخش ۱: فراخوانی کتابخانه های ضروری #include <SPI.h> #include <Adafruit_MAX31855.h> // کتابخانه مخصوص ترموکوپل #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // کتابخانه مخصوص نمایشگر OLED // بخش ۲: تعریف پایه ها و اشیاء // پیکربندی ماژول MAX31855 #define MAX_CS 10 #define MAX_SCK 13 #define MAX_MISO 12 Adafruit_MAX31855 thermocouple(MAX_SCK, MAX_CS, MAX_MISO); // پیکربندی نمایشگر OLED #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // بخش ۳: تابع Setup برای راه اندازی اولیه void setup() { Serial.begin(9600); while (!Serial) delay(10); // منتظر مانده برای باز شدن Serial Monitor // بررسی سلامت ماژول ترموکوپل if (!thermocouple.begin()) { Serial.println("ERROR: MAX31855 not found. Check wiring!"); while (1) delay(10); } // بررسی سلامت نمایشگر OLED if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println("ERROR: SSD1306 not found. Check wiring!"); while (1) delay(10); } Serial.println("System Initialized Successfully."); // پیکربندی اولیه صفحه نمایش display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.display(); } // بخش ۴: تابع Loop اصلی که دائما اجرا می شود void loop() { // خواندن دمای سنسور ترموکوپل double celsius = thermocouple.readCelsius(); double fahrenheit = thermocouple.readFahrenheit(); // بررسی بروز خطا در سنسور if (isnan(celsius)) { uint8_t error = thermocouple.readError(); Serial.println("Thermocouple fault detected!"); // نمایش خطا روی OLED display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.print("Sensor Error: "); if (error & MAX31855_FAULT_OPEN) display.println("OPEN"); else if (error & MAX31855_FAULT_SHORT_GND) display.println("SHORT GND"); else if (error & MAX31855_FAULT_SHORT_VCC) display.println("SHORT VCC"); else display.println("UNKNOWN"); display.display(); delay(2000); return; } // چاپ دما در Serial Monitor Serial.print("Temperature: "); Serial.print(celsius); Serial.print(" C / "); Serial.print(fahrenheit); Serial.println(" F"); // بخش ۵: نمایش دما روی نمایشگر OLED display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.println("Thermocouple Type:K"); display.println("-------------------"); display.setCursor(0, 20); display.setTextSize(2); display.print(celsius, 1); // نمایش با یک رقم اعشار display.setTextSize(1); display.println(" C"); display.setCursor(0, 45); display.setTextSize(1); display.print("F: "); display.print(fahrenheit, 1); display.println(" F"); display.display(); delay(2000); // انتظار ۲ ثانیه ای بین خواندن ها } |
توضیح کد:
- بخش ۱ و ۲: تمام کتابخانهها و پایههای لازم فراخوانی و تعریف میشوند.
- بخش ۳: در تابع
setup، ارتباط سریال و قطعات راهاندازی و سلامت آنها بررسی میشود. - بخش ۴: در تابع
loop، دما خوانده شده و ابتدا با تابعisnanوreadErrorاز عدم وجود خطا اطمینان حاصل میشود. - بخش ۵: در صورت سالم بودن سنسور، دما هم در Serial Monitor و هم به صورت گرافیکی روی نمایشگر OLED نشان داده میشود.
نکات نهایی:
- مطمئن شوید سیمهای ترموکوپل (قرمز و زرد) به درستی و با قطبیت صحیح به ترمینالهای +T و -T متصل شدهاند.
- آدرس I2C نمایشگر OLED معمولاً 0x3C است، اما ممکن است در برخی ماژولها 0x3D باشد.
- برای کاربردهای دقیق، میتوانید از میانگینگیری از چندین خوانش پیاپی برای کاهش نویز استفاده کنید.






