آردوینو خوب، بد، زشت ! همه چیز درباره آردوینو

0
636
همه چیز درباره آردوینو
همه چیز درباره آردوینو

آردوینو

چه‌کسی‌است که این سخت‌افزار متن‌باز و نرم‌افزارش رو نشناسه؟! جنجالی که آردوینو تو الکترونیک پیش‌آورده به‌نظرم کم از انقلاب صنعتی نبوده‌است! اول قرار بود این نوشته یاداشتی باشد در کانال تلگرام ولی فکر کردم بهتره یکم با جزییات بیشتری به مساله و فلسفه آردوینو بپردازم، باشد که خیلی‌از اختلاف نظرها و کش‌مکش‌های موجود سر بودن یا نبودن آردوینو رو جواب منطقی بدیم!

واقعا درک‌ این مساله برای من سخته که طرفداران این مجموعه متن باز چنین افراطی با مساله وجودی آردوینو برخورد می‌کنند و البته جبهه مقابل هم همین‌طور برخورد می‌کنند. اینگونه برخورد واقعا منو یاد بحث‌هایی می‌اندازه که هفت، هشت سال پیش طرفدارهای میکروکنترلر AVR با طرفدارهای PIC می کردند و اینقدی که بحث بالا می‌گرفت که گویی نفرات خود طراح و تولیدکننده این مدل چیپ‌ها هستند! درواقع به‌شخصه فکر می‌کنم داشتن چنین تعصباتی بیشتر از آن که نشان آگاهی و دانش باشد بیشتر نشان از جهل و ناآگاهی دارد! بگذارید پرحرفی را کنار بگذاریم و برویم سر بحث اصلی یعنی آردوینو! توی این مقاله سعی می‌کنیم با رویکرد متفاوتی که تا کنون باهاش مواجه‌بودیم پدیده آردوینو رو بررسی‌کنیم! یعنی خوب، بد و زشت(اشاره‌به فیلم The Good, the Bad, and the Ugly با بازی عالی کلینت ایستوود). توصیه می‌کنم حتی اگر چشم دیدن آردوینو رو هم ندارید این مقاله رو ازدست ندید چون خواهیم‌گفت چرا آردوینو خوب است و حتی اگر عاشق آردوینو هستند باز این مقاله رو از دست ندید! چون می‌گوییم چرا آردوینو بد است و در اخر به زشت‌بودن مسائلی می‌پردازیم که چندوقته گریبان‌گیر جامعه الکترونیک شده‌است و زیاد هم بی‌ربط به آردوینو نیست.

بهتر است اول با خوب شروع‌کنم و بعد به سراغ بد و زشت برویم? . با ما همراه باشید.

THE GOOD

آردوینو خوب!
آردوینو خوب!

 

آردوینو Open Hardware است

Open Hardware
Open Hardware

 

اگر از کهنه سربازهای حوزه الکترونیک باشید به‌خوبی به‌یاد دارید تا قبل‌از اینکه آردوینو پا به عرصه وجودی بگذارد؛ همیشه یک مدار نیم‌بند از یک میکروکنترلر معرف مثل ATmega8/32 یا PIC16/18 را بروی برردبرد یا بررابرد داشتیم تا در کمترین زمان ممکنه قادرباشیم تست‌های برنامه‌نویسی روشون داشته‌باشیم و بدترین قسمت کار هم این بود که قصد راه‌اندازی یک آی‌سی حافظه یا یک سنسور را داشتید که DIP نبود و نمی‌شد آنرا روی بردبرد قرار داد، تازه باید وارد بازی پیچیده طراحی PCB و چاپ برد و… می‌شدید و فاجعه وقتی بود که می‌دیدید برد را برعکس‌(mirror) زده‌اید? تازه این همه ماجرا نیست، فکرکنید در یک شهر کوچک زندگی می‌کردید که دسترسی‌به قطعات و مراکز چاپ برد نداشتید!

به‌جرات میتوان گفت که آردوینو به این کابوس‌ها پایان داد!

درواقع طراحی ماژولار این مجموعه متن‌باز(Open Source) باعث‌شده که اگر امروز قصد کنید سنسور یا آی‌سی خاصی را راه‌اندازی کنید به‌سادگی با مراجعه به بازار الکترونیک ماژول آن را خریداری‌کنید. واقعا چی بهتر از این! دیگر نیازی‌نیست برد طراحی‌کنید کلی داکیومنت مطالعه‌کنید تا قطعات جانبی و مدار راه‌انداز اولیه را طراحی‌کنید؛ قبلا تمام این کارها انجام‌شده‌است، تنها کاری که لازم‌است انجام‌دهید تهیه و اتصال آن به میکروکنترلر محبوبتان است و در پله بعدی راه‌اندازی ماژول موردنظر.

تاحالا فکرکردید این مساله نسبتا ساده و پیش‌پاافتاده چقدر می‌تواند در روند راه‌اندازی و طراحی پروژه کمک‌کند و پروژه را به‌لحاظ زمانی جلو بیندازد؟

آردوینو Open Source است

OpenSource
OpenSource

 

آردوینو نه‌تنها Open Hardware است بلکه Open Source نیز هست یعنی علاوه‌بر حوزه سخت‌افزار در حوزه نرم‌افزاری نیز متن‌باز است علاوه‌بر این نه‌تنها در قسمت سخت‌افزار به‌صورت ماژولار عمل‌کرده‌است بلکه در قسمت نرم‌افزار نیز به‌همین‌شکل عمل‌کرده‌است!

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

امروزه تقریبا برای هر چیزی که فکرشو بکنید توی آردوینو کتابخانه آماده وجود داره که به‌دلیل متن‌بازبودن آن به‌سادگی میتونید از آنها در پروژه‌های شخصی و تجاری استفاده‌کنید. فکر می‌کنید اگر قرار بود کتابخانه مربوط به شبکه tcp/ip رو برای atmega328 پورت کنید، دقت‌کنید! پورت کنید نه اینکه از اول بنوسید چقدر زمان لازم‌بود؟

یا فرض‌کنید کارفرمای شما نیاز به راه‌اندازی سنسوری داشت که حتی داکیومنت‌های آن(به‌دلیل تحریم ایران) دردسترس شما نیست! چنین پروژه‌ای بدون وجود آردوینو حداقل چند‌ماه زمان برای راه‌اندازی نیاز داشت اما امروزه وقتی کتابخانه‌های پربار آردوینو وجود دارد به‌سادگی می‌توان نحوه عملکرد هر نوع سنسوری را متوجه‌شد.

البته امیدوارم سوء‌برداشت نشده‌باشد ابزار تعیین‌کننده مهارت نیست! بدین‌معناکه:

شخصی که به آردوینو مسلط است لزوما دلیل‌بر تسلط او در حوزه برنامه‌نویسی و الکترونیک نیست. همانطورکه وجود چاقو در دست یک آشپز خوب نهایتا سوپ خوشمزه است و در دست جراح نجات‌دهنده جان آدمی است. اگر نه چاقو همان چاقو است و آردوینو هم همان آردوینو.

آردوینو Multi Platform است

Multi Platform
Multi Platform

 

اگر از بحث‌های سخت‌افزار و ماژول‌های نرم‌افزاری هم بگذریم قابلیت بعدی که نمایان می‌شود پشتیانی آردوینو از پلتفرم‌های متنوع است! احتمالا اگر طراح و توسعه‌دهنده سخت‌افزار باشید درحال‌حاظر مجبوربه استفاده‌از AVR و ARM (اگر درگیر PIC و خانواده‌های کنترلر دیگر نباشید) هستید و برای توسعه هرکدام از پلتفرم‌های مختلفی استفاده می‌کنید. خوب فرض‌کنید محیط یکپارچه توسعه Arduino زحمت کوچ از یک خانواده به خانواده دیگر را از دوش شما برمیدارد و تنها با سوییچ ساده نرم‌افزاری قادر خواهید بود کد خود را از AVR بر‌روی ARM اجراکنید. خوب این گزینه برای افرادی که تازه شروع‌به برنامه‌نویسی با میکروکنترلر کرده‌اند قطعا جذاب است.

حتی برای افراد حرفه‌ای که تنها کنجکاوی درخصوص یک خانواده گریبان گیرشان است میتواند جالب باشد مثلا برای کارکردن با پردازنده‌های Xtensa دیگر نیاز نیست کلی کتابخانه‌های مربوطه اولیه را بارگذاری و به‌دنبال مستندات راه‌اندازی باشید با چند کلیک ساده به‌سادگی می‌توانید سمپل کدهای موردنظرتون رو روی این معماری تست‌کنید.

آردوینو جهانی است!

آردوینوی جهانی
آردوینوی جهانی

 

قبلا هم اشاره کرده‌ام یکی‌از مزایای مهم هر سیستمی گستردگی جامعه استفاده‌کننده‌است. این گستردگی باعث می‌شود که به‌سادگی قادر باشید جواب مشکلات خود را پیداکنید، یا اگر باگی در یکی‌از کتابخانه‌های برنامه وجود‌داشته‌باشد در سریعترین زمان ممکن کشف و رفع شود. شاید یکی‌از تاثیر‌گذار‌ترین موارد جهت انتخاب یا عدم‌انتخاب یک پلتفرم همین‌مورد باشد. مخصوصا برای‌ما ایرانی‌ها که از جامعه جهانی به‌گونه‌ای طرد شده‌ایم‌(از یک سو فیلترینگ داخلی و از‌طرفی تحریم‌های جهانی).

با تقریب خوبی میشود گفت وقتی توی برنامه یا پروژ‌ه‌ای به‌مشکلی برمی‌خورید قبلا یکی در جهان به اون مشکل برخورده و احتمالا برای حلش تلاش‌کرده(البته یه احتمال خیلی ضعیف هم هست که شما اولین نفر باشید ?) و اگر جامعه استفاده‌کننده از پلتفرم انتخابی شما بزرگ باشه زودتر به نتیجه‌ی دلخواه خواهید رسید!

و واقعا از این مهم نمیشه چشم پوشید.

THE BAD

آردوینو بد !
آردوینو بد !

 

آردوینو بد است

تعداد افرادی که درمقابل استفاده‌از آردوینو جبهه می‌گیرند کم نیست و حتی عده‌ای پا را فراتر از خیال گذارده و آن‌را توطئه دشمن می‌دانند! و قصد دشمن برای ازبین‌بردن عمق علم الکترونیک کشور و سطحی‌کردن آن!(کی میشه که این دشمن‌پنداری‌های بیمارگونه رو کنار بگذاریم) آیا واقعا چنین است؟ آیا آردوینو قادر به انجام چنین کاری است؟ اگر هست چرا پیش‌از ایران دیگر کشورهای جهان سوم دچار چنین بلایی نشده‌اند؟

از شوخی که بگذریم، باید به این سوال پاسخ داد که آیا آردینو بد است؟ و اگر بد است دقیقا به‌کدام‌دلیل بد است؟ بگذارید تعدادی‌از استدلال‌های موجود در این خصوص را لیست‌کنیم و تک‌تک، هرکدام را بررسی‌کنیم:

  • آردوینو باعث سطحی‌شدن دانش الکترونیک می‌شود
  • آردوینو باعث بی‌سواد‌شدن قشر تحصیل‌کرده می‌شود
  • آردوینو باعث می‌شود هر‌کسی فکر کند طراح است
آردوینو باعث سطحی‌شدن دانش الکترونیک می‌شود:

آیا واقعا علم الکترونیک را این‌گونه شناخته‌اید که همه چیز آن میکروکنترلر است؟ پس سخت در اشتباه هستید؛ بگذارید کمی اصول اولیه را بررسی‌کنیم الکترونیک به ۲دسته کلی آنالوگ و دیجیتال قابل‌تقسیم است از آنجایی‌که آردوینو نمی‌تواند کاری به بخش آنالوگ داشته‌باشد! احتمالا سراغ بخش دیجیتال می‌رود که خود باز به ۲دسته مدارات منطقی و مدارات شامل پردازنده تقسیم می‌شود، از مدارات شامل پردازنده هم خود دسته‌هایی دارد که میکروکنترلر بخش کوچکی از آن است!

درضمن تمام این حالات برای وقتی است که بپذیریم آردوینو واقعا به یاد گیری میکروکنترلر لطمه وارد می‌کند! که در گزاره بعد بیشتر به این موضوع خواهیم پرداخت.

حتی اگر این فرض صحیح باشد که آردوینو به یادگیری لطمه وارد می‌کند، این لطمه شامل علم الکترونیک نمی‌شود و تنها بخش کوچکی از آن را متاثر خواهد کرد. و البته لازمه اضافه‌کنم که آردوینو با هدف آموزش ساده به‌وجود آمده‌است چطور قادر است به آموزش لطمه وارد کند.

آردوینو باعث بی‌سوادشدن قشر تحصیل‌کرده می‌شود:

در قسمت‌قبل گفتیم که میکروکنترلر بخش کوچکی از الکترونیک و دانش قشر تحصیل‌کرده را تشکل می‌دهد با این‌حال آیا استفاده‌از آردوینو باعث بی‌سوادی یا سطحی‌شدن سواد قشر تحصیل‌کرده می‌شود؟ برای جواب به این سوال بگذارید نگاهی به سیستم آموزش عالی داشته باشیم و بررسی‌کنیم که درحال‌حاضر میکروکنترلر از چه روشی در دانشگاه‌های ما تدریس می‌شود که وجود آردوینو باعث سطحی‌شدن آن می‌شود.

احتمالا برای آموزش میکروکنترلر از AVR یا نهایتا ARM استفاده می‌شود و احتمالا کامپایلر کدویژن یا نهایتا Keil کاربرد چندتا رجیستر رو توضیح می‌دهند و احتمالا چندتا پروتکل مثل Uart و SPI رو هم تشریح می‌کنند و درنهایت یه برنامه ترکیبی از چند پرفرال رو هم مثال می زنند و تمام! این می‌شود تمام دانش یک فرد تحصیل‌کرده از میکروکنترلر! البته اگر تنها به آموزش دانشگاهی اکتفا کند و خود به دنبال فراگیری فراتر از آن نباشد.

وجود آردوینو کجای این حلقه گسستگی ایجاد می‌کند؟ نرم‌افزار را هم می‌شود بدون کتابخانه‌های آردوینو در آردوینو نوشت واقعا فکر می‌کنید فرقی می‌کند؟

چه از کتابخانه‌های آماده آردوینو استفاده‌کنید و چه از کدویزارد کدویژن – هر دو یک نتیجه را خواهند داشت لازم‌است که سیستم آموزشی اصلاح‌شود.

فکر می‌کنم برای آموزش صحیح میکروکنترلر لازم است میکروکنترلر به ۲بخش سخت‌افزار و نرم‌افزار تفکیک‌شود در بررسی‌های سخت‌افزاری عملکرد سخت‌افزاری بخش‌های مختلف مورد‌بررسی قرارگیرد فارغ‌از مباحث نرم‌افزاری! درواقع شاید این بخش واقعا کمرنگ‌شده و الان بیشتر تمرکز روی بخش برنامه‌نویسی میکروکنترلر گذاشته‌شده است و احتمالا به‌همین‌دلیل آردوینو را برای این سبک آموزش خطرناک می‌بینند چراکه سعی می‌کنند سخت‌افزار را به‌کمک نرم‌افزار آموزش‌دهند.

آردوینو باعث می‌شود هرکسی فکر کند طراح است:

بگذارید اشاره‌کنیم که آدم‌هایی که توانایی‌های خود و سیستم را نمی‌شناسند با فراگیری هر موضوع ساده‌ای از سیستم دچار توهوم دانش می‌شوند و از آن پس دیگر خدا را هم بنده نیستند! متاسفانه از این دست آدم‌ها در زمینه الکترونیک کنم نداریم. دقیقا مساله سر فهم ما از دانش خودمان است کسی که فکر می‌کنید با کپی‌کردن چند کتابخانه و چسباندن آنها به هم پروژه‌ای راه‌اندازی کرده‌است یک طراح تمام عیار است دقیقا دچار توهوم دانستن است.

آیا به‌نظرشما فرقی می‌کند که این کتابخانه‌ها را از گیت‌هاب برداشته‌باشد و در کدویژن و keil کپی‌کرده‌باشد یا این که با چند کلیک در آردوینو نصب‌کرده‌باشد؟ درواقع نمی‌شود همه تقصیر را به گردن آردوینو انداخت که نصب و استفاده‌از کتابخانه‌ها را ساده‌کرده‌است.

THE UGLY

آردوینو بد!
آردوینو بد!

 

درواقع آردوینو نه چیزبدی است و نه چیز زشتی است؛ چیزی‌که آن‌را درنظرما بد و یا زشت می‌کند استفاده نامناسب از آن است. استفاده‌از آردوینو هیچ‌خطری برای هیچ‌کسی ایجاد نمی‌کند. آردوینو یک پلتفرم متن‌باز است که خیلی‌از کارها را ساده کرده‌است آردوینو ایجاد شد تا هنرمندان بدون داشتن دانش الکترونیک قادر باشند ایده‌های طراحی خودشون رو پیاده‌سازی کنند فکر میکنم واقعا توی این رسالتش موفق هم بوده‌است.

اما وقتی شاهد این هستیم استادی پروژه‌های دانشگاهی رو براساس آردوینو می‌پذیره یا اینکه پروژهای تجاری براساس این پلتفرم طراحی می‌شوند (مخصوصا توی کشوری که شاهد رانت و رانت‌بازی هستیم) اصلا جای تعجب نداره که عده‌ای از این پلتفرم فوق العاده متنفر باشند.

یا اینکه دوره‌های آموزشی برای این پلتفرم متن‌باز ساده برگذار می‌کنند آن هم با چه شهریه‌های گزاف و ادعاهای مضحک! واقعا خنده‌دار است پلتفرمی این چنین ساده که برای کارکردن با آن حتی نیازی‌به دانش الکترونیک ندارید و به‌سادگی هر شخصی قادر‌به درک و کار‌کردن با آن است اینطور باید مورد سوء‌استفاده قرار بگیرد و البته برخی‌از همکاران هم طوری ادعا می‌کنند گویا اینترنت اشیاء یا IOT در انحصار آنها و آردوینو است.

امیدوارم که این کژفهمی‌ها هم هرچه زودتر اصلاح‌شود تا شاهد استفاده صحیح و منطقی از این پلتفرم متن‌باز باشیم.

در زیر نیز نظر جناب اقای مهندس اژدرکش که سالها تجربه در زمینه آردوینو دارند و کانال و گروهی با نام آردوینو فارسی را هم مدیریت میکنند می بینیم مطلبی که که حاوی نکات فنی مناسبی درمورد آردوینو هست:

سلام دوست عزیز
من رضا اژدرکش هستم و سالهاست که دارم در زمینه آردوینو تحقیق و آن را تدریس میکنم.
همه مطالب شما و همچنین نظرات دوستان رو خوندم.
متاسفانه نه شما خوب به معایب آردوینو اشاره‌کرده‌بودید و نه دوستان خوب از بدبودن آردوینو دفاع‌کرده‌بودند. چون این پلتفرم بد نیست. ولی زیادی خوب هم نیست.
قدرت برنامه‌نویسی یک برنامه‌نویس هست که باعث عملکرد عالی یک مدار و یا درست عمل‌نکردن یک مدار و هنگ‌کردن اون میشه نه برد آردوینو…
مثلا شما بجای ۰ یا ۵ولت به یک میکروکنترلر ۲ولت بدهید، چه اتفاقی میافته؟؟ میکرو این رو چی فرض‌میکنه؟؟ ۰یا ۱؟؟؟ دانش فنی اینجا بکار میاد… و فرقی هم نمیکنه که با آردوینو دارید کار میکنید یا با میکروکنترلر خالی.
شما با نرم‌افزار قدرتمند آردوینو برنامه‌هاتون رو به‌راحتی مینویسید. (دقت‌کنید که فقط برنامه‌نویسی) حالا میتونید اون رو روی بردهای آماده آردوینو آپلود کنید و یا روی یک میکروکنترلرخاصی که دوست دارید و PCB دلخواه خودتون رو با تکنیک‌های حذف نویز و غیره میسازید و استفاده میکنید. (پاسخ یکی‌از عزیزان که نظرداده‌بودند).
نظرات شما راجع‌به خوب‌بودن آردوینو کاملا درسته و بنده تایید میکنم. ولی شما درمورد بدبودن آردوینو فقط به نظرات دوستان اشاره‌کردید و بحث علمی انجام‌ندادید که این درست نیست. باید معایب خود آردوینو رو بررسی‌کنید نه نظرات دوستان رو…

حالا معایب آردوینو چیه؟؟؟

1- معایب بردهای آردوینو:
بردهای آردوینو فقط و فقط یک مشکل دارند آن‌هم این است که برد پروگرامر روی آنها هست و وقتی از باتری برای تغذیه استفاده میکنیم، این برد پروگرامر باتری مصرف میکند. که این مساله را میتوانیم با ساخت PCB خودمان برطرف کنیم.

2- معایب نرم‌افزار آردوینو:
نرم‌افزار آردوینو دوتا ایراد بزرگ داره:
1- مدیریت حافظه مربوط‌به رشته‌ها در آردوینو درست انجام‌نمیشه. ورژن برنامه آردوینو الان یادم‌نیست ولی از یک ورژن آردوینو به بعد، برای سرعت‌بخشیدن به برنامه‌های در‌حال اجرا و همچنین فشرده‌سازی کدهای نوشته‌شده توسط کاربر، یک‌سری بهینه‌سازی‌هایی روی نرم‌افزار آردوینو صورت‌گرفت که این بهینه‌سازی‌ها خیلی‌خوب بودند ولی باعث شد پاک کردن حافظه HEAP (گاربج کلینینگ) که در برنامه به متغیرهای رشته‌ای اختصاص‌داده‌شده‌بود با مشکل مواجه‌بشه و پاک نشوند. که امیدواریم در ورژن‌های بعدی آردوینو این مشکل اصلاح‌بشه.
2- در برنامه‌نویسی آردوینو از توابعی مثل delay, millis, micros استفاده‌شده که این توابع خودشون هم از وقفه تایمر ۰ استفاده میکنند. پس تایمر ۰ آردوینو از لحظه روشن‌کردن برد آردوینو فعال‌هست تا ابد… حتی اگر از آن استفاده‌ای نکنیم. و هر یک میکروثانیه داره وقفه میده به میکروکنترلر… و این باعث‌میشه که نتونیم با آردوینو شکل موج‌های دقیق و زمان‌بندی درستی رو ایجاد‌کنیم. و اگه بخواهیم تایمر0 رو خاموش‌کنیم و برنامه خودمون رو بنویسیم، باید ۹۰%کتابخانه‌های موجود رو که آردوینو داره بهشون افتخار‌میکنه رو کنار بگذاریم. چون همه کتابخانه‌ها از این توابع استفاده‌کرده‌اند.
البته این موضوع زمانی هست که هدف ما تولید شکل موج‌های دقیق و یا زمان‌بندی دقیق باشه. ولی در بقیه موارد، آردوینو نه تنها حرف نداره بلکه بینظیر هم هست.

هرکسی که میگه آردوینو هنگ میکنه یا بچه بازیه بیاد من دوتا سوال ازش بپرسم ببینم دانش الکترونیک اش در چه حدی هست که این نظریه رو داره مطرح میکنه و اصلا مگه میشه بدون دانش الکترونیک مداری ساخت.
همین دوستانی که دانش الکترونیک ندارند و سرسری چندتا دستور برنامه‌نویسی یادگرفته‌اند هستند که مداراتی رو میسازند و نهایتا اون مدار یک خرابی در دستگاه‌های متصل‌شده بوجود میاره و میگن آردوینو بده…

ممنون که وقت گذاشتید و این مطلب رو خوندید.
رضا اژدرکش

 

منبع: سیسوگ

مطلب قبلیراه‌اندازی ریموت با آردوینو
مطلب بعدیآموزش میکروکنترلر Stm32f1 به صورت رجیستری قسمت اول: GPIO-خروجی

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید