راه‌اندازی ماژول ژیروسکوپ و شتاب‌سنج 3 محوره GY-25

ماژول سنسور GY-25، یک سنسور 3 محوره با رزولوشن بالا بر پایه سنسور MPU6050 است. چیپ سنسور MPU6050 شامل یک شتاب‌سنج 3-محوره به همراه یک ژیروسکوپ 3-محوره می‌باشد.

blogpost cover

آموزش راه‌اندازی ماژول ژیروسکوپ و شتاب‌سنج 3 محوره GY-25 با آردوینو

 

ماژول سنسور GY-25، یک سنسور 3 محوره با رزولوشن بالا بر پایه سنسور MPU6050 است. چیپ سنسور MPU6050 شامل یک شتاب‌سنج 3-محوره به همراه یک ژیروسکوپ 3-محوره می‌باشد.

این ماژول همچنین دارای یک آی‌سی میکروکنترلر به نام 32F030F4P6 است. این میکروکنترلر، پردازش و تبدیل اطلاعات سنسور MPU6050 را برای بدست آوردن مقدار زاویه بر عهده دارد.

 

ارتباط ماژول GY-25 با میکروکنترلر و برد آردوینو از طریق واسط UART صورت می‌گیرد. همچنین امکان استفاده از واسط I2C نیز در این ماژول فراهم شده که می‌توان با استفاده از آن اطلاعات خام سنسور MPU6050 را خواند. علاوه بر این دو پد جامپر برای انتخاب نوع ارتباط روی برد تعبیه شده که با اتصال کوتاه کردن آن‌ها واسط I2C برد فعال می‌شود. دو پد جامپر دیگر هم روی برد وجود دارد که امکان انتخاب بادریت (Baud rate) بین 9600 و 115200 را فراهم می‌آورد.

 

ولتاژ کاری ماژول 3-5 ولت است؛ یعنی هم می‌تواند در مد 3.3 ولت و هم در مد 5 ولت راه‌اندازی شود.

 

 

 

GY-25 Module

مشخصات فنی ماژول GY-25

• بازه اندازه گیری محور‌های مختلف: -180 تا +180 درجه

• دقت اندازه‌گیری: 0.01 درجه

• پاسخ فرکانسی: 100HZ (115200bps)

• جریان در حالت کار: 15 میلی آمپر

• دمای مجاز عملیاتی: -20 تا 85 درجه سلسیوس

• ابعاد: 15.5mm*15.5mm


 معرفی پایه‌های (Pinout) ماژول شتاب سنج GY-25

 

ماژول GY-25 دارای هشت پایه به شرح زیر است:

• VCC: تغذیه ماژول، 3 تا 5 ولت

• RX: پین دریافت اطلاعات پروتکل سریال

• TX: پین ارسال اطلاعات پروتکل سریال

• GND: زمین

• RST: ریست (به صورت داخلی استفاده شده)

• B0: به صورت داخلی استفاده شده

• SCL: کلاک برای ارتباط I2C

• SDA: خط دیتای ارتباط I2C

 

 GY-25 Pinout


قطعات مورد نیاز

  1. Arduino UNO R3
  2. ژیروسکوپ و شتاب‌سنج 3 محوره GY-25
  3. سیم جامپر
  4. برد بورد

راه‌اندازی ماژول ژیروسکوپ و شتاب‌سنج GY-25 با آردوینو

توجه

برای راه‌اندازی سنسور با آردوینو UNO باید توجه داشت که برد UNO تنها یک رابط UART دارد که آن‌هم برای ارتباط با کامپیوتر استفاده می‌شود، و اگر بخواهیم از همین پین‌ها برای ارتباط با ماژول استفاده کنیم دیگر امکان مشاهده پورت سریال وجود نخواهد داشت. همچنین ارتباط سنسور با برد باید پس از کامپایل برنامه صورت پذیرد. برای حل این مشکل می‌توانیم از ارتباط UART مجازی استفاده کنیم به این صورت که ابتدا کتابخانه SoftwareSerial را به نرم‌افزار آردوینو اضافه نموده و پین های دیگری را به عنوان RX و TX پیکربندی کنیم.

تعریف UART مجازی در آردوینو

زمانی به SOFTWARE-UART نیاز پیدا می‌کنیم که UART سخت افزاری را نتوانیم استفاده کنیم و یا به تعداد بیشتری رابط نیاز داشته باشیم. برای این کار کافیست مراحل زیر را دنبال کنید.

پیکربندی پایه‌های UART مجازی:

static const int RXPin = 8, TXPin = 7;     // announce your Rx and Tx pins
SoftwareSerial newserial(RXPin, TXPin);  // “newserial” is our software

کد بالا یک پورت ارتباط سریال جدید برای ما ایجاد کرده است که پین شماره 8 به عنوان TX و پین شماره 7 به عنوان RX پیکربندی شده‌اند.

تعیین باد ریت پورت سریال جدید:

newserial.begin(115200);

 کتابخانه SoftwareSerial امکان برقراری ارتباط سریال با بادریت‌های 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600,  و  115200 را فراهم می‌آورد.

هشدار

ماژول GY-25 تنها با یکی از دو سرعت 9600 و یا 115200 کار می‌کند. برای کار در مد 9600، باید دو پد مربوطه (پایین سمت چپ برد) که در تصویر نشان داده شده ‌را اتصال کوتاه کنید.

ما در برنامه خود، از سرعت انتقال 115200 برای ارتباط آردوینو و سنسور استفاده می‌کنیم، بنابراین نیازی به اتصال کوتاه کردن پد‌ها نیست.

گام اول: سیم بندی

گام دوم: کد

کد زیر را در آردوینو کپی و اجرا کنید.

/*GY-25 test Code
 *2023-01-11 electropeak by Ali Akbar Hosseini
 * using software serial for communating with Arduino Uno
 * if using Mega or any thing with more than One Serial channel use hardwareSerial
 * connect sensor TX to arduino RX(in this code pin #8) 
 * connect sensor RX to arduino TX(in this code pin #7)
 */
#include <SoftwareSerial.h> // software Serial, to use another pins as TX, RX
static const int RXPin = 7, TXPin = 8; // announce your Rx and Tx pins
SoftwareSerial newserial(RXPin, TXPin);
float Roll,Pitch,Yaw;
unsigned char Re_buf[8],counter=0;

void setup()
{ 
Serial.begin(9600);
newserial.begin(115200); // SoftwareSerial can only support 9600 baud rate for GY-25 but Serial3 can support 115200 and 9600 both
delay(4000); 
newserial.write(0XA5); 
newserial.write(0X54);//correction mode
delay(4000);
newserial.write(0XA5); 
newserial.write(0X51);//0X51:query mode, return directly to the angle value, to be sent each read, 0X52:Automatic mode,send a direct return angle, only initialization 
}
//looooooooooooooooooop
void loop() {
if (newserial.available()) { 
serialEvent();
Serial.print("roll= ");
Serial.print(Roll);
Serial.print(" pitch= "); 
Serial.print(Pitch);
Serial.print(" yaw= "); 
Serial.println(Yaw);
}
else Serial.println("check connections");
delay(200);
}
//loooooooooooooooooooop END
//data reading function
void serialEvent() { 
 newserial.write(0XA5); 
 newserial.write(0X51);//send it for each read
 while (newserial.available()) { 
 Re_buf[counter]=(unsigned char)newserial.read();
 if(counter==0&&Re_buf[0]!=0xAA) return; 
 counter++; 
 if(counter==8) { // package is complete 
 counter=0; 
 if(Re_buf[0]==0xAA && Re_buf[7]==0x55) { // data package is correct 
 Yaw=(int16_t)(Re_buf[1]<<8|Re_buf[2])/100.00; 
 Pitch=(int16_t)(Re_buf[3]<<8|Re_buf[4])/100.00;
 Roll=(int16_t)(Re_buf[5]<<8|Re_buf[6])/100.00;
 } 
 } 
 } 
}

خروجی باید مانند تصویر زیر باشد. توجه داشته باشید که با تغییر زاویۀ سنسور، اعداد باید تغییر کنند.