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

ویژگی‌های ماژول ژیروسکوپ و شتاب‌سنج 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

MPU6050 Datasheet

32F030F4P6 Microcontroller Datasheet

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

ماژول GY-25 دارای هشت پایه به شرح زیر است:
• VCC: تغذیه ماژول، 3 تا 5 ولت
• RX: پین دریافت اطلاعات پروتکل سریال
• TX: پین ارسال اطلاعات پروتکل سریال
• GND: زمین
• RST: ریست (به صورت داخلی استفاده شده)
• B0: به صورت داخلی استفاده شده
• SCL: کلاک برای ارتباط I2C
• SDA: خط دیتای ارتباط I2C

GY-25 Pinout

لوازمی که به آن احتیاج دارید

Required Materials

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

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

نرم افزارهای مورد نیاز

Arduino IDE

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

تعریف 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
Arduino

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

newserial.begin(115200);
Arduino

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

GY-25 Baud-Rate Pads

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

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

GY-25 Interface Circuit

گام دوم: کد

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

/*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;
 } 
 } 
 } 
}
Arduino

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

آموزش های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.