فهرست مطالب:

قطب نما دیجیتال و سرفصل یاب: 6 مرحله
قطب نما دیجیتال و سرفصل یاب: 6 مرحله

تصویری: قطب نما دیجیتال و سرفصل یاب: 6 مرحله

تصویری: قطب نما دیجیتال و سرفصل یاب: 6 مرحله
تصویری: قطب نمای نظامی ارتش روسیه Russian compass military army 2024, نوامبر
Anonim
قطب نمای دیجیتال و سرفصل یاب
قطب نمای دیجیتال و سرفصل یاب

نویسندگان:

کالان ویلان

اندرو لوفت

بلیک جانسون

تقدیر و تشکر:

آکادمی دریانوردی کالیفرنیا

ایوان چانگ سیو

معرفی:

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

تدارکات:

- ماژول GPS DIYmall 6M

- HiLetgo MPU9250/6500 9-Axis 9 DOF 16 بیت

- Adafruit NeoPixel Ring 16

- MakerFocus 4pcs 3.7V باتری لیتیوم قابل شارژ

- برد ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB jack - USB LiIon/LiPoly charger - v1

- LCD 2.8 اینچی TFT با صفحه لمسی Breakout Board با سوکت MicroSD

مرحله 1: طراحی عملکرد پروژه

طراحی عملکرد پروژه
طراحی عملکرد پروژه

اولین قدم درک منطق و آخرین عملکرد عملیاتی است. این نمودار منطقی سه حالت دستگاه و دو حالت سنسور را نشان می دهد.

حالت 1: حالت بارگیری

از حالت بارگذاری برای آردوینو مگا استفاده می شود تا هنگام راه اندازی اطلاعات را از دو سنسور پس بگیرد. دستگاه بارگذاری روی صفحه را نشان می دهد ، تمام مقادیر عددی روی صفحه را پاک می کند و LED های حلقه NeoPixel بصورت دایره ای روشن می شوند.

حالت 2: حالت قطب نما

در این حالت دستگاه مانند قطب نمای دیجیتالی عمل می کند. حلقه NeoPixel روشن می شود تا جهت شمال را با توجه به جهت دستگاه نشان دهد. عنوان اصلی دستگاه نیز به همراه عرض جغرافیایی و طول دستگاه در صفحه LCD نمایش داده می شود. همچنین در این حالت است که کاربر می تواند عنوان کاربر را برای نمایش در حالت 3 وارد کند.

حالت 3: حالت ردیابی سرفصل

در این حالت ، دستگاه اکنون به کاربر کمک می کند تا در عنوان مورد نظر خود مستقر شود. این دستگاه اکنون عنوان دستگاهها و سربرگ کاربران را روی صفحه LCD به همراه داده های عرض و عرض جغرافیایی نشان می دهد. حلقه NeoPixel اکنون روشن می شود تا نشان دهد کاربران با توجه به جهت دستگاه ها در حال حرکت هستند.

در هر دو حالت 2 و 3 حالت دو حالت سنسور وجود دارد که این حالت های حسگر به دستگاه اجازه می دهد تا داده ها را از سنسور خارج کند که دقیق ترین داده ها را بسته به وضعیت عملکرد دستگاه ارائه می دهد.

سنسور حالت 1: MPU

اگر دستگاه حرکت نمی کند ، داده های عنوان از MPU خارج می شوند ، زیرا دقیق ترین داده ها در هنگام حرکت دستگاه نیست.

سنسور حالت 2: GPS

اگر دستگاه در حال حرکت است ، داده های عنوان از تراشه GPS خارج می شود ، زیرا دقیق ترین داده در این شرایط است.

دستگاه می تواند در هر زمان بین این موارد به حالت های حسگر تغییر وضعیت دهد تا شرایط استفاده از واحد تغییر کند. این برای عملکرد دستگاه مهم است زیرا هر دو سنسور مورد استفاده در دستگاه دارای شرایطی هستند که بر دقت داده های ارائه شده تأثیر می گذارد. در مورد MPU ، تراشه به راحتی می تواند تحت تأثیر میدانهای مغناطیسی محلی قرار گیرد که توسط ماشینها و مصالح ساختمانی فلزی در ساختمانها ایجاد می شود. بنابراین از تراشه GPS استفاده می شود که می تواند عنوان بسیار دقیق تری را ارائه دهد که تحت تأثیرات مشابه قرار نگیرد. با این حال ، GPS تنها می تواند داده های سرفصل را هنگام حرکت ارائه دهد زیرا عنوان را با استفاده از تغییر داده های عرض و طول جغرافیایی محاسبه می کند. بنابراین تراشه ها مکمل یکدیگر هستند و با استفاده از دو حالت حسگر دقیق ترین و قابل اطمینان ترین عملکرد دستگاه را ارائه می دهند.

مرحله 2: راه اندازی و نمودار سیم

راه اندازی و نمودار سیم
راه اندازی و نمودار سیم
راه اندازی و نمودار سیم
راه اندازی و نمودار سیم
راه اندازی و نمودار سیم
راه اندازی و نمودار سیم

این پروژه از تخته شبیه سازی Arduino Mega مشابه برد بالا استفاده می کند. تمام اجزای پروژه به این برد متصل می شوند. در بالا نمودارهای دقیق نحوه اتصال اجزای این پروژه آمده است. دکمه ها مدار مفصلی ندارند زیرا می توان آنها را به روش های مختلف تنظیم کرد. در این پروژه آنها از یک مقاومت کششی 100K و یک دکمه ساده برای ارسال یک سیگنال 3 ولت به پین اختصاصی خود استفاده می کنند.

مرحله 3: آزمایش قطعات و کد اصلی

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

کتابخانه های مورد نیاز:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. ساعت

Adafruit_NeoPixel.h

MPU9250.h

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

مرحله 4: کالیبراسیون MPU

کالیبراسیون MPU
کالیبراسیون MPU

سرفصل یافت شده از طریق MPU در ایالت 2 و ایالت 3 به چهار رده تقسیم شد. این امر ضروری بود زیرا روش کالیبراسیون ما مستلزم یافتن حداقل و حداکثر مقادیر مغناطیس سنج در امتداد محورهای x و y آن بود. این امر با چرخاندن دستگاه به طور تصادفی در سه محور خود ، عاری از هرگونه میدان الکترومغناطیسی مهم به غیر از زمین انجام شد. سپس حداقل و حداکثر مقادیر را در محور x و y در نظر گرفتیم و آنها را به یک معادله مقیاس بندی وصل کردیم تا مقادیر بین مقادیر منفی یک و یک را محدود کنیم. در شکل بالا ، BigX و BigY حداکثر مقادیر داده مغناطیس سنج در طول محور x و y هستند ، LittleX و LittleY حداقل مقادیر داده های مغناطیس سنج در طول محور x و y هستند ، IMU.getMagX_uT () و IMU.getMagY_uT () مقادیری است که از مغناطیس سنج در هر زمان به ترتیب در طول محور x و y بیرون کشیده می شود و Mx و My مقادیر جدید مقیاس بندی شده برای محاسبه عنوان هستند.

مرحله 5: کد نهایی

کد نهایی
کد نهایی
کد نهایی
کد نهایی
کد نهایی
کد نهایی
کد نهایی
کد نهایی

آخرین مرحله ایجاد کد نهایی است. من یک کپی از کد نهایی پروژه ها را ضمیمه کرده ام. در داخل یادداشت ها برای کمک به حرکت در کد ساخته شده است. بزرگترین چالش این بخش ، کارکرد درست چهارگوش ها بود. اجرای چهارگوشه خسته کننده تر و منطقی تر از آن چیزی بود که می توانستیم تصور کنیم. ما در ابتدا یک آرکتان پایه (My/Mx) را پیاده سازی کردیم و سپس از رادیان به درجه تبدیل کردیم ، زیرا آردوینو به طور پیش فرض به رادیان خروجی می دهد. با این حال ، تنها چهارمعی که در آن کار کرد از 90 درجه تا 180 درجه بود ، که خروجی منفی به ما داد و در نهایت به ربع سوم رسید. راه حل این مسئله گرفتن مقدار مطلق است ، زیرا هنوز به درستی افزایش یافته است. این مقدار سپس از 360 کم می شود تا LED درست NeoPixel در حالت 2 روشن شود و یک عملیات ریاضی مشابه در حالت 3 بر اساس این که عنوان عنوان بزرگتر یا کوچکتر از عنوان ورودی کاربر است استفاده شود ، که هر دو را می توانید در کد بالا در شکل های بالا ، Heading مربوط به نور NeoPixel است که بر اساس تفاوت بین عنوان دستگاه و انحراف از شمال در مورد حالت 2 و از عنوان کاربر مشخص می شود. در این حالت ، 90 تا 180 درجه مربوط به ربع سوم است. در هر دو مورد ، tft.print باعث می شود صفحه نمایش دستگاه را از شمال بخواند.

برای سه ربع دیگر ، پیاده سازی آرکتان (My/Mx) منجر به وارونگی افزایش با چرخش دستگاه شد ، یعنی زاویه عنوان هنگام شمارش معکوس شمارش می شود و برعکس. راه حل این مشکل این بود که آرکتانژانت را به شکل آرکتان (Mx/My) برگردانیم. در حالی که این امر وارونگی افزایشی را حل می کند ، عنوان دستگاه صحیح را مشخص نمی کند ، جایی که چهارگوش ها وارد بازی می شوند. راه حل ساده برای این کار اضافه کردن یک تغییر بر اساس چهارم مربوطه بود. این را می توان در شکل های زیر مشاهده کرد ، که بار دیگر قطعاتی از کد های 2 و 3 هر ربع هستند.

اولین دستور if در صورتی انجام می شود که سرفصل محاسبه شده توسط معادله MPU بیشتر از عنوان کاربر باشد. در این شرایط عنوان ورودی کاربر به عنوان دستگاه اضافه می شود و مقدار مربوطه از 360 کم می شود. اگر دستور else انجام شود ، معادله سرفصل MPU از عنوان ورودی کاربر کم می شود. این شرایط به منظور به دست آوردن یک مقدار دقیق برای NeoPixel ، بلکه برای به دست آوردن مقداری خارج از محدوده قابل قبول ، که از 0 تا 359 درجه است ، اجتناب شد.

توصیه شده: