ترموگرافی چیست؟
زمانیکه اجسام شروع به گرم شدن می کنند، گرمایی که از آنها منتشر می شود به صورت امواج مادون قرمز در فضا رها می شوند. مادون قرمز با چشم مستقیم قابل رویت نیست اما می توان این امواج را توسط دوربین ها و سنسورهای مربوطه که به سنسورهای ترموگرافی معروف هستند مشاهده نمود. از همین رو، یکی از راه های اندازه گیری میزان دمای اجسام مختلف، اندازه گیری میزان امواج مادون قرمزی است که از آن جسم منتشر می شود. که به این شیوه اندازه گیری دما ترموگرافی می گویند. همچنین در این شیوه اندازه گیری دما نیازی به اتصال مستقیم سنسور به اجسام نیست و در حقیقت اندازه گیری دما به شیوه غیر تماسی انجام می گیرد.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
ماژول دماسنج مدل غیرتماسی GY-90615 | 1 عدد |
LCD کاراکتری مدل 16×2 با Backlighting آبی | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
ماژول دماسنج مادون قرمز GY-MCU90615
در بسیاری از پروژه ها و کاربردهای صنعتی لازم است دمای یک جسم را از راه دور بدون اتصال سنسور به بدنه آن اندازه گیری کنیم. در اینگونه پروژه ها معمولا از شیوه اندازه گیری دما توسط امواج مادون قرمز استفاده می شود. ماژول GY-MCU90615 یک دماسنج مادون قرمز می باشد که این امکان را به شما می دهد دمای یک جسم را بدون اینکه لازم باشد با آن در تماس باشد به صورت غیر تماسی در محدوده منفی 40 درجه الی مثبت 115 درجه سانتی گراد اندازه گیری کنید. لازم به ذکر است این ماژول دماسنج توانایی اندازه گیری دمای خود سنسور را در بازه بین منفی 40 الی مثبت 85 درجه سانتی گراد را نیز دارد.
ماژول دماسنج مادون قرمز GY-MCU90615 از پروتکل ارتباطی سریال پشتیبانی می کند به همین دلیل می توانید به راحتی هرچه تمام آنرا با بردهای آردوینو Arduino و میکروکنترلرهای AVR یا هر پردازنده و برد توسعه دهنده دیگری که از ارتباط UART پشتیبانی می کند راه اندازی کنید. ماژول دماسنج GY-MCU90615 را می توانید با ولتاژ 3 الی 5 ولت راه اندازی کنید. همچنین جریان مصرفی این ماژول دماسنج تنها 5 میلی آمپر است و از دو نرخ انتقال 9600 و 115200 پشتیبانی می کند.
نقشه شماتیک راه اندازی ماژول دماسنج GY-MCU90615 با آردوینو
در این پروژه آردوینو از مبحث آموزش آردوینو می خواهیم شما را با نحوه برنامه نویسی و ساخت یک دماسنج مادون قرمز با ماژول GY-MCU90615 و برد Arduino Uno آشنا کنیم. همانطور که در نقشه شماتیک مشاهده می کنید در طراحی این پروژه برای نمایش اطلاعات از یک LCD کاراکتری 16*2 استفاده شده است. برد آردوینو پس از دریافت مقادیر اندازه گیری شده هر دو دمای جسم و دمای خود سنسور ماژول GY-MCU90615، اطلاعات دریافتی را بر روی ال سی دی کاراکتری نمایش می دهد.
برنامه راه اندازی ماژول دماسنج GY-MCU90615 با نرم افزار آردوینو
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 |
#include <LiquidCrystal.h> #include <SoftwareSerial.h> //*********************************************Setup LCD const int contrast_display = 80; const int backlight_display = 255; //*********************************************Config Pin_LCD const int LCD_Pin_contrast = 9; const int LCD_Pin_RS = 2; const int LCD_Pin_RW = 3; const int LCD_Pin_E = 4; const int LCD_Pin_D4 = 5; const int LCD_Pin_D5 = 6; const int LCD_Pin_D6 = 7; const int LCD_Pin_D7 = 8; const int LCD_Pin_backlight = 10; LiquidCrystal lcd(LCD_Pin_RS, LCD_Pin_RW, LCD_Pin_E, LCD_Pin_D4, LCD_Pin_D5, LCD_Pin_D6, LCD_Pin_D7); //*********************************************Config Pin GY_MCU90615 SoftwareSerial mySerial(12, 11); // RX, TX //*********************************************Config Value unsigned char Re_buf[11], counter = 0; unsigned char sign = 0; float TO = 0, TA = 0; //*********************************************Subprogram setup() void setup() { analogWrite(LCD_Pin_contrast, contrast_display); analogWrite(LCD_Pin_backlight, backlight_display); mySerial.begin(115200); mySerial.listen(); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("*electronics 98*"); lcd.setCursor (0, 1); lcd.print(">Arduino Project"); delay(3000); lcd.clear(); mySerial.write(0XA5); mySerial.write(0X45); // Enable Output mySerial.write(0XEA); } void loop() { unsigned char i = 0, sum = 0; while (mySerial.available()) { Re_buf[counter++] = (unsigned char)mySerial.read(); if (counter == 1 && Re_buf[0] != 0x5A) { counter = 0; // Waiting for Start of Data return; } if (counter == 2 && Re_buf[1] != 0x5A) { counter = 0; return; } if (counter == 9) // Data Received { counter = 0; // Get Ready for next Stream sign = 1; } } // Data received, so let's parse it if (sign) { sign = 0; for (i = 0; i < 8; i++) sum += Re_buf[i]; if (sum == Re_buf[i] ) // Check header { TO = (float)(Re_buf[4] << 8 | Re_buf[5]) / 100; lcd.setCursor(0, 0); lcd.print("TO:"); lcd.print(TO); lcd.print(" "); TA = (float)(Re_buf[6] << 8 | Re_buf[7]) / 100; lcd.setCursor(0, 1); lcd.print("TA:"); lcd.print(TA); lcd.print(" "); } } } |
آموزش برنامه نویسی ماژول GY-MCU90615 در نرم افزار آردوینو
همانطور که پیشتر گفته شد ماژول GY-MCU90615 بر اساس پروتکل سریال اقدام به تبادل داده با سایر دستگاه ها می کند به همین دلیل به راحتی می توانید مقادیر اندازه گیری شده دما را از ماژول دریافت نمائید و یا تنظیمات مورد نظر خود را همانند مقدار باود ریت بر روی ماژول اعمال کنید.
اندازه گیری اتوماتیک میزان دما
برای اعمال این تنظیم بر روی ماژول تنها کافی است همانند کد زیر، دستور 0xA5 + 0x45 + 0xEA برای ماژول ارسال کنید.
1 2 3 |
Serial.write(0XA5); Serial.write(0X45); Serial.write(0XEA); |
تنظیم نرخ انتقال ماژول بر روی 115200
برای اعمال این تنظیم بر روی ماژول تنها کافی است همانند کد زیر، دستور 0xA5 + 0xAF + 0x54 برای ماژول ارسال کنید.
1 2 3 |
Serial.write(0XA5); Serial.write(0xAF); Serial.write(0x54); |
توجه : در حالت پیش فرض نرخ انتقال ماژول دماسنج GY-MCU90615 توسط کارخانه سازنده بر روی مقدار 115200 تنظیم شده است.
تنظیم نرخ انتقال ماژول بر روی 9600
برای اعمال این تنظیم بر روی ماژول تنها کافی است همانند کد زیر، دستور 0xA5 + 0xAE + 0x53 برای ماژول ارسال کنید.
1 2 3 |
Serial.write(0XA5); Serial.write(0xAE); Serial.write(0x53); |
دریافت اطلاعات دما
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
while (Serial.available()) { Re_buf[counter++] = (unsigned char)Serial.read(); if (counter == 1 && Re_buf[0] != 0x5A) { counter = 0; return; } if (counter == 2 && Re_buf[1] != 0x5A) { counter = 0; return; } if (counter == 9) { counter = 0; sign = 1; } } |
محاسبه و نمایش میزان دمای جسم و خود سنسور
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if (sign){ sign = 0; for (i = 0; i < 8; i++) sum += Re_buf[i]; if (sum == Re_buf[i] ) { TO = (float)(Re_buf[4] << 8 | Re_buf[5]) / 100; lcd.setCursor(0, 0); lcd.print("TO:"); lcd.print(TO); lcd.print(" "); TA = (float)(Re_buf[6] << 8 | Re_buf[7]) / 100; lcd.setCursor(0, 1); lcd.print("TA:"); lcd.print(TA); lcd.print(" "); } } |
با سلام و احترام
این پروژه 100 درصد عملی و تست شده می باشد و اشکالی در برنامه آن وجود ندارد، علت عدم نمایش اطلاعات صحیح بر روی نمایشگر می تواند به دلیل اتصال اشتباه ماژول به برد آردوینو و یا خرابی ماژول باشد.
سلام
این دستگاه دیتالاگر هم داره؟
سفارش ساخت دستگاه (به همراه دیتالاگر) قبول می کنید؟
با سلام و احترام
خیر – این پروژه فاقد دیتالاگر است
با عرض پوزش فراوان در حال حاضر امکان قبول و یا توسعه پروژه برایمان مقدور نیست.