ربات مسیریاب با استفاده از الگوریتم PID یک ربات مسیریاب ساده است که با استفاده از مادون قرمز (IR) یا برخی از حسگرهای نوری دیگر، خط ضخیمی را که روی زمین کشیده شده دنبال میکند. این ربات دنبال کننده خط از دو موتور با چرخ در عقب و یک چرخ کرچک به عنوان پشتیبانی در جلو استفاده میکند.
فهرست مطالب
الگوریتم کنترل PID
برق از باتری نصب شده بر روی مسیریاب گرفته میشود. برای کنترل حرکت ربات با خواندن خط از طریق حسگرها، از یک سیستم منطقی (معمولاً از میکروکنترلرها) استفاده میشود. نمونه اولیه نویسنده در شکل 1 نشان داده شده است.
دقت حرکت یک مسیریاب بیشتر به حرکت موتور و سیستم سنجش بستگی دارد. از الگوریتمهای زیادی برای هماهنگی دادهای خطی که توسط سنسورها برای کنترل موتورها خوانده میشوند، استفاده میشود. اما یک کنترل ساده و دقیق توسط الگوریتم PID (مشتق انتگرال متناسب) بدست میآید.
فرمول عملکرد PID با ترکیبی از سه اصطلاح متوالی [P] + [I] + [D] به شرح زیر است:
جایی که e (t) مقدار خطا است، که تفاوت مقدار مورد نیاز با مقدار واقعی است،
Kp = ثابت نسبت
Ki = ثابت برای انتگرال
Kd = ثابت برای مشتق
P = Kp در مقدار خطا ضرب میشود
I = Ki با مقدار خطای انتگرال قبلی ضرب میشود
D = Kd در مقدار مشتق ضرب میشود
توجه داشته باشید که ثابتهای Kp ، Ki و Kd برای هر مسیریاب یکسان نیستند. باید هر بار مقادیر تقریبی برای سه ثابت فوق را در نظر بگیریم و سپس کد را برای آزمایش رفتار مسیریاب در میکروکنترلر کامپایل و رایت کنیم. این کار بسیار طاقت فرسا است و زمان زیادی در حین آزمایش هدر میرود.
استفاده از فرمول فوق با استفاده از تابع void runPID () در کد منبع ساده شده است. مقادیر ثابت Kp ، Ki ، Kd ، تاخیرها و حلقههای مورد نیاز برای کنترل پیرو خط را میتوان فقط با فشار دادن سه دکمه تغییر داد.
مقادیر تنظیم شده فعلی را میتوان بر روی صفحه نمایش OLED مشاهده کرد و همانها به طور خودکار در EEPROM میکروکنترلر ذخیره میشوند که آزمایش پیروی خط با الگوریتم PID را ساده و آسان میکند.
ساز و کار مدار مسیریاب
نمودار مدار مسیریاب PID سفارشی دارای دو قسمت است: مدار اصلی و مدار حسگر. مدار اصلی در شکل 2 نشان داده شده است. این مدار در حدود یک تنظیم کننده ولتاژ 5 ولت 7805 (IC1)، میکروکنترلر ATmega16 (IC2)، تنظیم کننده ولتاژ 6 ولت 7806 (IC3)، درایور موتور L293D (IC4)، چهار دیود 1N4007 (D1 تا D4)، آرایه LED نوار 10 بخشی (BAR1)، سه LED (LED1 تا LED3)، دو موتور 6 ولت باتری و چند جز components دیگر.
واحد مدار سنسور در شکل 3 نشان داده شده است. این واحد در حدود دو اپ امپ LM324 (IC5 و IC6)، هشت LED انتقال دهنده IR (IRTX1-IRTX8)، هشت LED گیرنده IR (IRRX1 -IRRX8) و چند مورد دیگر ساخته شده است.
ساخت ربات مسیریاب
دادههای خط توسط هشت جفت LED انتقالدهنده IR و LED دریافت کننده IR (به عنوان سنسور استفاده میشود) در یک خط مرتب شده خوانده میشوند. مقاومت سنسور IR با انعکاس نور IR از رنگ مسیرها در کف متفاوت است، با آهنگ رنگ سفید بیشترین بازتاب و مسیر رنگ سیاه منعکس کننده کمترین میزان است.
تغییر مقاومت زمانی حاصل میشود که ولتاژ با استفاده از یک شبکه مقاومت تغییر کرده و به هشت آپ آمپ (چهار عدد از IC5 و IC6) برای تقویت بیشتر سیگنال تغذیه شود.
خروجیهای آمپرها سیگنال ورودی برای میکروکنترلر ATmega16 است. بنابراین، وضعیت سیگنالهای بدست آمده توسط میکروکنترلر بر روی یک آرایه میلهای 10-LED نمایش داده میشود (در اینجا فقط هشت مورد از ده LED وجود دارد).
میتوان سیگنال را با استفاده از jumper J1 وارونه کرد، این ربات را قادر میسازد تا یک خط سفید را بر روی زمینه سیاه یا خط سیاه را بر روی زمین دنبال کند.
طرح PCB برای مدار اصلی در شکل 4 و طرح اجزای آن در شکل 5 نشان داده شده است. مدار را روی PCB جمع کنید. باتری LiPo را از طریق BATT.1 متصل کنید. همچنین میتوانید به جای باتری LiPo از یک باتری سربی-اسید 12 ولت معمولی استفاده کنید. قبل از نصب ATmega16A روی PCB، فراموش نکنید که custom_pid_lf.hex را در آن بارگذاری کنید.
طرح PCB برای مدار سنسور در شکل 6 و طرح اجزای آن در شکل 7 نشان داده شده است. پس از جمع آوری مدار بر روی PCB ، CON3 را به CON4 متصل کنید.
PDF های طرح PCB و Component را بارگیری کنید: اینجا را کلیک کنید
پس از مونتاژ واحدهای اصلی و حسگر بر روی PCB های مربوطه، واحد اصلی را در بالای شاسی همراه با واحد باتری و حسگر در قسمت پایین شاسی (حدود 25 میلی متر بالاتر از سطح) ثابت کنید.
برای اطلاعات بیشتر در مورد مونتاژ و اتصالات، لطفاً به نمونه اولیه نویسنده در شکل 1 و مونتاژ واحد سنسور در شکل 8 مراجعه کنید.
راه اندازی اولیه
همانطور که در زیر توضیح داده شده، دو موتور باتری، یک چرخ کرچک و یک باتری را بر روی یک شاسی خوب تعمیر کنید. تابلوی آرایه هشت سنسور IR را در قسمت جلویی خود قرار دهید و حدود 5 میلیمتر بین LED ها از کف و IR فاصله دارد. بعد، صفحه مدار اصلی را روی شاسی قرار داده و پس از روشن کردن منبع تغذیه برد از طریق باتری، از طریق پورت ISP، فایل custom_pid_lf.hex را در میکروکنترلر (ATmega16) بنویسید و رایت کنید. اکنون، منبع تغذیه را خاموش کرده و برنامهنویس AVR را از برد مدار اصلی خارج کنید.
خروجیهای سنسور را به واحد مدار اصلی وصل کرده و منبع تغذیه واحد مدار سنسور را روشن کنید. آرایه نوار LED (BAR1) باید چشمک بزند و OLED باید “پیام خوش آمدگویی” را برای مدتی نمایش دهد و به دنبال آن حالت “توقف” پیش فرض باشد.
اکنون، VR1 را در نزدیکی IC های آمپر آمپ (LM324) در واحد سنسور تنظیم کنید تا هنگام انتقال واحد سنسور روی خط سیاه (یا سفید)، هشت LED موجود در آرایه LED را روشن و خاموش کند. با برداشتن و اتصال بلوز اتصال کوتاه J1 تفاوت حس خط را مشاهده کرده و آن را مطابق رنگ (سیاه یا سفید) خط تنظیم کنید. برای خط سیاه رنگ J1 را باز کنید و برای خط سفید رنگ J1 را ببندید.
خود آزمایی برای موتورها
دکمه سوئیچ S2 را فشار دهید تا چرخش موتورها در زمانی که ربات مسیریاب در حالت توقف است آزمایش شود. پیام در OLED نشان می دهد: “مرحله 1 از 4 ، موتور راست در حالت رو به جلو است.” در همان زمان، موتور راست در جهت جلو حرکت میکند.
بعد ، S2 را لحظهای فشار دهید تا موتور سمت چپ بررسی شود. به همین ترتیب، S2 را فشار دهید تا حرکت رو به جلو و عقب ربات مسیریاب بررسی شود.
در صورت چرخش هر یک از موتورها، منبع تغذیه باتری را خاموش کرده و اتصالات سیم موتور را اصلاح کنید. سپس دوباره خودآزمایی کنید و بررسی کنید تا جهت موتورها با پیامهای نمایش داده شده در OLED مطابقت داشته باشد.
پیکربندی ثابتها
برای تغییر مقادیر ثابت (Kp ، Ki و Kd)، دکمه S1 را مرتباً فشار دهید تا مقادیر فعلی نمایش داده شود و مقادیر تغییر کند.
دکمه S2 را برای کاهش یا S3 را فشار دهید تا مقادیر افزایش یابد. اگر بیش از پنج ثانیه هیچ دکمه ای فشرده نشود، مقادیر تغییر یافته به طور خودکار در EEPROM میکروکنترلر ذخیره میشود.
پارامترهای زیر ممکن است با فشار دادن دکمه S1 و به دنبال آن فشار دادن دکمههای S2 یا S3 برای افزایش یا کاهش مقادیر، به ترتیب انتخاب شوند:
ثابت Kp (به عنوان KP در OLED نمایش داده میشود) یک ثابت ضرب برای P در PID است. میتوانید آن را به مقدار مناسب تغییر دهید، بگویید Kp = 8.1
Constant Ki (به صورت KI نمایش داده میشود) یک ثابت ضرب برای من در PID است. آنرا تغییر دهید تا بگوید KI = 0.1
Kd ثابت (به صورت KD نمایش داده میشود) یک ثابت ضرب برای D در PID است. آنرا تغییر دهید تا بگوید Kd = 0.1
تأخیر حلقه (به صورت DELAY نمایش داده میشود) تأخیری است که بین قرائت دادههای خط توسط حسگرهای IR وجود دارد. میتوانید آنرا تغییر دهید و بگویید Delay = 50
حلقه جستجو (به صورت SEARCH نمایش داده میشود) تعداد دفعاتی است که برنامه قبل از ورود به حالت متوقف کردن برای جستجوی یک خط. آن را تغییر دهید و بگویید جستجو = 45
تست ربات مسیریاب با استفاده از الگوریتم PID
دکمه S3 را فشار دهید تا پیروان خط در حالت پیکربندی اجرا یا متوقف شود. دکمه تنظیم مجدد S4 را در هر زمان فشار دهید تا عملیات متوقف شده و دوباره راهاندازی شود.
حالت فعلی Run / Stop در گوشه بالا سمت راست OLED نمایش داده میشود. در ابتدا ، در حالت Stop، مقداری مقدار (مثلاً 8.0) را برای KP تنظیم کنید در حالی که مقادیر KI و KD را صفر نگه دارید. یک مسیر منحنی سیاه و ضخیم روی زمین ایجاد کنید و ربات مسیریاب را در بالای مسیر نگه دارید. دکمه S3 را فشار دهید تا ربات مسیریاب اجرا شود. باید خط منحنی کشیده شده روی زمین را دنبال کند. برای تنظیم دقت حرکت ربات، مقادیر KD و KI را تغییر دهید.
وقتی خطی پیدا نمیشود، تابع () searchLine در کد فراخوانی میشود. این عملکرد مستقل از الگوریتم PID است و ممکن است در صورت نیاز، در صورت نیاز تغییر یابد.