ژیروسکوپ چیست؟ شتابسنج چیست؟ چگونگی راهاندازی ماژول GY-521 شامل شتابسنج و ژیروسکوپ با برد آردوینو UNO
یک شتابسنج، شتاب یک جسم را اندازهگیری میکند. برای مثال، یک جسم برروی سطح زمین به دلیل جاذبه زمین ( 9.81ms-2) شتاب دارد. به عنوان مثالی دیگر، یک شتابسنج جهتگیری لپتاپ را برای اطمینان از نمایش عمودی یک تصویر تشخیص میدهد. یک ژیروسکوپ سرعت زاویهای را اندازهگیری میکند و هنگامیکه با یک شتابسنج ترکیب میشود یک سامانه ناوبری اینرسی را شکل میدهد.
ماژول شتابسنج و ژیروسکوپ GY-521
ماژول شتابسنج و ژیروسکوپ GY-521 شامل یک شتابسنج MPU-6050 و یک سنسور ژیروسکوپ میباشد، که میتواند از 3.3 تا 5 ولت تغذیه شود اما 3.3 ولت بهتر است. با استفاده از پروتکل I2C با آدرس 0x68 میتوان با ماژول GY-521 ارتباط برقرار کرد. با قرار دادن پین AD0 روی HIGH به جای پیش فرض LOW، می توان آدرس I2C را به 0x69 تغییر داد تا دومین ماژول GY-521 را نیز در برگیرد. VCC، GND، و دو پین SCL و SDA برای ارتباط I2C، بهترتیب از طریق پایههای A4 و A5 به آردوینو متصل میشوند.
مقادیر هر سه محور شتابسنج و ژیروسکوپ (x: چپ-راست، Y: جلو-عقب، Z: بالا-پایین) در شش جفت رجیستر ذخیره میشوند(جدول.۱ را مشاهده کنید)، و سپس با مقادیر یک جفت از رجیسترها ترکیب میشوند.
برای مثال، اگر مقادیر جفت رجیسترها برای محور X شتابسنج AxHigh وAxLow باشند سپس مقدار ترکیبشده AxLow + ۲۸× AxHigh معادل با دستور AxLow|8>> AxHigh است، که مقدار 8 بیت بالای رجیستر را 8 مکان تغییر داده و در 8 بیت پایین رجیستر ذخیره میکند.
با استفاده از نمایش YPR (محور گردش، گام، رول)، مقدارهای شتابسنج به زاویه رول= arctan(y/z)180/π و زاویه گام=arcsin(x)180/π-، تبدیل میشوند که در آن y, x و z مقدارهای تنظیمشده شتابسنج هستند.
آدرس پایین | آدرس بالا | متغیر |
0x3C | 0x3B | محور x شتابسنج |
0x3E | 0x3D | محور Y شتابسنج |
0x40 | 0x3F | محور Z شتابسنج |
0x42 | 0x41 | دما |
0x44 | 0x43 | محور x ژیروسکوپ |
0x46 | 0x45 | محور Yژیروسکوپ |
0x48 | 0x47 | محور Z ژیروسکوپ |
جدول ۱. رجیسترهای داده برای سنسور شتابسنج و ژیروسکوپ
با استفاده از نمایش YPR (محور گردش، گام، رول)، پارامترهای شتابسنج به زاویه رول= arctan(y/z)180π و زاویه گام=-arcsin(x)180/π، تبدیل میشوند که در آن y, x و z مقدارهای تنظیمشده شتابسنج هستند.
تعریف میشود که در آن az ،ay ،ax مقدارهای شتابسنج هستند که هرکدام تقسیم بر214 میشوند به گونهای که:
و این رابطه بطور مشابه برای az و ay برقرار میباشد.
دستور (مخرج کسر/ صورت کسر) arctan در IDE آردوینو (مخرج کسر, صورت کسر) atan2 است که معادل (صورت کسر, مخرج کسر) atan2 در اکسل میباشد.
کاربرد ماژول GY-521
برای نمایش چگونگی کاربرد ماژول شتابسنج و ژیروسکوپ GY-521 برای تعیین جهتگیری، LEDها در چهار طرف این ماژول قرار داده میشوند (شکل ۱ را مشاهده کنید) و هنگامیکه ماژول کج میشود، LEDهای متناظر، براساس مقادیر شتابسنج روشن میشوند.
در تابع () void setup در IDE آردوینو، آدرس I2C سنسور MPU-6050 تعریف میشود، رجیستر اندازهگیری توان برای «روشن کردن اولیه» سنسور در صفر تنظیم میشود. در تابع ()void loop، مقدارهای شتابسنج با مقادیر x,y و z منطبق میشوند تا زوایای رول و گام محاسبه شوند.
از همانندسازی نحوه کار هواپیما برای نشان دادن عملکرد این ماژول استفاده میکنیم. زاویه رول مثبت بیانگر چرخش بال راست هواپیما به سمت پایین میباشد و زاویه گام مثبت بالا رفتن دماغه هواپیما را نشان میدهد. اگر زاویه رول بزرگتر از 10درجه یا کمتر از 10- درجه باشد، LED راست یا چپ روشن میشود، اگر زاویه گام بزرگتر از 10 درجه یا کمتر از 10- باشد، LED جلو یا عقب به ترتیب روشن میشوند. برای ارتباط بین آردوینو و ماژول GY-521 در IDE آردوینو از کتابخانه Wire استفاده میشود. کتابخانه Wire در IDE آردوینو قرار دارد، بنابراین تنها آدرس I2C ماژول GY-521 موردنیاز میباشد. اتصالات این ماژولهای شتابسنج و ژیروسکوپ در جدول.2 ذکر شدهاند. کدهای در محیط IDE بصورت زیر میباشند.
#include // include Wire library
int I2Caddress = 0x68; // I2C address of the MPU-6050
int frontLED = 13;
int backLED = 11; // define LED pins
int rightLED = 12;
int leftLED = 10;
float accelX,accelY,accelZ; // accelerometer measurements
float roll, pitch, sumsquare;
void setup()
{
Serial.begin(9600); // define Serial output baud rate
pinMode(frontLED, OUTPUT);
pinMode(backLED, OUTPUT); // define LED pins as OUTPUT
pinMode(rightLED, OUTPUT);
pinMode(leftLED, OUTPUT);
Wire.begin(); // initiate I2C bus
Wire.beginTransmission(I2Caddress); // transmit to device at I2Caddress
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero wakes up MPU-6050
Wire.endTransmission(1); // end of transmission
}
void loop()
{ // transmit to device at
Wire.beginTransmission(I2Caddress); // I2Caddress
Wire.write(0x3B); // start reading from register 0x3B
Wire.endTransmission(0); // transmission not finished
Wire.requestFrom(I2Caddress,6,true); // request data from 6 registers
accelX=Wire.read()<<8|Wire.read(); // combine AxHigh and AxLow
accelY=Wire.read()<<8|Wire.read(); // combine AyHigh and AyLow
accelZ=Wire.read()<<8|Wire.read(); // combine AzHigh and AzLow
accelX = accelX/pow(2,14);
accelY = accelY/pow(2,14); // scale X, Y and Z measurements
accelZ = accelZ/pow(2,14);
sumsquare = sqrt(accelX*accelX+accelY*accelY+accelZ*accelZ);
accelX = accelX/sumsquare;
accelY = accelY/sumsquare; // adjusted accelerometer measurements
accelZ = accelZ/sumsquare;
roll = atan2(accelY, accelZ)*180/PI; // roll angle
pitch = -asin(accelX)*180/PI; // pitch angle
LEDs(); // call function to control LEDS
}
void LEDs() // function to control LEDs
{
int front = LOW;
int back = LOW; // turn off all LEDs
int right = LOW;
int left = LOW;
if(roll>10) right = HIGH; // right or left LEDS with roll angle
else if(roll< -10) left = HIGH;
if(pitch>10) front = HIGH; // front or back LEDs with pitch angle
else if(pitch< -10) back = HIGH;
digitalWrite(frontLED, front); // if value = HIGH, LED on
digitalWrite(backLED, back); // if value = LOW, LED off
digitalWrite(rightLED, right);
digitalWrite(leftLED, left);
delay(500);
}
و اتصال | اتصال به | قطعه |
آردوینو 3.3 | VCC GY-521 | |
آردوینو GND | GND GY-521 | |
آردوینو A5 | SCL GY-521 | |
آردوینو A4 | SDA GY-521 | |
۱۱،۱۲،۱۳ | پایه ۱۰ آردوینو | LED پایه بلند |
آردوینو GND | مقاومت ۲۲۰ اهم | LED پایه کوتاه |
جدول 2. اتصالات ماژول GY-521
ماژولGY-521 شامل یک سنسور دما، که مقدار دما پس از مقادیر Z شتابسنج در رجیستر ذخیره میشود. دما برحسب درجه سلسیوس، برابر با temp/340.0 + 36.53 است، که در آن temp مقدار ترکیبی از جفت دمای رجیسترها میباشد.از طریق صفحات داده رجیستر InvenSense میتوان به اطلاعات رجیسترها و fvH,vn دما دسترسی داشت. با قراردان دستورات زیر بین دستورات Wire.endTransmission(0) و accelX = accelX/pow(2,14)، دما توسط ماژول GY-521 خوانده میشود.
Wire.requestFrom(I2Caddress,8,true); // request data from 8 registers
accelX=Wire.read()<<8|Wire.read(); // combine AxHigh and AxLow
accelY=Wire.read()<<8|Wire.read(); // combine AyHigh and AyLow
accelZ=Wire.read()<<8|Wire.read(); // combine AzHigh and AzLow
temp()=Wire.read()<<8|Wire.read;
tempC = temp/340.0 + 36.53; // temperature reading );
تیم ردرونیک (redronic) مجموعه ای از آموزش ها و پروژه های مرتبط با آردوینو را برای شما علاقمندان به الکترونیک و برنامه نویسی فراهم کرده است. جهت مشاهده این پروژه ها اینجا کلیک کنید.
3 دیدگاه در “شتاب سنج و ژیروسکوپ و راه اندازی با برد آردوینو”
سلام عرض ادب
ممنون بابت اموزش های عالی ومفید
ادامه اموزش ها به چه صورت هستش
سلام و احترام،
برای مشاهده سایر پروژه های آردوینو، به صفحه اصلی سایت، بخش پروژه ها رجوع فرمایید :
https://wiki.redronic.com/category/projects/arduino-projects/
سلام
سپاس از زحماتی که میکشین و سپاس بابت مقاله خوب و عالی که ارائه کردین
امیدوارم که همیشه شاد و سربلند باشین
در پناه حق