آردوینو پروژه های آردوینو

آموزش اتصال ماژول دماسنج غیر تماسی GY-MCU90615 به آردوینو

arduino temperature GY-MCU90615
نوشته شده توسط شهاب کمالی

به وسیله ماژول  GY-MCU90615 قادر خواهید بود دمای اشیا را از فاصله دور بدون تماس با اجسام اندازه گیری نمایید. این ماژول را می‌توان توسط پروتکل Serial  به آردوینو یا هر میکروکنترولر دیگری متصل  نمود.این ماژول علاوه بر استفاده‌های صنعتی در مسابقات رباتیک لیگ‌های آتش‌نشان و امداد‌گر کاربرد دارد.
در این مقاله ما میخواهیم روش متصل کردن این ماژول را به آردوینو آموزش دهیم. در ادامه  آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

سخت افزار مورد نیاز

آردوینو Uno

ماژول دماسنج غیر تماسی 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 و بسکام راه اندازی کنم میشه نحوه کار رو توضیح بدید که به چه صورت این کار رو انجام بدم .خودم کد ها شو می نویسم . با تشکر

  • سلام. من می خوام دما اندازه گیری شده رو با خروجی ۰ تا ۱۰ ولت یا ۰ تا ۵ ولت تبدیل کنم و به یه کنترلر دیگه بفرستم. لطفا راهنمایی کنید.

  • با سلام و خسته نباشید، چه شکلی میشه باد ریت روی ۹۶۰۰ تنظیم کرد؟ آیا باید به جای اون ۳ تا دستور هگز فقط این ۳ تا دستور هگز که مخصوص ۹۶۰۰ هست بزنم؟؟ یا باید علاوه بر اونم چیزی بنویسم؟؟

  • با سلام و تشکر
    ببخشید من چند تا سوال در مورد این ماژول دارم.
    من میخوام این ماژول رو به 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 داره و اصلا با این کد جواب نداد.
    ممنون میشم راهنمایی کنید.

    • با سلام
      ضمن تشکر از توجه شما، در خصوص سوال اولتان کاملا صحیح است و باید این پایه‌ها را جدا کنید، سپس پروگرام کنید. در خصوص سوال دوم باید نویسنده پست راهنمایی کنند. تا اون موقع از کاربرانی که در این زمینه تجربه دارند تقاضا دارم تا در این بحث شرکت کنند.