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

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

توجه
برای راهاندازی سنسور با آردوینو UNO باید توجه داشت که برد UNO تنها یک رابط UART دارد که آنهم برای ارتباط با کامپیوتر استفاده میشود، و اگر بخواهیم از همین پینها برای ارتباط با ماژول استفاده کنیم دیگر امکان مشاهده پورت سریال وجود نخواهد داشت. همچنین ارتباط سنسور با برد باید پس از کامپایل برنامه صورت پذیرد. برای حل این مشکل میتوانیم از ارتباط UART مجازی استفاده کنیم به این صورت که ابتدا کتابخانه SoftwareSerial را به نرمافزار آردوینو اضافه نموده و پین های دیگری را به عنوان RX و TX پیکربندی کنیم.
زمانی به 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;
}
}
}
}
خروجی باید مانند تصویر زیر باشد. توجه داشته باشید که با تغییر زاویۀ سنسور، اعداد باید تغییر کنند.
