در صورتیکه بخش های قبلی پروژه را مطالعه نکرده اید حتما به بخش اول (چگونه یک ربات بسازیم؟) مراجعه کنید و از ابتدا پروژه را مطالعه کنید.
بخش چهارم – میکروکنترلر چیست؟
میکروکنترلر یک وسیله محاسباتی است که قابلیت اجرای یک برنامه (یا دنباله ای از دستورالعمل ها) را دارد و اغلب به عنوان “مغز سیستم” یا “مرکز کنترل” در یک ربات گفته می شود زیرا معمولاً مسئولیت کلیه محاسبات ، تصمیم گیری و ارتباطات را دارد.
به منظور تعامل با دنیای خارج ، میکروکنترلر دارای یک سری پین (اتصالات سیگنال الکتریکی) است که می تواند به کمک برنامه نویسی، مقدار آنها 1 (on/high) یا 0 (off/low) شود. از این پین ها همچنین می توان برای خواندن سیگنالهای الکتریکی (که از سنسورها یا وسایل دیگر می آیند) استفاده کرد و جاهایی که مقدار سیگنال صفر یا یک می باشد را مشخص کرد.
بیشتر میکروکنترلرهای مدرن می توانند سیگنال های ولتاژ آنالوگ (یعنی سیگنال هایی را که می توانند طیف کاملی از مقادیر خروجی را بجای فقط دو حالت تعریف شده داشته باشند) را با استفاده از مبدل آنالوگ به دیجیتال (ADC) اندازه گیری کنند. به کمک ADC ، میکروکنترلر می تواند یک مقدار عددی را به یک ولتاژ آنالوگ اختصاص دهد به طوریکه مقدارش نه 1 ( یا زیاد ) و نه 0 ( یا پایین ) باشد.
کاربرد میکروکنترلر
اگرچه کاربرد میکروکنترلرها در نگاه اول محدود به نظر می رسد، اما بسیاری از اقدامات پیچیده را می توان با تنظیم پین های بالا و پایین به روشی هوشمندانه انجام داد. با این وجود، ممکن است ایجاد الگوریتم های بسیار پیچیده (مانند پردازش بینایی پیشرفته و رفتارهای هوشمند) یا برنامه های بسیار بزرگ به دلیل محدودیت منابع و سرعت آن، برای میکروکنترلرها غیرممکن باشد. به عنوان مثال، برای نوشتن برنامه یک چراغ چشمک زن، باید یک حلقه تکرار نوشت به طوریکه ابتدا میکروکنترلر مقدار یک پین را 1 کند و یک لحظه صبر کند سپس آنرا صفر کند و یک لحظه ی دیگر نیز صبر کند و این روند دوباره تکرار شود. چراغی که به پین مورد نظر وصل است، به طور نامحدود چشمک می زند.
همچنین، میکروکنترلرها را می توان برای کنترل سایر وسایل الکتریکی مانند موتورهای محرک ( زمانیکه به کنترلر موتور متصل هستند )، دستگاه های ذخیره سازی ( مانند کارت های SD )، اتصالات وای فای یا بلوتوث و غیره استفاده کرد. میکروکنترلرها را می توان در بسیاری محصولات یافت. تقریباً هر وسیله خانگی یا دستگاه الکترونیکی حداقل از یک میکروکنترلر استفاده می کند. به عنوان مثال تلویزیون ، ماشین لباسشویی ، کنترل از راه دور، تلفن ، ساعت ، مایکروویو و ربات ها ، به این دستگاه های کوچک احتیاج دارند.
برخلاف ریز پردازنده ها ( به عنوان مثال CPU در رایانه های شخصی )، میکروکنترلرها برای عملکردشان به دستگاه های جانبی مانند RAM خارجی یا دستگاههای ذخیره سازی خارجی احتیاج ندارد. این بدان معناست که گرچه میکروکنترلرها نسبت به رایانه ها از قدرت کمتری برخوردار هستند، اما از آنجاییکه نیاز به قطعات سخت افزاری کمتری دارند، طراحی و ساخت مدارها و محصولات مبتنی بر میکروکنترلرها بسیار ساده تر و ارزان تر هستند. توجه به این نکته ضروری است که میکروکنترلرها تنها می توانند مقدار کمی از انرژی الکتریکی را از طریق پین های خود خارج کنند، این بدان معنی است که یک میکروکنترلر قادر نخواهد بود انرژی مورد نیاز موتورهای الکتریکی ، شیرهای برقی ، چراغ های بزرگ یا هر وسیله الکتریکی بزرگی که نیاز به انرژی زیادی داشته باشد، را تامین کند. اگر سعی کنید چنین کاری انجام دهید احتمالاً میکروکنترلر آسیب خواهد دید.
ویژگی های میکروکنترلر
با توجه به سخت افزار ویژه ای که در میکروکنترلرها ساخته شده، نشان می دهد این دستگاه ها فقط یک دستگاه دیجیتال ورودی/خروجی نیستند بلکه محاسبات، ریاضیات و تصمیم گیری انجام می دهند. بسیاری از میکروکنترلرها از محبوب ترین پروتکل های ارتباطی مانند UART ( سری a.k.a. یا سریRS232 )، SPI و I2C پشتیبانی می کنند. این ویژگی هنگام برقراری ارتباط با سایر دستگاه ها مانند رایانه ها، حسگرهای پیشرفته یا سایر میکروکنترلرها فوق العاده مفید است. اگرچه اجرای این پروتکل ها به صورت دستی نیز امکان پذیر است، اما همیشه سخت افزار اختصاصی، کاربر پسندتر است. این امکان سبب شده تا میکروکنترلر روی کارهای دیگر تمرکز کند و برنامه بهتری را در اختیار شما قرار دهد.
مبدل های آنالوگ به دیجیتال (ADC) برای تبدیل سیگنال های ولتاژ آنالوگ به یک عدد دیجیتال متناسب با میزان ولتاژ استفاده می شوند، در نهایت این عدد در برنامه میکروکنترلر مورد استفاده قرار می گیرد. برخی از میکروکنترلرها برای به دست آوردن مقدار متوسط انرژی از مقدار low تا high (0 تا 1) از آی سی PWM Controllerاستفاده می کنند. به عنوان مثال، به کمک این روش می توان نور ال ای دی ( LED) را به آرامی کم کرد.
برخی از میکروکنترلرها ، در بردشان رگولاتور ولتاژ دارند. این امر سبب می شود تا میکروکنترلر ، مقادیر ولتاژ را کاملا دقیق به خروجی بفرستد و همچنین می تواند بدون نیاز به منبع تغذیه تنظیم شده خارجی، انرژی مورد نیاز سنسورها و سایر قطعات میکروکنترلر را تامین کند.
سیگنال های آنالوگ و دیجیتال در میکروکنترلر
در زیر می توانید دو نمونه را مشاهده کنید که نشان می دهد چه موقع باید از پین دیجیتال یا آنالوگ استفاده کرد:
1. سیگنال دیجیتال :
به منظور بررسی وضعیت باینری سوئیچ از یک سیگنال دیجیتال استفاده می شود. همانطور که در زیر نشان داده شده است ( در سمت چپ برد بورد )، هنگامیکه یک سوئیچ لحظه ای یا دکمه را فشار می دهیم، مدار بسته می شود و اجازه می دهد تا جریان از مدار عبور کند (در شکل یک مقاومت بالا کشنده ( pull-up resistor ) نیز نشان داده شده است).
یک پین دیجیتالی از طریق یک سیم سبز رنگ که در تصویر مشاهده می کنید در این مدار به میکروکنترلر متصل شده است که مقادیر پایین یا صفر (به این معنی که مقدار ولتاژ پایین است که در این حالت معادل صفر ولت می باشد) و زیاد یا یک (به این معنی که کلید را فشار داده ایم و مقدار ولتاژ زیاد است که در این حالت منظور مقدار 5 ولت می باشد) را به خروجی ارسال می کند.
2. سیگنال آنالوگ :
از یک مقاومت متغیر یا پتانسیومتر (همانطور که در سمت راست برد بورد نشان داده شده است) برای ایجاد یک سیگنال الکتریکی آنالوگ جهت چرخش استفاده شده است. همانطور که در شکل مشاهده می کنید، زمانیکه پتانسیومتر به یک منبع تغذیه 5 ولت متصل می شود و شافت چرخانده شده، خروجی متناسب با زاویه چرخش بین 0 تا 5 ولت متغییر خواهد بود.
در واقع ADC در میکروکنترلر ولتاژ را تفسیر می کند و آن را به یک مقدار عددی تبدیل می کند. به عنوان مثال، یک ADC ده بیتی، مقدار صفر ولت را به مقدار “0” ، 2.5 ولت را به “512” و 5 ولت را به “1023” تبدیل می کند.
نحوه کدنویسی میکروکنترلر
امروزه کدنویسی میکروکنترلر کار ساده ای شده است. برخلاف گذشته که برای ساختن یک چراغ چشمک زن، نیاز به دانش زیادی از میکروکنترلر و چند هزار خط کد داشت، امروزه کدنویسی یک میکروکنترلر به لطف محیط های برنامه نویسی (IDE) که از زبان های به روز استفاده می کنند، از کتابخانه های زیادی تشکیل شده و چندین نمونه کد آماده برای شروع کار تازه واردان دارد، بسیار ساده شده است.
میکروکنترلرها به زبانهای مختلف سطح بالا از جمله C ، C ++ ، C # ، جاوا ، پایتون ، دات نت ، قابل کدنویسی هستند. البته برنامه نویسی در اسمبلر نیز امکان پذیر است اما این امتیاز برای کاربران پیشرفته تر می باشد.
IDE ها با ایجاد محیط های برنامه نویسی گرافیکی، کدنویسی را برای برنامه نویسان بسیار ساده کرده اند. می توان به جای نوشتن چندین خط کد، به راحتی از یک تصویر در برنامه استفاده کرده که این تصویر بیانگر همان کدها می باشد و می توان همین تصویر را به تصویر دیگری نیز متصل کرد تا یک برنامه کاملتری را تشکیل دهند. به عنوان مثال، ممکن است یک تصویر نشان دهنده یک موتور محرک باشد و کاربر فقط باید آن را در جایی که می خواهد قرار دهد و جهت و دور در دقیقه را برای آن مشخص کند.
از نظر سخت افزار ، کار با برد قابل برنامه نویسی میکروکنترلر بسیار ساده است. معمولاً تمام پین های لازم در میکروکنترلر به برد بورد متصل می شوند و در واقع دسترسی به این پین ها در مدار از طریق برد بورد انجام می شود.
برد میکروکنترلر همچنین یک رابط USB مناسب و برنامه نویسی مناسب را که مستقیماً به هر رایانه مدرن وصل می شود، ارائه می دهد.
برای کسانیکه با این اصطلاح آشنا نیستند، یک برد بورد قابل برنامه نویسی، یک برد بورد است که یک تراشه میکروکنترلر با تمام وسایل الکترونیکی مورد نیاز ( مانند رگولاتور ولتاژ ، اسیلاتور ، مقاومت های محدود کننده جریان و اتصالات USB ) به آن وصل شده است.
چرا از رایانه برای کنترل ربات استفاده نکنیم؟
بدیهی است که میکروکنترلر بسیار شبیه به CPU یا میکروپروسسور درون رایانه است و یک بورد قابل برنامه نویسی کاملا شبیه به مادربرد رایانه است. اگر اینطور است، پس چرا از رایانه برای کنترل ربات استفاده نکنیم؟
در حقیقت، در ربات های پیشرفته تر ، به ویژه آنهایی که الگوریتم های محاسبات پیچیده و بینایی ماشین را شامل می شوند، میکروکنترلر با یک رایانه جایگزین می شود. یک رایانه رومیزی شامل مادربرد ، پردازنده ، دستگاه اصلی ذخیره سازی (مانند هارد دیسک) ، پردازشگر ویدیو (به صورت onboard یا خارجی) ، RAM و البته لوازم جانبی دیگر مانند مانیتور ، صفحه کلید ، ماوس و غیره می باشد. رایانه ها نسبت به میکروکنترلرها گرانتر ، از نظر اندازه، بزرگتر و از نظر مصرف انرژی، پرمصرف تر هستند.
تفاوت رایانه ها و میکروکنترلرها در جدول زیر آورده شده است:
کدام نوع میکروکنترلر را انتخاب کنیم؟
برای یک مبتدی کار، انتخاب میکروکنترلر مناسب ممکن است کار سختی به نظر برسد ولی اگر هنگام انتخاب میکروکنترلر مناسب کارتان، از خودتان سؤالات زیر را بپرسید خواهید دید که کار ساده ای است.
1. کدام یک از میکروکنترلرها برای پروژه من محبوب ترین است؟
البته به طور کلی ساخت ربات یا پروژه های الکترونیکی آن چنان پرطرفدار نیستند، اما این واقعیت که یک میکروکنترلر دارای جامعه پشتیبان بزرگی است یا اینکه در یک پروژه مشابه (یا حتی یکسان) مورد استفاده قرار گرفته و موفقیت آمیز بوده است، می تواند مرحله طراحی شما را به میزان قابل توجهی ساده کند. علاوه بر این، شما می توانید از تجربه کاربران دیگر نیز استفاده کنید. سازندگان ربات عموماً نتایج ، کد ، تصاویر ، فیلم ها ، و جزئیات موفقیت و حتی شکستشان را به اشتراک می گذارند که این اطلاعات بسیار ارزشمند هستند.
2. آیا میکروکنترلر مورد نظر تمام ویژگی های لازم را برای ربات من دارد؟
همانطور که یک میکروکنترلر باید محبوب باشد، باید بتواند کلیه اقدامات مورد نیاز ربات شما را نیز انجام دهد. برخی از ویژگی ها مثل داشتن ورودی ها و خروجی های دیجیتال ، قادر به انجام عملیات ساده ریاضی ، مقایسه مقادیر و تصمیم گیری، برای همه میکروکنترلرها مشترک است و برخی دیگر به سخت افزار خاصی نیاز دارند (مثل: ADC ، PWM و پشتیبانی از پروتکل ارتباطی). همچنین میزان حافظه و سرعت مورد نیاز و شمارش پین را نیز باید در انتخاب نوع میکروکنترلر در نظر داشت.
3. آیا لوازم جانبی مورد نیاز برای میکروکنترلر ، در دسترس است؟
اگر ربات شما وسایل جانبی خاصی نیاز دارد و در طراحی ربات شما ضروری است، باید یک میکروکنترلر مناسب برای آن انتخاب کنید. گرچه اکثر سنسورها و لوازم جانبی را می توان به طور مستقیم به بسیاری از میکروکنترلرها متصل کرد، اما برخی از این لوازم جانبی برای اتصال به یک میکروکنترلر خاص نیاز دارند.
نگاهی به آینده ی میکروکنترلرها
امروزه قیمت رایانه ها کاهش یافته است و پیشرفت های فناوری باعث شده تا اندازه آنها کوچکتر و در مصرف انرژی نیز بهینه تر شوند. رایانه تک-بورد که یک نوع رایانه ی جدید محسوب می شود گزینه ای جذاب برای رباتها می باشد. این رایانه های تک-بورد ( مانند رسپبری پای ) در واقع به رایانه های همه در یکی (all-in-one) مشهور هستند و در واقع دستگاه های زیادی را در یک برد مدار قرار داده اند (بنابراین شما نمی توانید چیزی را در آن تعویض کنید). این نوع رایانه، یک سیستم عامل کامل را اجرا می کند (ویندوز و لینوکس رایج ترین هستند) و می توانند به دستگاه های خارجی مانند لوازم جانبی USB ، نمایشگر ها، دوربین ها و موارد دیگر وصل شوند.
بر خلاف مدل های پیشین، رایانه های تک-بورد مصرف انرژی کمتری دارند و به همین دلیل در رباتهای متحرک بسیار پرکاربرد هستند.
اگرچه قیمت رایانه های تک-برد به حدی در حال کاهش است که تقریباً با میکروکنترلرها برابر شده اند، اما پیشنهاد می کنیم فقط برای پروژه های پیشرفته مانند اضافه کردن یک دوربین به ربات و موارد پیشرفته دیگر از رایانه های تک-برد استفاده کنید.
مثال عملی
برای انتخاب میکروکنترلر ، ما لیستی از ویژگی ها و معیارهای مورد نظر خود را جمع آوری کردیم:
- هزینه میکروکنترلر باید پایین باشد.
- کار با آن باید آسان باشد و به خوبی پشتیبانی شود و همچنین داشتن تعداد زیادی نمونه کد و کتابخانه های آماده برای کدنویسی مساله مهمی است که باید در نظر گرفته شود.
- باید به زبان C یا یک زبان مبتنی بر C قابل کدنویسی باشد.
- باید محبوب باشد و دارای یک انجمن کاربر فعال باشد.
- از آنجاییکه رباتی که می خواهیم بسازیم به عنوان یک نمونه ی کلی در نظر گرفته شده، میکروکنترلر مورد نظر باید از نظر ویژگی بسیار غنی باشد تا در آینده قابلیت گسترش همین پروژه را نیز داشته باشیم. به این معنا که باید چندین پین آنالوگ و دیجیتال و همچنین یک رگولاتور ولتاژ داشته باشد.
با توجه به اینکه ربات ما از دو موتور استفاده خواهد کرد، میکروکنترلر برای کنترل جهت به دو پین دیجیتال و برای کنترل سرعت به دو پین PWM نیاز دارد (این مبحث را با جزئیات کامل در بخش های آتی توضیح خواهیم داد). همچنین این روبات داده هایی را ارسال و دریافت می کند، بنابراین باید از پروتکل ارتباطی UART پشتیبانی کند. همچنین ممکن است که در آینده بخواهیم سنسورها و وسایل جانبی دیگری نیز به ربات مان اضافه کنیم به همین دلیل باید پین های آنالوگ و دیجیتال اضافی نیز داشته باشد.
با توجه به ویژگی های گفته شده، به نظر می رسد میکروکنترلر آردوینو ( UNO Arduino) گزینه مناسبی برای کار ما باشد به دلیل اینکه از نظر قیمت بسیار مناسب است و قابلیت اضافه کردن وسایل جانبی دیگر و سنسورها را نیز به خود دارد و همچنین بسیار معروف است و نمونه پروژه های زیادی با آن کار شده و جامعه بزرگی از کاربران فعال دارد.
ادامه این پروژه را در بخش پنجم ( انواع کنترلر موتور و کاربرد آن در ساخت ربات ) مطالعه کنید.