به وسیله ماژول GY-MCU90615 قادر خواهید بود دمای اشیا را از فاصله دور بدون تماس با اجسام اندازه گیری نمایید. این ماژول را میتوان توسط پروتکل Serial به آردوینو یا هر میکروکنترولر دیگری متصل نمود.این ماژول علاوه بر استفادههای صنعتی در مسابقات رباتیک لیگهای آتشنشان و امدادگر کاربرد دارد.
در این مقاله ما میخواهیم روش متصل کردن این ماژول را به آردوینو آموزش دهیم. در ادامه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.
سخت افزار مورد نیاز
ماژول دماسنج غیر تماسی GY-MCU90615
اتصالات
این ماژول در ولتاژ کاری بین ۳ تا ۵ ولت کار میکند. ما در این آموزش از پین ۳٫۳ ولت استفاده کرده ایم.
- پین ۳٫۳ به vin ماژول
اتصال GND به GND ماژول
اتصال RX به Tx ماژول
اتصال Tx به Rx ماژول
جهت مشاهده خروجی برنامه، تنظیمات سریال زیر را در کنسول مورد نظر خود انجام میدهیم.
۱۱۵۲۰۰ bps parity bit: N Data bits: 8 Stop bits: 1
فرمت دیتا دریافتی به صورت زیر است.
Byte0: 0x5A Preamble Flags
Byte1: 0x5A Preamble Flags
Byte2: 0X45 The frame data types (0X45: temperature data)
Byte3: 0x04 amount of data (data 2 the following four groups, for example)
Byte4: 0x00 ~ 0xFF Data 1 high 8
Byte5: 0x00 ~ 0xFF Data 1 low 8
Byte6: 0x00 ~ 0xFF Data 2 high 8
Byte8: 0x00 ~ 0xFF checksum (data accumulation and front, leaving only the lower 8 bit)
کدنویسی
unsigned char Re_buf[11],counter=0; unsigned char sign=0; float TO=0,TA=0; void setup() { Serial.begin(115200); delay(1); Serial.write(0XA5); Serial.write(0X45); Serial.write(0XEA); } void loop() { unsigned char i=0,sum=0; 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; Serial.print("TO:"); Serial.println(TO); TA=(float)(Re_buf[6]<<8|Re_buf[7])/100; Serial.print("TA:"); Serial.println(TA); } } } void serialEvent() { while (Serial.available()) { Re_buf[counter]=(unsigned char)Serial.read(); if(counter==0&&Re_buf[0]!=0x5A) return; counter++; if(counter==9) { counter=0; sign=1; } } }
شرح برنامه
Serial.begin(115200); delay(1); Serial.write(0XA5); Serial.write(0X45); Serial.write(0XEA);
جهت تنظیمات ماژول کدهایی را به صورت هگزادسیمال هشت بیتی میتوانیم به ماژول بفرستیم که فرمت دستور دادن به ماژول به صورت :
(header + command + checksum (8bit است
مانند: ۰xA5 + 0x45 + 0xEA که جهت خواندن اتوماتیک دما استفاده میشود.
جهت تنظیم Baud rate نیز میتوانید از دستورات زیر استفاده کنید:
۰xA5 + 0xAE + 0x53 ————— 9600
۰xA5 + 0xAF + 0x54 ————— 115200
ماژول به صورت پیش فرض در سرعت انتقال ۱۱۵۲۰۰ تنظیم شده.
در این قسمت از کد برنامه به محض دریافت اطلاعات ۹ بایت میخواند و درون آرایه ذخیره میکند:
void serialEvent() { while (Serial.available()) { Re_buf[counter]=(unsigned char)Serial.read(); if(counter==0&&Re_buf[0]!=0x5A) return; counter++; if(counter==9) { counter=0; sign=1; } } }
در قسمت loop برنامه، TO(دمای شی) و TA(دمای محیط) محاسبه میگردد:
void loop() { unsigned char i=0,sum=0; 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; Serial.print("TO:"); Serial.println(TO); TA=(float)(Re_buf[6]<<8|Re_buf[7])/100; Serial.print("TA:"); Serial.println(TA); } } }
فرمول محاسبه TO,TA به صورت زیر است.
High temperature = 8 << 8 | Low 8 (results for the actual angle multiplied by 100)
برای مثال اگر دستور A5 45 EA را فرستادیم و بایت های زیر را دریافت کردیم:
<5A- 5A- 45- 04- 0C- 78- 0D- 19- A7>
دمای شی از بایت پنجم و ششم به صورت زیر محاسبه میشود:
TO = 0x0C78 / 100 = 31.92 ℃
و دمای محیط از بایت هفتم و هشتم به صورت زیر محاسبه میشود:
TA = 0x0D19 / 100 = 33.53 ℃
سلام
من کارها را انجام دادم ولى توى قسمت تنظیمات سریال نمیتونم، راه اندازى اش کنم. لطفا راهنمایى کنید.
درود دوست عزیز یه تنظیمات زیر حتما توجه کنید
۱۱۵۲۰۰bps parity bit: N Data bits: 8 Stop bits: 1
جهت خروجی سریال باید سرعت انتقال و بقیه پارامتر ها تنظیم باشند
سلام
من می خوام این سنسور رو با avr و بسکام راه اندازی کنم میشه نحوه کار رو توضیح بدید که به چه صورت این کار رو انجام بدم .خودم کد ها شو می نویسم . با تشکر
سلام. من می خوام دما اندازه گیری شده رو با خروجی ۰ تا ۱۰ ولت یا ۰ تا ۵ ولت تبدیل کنم و به یه کنترلر دیگه بفرستم. لطفا راهنمایی کنید.
با سلام و خسته نباشید، چه شکلی میشه باد ریت روی ۹۶۰۰ تنظیم کرد؟ آیا باید به جای اون ۳ تا دستور هگز فقط این ۳ تا دستور هگز که مخصوص ۹۶۰۰ هست بزنم؟؟ یا باید علاوه بر اونم چیزی بنویسم؟؟
با سلام
ضمن تشکر از توجه شما، توضیحات کامل در این زمینه در یک فایل PDF در صفحه ماژول دماسنج غیر تماسی GY-MCU90615 قسمت دانلودها قرار داده شدهاست. طبق آموزش فایل مربوطه پیش بروید.
با سلام و تشکر
ببخشید من چند تا سوال در مورد این ماژول دارم.
من میخوام این ماژول رو به nodemcu 2102 وصل کنم
وقتی پایه های rx رو به tx و tx رو به rx ماژول nodemcu وصل میکنم و کدی رو که گذاشتید پروگرام میکنم خطا های زیر رو میده:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
به همین خاطر مجبور میشم mcu90615 رو جدا کنم بعد پروگرام کنم و دوباره وصل کنم
سوال بعدی این کدی که شما گذاشتید از توابع mlx90614 استفاده میکنه که اون ماژول پایه های sda و scl داره ولی mcu90615 پایه rx و tx داره و اصلا با این کد جواب نداد.
ممنون میشم راهنمایی کنید.
با سلام
ضمن تشکر از توجه شما، در خصوص سوال اولتان کاملا صحیح است و باید این پایهها را جدا کنید، سپس پروگرام کنید. در خصوص سوال دوم باید نویسنده پست راهنمایی کنند. تا اون موقع از کاربرانی که در این زمینه تجربه دارند تقاضا دارم تا در این بحث شرکت کنند.