فهرست مطالب:

کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ: 3 مرحله
کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ: 3 مرحله

تصویری: کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ: 3 مرحله

تصویری: کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ: 3 مرحله
تصویری: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, جولای
Anonim
کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ
کنترل موقعیت زاویه ای موتور پله ای 28BYJ-48 با آردوینو و جوی استیک آنالوگ

این یک طرح کنترل موتور پله ای 28BYJ-48 است که من توسعه داده ام تا به عنوان بخشی از پروژه پایان نامه سال آخر خود استفاده کنم. من قبلاً ندیده بودم که این کار را انجام دهم ، بنابراین فکر کردم آنچه را که کشف کردم بارگذاری کنم. امیدوارم این به شخص دیگری در خارج کمک کند!

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

برای اجرای من ، من نیاز داشتم که اگر جوی استیک رها شود ، یعنی موقعیت زاویه ای نداشته باشد ، موتور به جهت "خانه" بازگردد. جهت خانه به سمت شرق است و موتور (یا به طور اجمالی هر نشانگر / دستگاهی را که به شفت خروجی وصل کرده اید!) نیز هنگام روشن شدن باید به این جهت باشد.

تدارکات

آردوینو اونو یا مشابه آن

تخته نان و انتخاب سیم های بلوز (مرد به مرد ، مرد به زن)

منبع تغذیه 5 ولت

ماژول جوی استیک آنالوگ (در حالت ایده آل با یک دکمه فشاری لحظه ای ، استراحت راحت تر در موقعیت "خانه" را آسان می کند.

موتور پله ای 28BYJ-48 و درایور پله ULN2003

قلم ، کاغذ و blu-tac (یا هر دستگاه اشاره گر دیگری برای اتصال به موتور!)

مرحله 1: مرحله 1: راه اندازی

موتور پله ای را به راننده پله وصل کنید و پین ها را به صورت زیر وصل کنید:

IN1 - پین 8 آردوینو

IN2 - پین 9 آردوینو

IN3 - پین 10 آردوینو

IN4 - پین 11 آردوینو

منبع تغذیه 5 ولت خود را به ریل های تغذیه روی تخته نورد خود متصل کرده و ورودی های 5V ULN2003 را به ریل های تغذیه وصل کنید. ریل زمینی را با آردوینو خود به زمین متصل کنید.

برای جوی استیک ، موارد زیر را وصل کنید:

سوئیچ پین - پین آردوینو 2

محور X - Arduino A0 (آنالوگ در 0)

محور Y - آردوینو A1

+5V - خروجی آردوینو 5V

GND - آردوینو GND

در نهایت سطح تخته نان خود را به پین دیگر Arduino GND وصل کنید

مرحله 2: مرحله 2: توضیح کد

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

نظریه پشت این کد این است که فضای اشغال شده توسط جوی استیک به یک نمودار تقسیم می شود و 0 ، 0 در مرکز آن قرار دارد. با این حال ورودی های جوی استیک در (تقریبا) 512 در مرکز قرار دارند ، بنابراین برای غلبه بر این دو تابع برای "صفر کردن" مقدار خوانده شده از محور X و Y استفاده می شود. بسته به منبع تغذیه ای که استفاده می کنید ، ممکن است لازم باشد مقادیر عملکردهای ZeroX و ZeroY را تغییر دهید تا جوی استیک شما هنگام استراحت یک عدد قابل اعتماد از 0 را نشان دهد.

وقتی مقادیر X ، Y خوانده می شوند ، ابتدا با استفاده از تابع atan2 () در کتابخانه math.h به رادیان تبدیل می شوند. توضیح این تابع خارج از محدوده این دستورالعمل است ، اما لطفاً آن را جستجو کنید - این یک ترفند نسبتاً ساده هندسی است!

در نهایت ، برای سهولت زندگی برای ما که قبلاً در درجه کار می کردیم تا rad ، مقدار rad محاسبه شده توسط atan2 () به درجه تبدیل می شود.

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

حالا وارد قسمت اصلی کد شوید! ما با خواندن جوی استیک X ، مختصات Y را دو بار با تأخیر 10 میلی ثانیه از هم جدا می کنیم و سپس بررسی می کنیم که آیا آنها یکسان هستند - من متوجه شدم که جوی استیک گاه به گاه قرائت های پراکنده را انجام می دهد ، و این تاخیر جزئی برای متوقف کردن چرخش موتور بر اساس این موارد کافی بود. به همچنین این تاخیر به اندازه کافی کوتاه است که به نظر نمی رسد با ورودی های عمدی تداخل داشته باشد.

بقیه کد ها کاملاً خود توضیحی هستند و من تمام تلاش خود را برای مستندسازی آن انجام داده ام. مجموعه ای از گزاره های IF زاویه جوی استیک فعلی را با زاویه موتور مقایسه می کنند و موتور را به آن زاویه منتقل می کنند. 28BYJ-48 دارای 5.689 مرحله در درجه است ، بنابراین به همین دلیل است که ما حرکت مورد نیاز را در این عدد به ظاهر عجیب ضرب می کنیم!

قسمتی از کد که بیشترین توضیح را می طلبد ، چیزی است که من آن را "پرونده جمع بندی" نامیده ام. حتی در آنکه جوی استیک و موتور در مثال +175 درجه ، و جوی استیک متعاقباً به -175 درجه (حرکتی تنها 10 درجه بر روی جوی استیک ، از شمال غرب به جنوب غرب) حرکت کرد ، موتور 350 درجه در جهت نادرست حرکت می کند! برای محاسبه این مورد ، پرونده ویژه نوشته شده است.

مورد جمع بندی با بررسی اینکه موتور و جوی استیک علائم متضادی دارند ، یعنی مثبت و موتور منفی است ، شروع می شود یا برعکس. همچنین بررسی می کند که مجموع مطلق (یعنی مقادیر مثبت) جوی استیک و موتور بالای 180 درجه باشد.

اگر این دو عبارت درست باشند ، تابع بررسی می کند که آیا موتور باید در جهت عقربه های ساعت حرکت کند (مقدار موتور منفی است) یا خلاف جهت عقربه های ساعت (اگر مقدار موتور مثبت باشد).

مقادیر مطلق زاویه موتور و زاویه جوی استیک به طور کلی جمع آوری شده و برای تعیین فاصله حرکت از 360 درجه کم می شود. در نهایت ، زاویه موتور (که اکنون زاویه جوی استیک را منعکس می کند) به همین ترتیب به روز می شود.

مرحله 3: تمام شد

بنابراین ، تنها کاری که باید انجام دهید این است که کد را در Arduino خود بارگذاری کرده و اجرا کنید! برای اطلاع از نحوه عملکرد پروژه به ویدیوی بالا مراجعه کنید. این برای گیمبال دوربین ، بازوهای روباتیک و بسیاری از برنامه های دیگر مفید خواهد بود!

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

توصیه شده: