سنسورهای ژیرسکوپ یکی از مهم ترین و پرکاربردترین ابزارها در صنایع پروازی نظیر طراحی پهپادها و سایر صنایع نظیر خودروسازی به شمار می روند. سنسور GY521 یکی از سنسورهای ژیرسکوپ پرکاربرد است. به کمک این سنسور می توانید زاویه، شتاب و ژیرو را در جهت های X,Y,Z محاسبه کرده و بدست آورید. جهت راه اندازی و کار با این سنسور کتابخانه تحت آردوینو توسعه یافته است. بدین ترتیب شما می توانید به سادگی و در کمترین زمان ممکن، این سنسور را راه اندازی کنید. در این آموش به تحلیل و بررسی این کتابخانه کاربردی می پردازیم. مطابق سایر آموزش های کتابخانه، ابتدا نب و نکات فنی را بررسی کرده و سپس به تحلیل توابع کلیدی آن پرداخته می شود. در نهایت با ارائه مثالی، نحوه استفاده از توابع را در برنامه ها، مشاهده می کنیم. در ادامه، با مرجع تخصصی رزبری پای و آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.
نصب کتابخانه GY521.h
به منظور استفاده از کتابخانه GY521.h، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه سنسور شتاب سنج با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق تصویر فوق، در کادر جستجو عبارت GY521 را تایپ کنید. پس از چند لحظه این کتابخانه مطابق تصویر زیر یافت شده که شما می توانید با کلیک بر روی گزینه INSTALL، کتابخانه را نصب کنید.
توجه: ورژن کتابخانه استفاده شده در این آموزش ۰٫۳٫۴ است.
الزامات و نکات فنی کتابخانه GY521.h
در این قسمت به بررسی نکات فنی و بردهای مورد پشتیبانی کتابخانه GY521 می پردازیم. سنسور ژیروسکوپ GY521 دارای پورت سریال I2C جهت تبادل داده با میکروکنترلرهاست. بنابارین جهت ارتباط با بردهای آردوینو می بایست این موضوع را مد نظر داشته باشید. با توجه به این موضوع، به نظر می رسد که از این سنسور می توانیم در بردهای ESP نیز استفاده نماییم. جدول زیر پایه های I2C بردهای مختلف را نمایش می دهد.
شماره پایه ها | نام برد |
GPIO5->SCL
GPIO4->SDA |
ESP8266 |
A4->SDA
A5->SCL |
UNO |
A4->SDA
A5->SCL |
MEGA |
پس از بررسی نکات فنی، به تحلیل و بررسی توابع کلیدی این کتابخانه می پردازیم.
توابع کلیدی کتابخانه GY521.h
در این قسمت به تحلیل و بررسی توابع کلیدی کتابخانه می پردازیم. جدول زیر این توابع را به همراه کاربرد نمایش می دهد.
شرح | ورودی | تابع |
به کمک این تابع سنسور و کلیه تنظیمات آن به صورت نرم افزاری ریست خواهد شد. | بدون ورودی | void reset() |
به کمک این تابع می توان آماده بودن سنسور را کنترل نمود. | بدون ورودی | int16_t read() |
به کمک این تابع می توانید حساسیت سنسور را به شتاب گرانشی تنظیم نمایید. برای این تابع ورودی ها به صورت زیر است:
۰: ۲g ۱:۴g ۲:۸g ۳:۱۶g |
ورودی از نوع بدون علامت ۸ بیتی | bool setAccelSensitivity(uint8_t as) |
به کمک این تابع می توانید حساسیت سنسور را نسبت به شتاب گرانشی محاسبه کرده و در خروجی آن قرار دهید. این خروجی می تواند ۰،۱،۲ و ۳ باشد که به ترتیب برابر با ۲g، ۴g، ۸g، و ۱۶g خواهد بود. | بدون ورودی | uint8_t getAccelSensitivity() |
به کمک این تابع می توانید حساسیت سنسور را به ژایرو تنظیم کنید. برای این تابع ورودی ها به صورت زیر است:
۰: ۲۵۰ درجه بر ثانیه ۱:۵۰۰ درجه بر ثانیه ۲:۱۰۰۰ درجه بر ثانیه ۳:۱۲۰۰ درجه بر ثانیه |
ورودی از نوع بدون علامت ۸بیتی جهت تنظیم حساسیت | setGyroSensitivity(uint8_t gs) |
به کمک این تابع می توانید میزان حساسیت سنسور را نسبت به ژایرو سنجیده و در خروجی قرار دهید. خروجی های این تابع بین ۰ الی ۳ بوده که بیانگر ۲۵۰، ۵۰۰، ۱۰۰۰ و ۱۲۰۰ درجه بر ثانیه خواهد بود. | بدون ورودی | uint8_t getGyroSensitivity() |
این تابع شتاب را در محور x اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAccelX() |
این تابع شتاب را در محور y اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAccelY() |
این تابع شتاب را در محور Z اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAccelZ() |
این تابع زاویه را در محور X اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAngleX() |
این تابع زاویه را در محور Y اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAngleY() |
این تابع زاویه را در محور Z اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getAngleZ() |
این تابع ژایرو را در محور x اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getGyroX() |
این تابع ژایرو را در محور y اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getGyroY() |
این تابع ژایرو را در محور z اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getGyroZ() |
این تابع pitch(گردش حول محور x) را اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getPitch() |
این تابع Roll(گردش حول محور y) را اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getRoll() |
این تابع yaw(گردش حول محور z) را اندازه گرفته و در خروجی قرار می دهد. | بدون ورودی | float getYaw() |
به کمک این تابع می توانید دمای محیط را اندازه گیری نموده و در خروجی قرار دهید. | بدون ورودی | float getTemperature() |
پس از بررسی توابع، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعدی مربوط به این مورد است.
اجرای یک نمونه برنامه
در این قسمت به اجرای یک نمونه برنامه می پردازیم. در این برنامه شتاب و ژایرو را در محورهای مختلف، به همراه دمای محیط اندازه گرفته و در متغیرهای مختلف ذخیره می نماییم.
#include "GY521.h" GY521 sensor(0x69); // ایجاد یک نمونه شی از کلاس کتابخانه، این تابع در حقیقت تابع سازنده بوده که ورودی آن آدرس سنسور است. void setup() { Serial.begin(115200); delay(200); Wire.begin(); //راه اندازی پورت I2C delay(100); sensor.setAccelSensitivity(0); // 2g تنطیم حساسیت شتاب روی sensor.setGyroSensitivity(0); // 250 degrees/s تنظیم حساسیت ژایرو روی } void loop() { sensor.read(); //توجه: پیش از خواندن داده ها باید این تابع رافراخوانی نماییم. int ax = sensor.getAccelX(); int ay = sensor.getAccelY(); int az = sensor.getAccelZ(); int gx = sensor.getGyroX(); int gy = sensor.getGyroY(); int gz = sensor.getGyroZ(); int t = sensor.getTemperature(); }
لوازم متناسب با کتابخانه
جمع بندی
در این آموزش به تحلیل و بررسی کتابخانه GY521.h پرداختیم. این کتابخانه راه اندازی و کار با سنسور شتاب و ژایرو GY521 را بسیار ساده می کند. این کتابخانه دارای توابع متعدد و بسیاری است که در این آموزش به تحلیل و بررسی آن پرداختیم. در این آموزش ابتدا به نحوه نصب این کتابخانه و نکات فنی آن پرداختیم. در ادامه آن به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه پرداختیم. در نهایت با ارائه یک مثال، چگونگی استفاده از توابع را در برنامه های کاربردی، مشاهده نمودیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.