ماشین رباتیک ۴ چرخ؛ کنترل با آردوینو و ریموت مادون قرمز
ساخت یه ماشین رباتیک که بتونی از راه دور کنترلش کنی، یکی از جذابترین پروژههایی هست که میتونی با میکروکنترلرها انجام بدی. این پروژه بهت نشون میده چطور کدهایی که مینویسی، تو دنیای واقعی تبدیل به حرکت و هیجان میشن.
تو این پروژه قراره یه ماشین رباتیک 4 چرخ (4WD) بسازیم و مغز متفکر اون رو برد آردوینو Uno قرار بدیم. برای اینکه موتورها جون کافی برای حرکت داشته باشند، از درایور موتور قدرتمند L298N استفاده میکنیم و فرمانهای حرکتی رو هم از طریق یه ریموت کنترل مادون قرمز (ماژول HX1838) به ماشین میفرستیم.
منطق کاری این ربات خیلی ساده و روونه. قطعات رو روی شاسی ماشین سوار میکنیم، سیمکشیها رو انجام میدیم و با چند خط کد، رباتمون آماده حرکت میشه. وسایلت رو روی میز بچین و بریم که این ماشین کنترلی باحال رو با هم بسازیم.
قطعات موردنیاز
- برد توسعه آردوینو Uno
- کابل USB تایپ A به تایپ B
- چهار عدد موتور DC 6 ولت به همراه چرخ
- شاسی ماشین رباتیک (4 چرخ یا 4WD)
- ماژول درایور موتور L298N
- کیت ریموت و گیرنده مادون قرمز (HX1838)
- دو عدد باتری لیتیوم یون 18650 (3.7 ولت)
- جا باتری 18650 کلیددار
- باتری کتابی 9 ولت
- سوکت باتری 9 ولت با فیش نری
- سیم جامپر
- برد توسعه آردوینو Uno
- کابل USB تایپ A به تایپ B
- چهار عدد موتور DC 6 ولت به همراه چرخ
- شاسی ماشین رباتیک (4 چرخ یا 4WD)
- ماژول درایور موتور L298N
- کیت ریموت و گیرنده مادون قرمز (HX1838)
- دو عدد باتری لیتیوم یون 18650 (3.7 ولت)
- جا باتری 18650 کلیددار
- باتری کتابی 9 ولت
- سوکت باتری 9 ولت با فیش نری
- سیم جامپر
راهاندازی ماژول L298N برای کنترل موتورهای DC
ماژول L298N یه درایور موتور دوگانه (H-bridge) خیلی کاربردیه. این قطعه به آردوینو اجازه میده که موتورهای DC رو با خیال راحت و بدون خطر آسیب رسیدن به برد، کنترل کنه. تو این پروژه قراره 4 تا موتور داشته باشیم، اما چون L298N دو تا کانال خروجی داره، موتورها رو به دو دسته تقسیم میکنیم.
- موتورهای سمت چپ رو به هم وصل میکنیم و اسمشون رو میذاریم موتور A.
- موتورهای سمت راست هم به هم وصل میشن و میشن موتور B.
- با همین ترفند ساده، ماشین میتونه به جلو یا عقب بره و حتی با ترکیب سیگنالها دور بزنه.
پینهای آردوینو برای تعیین جهت حرکت
برای اینکه به موتورها بگیم کدوم طرفی بچرخند، از چهار تا پین دیجیتال آردوینو استفاده میکنیم:
موتور A (دو موتور سمت چپ)
- پین IN1 به پین 8 آردوینو
- پین IN2 به پین 9 آردوینو
موتور B (دو موتور سمت راست)
- پین IN3 به پین 10 آردوینو
- پین IN4 به پین 11 آردوینو
پینهای فعالساز (تنظیم سرعت ثابت)
اول از همه جامپرهای روی پینهای ENA و ENB ماژول L298N رو دربیار تا بتونیم خودمون کنترلشون کنیم.
- پین ENA به پین 5 آردوینو (پشتیبانی از PWM)
- پین ENB به پین 6 آردوینو (پشتیبانی از PWM)
تو این مدار قصد نداریم سرعت رو مدام تغییر بدیم. به جای این کار، یه مقدار PWM ثابت به این پینها میدیم تا ماشین با یه سرعت مطمئن و یکنواخت حرکت کنه. ریموت مادون قرمز فقط برای تغییر جهت (جلو، عقب، توقف و چرخش) استفاده میشه.
منطق تعیین جهت حرکت
- یه پین HIGH و اون یکی LOW باشه: موتورها میچرخند.
- حالت برعکس: موتورها تو جهت مخالف میچرخند.
- هر دو پین LOW یا HIGH باشند: موتورها ترمز میکنند و میایستند.
اتصالات تغذیه و خروجیها
- پین 12 ولت+ (تغذیه موتورها): وصل میشه به پک باتری 7.4 ولت (همون دو تا باتری 18650).
- پین GND: وصل میشه به GND آردوینو (اشتراک زمین خیلی مهمه).
- پینهای OUT1 و OUT2: وصل میشن به موتورهای سمت چپ.
- پینهای OUT3 و OUT4: وصل میشن به موتورهای سمت راست.
همونطور که میدونی، وصل کردن مستقیم موتور به آردوینو کار اشتباهیه. درایور L298N اینجاست تا نقش یه واسطه قدرتمند رو بازی کنه و جریان مورد نیاز موتورها رو تامین کنه. چون ماشین رباتیک ما 4 تا چرخ داره و درایور فقط دو تا خروجی مجزا داره، باید موتورها رو دو به دو موازی کنیم.
- موتورهای سمت چپ به عنوان یه گروه واحد (موتور A) عمل میکنند.
- موتورهای سمت راست هم گروه دوم (موتور B) رو تشکیل میدند.
این مدل سیمکشی کار رو خیلی راحت میکنه و فقط با چند تا فرمان ساده دیجیتال میتونی کل ماشین رو کنترل کنی.
نقشه پینهای آردوینو برای کنترل جهت
برای کنترل جهت چرخش هر سمت از ماشین، به چهار تا پین دیجیتال نیاز داریم:
اتصالات سمت چپ (موتور A)
- پایه IN1 به پین شماره 8 آردوینو
- پایه IN2 به پین شماره 9 آردوینو
اتصالات سمت راست (موتور B)
- پایه IN3 به پین شماره 10 آردوینو
- پایه IN4 به پین شماره 11 آردوینو
پینهای ENA و ENB (تنظیم سرعت)
یادت نره جامپرهای پیشفرض روی پایههای ENA و ENB رو جدا کنی تا بتونی از طریق آردوینو بهشون فرمان بدی.
- پایه ENA به پین 5 (دارای قابلیت PWM)
- پایه ENB به پین 6 (دارای قابلیت PWM)
برای اینکه ماشین حرکت نرمی داشته باشه، تو کدهای آردوینو یه سرعت ثابت رو برای این پینها تعریف میکنیم. در واقع ریموت کنترل قرار نیست سرعت رو کم و زیاد کنه؛ فقط وظیفه داره به ماشین بگه کی بره جلو، کی بپیچه و کی متوقف بشه.
نحوه چرخش موتورها
- دادن HIGH و LOW به پایههای ورودی: شروع چرخش موتور
- برعکس کردن وضعیت HIGH و LOW: چرخش در جهت مخالف
- دادن دو HIGH یا دو LOW همزمان: توقف کامل موتورها
سیمکشی تغذیه درایور
- ورودی 12 ولت: به قطب مثبت باتریهای 18650 وصل میشه.
- پین GND: حتما باید به GND باتری و GND آردوینو مشترک بشه.
- خروجیهای OUT1 و OUT2: برای موتورهای سمت چپ ماشین.
- خروجیهای OUT3 و OUT4: برای موتورهای سمت راست ماشین.
سیمکشی قطعات و گیرنده مادون قرمز
شماتیک مدار ماشین رباتیک
شاید نقشه بالا رو ببینی و متوجه بشی که بعضی قطعات مثل ماژول L298N دقیقا تو نرمافزارهای شبیهساز مثل Tinkercad وجود ندارند. با این حال، شماتیکی که برات گذاشتیم نمای کلی اتصالات رو به خوبی نشون میده و میتونی ازش الگو بگیری.
منطق کاری ریموت کنترل
کنترل کردن این ماشین رباتیک با ریموت مادون قرمز خیلی لذتبخش و سادهست. هر دکمهای که روی ریموت میزنی، یه کار خاص رو انجام میده:
- دکمه فلش بالا (↑): حرکت ماشین به سمت جلو
- دکمه فلش پایین (↓): حرکت ماشین به سمت عقب
- دکمه فلش چپ (←): چرخش ماشین به سمت چپ
- دکمه فلش راست (←): چرخش ماشین به سمت راست
- دکمه OK: ترمز و توقف کامل ماشین
وقتی یکی از دکمهها رو فشار میدی، گیرنده مادون قرمز سیگنال رو میگیره و به آردوینو میفرسته. آردوینو هم بلافاصله فرمان لازم رو به درایور L298N صادر میکنه.
اتصال گیرنده مادون قرمز (HX1838)
سنسور گیرنده HX1838 یکی از معروفترین گیرندههای 38 کیلوهرتز برای آردوینوعه. این ماژول میتونه هم با ولتاژ 5 ولت و هم با 3.3 ولت به خوبی کار کنه:
- پایه VCC سنسور: به پین 5 ولت یا 3.3 ولت آردوینو
- پایه GND سنسور: به پین GND آردوینو
- پایه OUT (سیگنال) سنسور: به یکی از پینهای دیجیتال آردوینو (مثلا پین 4)
سیگنال خروجی این سنسور کاملا با پایههای دیجیتال آردوینو سازگاره و نیازی به قطعه واسط یا تبدیل ولتاژ نداره.
راهنمای سیمکشی قطعات
با اینکه پیدا کردن شکل دقیق تمام قطعات تو نرمافزارهای رسم شماتیک یکم سخته، اما همین تصویر شماتیک کاملا بهت نشون میده که سیمها چطور باید بین آردوینو، درایور و موتورها کشیده بشن.
کنترل ماشین با ریموت IR
کار با ریموت خیلی راحته. هر فرمانی که با ریموت میفرستی، یه مسیر مشخص رو برای ماشین تعیین میکنه:
- جهت بالا (↑): فرمان حرکت رو به جلو
- جهت پایین (↓): فرمان حرکت دندهعقب
- جهت چپ (←): پیچیدن به چپ
- جهت راست (←): پیچیدن به راست
- دکمه OK: متوقف کردن کامل ربات
کل این فرایند تو چند میلیثانیه اتفاق میافته؛ یعنی سنسور کد رو دریافت میکنه، آردوینو ترجمهاش میکنه و درایور موتورها رو به حرکت درمیاره.
تغذیه و راهاندازی گیرنده HX1838
ماژول HX1838 به خاطر سازگاری بالا با بردهای میکروکنترلری، انتخاب اول تو این پروژههاست. برای راهاندازیش فقط کافیه پایهها رو به شکل زیر وصل کنی:
- پین مثبت (VCC): وصل بشه به تغذیه 5 یا 3.3 ولت روی برد
- پین منفی (GND): وصل بشه به زمین (GND) مدار
- پین خروجی (OUT): وصل بشه به پین دیجیتال شماره 4
مهم نیست سنسور رو با چه ولتاژی تغذیه میکنی؛ خروجی اون مستقیم به پین دیجیتال وصل میشه و آردوینو به راحتی سیگنالها رو میخونه.
تأمین انرژی؛ تغذیه مجزا برای آردوینو و موتورها
تو این پروژه برای اینکه ماشینمون بدون مشکل و هنگ کردن کار کنه، تغذیه بخشهای مختلف رو از هم جدا کردیم. برد آردوینو انرژی خودش رو از یه باتری کتابی 9 ولتی میگیره که با یه سوکت فیش نری به پورت آداپتور برد وصل میشه. آردوینو خودش یه رگولاتور ولتاژ داخلی داره که این 9 ولت رو به ولتاژ مناسب برای قطعات روی برد تبدیل میکنه.
موتورها و درایور L298N جریان زیادی میکشند، برای همین از یه پک باتری 7.4 ولتی (دو تا باتری 18650) استفاده میکنیم تا جون کافی برای چرخوندن چرخها رو داشته باشند.
یه نکته خیلی حیاتی اینجا وجود داره: با وجود دو تا منبع تغذیه جدا، حتما باید پین GND آردوینو و GND ماژول L298N رو با یه سیم به هم وصل کنی. اگر این پینها مشترک نشن، سیگنالها درست منتقل نمیشن و مدار گیج میزنه!
جدا کردن تغذیه موتورها از آردوینو باعث میشه وقتی موتورها جریان زیادی میکشند، ولتاژ برد آردوینو افت نکنه و میکروکنترلر بیدلیل ریست نشه. تأمین تغذیه جداگانه، یکی از بهترین ترفندها برای ساخت رباتهای پایدار و بدون خطاست. وقتی باتری 9 ولت رو مستقیم به جک آداپتور آردوینو میزنی، بخش پردازش مدار رو از نویزها و نوسانات بخش موتورها کاملا ایزوله میکنی.
باتریهای لیتیومی 18650 هم دقیقا همون چیزی هستند که موتورهای DC برای حرکت پرقدرت بهش نیاز دارند و جریان لحظهای عالیای به درایور L298N میرسونند. فراموش نکن که توی مدارهایی با چند منبع تغذیه، مشترک کردن زمین (GND) از نون شب واجبتره تا سطح ولتاژ مرجع برای همه قطعات یکی باشه. با رعایت همین چند نکته ساده تو سیمکشی تغذیه، خیالت راحته که ماشین رباتیکت وسط حرکت یهو خاموش یا ریست نمیشه.
نصب کتابخانه برای ریموت مادون قرمز
حالا وقتشه نرمافزار Arduino IDE رو باز کنی. اول برو به بخش Library Manager و عبارت IRremote رو جستجو کن. کتابخانهای که توسط Shirriff, z3t0, ArminJo نوشته شده رو پیدا و نصب کن.
بعد از نصب، از منوی Tools بخش Boards، برد آردوینو Uno رو انتخاب کن. در آخر هم از همون منوی Tools و بخش Port، پورتی که آردوینو بهش وصل شده رو تیک بزن.
برای اینکه کدهای ریموت به درستی کار کنند، کتابخونه IRremote رو از مخزن آردوینو نصب کن. حواست باشه که نسخه توسعهداده شده توسط Shirriff رو انتخاب کنی. بعد از اون، یادت نره که نوع برد رو تو تنظیمات نرمافزار روی Uno قرار بدی. در قدم آخر هم مطمئن شو که پورت ارتباطی USB برد رو به درستی تو سیستم انتخاب کردی تا موقع آپلود کد به مشکل نخوری.
کدهای ماشین رباتیک و تنظیم سرعت ثابت
تو کدهایی که برای این پروژه در نظر گرفتیم، سرعت حرکت ماشین کاملا ثابت تعریف شده و نیازی نیست حین حرکت درگیر کم و زیاد کردن سرعت بشی. این کار با دادن یه سیگنال PWM ثابت به پینهای فعالساز درایور انجام میشه.
مقدار PWM رو روی عدد 150 تنظیم کردیم که یه سرعت ایمن و ایدهآل برای چرخش هر چهار موتور بهمون میده. با این حساب، تنها وظیفهای که به دوش ریموت کنترل قرار داره اینه که فرمان حرکت به جهات مختلف و ترمز رو صادر کنه.
به جای اینکه کدهای پروژه رو با تعریف سرعتهای متغیر پیچیده کنیم، یک پالس ثابت برای درایور L298N در نظر گرفتیم تا حرکت ماشین نرم و یکنواخت باشه.
مقدار تنظیم شده برای سرعت تو این پروژه، توان کافی برای حرکت موتورها رو فراهم میکنه. تو فقط کافیه ریموت رو دستت بگیری و با دکمههای جهتدار، ربات جذابت رو هدایت کنی!
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!