شتاب‌سنج و ژیروسکوپ و راه اندازی با برد آردوینو

0

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

| A | = \sqrt{ a_{x} ^{2}+ b_{x} ^{2} + c_{x} ^{2} }

تعریف می‌شود که در آن az، ay،ax مقدارهای شتاب‌سنج هستند که هرکدام تقسیم بر214 می‌شوند به گونه‌ای کهax/|A|=است و این رابطه بطور مشابه برای az و aبرقرار می‌باشد.

دستور (مخرج کسر/ صورت کسر)arctan در IDE آردوینو (مخرج کسر, صورت کسر)atan2 است که معادل (صورت کسر, مخرج کسر) atan2 در اکسل می‌باشد.

کاربرد ماژول GY-521

 برای نمایش چگونگی کاربرد ماژول شتاب‌سنج و ژیروسکوپ GY-521 برای تعیین جهت‌گیری، LEDها در چهار طرف این ماژول قرار داده می‌شوند (شکل ۱ را مشاهده کنید) و هنگامی‌که ماژول کج می‌شود، LEDهای متناظر، براساس مقادیر شتاب‌سنج روشن می‌شوند.

در تابع () void setup در IDE آردوینو، آدرس I2C سنسور MPU-6050 تعریف می‌شود، رجیستر اندازه‌گیری توان برای «روشن کردن اولیه» سنسور در صفر تنظیم می‌شود. در تابع ()void loop، مقدارهای شتاب‌سنج با مقادیر x,y و z منطبق می‌شوند تا زوایای رول و گام محاسبه شوند.

اتصالات ماژول GY-521 و LED ها به آردوینو
شکل 1. اتصالات ماژول GY-521 و LEDها به آردوینو

 از همانندسازی نحوه کار هواپیما برای نشان دادن عملکرد این ماژول استفاده می‌کنیم. زاویه رول مثبت بیانگر چرخش بال راست هواپیما به سمت پایین می‌باشد و زاویه گام مثبت بالا رفتن دماغه هواپیما را نشان می‌دهد. اگر زاویه رول بزرگ‌تر از 10درجه یا کم‌تر از 10- درجه باشد، LED راست یا چپ روشن می‌شود، اگر زاویه گام بزرگ‌تر از 10 درجه یا کم‌تر از 10- باشد، LED جلو یا عقب به ترتیب روشن می‌شوند. برای ارتباط بین آردوینو و ماژول GY-521 در IDE آردوینو از کتابخانه Wire استفاده می‌شود. کتابخانه Wire در IDE آردوینو قرار دارد، بنابراین تنها آدرس I2C ماژول GY-521 موردنیاز می‌باشد. اتصالات این ماژول‌های شتاب‌سنج و ژیروسکوپ در جدول.2 ذکر شده‌اند. کدهای در محیط IDE بصورت زیر می‌باشند.

                                                               جدول 2. اتصالات ماژول GY-521

            قطعه

                     اتصال به

                           و اتصال

        VCC GY-521

               3.3V آردوینو

 

       GND GY-521

               GND  آردوینو

 

      SCL  GY-521

                  A5 آردوینو

 

     SDA  GY-521

                   A4 آردوینو

 

    پایه بلند LED  

             پایه 10 آردوینو

                         11,12,13

   پایه کوتاه LED  

        مقاومت 220 اهم

                      GND آردوینو

#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()<10) right = HIGH; // right or left LEDS with roll angle
else if(roll10) 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);
} 

ماژول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) مجموعه ای از آموزش ها و پروژه های مرتبط با آردوینو را برای شما علاقمندان به الکترونیک و برنامه نویسی  فراهم کرده است. جهت مشاهده این پروژه ها اینجا کلیک کنید

Choose your Reaction!
دیدگاه خود را بنویسید

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

آخرین پست ها

redronic.com