ویژگیهای ماژول ژیروسکوپ و شتابسنج 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
• بازه اندازه گیری محورهای مختلف: -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 با آردوینو
برای حل این مشکل میتوانیم از ارتباط UART مجازی استفاده کنیم به این صورت که ابتدا کتابخانه SoftwareSerial را به نرمافزار آردوینو اضافه نموده و پین های دیگری را به عنوان RX و TX پیکربندی کنیم.
تعریف UART مجازی در آردوینو
زمانی به SOFTWARE-UART نیاز پیدا میکنیم که UART سخت افزاری را نتوانیم استفاده کنیم و یا به تعداد بیشتری رابط نیاز داشته باشیم. برای این کار کافیست مراحل زیر را دنبال کنید.
• نصب کتابخانه SoftwareSerial: برای دانلود فایل زیپ کتابخانه اینجا کلیک کنید.
اگر برای نصب کتابخانه به راهنمایی بیشتر نیاز دارید روی این لینک کلیک کنید.
• پیکربندی پایههای 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 را فراهم میآورد.

ما در برنامه خود، از سرعت انتقال 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;
}
}
}
}
خروجی باید مانند تصویر زیر باشد. توجه داشته باشید که با تغییر زاویۀ سنسور، اعداد باید تغییر کنند.

