در ادامه آموزشهای مربوط به الکترونیک، امروز قصد داریم در مورد بردهای آردوینو صحبت کنیم و بفهمیم که مزیت استفاده از این برد و دلیل پرطرفدار بودنش چه در بین افراد مبتدی و چه در بین افراد حرفهای چیست. اگر تازه به ما پیوستهاید پیشنهاد میکنم مقاله قبلی ما در مورد تفاوت میکروکنترلرها و میکروپروسسورها را با کلیک بر روی این لینک بخوانید.
آردوینو یک برد اُپن سورس است که به منظور نمونهسازی اولیه مدارات و طرحهای الکترونیکی شما ساخته شده است. هسته اصلی این بردها بر پایه میکروکنترلرهای AVR و یا میکروپروسسورهای معماری ARM است. بردهای آردوینو میتواند اطلاعات را از ورودی بخواند و آنرا به خروجی تبدیل کند، بطور مثال اگر باران میآید، برف پاک کن اتومبیل شما را روشن کند.
چرا آردوینو؟
اگر شما بخواهید با استفاده از یک میکروکنترلر مداری را طراحی کنید، باید قبل از هر چیز پیشنیازهایی را آماده کنید: ابتدا یک بِرِدبُرد بردارید و میکروکنترلر خود را بر روی آن قرار دهید. سپس مدار رگولاتور و اسیلاتور آنرا پیادهسازی کنید و با استفاده از یک مقاومت Pullup و میکروسوییچ پایه ریست AVR خود را پایدار و قابل استفاده کنید.
اکنون اگر به روش بوت لودر بخواهیم عمل کنیم، نوبت آن است که پایههای RX و TX میکروکنترلر خود را به پورت سریال کامپیوتر خود متصل کنید، اما دیگر در کامپیوترهای امروزی پورت سریال وجود ندارد، پس باید از پورت USB استفاده کنید. اکنون شما یک تبدیل USB به Serial تهیه میکنید و موفق میشوید میکروکنترلر خود را برای برنامهنویسی به کامپیوتر خود متصل کنید، اما بسیاری از IDEهای برنامهنویسیِ میکروکنترلر، با مبدل USB به Serial شما مشکل دارند و باید این مشکل را هم حل کنید تا تازه بتوانید برنامه مورد نظر خود را بر روی میکرو خود بسوزانید.
اگر هم نخواهیم از روش بوت لودر استفاده کنیم باید یک سخت افزار AVR Programmer خریداری کنیم.
پیشنهاد ما این است که بجای این همه دردسر از یک برد آردوینو استفاده کنید. یک برد آردوینو تمامی سختافزارهای مورد نیاز برای شروع نمونهسازیتان را در خود دارد و تنها لازم است آنرا از طریق پورت USB به کامپیوتر خود متصل کرده و به راحتی برنامه مورد نظرتان را بنویسید.
سالیان زیادی است که بردهای آردوینو مغز اصلی بسیاری از پروژهها -از پروژههای روزمره و ساده گرفته تا پروژههای پیچیده تجهیزات علمی- بوده است، چراکه بردهای آردوینو :
- ارزان است (میتوانید با کمتر از 20 هزار تومان صاحب یک برد آردوینو شوید)
- چند سکویی است (محیط توسعه آن قابل نصب بر روی ویندوز، لینوکس و مکینتاش است)
- محیط برنامهنویسی آن ساده، واضح و قدرتمند است (به لطف توسعهدهندگان بی شمارش هزاران کتابخانه آماده دارد)
- نرمافزار آن اپن سورس و قابل تغییر و گسترش است
- سختافزار آن اپن سورس و قابل تغییر و گسترش است
در شکل زیر بخشهای یک برد Arduino UNO را برای شما به نمایش در آوردهایم:
زبان برنامهنویسی و محیط توسعه آردوینو
زبان برنامهنویسی آردوینو بر پایه Wiring و محیط توسعه یا IDE آن نیز برپایه Proccessing است. بنابرین شما در محیطی کاملاً چندسکویی که قابلیت نصب بر روی ویندوز، مک و لینوکس را دارد میتوانید به زبان C یا ++C اقدام به برنامهنویسی کنید. یکی از مهمترین ویژگیهای این پکیج این است که به دلیل وجود هزاران توسعهدهنده علاقهمند به آردوینو، شما میتوانید از هزاران کتابخانه آماده موجود برای آردوینو در پروژههای خود استفاده کنید و به کار خود سرعت ببخشید. به برنامهای که شما مینویسید و بر روی آردوینو خود آپلود میکنید Sketch گفته میشود.
کتابخانههای آردوینو همانند Sketchهای آن به زبان C یا ++C نوشته میشوند. شما نیز میتوانید کتابخانه خود را با استفاده این زبانهای قدرتمند پیادهسازی کنید و در صورت تمایل در اختیار دیگران نیز قرار دهید.
در هنگام کار با آردینو و در واقع میکروکنترلرها این نکته رو فراموش نکنید که منابع ما محدود است و نباید بیهوده رم یا قدرت پردازنده را هدر دهیم؛ متاسفانه بسیاری از افرادی که در جامعه ما فکر میکنند برنامه نویس سی یا سی++ هستند، کوچکترین آشنایی با مدیریت حافظه ندارند و نمیدانند تفاوت زبانهایی مثل سی و سی++ (که به آنها اصطلاحاً Unmanaged Languages میگوییم) با زبانهایی مانند #C و Java و... (که بهشون Managed Languages میگوییم) در چیست و بیهوده و بی دلیل اقدام به استفاده از malloc یا new میکنند. نتیجه این است که به دلیل آشنایی نداشتن با مدل حافظه و مدیریت آن باعث Memory Leak و هدر رفتن منابع ارزشمند ما میشوند. پس هرگز فراموش نکنید که اگر مجبورید از Free Store (یا همون Heap) استفاده کنید، مطمعن شوید که بخوبی چرخه زندگی آن شی را مدیریت کردهاید و بیاد داشته باشید که RAII یکی از مهمترین ویژگیهای منحصربفرد ++C است که همیشه میتوانید از آن استفاده کنید.
توجه داشته باشید شما تنها زمانی باید از حافظه Free Store استفاده کنید که دلیلی کاملاً محکم برای آن داشته باشید و پروژه شما بدون استفاده از آن امکان پذیر نباشد.
انواع آردوینو
بردهای آردوینو بطور کلی به چهاردسته تقسیم میشوند:
- ENTRY LEVEL: مناسب برای افرادی که به تازگی میخواهند پا به دنیای میکروکنترلرها بگذارند. این دسته از بردها دارای توان پردازشی و پایههای ورودی و خروجی کمتری نسبت به بردهای دسته دوم هستند، اما برای کارهای کوچک بسیار ایدهآل میباشند. برای نمونه میتوان به بردهای Uno که یکی از پرفروشترین بردهای آردوینو است اشاره کرد. قیمت این برد طبق آخرین اطلاعات بنده 18000 تومان است.
- ENHANCED FEATURE: از این بردهای برای پیادهسازی مدارات پیشرفتهتر استفاده میشود و نسبت به بردهای دسته اول دارای رم، حافظه فلش بیشتر برای Sketchهای حجیمتر، سرعت پردازش بالاتر و تعداد پایههای ورودی و خروجی بیشتر است. به عنوان نمونه میتوان به بردهای Mega و Zero اشاره کرد.
- INTERNET OF THING: این بردها بر روی خود دارای چیپ WiFi بوده و قابلیت اتصال به اینترنت را دارند و برای ساخت پروژههای IoT یا همان اینترنت اشیا مناسب میباشند. این دسته از بردهای آردوینو در ایران چندان طرفدار ندارد. به شخصه برای پیادهسازی مدارات IoT ماژولهای ESP را بر آردوینو ترجیح میدهم، اما به هر صورت برد MKR1000 از بردهای آردوینویی است که در این دسته قرار میگیرد.
- WEARABLE: بردهایی هستند که به دلیل شکل و اندازه کوچکشان برای نصب و دوخته شدن بر روی لباسها طراحی شدهاند تا با استفاده از آن بتوانید لباس هوشمند طراحی کنید. بردهای LilyPad و Gemma از این دسته بردهای آردوینو هستند.
نکتهای که لازمه بهتون بگم اینه که بردهای آردوینو اصالتاً ساخت ایتالیا هستند، اما بردهای چینی در بازار نیز به وفور در بازار یافت میشود و طرفداران زیادی نیز به دلیل قیمت پایینتر خود دارند. دوستان علاقهمند باید توجه داشته باشند هسته اصلی این بردها میکروکنترلر AVR است که همه آنها در شرکت ATMEL ساخته میشود (چه چینی و چه ایتالیایی). با توجه به اینکه آردوینو اوپن سورس است و هر کسی امکان ساخت و تغییر آنرا دارد، کیفیت بردهای چینی خریداری شده از فروشگاهای معتبر هیچگونه تفاوتی با بردهای اصلی ایتالیایی در کیفیت ندارند و قیمت بالاتر بردهای ایتالیایی بخاطر مسائلی چون قیمت دلار، گمرک و مسائل حمایتی است. من خودم شخصاً یک Arduino Mega چینی دارم و بدون هیچ مشکلی بیشتر از سه ساله که دارم باهاش کار میکنم.
نکته بعدی اینکه ممکنه شما با عبارت Genuino برخورد کرده باشید و از خودتون پرسیده باشید فرقش با Arduino چیه! جواب اینه که هیچ فرقی با هم ندارن، این برد در ایالات متحده با نام تجاری Arduino و در کشورهای دیگر با نام Genuino تولید و عرضه میشه.
از آنجایی که آردوینو UNO و MEGA دو آردوینو بسیار پرطرفدار هستند، در زیر به بررسی مشخصات این دو برد میپردازیم:
1- Arduino UNO
اگر شما به تازگی وارد دنیای الکترونیک شدهاید و میخواهید Sketch خودتان را بنویسید و پا به دنیای شگفت انگیر میکروکنترلرها بگذارید، Arduino UNO احتمالاً بهترین گزینه برای شما است. در زیر مشخصات این مدل آورده شده است:
2- Arduino MEGA
از این برد جهت پیادهسازی پروژههای پیچیدهتر نظیر رباتها و پرینترهای سه بعدی استفاده میشود، چرا که دارای 54 پایه ورودی و خروجی بوده و فضای فلش و رم بیشتری نسبت به Arduino UNO دارد. مشخصات این برد به شرح زیر است:
نکته: تعداد پایههای PWM که در جدول بالا قرار نوشته شده است، مشخص میکند چند پایه از تعداد کل پایههای ورودی/خروجی میکروکنترلر قابلیت PWM دارد.
تفاوت حافظههای فلش، SRAM و EEPROM در چیست؟
حافظه فلش فضایی است که بوت لودر، دستورات و در واقع Sketch شما در آنجا آپلود میشود، پس حجم Sketch کامپایل شده شما نباید بیشتر از حافظه فلش میکروکنترلر شما باشد.
حافظه SRAM در واقع رم میکروکنترلر شماست و متغیرها در آنجا قرار میگیرند. همانند رم کامپیوتر، با قطع شدن برق محتویات داخل SRAM نیز پاک میشوند. توجه داشته باشید که مقدار فضای مصرفی متغیرها هم نباید بیشتر از حداکثر فضای موجود باشد، پس در انتخاب نوع متغیرهای خود هم دقت کنید و بیهوده این فضا را هدر ندهید، اگر میتوانید متغیری را بصورت محلی تعریف کنید آنرا در Global قرار ندهید. اگر ثابت حجیمی دارید بجای استفاده از Const و اشغال SRAM، در صورت امکان با استفاده از PROGMEM آنرا در حافظه فلش قرار دهید.
اما بر خلاف SRAM هر چیزی که در حافظه EEPROM ذخیره شود با قطع شدن برق پاک نمیشود و میتوانید آنرا بازیابی و استفاده کرد. از این حافظه معمولاً جهت ذخیر و بازیابی تنظیمات کاربر استفاده میگردد.