تشخیص چرخش با استفاده از ژیروسکوپ + تشخیص جهت + خواندن شتاب | قسمت 38 آموزش آردوینو

قسمت 38
مشاهده سایر جلسات آموزش
29 بازدید
۱۴۰۴-۰۸-۲۱
7 دقیقه
  • نویسنده: Arduino captain
  • درباره نویسنده: من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

در قسمت 37 از آموزش آردوینو به بررسی استفاده از ماوس و دریافت موقعیت از GPS پرداختیم. در این قسمت قصد داریم درباره تشخیص چرخش با استفاده از ژیروسکوپ، تشخیص جهت و خواندن شتاب صحبت کنیم.

تشخیص چرخش با استفاده از ژیروسکوپ

فرض کنید می‌خواهید به نرخ چرخش پاسخ دهید. این می‌تواند برای حفظ حرکت یک وسیله نقلیه یا ربات در یک مسیر مستقیم یا چرخش با نرخ دلخواه استفاده شود.

ژیروسکوپ‌ها خروجی‌ای مرتبط با نرخ چرخش ارائه می‌دهند (برخلاف شتاب‌سنج که نرخ تغییر سرعت را نشان می‌دهد). اوایل، بیشتر ژیروسکوپ‌های کم‌هزینه از ولتاژ آنالوگ متناسب با نرخ چرخش استفاده می‌کردند. اکنون، با استفاده فراگیر از ژیروسکوپ‌ها و شتاب‌سنج‌ها در گوشی‌های هوشمند، یافتن ژیروسکوپ‌ها و شتاب‌سنج‌های ترکیبی با پروتکل I2C ارزان‌تر و آسان‌تر شده است.

✅نکته

برد Arduino Nano 33 BLE Sense دارای ژیروسکوپ و شتاب‌سنج داخلی است. واحد اندازه‌گیری اینرسی MPU-9250 یک سنسور نسبتاً ارزان با nine degrees of freedom (DOF9) است که به‌خوبی با آردوینو کار می‌کند. این سنسور روی بردهای breakout توسط تأمین‌کنندگان مختلف از جمله SparkFun شماره قطعه SEN-13762 موجود است. چندین کتابخانه برای پشتیبانی از MPU-9250 وجود دارد. اسکچ زیر از کتابخانه Bolder Flight Systems MPU9250 استفاده می‌کند که می‌توانید آن را از طریق Arduino Library Manager نصب کنید.

✅نکته

MPU-9250 یک دستگاه I2C با ولتاژ ۳.۳ ولت است، بنابراین اگر از برد آردوینو با ولتاژ متفاوت از ۳.۳ ولت استفاده می‌کنید، نیاز به مبدل سطح منطقی (logic-level converter) خواهید داشت تا پین‌های SCL و SDA ژیروسکوپ محافظت شوند.

تشخیص چرخش با استفاده از ژیروسکوپ + تشخیص جهت + خواندن شتاب | قسمت 38 آموزش آردوینو

شکل 1: اتصال واحد اندازه‌گیری اینرسی (IMU) MPU-9250 با استفاده از I2C

این اسکچ با درج کتابخانه MPU9250 و اعلام یک شیء برای نمایش IMU آغاز می‌شود. درون تابع setup()، تلاش می‌کند IMU را مقدارسازی (initialize) کند. اگر این مرحله موفقیت‌آمیز نباشد، ممکن است نیاز باشد تعریف IMU_ADDRESS را به 0x69 تغییر دهید یا اتصالات سیم‌کشی خود را بررسی کنید. پس از مقدارسازی IMU، اسکچ محدوده کامل ژیروسکوپ را به ±۵۰۰ درجه بر ثانیه تغییر می‌دهد.

درون تابع loop()، اسکچ مقدار سنسور را می‌خواند و سرعت چرخش را به رادیان بر ثانیه به دست می‌آورد. سپس از ثابت RAD_TO_DEG در آردوینو برای تبدیل آن به درجه بر ثانیه استفاده می‌کند. خروجی اسکچ را می‌توان در Serial Monitor یا Serial Plotter مشاهده کرد.

تشخیص جهت

فرض کنید می‌خواهید اسکچ شما جهت را از یک قطب‌نمای الکترونیکی تعیین کند.

در این دستورالعمل از شتاب‌سنجِ موجود در ماژول MPU-9250 استفاده می‌کنیم. MPU-9250 یک واحد اندازه‌گیری اینرسی (IMU) با ۹ درجهٔ آزادی (9-DOF) است. سنسور را طبق شکل 1 متصل کنید.

شاید برای شما مفید باشد:
مدارات DC قسمت دوم: قانون اهم و توان

هر یک از سه سنسور اصلی MPU-9250 (ژیروسکوپ، مغناطیس‌سنج و شتاب‌سنج) مقادیر را در سه بعد (x, y, z) می‌خوانند و از همین‌جا مفهوم nine degrees of freedom به دست می‌آید.

✅نکته

قبل از استفاده از مغناطیس‌سنج (magnetometer)، باید آن را کالیبره کنید. می‌توانید یک اسکچ کالیبراسیون را در این GitHub issue پیدا کنید. این اسکچ مقادیر کالیبراسیون را در حافظه EEPROM برد میکروکنترلر شما ذخیره می‌کند.

هر بار که می‌خواهید با مغناطیس‌سنج کار کنید، باید مقادیر کالیبراسیون را بارگذاری کنید، همان‌طور که در اسکچ بعدی نشان‌داده‌شده است. اگر از سنسور با یک برد میکروکنترلر متفاوت استفاده می‌کنید، باید دوباره اسکچ کالیبراسیون را اجرا کنید. همچنین، اگر اطلاعات دیگری در EEPROM ذخیره می‌کنید، باید مطمئن شوید که آن‌ها را در مکان حافظه‌ای که مقادیر کالیبراسیون ذخیره شده است قرار نمی‌دهید.

ماژول قطب‌نما شدت‌های میدان مغناطیسی را در سه محور x ،y و z فراهم می‌کند.

شاید برای شما مفید باشد:
شیلد رایگان SIM800 برای برد Arduino UNO

این مقادیر تغییر می‌کنند وقتی که جهت‌گیری قطب‌نما نسبت به میدان مغناطیسی زمین (شمال مغناطیسی) تغییر داده می‌شود.

این کد IMU را پیکربندی و مقداردهی اولیه می‌کند، اما به‌جای نمایش داده‌های ژیروسکوپ، خوانش‌های مغناطیس‌سنج را بر حسب واحد میکروتسلا می‌خواند و آن‌ها را به یک زاویه‌ی قطب‌نما تبدیل می‌کند.

تفاوت بزرگ دیگر این است که داده‌های کالیبراسیون از EEPROM بارگذاری می‌شوند.

برای اینکه این کد درست کار کند، IMU باید روی یک سطح صاف قرار داشته باشد.

شما همچنین باید میل مغناطیسی (declination) مربوط به موقعیت جغرافیایی خود را تنظیم کنید با تغییردادن مقدار DECLINATION در بالای کد (برای میل مغناطیسی غربی از عدد منفی استفاده کنید، برای میل شرقی از عدد مثبت).

خوانش‌های مغناطیس‌سنج نرمال‌سازی می‌شوند، به این صورت که هر خوانش تقسیم می‌شود بر ریشه‌ی دوم مجموع مربعات (RSS) همه‌ی خوانش‌ها.

زاویه نسبت به شمال مغناطیسی محاسبه می‌شود با اضافه‌کردن میل مغناطیسی (بر حسب رادیان) به فرمول زیر:

radians = arctan2(–my, mx)

این مقدار توسط تابع constrainAngle360 به بازه‌ی 360 degrees (2 * pi radians) محدود می‌شود.

سپس نتیجه با ضرب در ثابت RAD_TO_DEG به درجه تبدیل می‌شود.

صفر درجه نشان‌دهنده‌ی شمال مغناطیسی است.

برای حرکت‌دادن servo، از calcAngle استفاده کنید همان‌طور که در اینجا نشان‌داده‌شده است:

خواندن شتاب

شما می‌خواهید به شتاب واکنش نشان دهید؛ برای مثال، برای تشخیص اینکه چه زمانی چیزی شروع به حرکت می‌کند یا متوقف می‌شود.
یا می‌خواهید تشخیص دهید که یک جسم نسبت به سطح زمین چگونه قرار گرفته است (اندازه‌گیری شتاب ناشی از گرانش).
این دستورالعمل از شتاب‌سنج موجود در MPU-9250 که یک واحد اندازه‌گیری اینرسی با nine degrees of freedom (9DOF IMU) است. سنسور را همان‌طور که در شکل 1 نشان‌داده‌شده است متصل کنید.

نمونه کد ساده‌ای که اینجا آمده است از MPU-9250 استفاده می‌کند تا شتاب را در سه محور x ،y و z نمایش دهد.

این نمونه‌کد شبیه نمونه کد ژیروسکوپ از مثال‌های قبلی است، با این تفاوت که شتاب در هر محور را بر حسب متر بر ثانیه مربع (m/s²) نمایش می‌دهد.

حتی وقتی سنسور ثابت است، متوجه خواهید شد که شتاب محور z حدود m/s² ۹.۸– است. حداقل این چیزی است که وقتی این کد را روی زمین اجرا می‌کنید مشاهده خواهید کرد، جایی که شتاب گرانش تقریباً m/s² ۹.۸ است.

اگر مقدار ۰ روی محور z مشاهده کنید، یعنی سنسور در سقوط آزاد قرار دارد. نیرویی که باعث شتاب ۹.۸ m/s² می‌شود، نیروی مکانیکی چیزی است که مانع سقوط سنسور می‌شود (دست شما، میز یا کف زمین).

با اینکه از دیدگاه شما جسم شتابی ندارد، اما نسبت به سقوط آزاد شتاب دارد؛ این همان شرایطی است که اگر هیچ‌چیزی بین سنسور و مرکز زمین نبود، اعمال می‌شد.

اگر هیچ‌چیزی بین سنسور و مرکز زمین نبود، این وضعیت کمی غیرمعمول و قطعاً نامطلوب برای ساکنان زمین بود، حداقل از دیدگاه موجودات زنده روی زمین.

شما می‌توانید از تکنیک‌های استفاده‌شده در مثال‌های قبلی برای استخراج اطلاعات از داده‌های شتاب‌سنج بهره ببرید. ممکن است لازم باشد یک آستانه (threshold) تعیین کنید تا بتوانید حرکت را تشخیص دهید. همچنین ممکن است مفید باشد که فرمول میانگین متحرک را روی داده‌های ورودی اعمال کنید.

شاید برای شما مفید باشد:
کنترلر PID چیست و چرا از آن استفاده کنیم؟

اگر شتاب‌سنج به‌صورت افقی داده می‌دهد، می‌توانید مستقیماً از مقادیر آن برای تعیین حرکت استفاده کنید. اما اگر به‌صورت عمودی داده می‌دهد، باید تأثیر گرانش را روی مقادیر در نظر بگیرید. این موضوع شبیه به اختلاف DC در مثال‌های قبلی است، اما می‌تواند پیچیده باشد، زیرا شتاب‌سنج ممکن است جهت خود را تغییر دهد و در نتیجه اثر گرانش برای هر اندازه‌گیری مقدار ثابتی نداشته باشد.

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

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

اطلاعات
29
0
0
اشتراک و حمایت
profile نویسنده: Arduino captain متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!


ویراستار: محمد کبیر
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله