خانه » دانشنامه‌ها » دانشنامه آردوینو » شتاب سنج و ژیروسکوپ و راه اندازی با برد آردوینو
  1. خانه
  2. »
  3. دانشنامه‌ها
  4. »
  5. دانشنامه آردوینو
  6. »
  7. شتاب سنج و ژیروسکوپ و راه اندازی با برد آردوینو

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

بازدید: 1346

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

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

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

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

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

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

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

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

نظرتان را درباره این مقاله بگویید 10 نظر

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

با ثبت نظر و نوشتن کامنت، تیم ما را در راستای بهبود و افزایش کیفیت محتوا یاری خواهید کرد :)

فهرست مطالب

مقالات مرتبط

بروزترین مقالات

این مقاله را با دوستانتان به اشتراک بگذارید!

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

فهرست مطالب

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

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

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

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

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

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

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

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

نظرتان را درباره این مقاله بگویید 10 نظر

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

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

  1. mohamm.elec گفت:

    سلام عرض ادب
    ممنون بابت اموزش های عالی ومفید
    ادامه اموزش ها به چه صورت هستش

  2. آیدا عزیزی گفت:

    سلام و احترام،
    برای مشاهده سایر پروژه های آردوینو، به صفحه اصلی سایت، بخش پروژه ها رجوع فرمایید :
    https://wiki.redronic.com/category/projects/arduino-projects/

  3. علی بصیرنیا گفت:

    سلام
    سپاس از زحماتی که میکشین و سپاس بابت مقاله خوب و عالی که ارائه کردین
    امیدوارم که همیشه شاد و سربلند باشین
    در پناه حق

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

یک × 4 =

فروشگاه