تحلیل کتابخانه

تحلیل و بررسی کتابخانه Adafruit_MPU6050.h

نوشته شده توسط CiferTech

در این پست کتابخانه Adafruit_MPU6050.h را برای راه اندازی سنسور Mpu6050 که شتاب سنج سه محوره و یک ژیروسکوپ سه محوره MEMS است، تحلیل می‌کنیم. دقت ماژول مبدل آنالوگ به دیجیتال ۱۲ بیت بوده و می‌تواند مقادیر X ، Y ، Z را در یک زمان اندازه گیری کند. بافر این ماژول از نوع FIFO با ظرفیت ۱۰۲۴ بایت می‌باشد. این ماژول به عنوان Slave به آردوینو توسط پایه‌های SCL و SDA متصل می‌شود. با استفاده از پردازشگر دیجیتال، ۴ خروجی برای دستیابی به دقت قابل توجه، در حرکت‌های کند و سریع در سنسور فراهم کرده است. با این روش کاربر می‌تواند بازه اندازه گیری را متناسب با شتاب یا سرعت تغییر دهد. به همین منظور در قسمت ژیروسکوپ سنسور چهار بازه ۲۵۰±، ۵۰۰±، ۱۰۰۰± و ۲۰۰۰± درجه بر ثانیه و در قسمت شتاب سنج سنسور چهار بازه ۲g، ±۴g، ±۸g، ±۱۶g± برای کاربر قابل انتخاب خواهد بود. توجه داشته باشید که ولتاژ کاری این ماژول ۳ الی ۵ ولت می‌باشد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نصب کتابخانه Adafruit_MPU6050.h


ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مورد نیاز خواهیم‌کرد. مراحل زیر را دنبال کنید:

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه Adafruit_MPU6050  را جستجو کنید.
  3. کتابخانه را نصب کنید.

 


مقدار دهی اولیه


قبل از استفاده از mpu6050 که راه‌اندازی کرده‌اید، باید آن را با محدوده حساسیتی که می خواهید استفاده کنید مقداردهی اولیه کنید. در زیر سه عملکردی وجود دارد که دامنه اندازه گیری MPU6050 را تنظیم می کند.

تابع setAccelerometerRange(mpu6050_accel_range_t) دامنه شتاب سنج را تنظیم می کند. مقادیر مجاز برای “setAccelerometerRange” عبارتند از:

  • MPU6050_RANGE_2_G   : ±۲g   (پیشفرض)
  • MPU6050_RANGE_4_G   : ±۴g   محدوده
  • MPU6050_RANGE_8_G   : ±۸g   محدوده
  • MPU6050_RANGE_16_G : ±۱۶g  محدوده

تابع setGyroRange(mpu6050_gyro_range_t) محدوده شتاب سنج را تنظیم می کند. مقادیر مجاز برای “setGyroRange” عبارتند از:

  • MPU6050_RANGE_250_DEG   : ۲۵۰   (پیشفرض)
  • MPU6050_RANGE_500_DEG   : ۵۰۰   دامنه در هر ثانیه
  • MPU6050_RANGE_1000_DEG : 1000  دامنه در هر ثانیه
  • MPU6050_RANGE_2000_DEG : 2000  دامنه در هر ثانیه

تابع setFilterBandwidth(mpu6050_bandwidth_t) پهنای باند فیلتر پایین گذر دیجیتال را تنظیم می کند. مقادیر مجاز برای “setFilterBandwidth” عبارتند از:

  • MPU6050_BAND_260_HZ,  :۲۶۰ Hz  پهنای باند
  • MPU6050_BAND_184_HZ,  :۱۸۴ Hz  پهنای باند
  • MPU6050_BAND_94_HZ,   : ۹۴ Hz   پهنای باند
  • MPU6050_BAND_44_HZ,   : ۴۴ Hz   پهنای باند
  • MPU6050_BAND_21_HZ,   : ۲۱ Hz   پهنای باند
  • MPU6050_BAND_10_HZ,   : ۱۰ Hz   پهنای باند
  • MPU6050_BAND_5_HZ,     : ۵ Hz    پهنای باند
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

 


فراخوانی کتابخانه


در اولین قدم باید تمام کتابخانه های مورد نیاز را فراخوانی کنیم. برای استفاده از mpu6050 از کتابخانه Adafruit_MPU6050 برای عملکردهای سخت افزاری MPU6050 و از کتابخانه Adafruit_Sensor سنسور یکپارچه را پیاده سازی می کند. همچنین باید کتابخانه Wire را که از قبل در Arduino IDE نصب شده است فراخوانی کنید. این کتابخانه به ما امکان برقراری ارتباط با دستگاه های I2C را می دهد. این کتابخانه با نام Adafruit_MPU6050.h شناخته می‌شود و در مواردی که نیاز به فراخوانی این کتابخانه داریم باید آن ‌را با پسوند قابل فهم برای ادیتور مورد نظر یعنی با پسوند h. فراخوانی شود که به این شکل نوشته می‌شود Adafruit_MPU6050.h.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

 

 


معرفی ساختمان کتابخانه


در بخش Setup، ما ابتدا ارتباط سریال را از طریق سیستم خود آغاز می کنیم و فانکشن ()begin را فراخوانی می کنیم. تابع ()begin رابط I2C را آغاز می کند و درست بودن شناسه تراشه را بررسی می کند. سپس تراشه را با استفاده از soft-reset بازنشانی کرده و منتظر سنسور برای کالیبراسیون بعد از بیدار شدن است. همچنین برای تست باید سرعت سریال مانیتور خود را با سرعت ۱۱۵۲۰۰ baud تنظیم کنید. از آنجا که داده های زیادی از MPU6050 ارسال می شود، برای نمایش آنها به این سرعت بالاتر احتیاج داریم.

Serial.begin(115200);

if (!mpu.begin()) {
	Serial.println("Failed to find MPU6050 chip");
	while (1) {
	  delay(10);
	}
}

 


مستندات عملکرد اعضا


  • sensors_event_t

در قسمت حلقه کد، ابتدا یک شی sensors_event_t ایجاد می کنیم تا نتایج را در حافظه نگه دارد. sensors_event_t فقط یک نوع داده تعریف شده است که انواع مختلفی از داده های حسگر مانند شتاب، ژیروسکوپ، دما، فشار و موارد دیگر را در خود جای داده است.

sensors_event_t a, g, temp;

 

  • ;()getEvent

تابع getEvent مجموعه‌ای از مقادیر را از حسگر شما می خواند و  آنها را به واحدهای مناسب SI و مقیاس هایی تبدیل می کند و سپس نتایج را به mpu ما اختصاص می دهد. این عملکردی است که شما برای خواندن مقادیر سنسور خود فراخوانی می کنید.

mpu.getEvent(&a, &g, &temp);

 

  • ;()getAccelerometerRange

با استفاده از این تابع می‌توانیم دامنه اندازه گیری شتاب را بدست آورده و نمایش دهیم.

a = ;()getAccelerometerRange

 

  • ;()enableSleep

با استفاده از این تابع حالت خواب را در ماژول کنترل می‌کنیم. اگر مقدار Enable باشد سنسور در حالت کم مصرف قرار می گیرد و اندازه گیری ها تا زمانی که حالت خواب غیرفعال شود متوقف می شوند تنظیم نادرست، سنسور را از حالت خواب بیدار می کند و اندازه گیری ها از سر گرفته می شوند.

  mpu.enableSleep(false);

 

  • ()enableCycle

با استفاده از این تابع می‌توانیم حالت اندازه گیری “چرخه” یا همان cycle سنسور را کنترل کنیم. اگر مقدار Enable باشد سنسور با فراخوانی setCycleRate، خوابیدن بین اندازه گیری ها، با نرخ تعیین شده اندازه گیری می کند. سنسور در حالت “چرخه” یا cycle در حالت خواب با enableSleep تنظیم می‌شود.

  mpu.enableCycle(true);

 

  • ()setCycleRate

با استفاده از این تابع فرکانس اندازه گیری را در حالت “چرخه” تنظیم می کنیم. در این تابع mpu6050_cycle_rate_t میزان اندازه گیری مورد نظر را مشخص می کند.

  mpu.setCycleRate(MPU6050_CYCLE_20_HZ);

 

در نهایت با استفاده از سریال پرینت مقادیر ذخیره شده و بدست آمده از سنسور را نمایش خواهیم داد.

Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");

Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");

 


قطعات سازگار با کتابخانه


ماژول ژایرو MPU6050

 


جمع بندی


بدون شک ژیروسکوپ و شتاب سنج در نوع خود عالی هستند. اما وقتی آنها را با هم ترکیب کنیم، می توانیم اطلاعات بسیار دقیقی در مورد جهت گیری یک جسم بدست آوریم. در این بلاگ با اقدام به تحلیل کتابخانه Adafruit_MPU6050.h برای راه‌اندازی MPU6050 کرده‌ایم. MPU6050 دارای یک ژیروسکوپ و یک شتاب سنج است که با استفاده از آن می توانیم چرخش را در امتداد هر سه محور، شتاب ثابت به دلیل جاذبه و همچنین حرکت، شوک یا شتاب دینامیکی ناشی از لرزش اندازه گیری کنیم. با نگاهی به داده های دریافت شده از MPU6050 شاهد مقادیر دقیق خواهید بود که از این ماژول می‌توان بدست آورد. همچنین اگر می خواهید ببینید که MPU6050 شما هنگام انتقال دیتا چه مقادیری نشان می دهد، از Serial Plotter استفاده کنید. Arduino IDE دارای ابزاری جالب به نام پلاتر است، که می تواند مقدار متغیرها را در زمان واقعی به شما ارائه دهد. که می‌تواند برای عیب یابی کد شما و تجسم متغیرهای شما به عنوان شکل موج فوق العاده مفید باشد.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه