0% found this document useful (0 votes)
97 views

Arduino

arduino

Uploaded by

pedram
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
97 views

Arduino

arduino

Uploaded by

pedram
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

‫آموزش نحوه ساخت برد آردوينوی دلخواه‬

‫سالم بر آردوينو کاران جوان‬

‫امروز ميخوام براتون در مورد نحوه ساخت يک برد آردوينو با ھر ميکروکنترلر ‪ AVR‬که دم دست‬
‫داريد صحبت کنم‪.‬‬

‫دوستان عزيز‪ ،‬با توجه به گرانی ھای اخير بردھای آردوينو‪ ،‬ديگه استفاده از اونا برامون سخت شده‪ .‬لذا با‬
‫توجه به شعار ھميشگی استاد عزيزم مھندس محمود بخت آور که من از بچگی با کتابھای ايشان‬
‫الکترونيک رو ياد گرفته ام‪ ،‬ايشان ھميشه در کتابھای خود مينوشتند که “احتياج‪ ،‬مادر اختراع است‪ ”.‬لذا‬
‫ما ھم از اين شعار پيروی ميکنيم و برد آردوينوی خودمان را می سازيم‪.‬‬

‫خيلی از دوستان قديمی که قبالً با ميکروکنترلر ھای ‪ AVR‬کار ميکردند‪ ،‬اکثراً در منزل چندين‬
‫ميکروکنترلر بدون استفاده دارند که سالھاست در گوشه کمد خاک ميخورند‪ .‬حاال ديگه وقتشه که يک‬
‫استفاده ای از اونا ببريم‪ .‬من که خودم حدود ‪ 10‬تا ‪ ATMEGA32‬و ‪ 15‬تا ‪ ATMEGA8‬بدون استفاده‬
‫دارم‪ ،‬که از تقريبا ً از سال ‪ 1380‬توی کشوی قطعات بی استفاده مانده اند‪ .‬پس بياييد باھم برد آردوينوی‬
‫دلخواھمون رو بسازيم‪ .‬و فعالً برد آردوينو نخريم تا شايد کمی ارزانتر شوند‪) .‬عرضه زياد ‪ +‬تقاضای کم‬
‫= ارزانی(‪.‬‬

‫آردوينو بھتره يا ‪AVR‬؟‬

‫حتما ً شما ھم بارھا اين سوال احمقانه رو شنيده ايد که ميگن آردوينو بھتره يا ‪AVR‬؟ خب مگه آردوينو‬
‫ميکروکنترلر ھست که با يک ميکروکنترلر مقايسه اش ميکنيد؟‬

‫دوستان ھمونطوريکه قبالً ھم توی کانال گفته ام‪ ،‬نرم افزار ‪ IDE‬آروينو‪ ،‬قدرتمند ترين و پر کاربرد ترين‬
‫نرم افزاری است که تا کنون برای کد نويسی ميکروکنترلر ھا ساخته شده و رو دست نداره‪ .‬راحت ترين‬
‫زبان برای يادگيری و کار کردن با ميکروکنترلرھا‪ ،‬با دستورات مفھومی که خود دستورات به ما ميگن‬
‫که چه کاری ميخواھند انجام دھند‪ .‬مثالً ;)‪ pinMode (5, OUTPUT‬خب اين دستور ميگه که ميخواھم‬
‫‪ MODE‬يا حالت پين شماره ‪ 5‬خروجی باشه‪ .‬حاال مقايسه اش کنيد با ‪ DDRB = 00000000‬به نظر‬
‫شما کدوم قابل فھم تره؟؟؟‬

‫و اگه منظور از سوال باال مقايسه ميکروکنترلر ‪ AVR‬با برھايی است که برای تست سريع کدھای‬
‫آردوينو ساخته شده اند و به بردھای آردوينو معروف ھستند‪ ،‬می باشد‪ ،‬بايد بگم که باز ھم سوال بی‬
‫خردانه ای است‪ .‬چون برد ھای آردوينو دارای يک ميکروکنترلر است که در بعضی از برد ھا مثل‬
‫آردوينو ‪ UNO‬يا ‪ NANO‬يا ‪ MEGA2560‬ميکروکنترلر ‪ AVR‬است‪ .‬و در بعضی از بردھای‬
‫آردوينو مانند آردوينو ‪ DUE‬از ميکروکنترلر ‪ ARM‬استفاده شده و يا بعضی از برد ھای آردوينو‪ ،‬با‬
‫استفاده از ميکروکنترلر ھای ‪ PIC‬و يا ‪ STM32‬و غيره ساخته شده اند‪ .‬به عالوه منبع تغيه و پروگرامر‬
‫سرخود و مبدل ‪ USB‬به سريال و غيره که کار رو برای کاربر‪ ،‬بسيار راحت کرده اند‪ .‬من خودم سالھا با‬
‫ميکروکنترلر ھای ‪ AVR‬کار کرده بودم ولی ھيچ وقت حوصله ساخت يک مبدل ‪ USB‬به سريال رو‬
‫نداشتم تا تست کنم ببينم پورت سريال چطوری کار ميکنه‪ .‬ولی االن ھر چيزی رو که ميخوام تست کنم‪،‬‬
‫بالفاصله اطالعاتش رو ميفرستم به پورت سريال تا مطمئن بشم درست کار ميکنه‪ .‬از طرفی اين بردھا‬
‫نياز به لحيم کاری يا برد بورد‪ ،‬ندارند‪ .‬و با چند تا سيم جامپر برد بوردی ميشه ھر سنسوری رو بھش‬
‫وصل کرد‪ .‬و يا بردھايی بنام شيلد برايشان ساخته شده که در يک ثانيه بھشون متصل ميشه و بھشون‬
‫امکانات اضافه ميکنه‪) .‬مثالً شيلد شبکه(‪.‬‬

‫حاال شما تجسم کنيد که بدون منبع تغذيه و پروگرامر و مبدل ‪ USB‬به سريال و غيره با خود‬
‫ميکروکنترلر ‪ AVR‬خالی چه کاری ميشه انجام داد؟؟؟‬

‫پس نتيجه ميگيريم که برای کار با ميکروکنترلر ھای ‪ AVR‬ھم بايد برد آردوينو رو شبيه سازی کرد‪ .‬تا‬
‫کار کنه‪ .‬يعنی ھمون کاری که ما امروز ميخواھيم انجام دھيم‪.‬‬
‫از طرفی خود نرم افزار آردوينو دارای کتابخانه ھای بسيار قدرتمندی ھست که به کاربر اجازه ميده در‬
‫کمترين زمان ممکن‪ ،‬بھترين نتيجه رو بگيره و دستگاه ھای الزمه اش رو بسازه‪ .‬و ديگه کاربر با اين که‬
‫االن به کدوم پين سنسور‪ ،‬پالس بدم و چند ميکروثانيه مکث کنم و جھت پالس رو برعکس کنم و دوباره‬
‫چند ميکروثانيه صبر کنم و بعدش کد ھگز فالن رو از باس آدرس براش بفرستم و بالفاصله برم از باس‬
‫داده اطالعاتش رو بخونم و ‪ ...‬درگير نيست‪.‬‬

‫بعنوان مثال برای خواندن ميزان دما و رطوبت از سنسور ‪ DHT22‬فقط کافيه کتابخانه ‪ DHT22‬رو به‬
‫برنامه اش اضافه کنه >‪ #include <DHT22.h‬بعد به ميکرو بگه که اين سنسور رو ميخوام به کدوم‬
‫پايه ات وصل کنم و استارت کار سنسور رو بزنه‪ dht.begin(); .‬حاال ميتونه دما و رطوبت رو ازش‬
‫بخونه‪ dht.readTemprature(); :‬و ;)(‪ dht.readHumidity‬و تموم شد و رفت‪ .‬من ميخوام يک‬
‫دماسنج بسازم و استفاده کنم و به من ھيچ ربطی نداره که به اين سنسور چطوری بايد پالس اعمال بشه و‬
‫نمودارھای زمانی و غيره اش رو ياد بگيرم‪ .‬خود کتابخانه اين کارھا رو برام انجام ميده‪ .‬و اين بزرگترين‬
‫مزيت آردوينو ھست‪ .‬که باعث ايجاد انگيزه در عالقه مندان به الکترونيک در طراحی دستگاه ھای جديد و‬
‫ثبت اختراعات جديد ميشه‪.‬‬

‫و بد نيست به اين مطلب ھم اشاره کرد که با نرم افزار ‪ IDE‬آردوينو‪ ،‬ميشه برای بردھای آردوينو‪،‬‬
‫ميکروکنترلر ھای ‪ ،AVR‬ميکروکنترلر ھای ‪ ،ARM‬ميکروکنترلر ھای ‪ ،STM‬ميکروکنترلرھای ‪PIC‬‬
‫و ھمچنين ماژول ھای وای فای و غيره کدنويسی کرد‪ .‬که ھيچکدام از محيط ھای کدنويسی ديگر‪ ،‬اين‬
‫امکانات رو ندارند‪.‬‬

‫يا به قول بعضی از دوستان‪ ،‬بردھای آردوينو که خيلی گرونتر از ميکروکنترلر ھا ھستند‪ ،‬بخاطر اينه که‬
‫يک سری قطعات يکبار مصرف اضافی دارند‪ .‬مثالً بعد از پروگرام کردن برد‪ ،‬ديگه چه نيازی ھست که‬
‫پروگرامر روش باشه؟ و ميشه حذفش کرد‪ .‬اين سوال کمی نياز به تعمق داره‪ .‬چون اگه فردا روزی‬
‫خواستيد برنامه نوشته شده داخل ميکروکنترلرتون رو آپديت کنيد و به اصطالح ورژن بزنيد‪ ،‬بايد چند‬
‫ساعت دنبال پروگرامرتون بگرديد تا اگه پيداش کرديد‪ ،‬برنامه رو آپديت کنيد‪ .‬ولی ميشه حذفش کرد و مثل‬
‫برد آردوينويی که من ساخته ام و اون باال تصويرش رو ديديد‪ ،‬از مبدل ‪ USB‬به سريال استفاده ميکنه‪.‬‬

‫ايرادات بردھای آردوينو‪:‬‬


‫‪ -1‬اندازه ھای آنھا ثابت است و جعبه دستگاه‪ ،‬بايد برحسب اندازه آردونو‪ ،‬خريداری شود‪) .‬در اين‬
‫آموزش ياد ميگيريم که چگونه برد آردوينوی مورد نظر خودمون رو بسازيم‪ .‬پس ابعاد و شکل‬
‫‪ PCB‬اون رو ميتونيم بر حسب اندازه جعبه ھای موجود‪ ،‬بسازيم(‪.‬‬
‫‪ -2‬بخاطر اينکه نرم افزار آردوينو برای دستوراتی مانند‪ millis(), micros(), delay(); :‬از تايمر‬
‫شماره صفر ميکروکنترلر استفاده ميکند‪ ،‬ديگه نميتونيم از اين تايمر استفاده کنيم‪) .‬ولی چند تا‬
‫تايمر ديگه ھم داريم که به ندرت از ھمه شون استفاده ميکنيم‪ .‬و در ضمن اين دستورات ‪millis(),‬‬
‫;)(‪ micros(), delay‬بسيار کاربردی تر از تايمر صفر ھستند(‪.‬‬
‫‪ -3‬وقتی ميخواھيم از باتری بعنوان منبع تغذيه استفاده کنيم‪ ،‬برای صرفه جويی در مصرف باتری‪،‬‬
‫در مواقع بيکاری ميکروکنترلر‪ ،‬آن را به حالت خواب عميق يا ;)(‪ deepSleep‬ميبريم‪ .‬که در اين‬
‫حالت مصرف برد بايد حدود ‪ 20uA‬شود‪ .‬ولی مشاھده ميکنيم که مصرف حدود ‪ 40mA‬يا حتی‬
‫بيشتر از آن است‪ .‬و علت اين امر‪ ،‬اين است که آی سی رگوالتور تعبيه شده در روی برد‬
‫آردوينو‪ ،‬حدود ‪ 15mA‬جريان مصرف ميکند و ھمچنين مبدل ‪ USB‬به سريال ھم بسته به اينکه‬
‫‪ CH341‬باشد يا ‪ CP21XX‬برای خودش مقداری جريان مصرف ميکند‪) .‬ھمانطور که در‬
‫تصوير باال مالحظه ميفرماييد‪ ،‬من از ھيچکدام از اين قطعات در برد آزمايشی خودم استفاده‬
‫نکرده ام؛ تا اين مشکل پيش نيايد(‪.‬‬
‫‪ -4‬مقداری از حافظه ‪ Flash‬ميکروکنترلر‪ ،‬جھت نگھداری بوت لودر آردوينو مصرف می شود‪.‬‬
‫)اوالً بوت لودر حجم بسيار ناچيزی از فضای حافظه را اشغال ميکند‪ .‬و دوما ً ما ميتوانيم بوت‬
‫لودر آردوينو رو داخل ميکروکنترلر پروگرام کنيم يا نکنيم‪ .‬و اين اختياری است‪ .‬که در ھمين‬
‫آموزش ھر دو روش را توضيح خواھيم داد(‪.‬‬

‫خب ديگه از انجمن حمايت از آردوينو ھای گمنام بياييم بيرون و بريم سراغ ساخت برد آردوينو و ببينيم‬
‫چطور ميتونيم برد آردوينوی دلخواه خودمون رو بسازيم‪ .‬ھمچنين در اين آموزش‪ ،‬ميخواھم براتون در‬
‫مورد روش ھای پروگرام کردن بوت لودر و اگر فرصت شد‪ ،‬در مورد ‪ OTA‬توضيح بدم‪ OTA .‬نوعی‬
‫بوت لودر ھست که باعث ميشه ما برد آردوينو رو بدون وصل کردن کابل و از طريق وای فای‪ ،‬داخل برد‬
‫آردوينو‪ ،‬پروگرام کنيم‪.‬‬

‫وسايل الزم برای ساخت ارزان ترين برد آردوينو‪:‬‬


‫‪ -1‬کريستال ‪ 16MHz‬يک عدد‪.‬‬
‫‪ -2‬خازن عدسی ‪ 22pF‬دو عدد‪.‬‬
‫‪ -3‬خازن عدسی يا سراميکی ‪ 100nF‬دو عدد‪.‬‬
‫‪ -4‬خازن عدسی يا سراميکی ‪ 10nF‬يک عدد‪.‬‬
‫‪ -5‬خازن الکتروليتی ‪ 16v 10uF‬يک عدد‪.‬‬
‫‪ -6‬مقاومت ‪ 10KΩ‬يک عدد‪.‬‬
‫‪ -7‬مقاومت ‪ 1KΩ‬يک عدد‪.‬‬
‫‪ -8‬کليد فشاری يک عدد‪.‬‬
‫‪ LED -9‬کوچک يک عدد‪.‬‬
‫بوبين يا سيم پيچ ‪ 100uH‬يک عدد‪) .‬ميتوانيد چند دور سيم را بصورت فنر درآورده و‬ ‫‪-10‬‬
‫استفاده کنيد‪ .‬چون بود و نبودش زياد مھم نيست(‪.‬‬
‫چند تا پين ھدر مادگی‪.‬‬ ‫‪-11‬‬
‫يک تيکه فيبر پيش سوراخ دار به ابعاد مورد نياز شما‪ ،‬بصورتيکه قطعات باال روش جا‬ ‫‪-12‬‬
‫بشن‪.‬‬

‫ھمونطوريکه در تصوير زير مالحظه ميکنيد‪ ،‬من برای راحتی کار با اين برد آزمايشی‪ ،‬برای پينھای‬
‫آردوينو از ھر دو نوع پين ھدرھای نری و مادگی استفاده کرده ام و برای ارتباطات ‪I2C, RS232, SPI‬‬
‫ھم از پين ھدرھای مادگی رايت يا ھمون خم شده استفاده کرده ام‪ .‬و يک سری پين ھدر نر و ماده ھم برای‬
‫‪ +5V‬و ‪ GND‬روی برد لحيم کرده ام‪ .‬و ھمچنين برای ميکروکنترلر و راحتی تعويض اون‪ ،‬يک سوکت‬
‫زيف گذاشته ام‪ .‬که شما ميتونيد بجای سوکت زيف ھم از پين ھدر مادگی استفاده کنيد‪ .‬من چون اين سوکت‬
‫رو داشتم‪ ،‬گذاشتم‪) .‬دارندگی و برازندگی ☺(‬
‫خب حاال من ميتونم با استفاده از اين برد آزمايشی که ساخته ام‪ ،‬برنامه آردوينو رو توی تمامی‬
‫ميکروکنترلر ھای ‪ 40‬پين آپلود کنم و براحتی تست کنم‪ .‬و در صورت جواب گرفتن از برنامه‪ ،‬بيام و‬
‫ميکروکنترلر رو ازش جدا کرده و روی ‪ PCB‬مدار اصلی که ميخواھم درست کنم‪ ،‬قرار دھم‪ .‬و به قول‬
‫اون دوستان که ميگن ‪ AVR‬از آردوينو بھتره ☺ بيام و از خود ‪ AVR‬استفاده کنم‪ .‬تا ھم اقتصادی تر‬
‫باشه و ھم جمع و جور تر و ھم اينکه چون بوت لودر آردوينو روش ھست‪ ،‬کافيه در ‪ PCB‬اصلی مدارم‪،‬‬
‫موقع طراحی‪ ،‬فقط يک پين ھدر مادگی ‪ 4‬پين اضافه کنم و پين ھای ‪RX, TX, GND, +5V‬‬
‫ميکروکنترلرم رو به اون پين ھدر متصل کنم تا ھر موقع نياز به تغيير برنامه بود‪ ،‬بيام مبدل ‪ USB‬به‬
‫سريالم رو داخل پين ھدر فوق قرار بدم و با يک کابل ‪ USB‬رابط به کامپيوتر متصل کنم و مثل يک برد‬
‫آردوينو معمولی‪ ،‬پروگرامش کنم‪.‬‬

‫لوازم اضافی برای شروع بکار ساخت آردوينو‪:‬‬


‫‪ -1‬يک عدد پروگرامر ‪ : STK500‬برای ھر خانواده ای الزمه ☺ البته در پايان ھمين آموزش‪ ،‬نحوه‬
‫ساخت پروگرامر با برد آردوينو رو ھم توضيح ميدم‪.‬‬
‫‪ -2‬ھويه و سيم لحيم‪.‬‬

‫من از پروگرامر ‪ AVR USB PROGRAMMER‬شرکت دلتا تراشه مدل ‪ DAP 300‬استفاده ميکنم‪.‬‬
‫به ھر حال فرقی ھم نميکنه که شما از چه پروگرامری استفاده کنيد‪ .‬مھم اينه که درايور اون پروگرامر‬
‫حتما بايد روی کامپيوترتون نصب شده باشه‪.‬‬
‫گام اول‪ :‬نصب برد ھای آردوينو‬
‫قبل از ھر کاری‪ ،‬ھر ميکرکنترلری که ميخواھيد پروگرام کنيد رو بايد به آردوينو معرفی کنيد‪.‬‬

‫آردوينو فقط به بردھايی که در منوی ‪ Tools >> Board‬معرفی شده اند‪ ،‬پاسخ ميده‪ .‬بنابراين‪ .‬مثال اگر‬
‫شما ميخواھيد ميکرکنترلر ‪ ATMEGA8‬رو با آردوينو پروگرام کنيد‪ ،‬حتما ً بايد نام ميکرکنترلر‬
‫‪ ATMEGA8‬در منوی ‪ Tools >> Board‬وجود داشته باشه‪.‬‬

‫برای نصب بردھای آردوينو مربوط به ميکروکنترلر ھای مختلف‪ ،‬مراحل زير را انجام دھيد‪:‬‬

‫‪ -1‬به منوی ‪ File >> Preferences‬برويد‪.‬‬


‫‪ -2‬مانند تصوير زير روی عالمت مربع کنار کادر مشخص شده در تصوير کليک کنيد تا پنجره وارد‬
‫کردن ‪ URL‬برای دانلود برد ھای مختلف به شما نمايش داده شود‪.‬‬
‫‪ -3‬در کادر باز شده ھر اطالعاتی ھست را پاک کنيد و آدرس ھای زير را داخل آن کپی کرده و روی‬
‫‪ OK‬کليک نماييد‪:‬‬
‫‪http://downloads.arduino.cc/packages/package_index.json‬‬

‫‪http://arduino.esp8266.com/stable/package_esp8266com_index.json‬‬

‫‪http://www.maxim-ic.com/datasheet/index.mvp/id/4627‬‬

‫‪https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json‬‬

‫‪https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json‬‬

‫‪https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json‬‬

‫‪https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json‬‬
‫با اين کار به آردوينو گفتيم که برد ھای مورد نظر ما را از کدام سايتھا ميتواند دانلود کند‪ .‬حاال بايد به‬
‫منوی ‪ Tools >> Board >> Boards Manager‬برويم و بردھايمان را دانلود نماييم‪.‬‬
‫‪ -4‬به منوی ‪ Tools >> Board >> Boards Manager‬برويد و منتظر بمانيد تا چک کردن‬
‫بردھای نصب شده برای آپديت شدن تمام شود‪ .‬بعد در کادر بااليی عبارت ‪avr arduino‬‬
‫‪ boards‬را تايپ کرده و روی گزينه آپديت کليک نماييد تا برد ھای آردوينو نصب شده آپديت‬
‫شوند‪.‬‬
‫اگر کليد آپديت را نمی بينيد روی گزينه پيدا شده يکبار کليک کنيد تا دکمه ‪ Update‬ظاھر شود‪.‬‬

‫‪ -5‬سپس به ھمين صورت در کادر بااليی بايد يکی از عبارات زير را برای پيدا کردن و نصب برد‬
‫ھای مورد نظر تايپ کنيد و سپس دکمه ‪ Install‬را بزنيد‪ .‬و پس از اتمام نصب برد ھا يکبار ‪IDE‬‬
‫آردوينو را ببنديد و دوباره باز کنيد‪ .‬مالحظه خواھيد کرد که تمامی برد ھای مورد نظر شما به‬
‫منوی ‪ Tools >> Board‬اضافه شده اند‪:‬‬
‫ برای نصب برد ھای‬: ATTINY -1

ATtiny25, ATtiny45, ATtiny85, ATtiny24, ATtiny44, ATtiny84

‫ برای نصب برد ھای‬: MiniCore -2

ATMEGA8, ATMEGA48, ATMEGA88, ATMEGA168, ATMEGA328

‫ برای نصب برد ھای‬: MightyCore -3

ATMEGA8535, ATMEGA16, ATMEGA32, ATMEGA164, ATMEGA324,


ATMEGA644, ATMEGA1284

‫ برای نصب برد ھای‬: MegaCore -4


‫‪ATMEGA64, ATMEGA128, ATMEGA640, ATMEGA1280, ATMEGA1281,‬‬
‫‪ATMEGA2560, ATMEGA2561‬‬

‫‪ : ESP8266 -5‬برای نصب برد ھای ‪ ESP8266‬و خانواده آن‬

‫‪ -6‬برای نصب برد ھای ‪ ATXMEGA‬پوشه ‪ xmega-arduino-master‬رو از سايت‬


‫‪ GITHUB‬دانلود کرده و با نرم افزار ‪ WinRAR‬اکسترکت کنيد به محل نصب آردوينو‬
‫رفته و داخل پوشه ‪ hardware‬بريزيد‪.‬‬

‫البته الزم به ذکر است که ھنگام دانلود برد ھای آردوينو به ھيچ عنوان نبايد فيلتر شکن روی سيستم شما‬
‫فعال باشد‪ .‬وگرنه بردھاتون رو پيدا نميکنه‪☺ .‬‬
‫گام دوم‪ :‬نصب بوت لودر آردوينو‬
‫حاال ميرسيم به نصب بوت لودر آردوينو روی ميکروکنترلر ھای ‪ .AVR‬ابتدا بايد ببينيم که بوت لودر‬
‫چيه و به چه دردی ميخوره؟‬

‫دوستان گلم احتماالً تا کنون ھمه تون روی کامپيوتر‪ ،‬ويندوز نصب کرده ايد‪ .‬وقتی ميخواھيد ويندوز نصب‬
‫کنيد به تنظيمات سيستم وارد می شويد و حالت بوت شدن رو انتخاب ميکنيد‪ .‬و به سيستم ميگوييد که ابتدا‬
‫توسط ‪ CD_ROM‬باال بياد و اگه ‪ CD_ROM‬داخلش نرم افزار ‪ Bootable‬پيدا نشد‪ ،‬با ھارد ديسک‬
‫باال بياد و ويندوزی که روی اون ھست و برنامه ھای مربوط به اون رو اجرا کنه‪...‬‬

‫توی ميکروکنترلر ھم يک ھمچين وضعيتی حاکم ھست‪ .‬ولی وقتی ما به يک پين خاصی ولتاژ بيش از‬
‫تغذيه اعمال ميکنيم‪ ،‬مياد و از طريق پوت ‪ SPI‬پروگرام ميشه و در واقع از طريق پورت ‪ SPI‬بوت ميشه‬
‫و ما ميتونيم برنامه مون رو داخلش پروگرام کنيم‪ .‬که به اين روش ميگن روش پروگرام کردن ‪ ISP‬که‬
‫مخفف ‪ In System Programming‬است‪.‬‬

‫حاال آردوينو اومده و ميگه من نميخوام از طريق ‪ SPI‬ميکروکنترلر رو پروگرام کنم‪ .‬من ميخوام‬
‫ميکروکنترلر رو از طريق پورت سريال پروگرام کنم تا کاربر‪ ،‬ديگه نيازی به خريد پروگرامر نداشته‬
‫باشه و با يک مبدل ‪ USB‬به سريال ساده بتونه برنامه اش رو بريزه داخل ميکروکنترلر و استفاده کنه‪.‬‬

‫بنابراين بوت لودر آردوينو در ھر لحظه داره پورت سريال رو چک ميکنه و اطالعاتی که از پورت‬
‫سريال رد و بدل ميشن رو نگاه ميکنه ببينه آيا ھدر فايل مربوط به پروگرام شدن داخل اون رشته دريافتی‬
‫ھست يا نه؟ اگر بود‪ ،‬ميره به حالت پروگرام شدن و اطالعات رسيده از پورت سريال رو مياره ميريزه‬
‫داخل حافظه ‪ Flash‬و بعدش ميکروکنترلر ريست ميشه و با برنامه جديد کار ميکنه‪ .‬در غير اينصورت‬
‫)يعنی اگه ھدر فايل مربوط به پروگرام شدن داخل اون رشته دريافتی نبود(‪ ،‬برنامه داخل حافظه ‪Flash‬‬
‫اجرا ميشه‪ .‬و اطالعات دريافتی از پورت سريال رو توی برنامه استفاده ميکنه‪.‬‬

‫خب اين روش روش بسيار خوب و ارزان قيمتی است ولی يک ايرادی داره و اون ھم اينه که وقتی ما به‬
‫پورت سريال ميکروکنترلر‪ ،‬يک وسيله سريال متصل ميکنيم تا باھاش کار کنيم و ھمزمان پورت سريال‬
‫رو بوسيله مبدل ‪ USB‬به سريال به کامپيوتر متصل ميکنيم‪ ،‬ديگه نميتونيم از اون وسيله استفاده کنيم‪ .‬و‬
‫ھمچنين نميتونيم برنامه رو داخل ميکروکنترلر آپلود کنيم‪ .‬چرا؟؟؟‬

‫چون پورت سريال در ھر لحظه فقط ميتونه به يک وسيله متصل بشه و در اين حالتی که ما ايجاد کرده ايم‬
‫دوتا وسيله بھش متصل ھست‪ .‬يکی اون دستگاه يا ماژول سريال مون و ديگری کامپيوتر‪.‬‬

‫چون اکثر کاربران عادت کرده اند که تغذيه آردوينو رو از مبدل ‪ USB‬به سريال بگيرند‪ ،‬مثالً وقتی دارن‬
‫ماژول بلوتوث رو چک ميکنند که به پايه ھای ‪ RX, TX‬ميکرو متصل ھست‪ ،‬و تغذيه آردوينو رو ھم از‬
‫کامپيوتر گرفته اند تا اطالعات دريافتی رو ھم توی کامپيوتر ببينند‪ .‬ديگه فکر نميکنند که اينکار باعث شده‬
‫پورت سريال از کار بيافته و ميان توی تاالر گفتمان آردوينو کاران جوان سوال ميکنند که چرا دستگاه‬
‫ماژول بلوتوث من کار نميکنه؟؟؟‬

‫برای حل اين مشکل چند راه وجود داره‪:‬‬

‫‪ -1‬اگر ميکروکنترلرتون چندين پورت سريال داره‪ ،‬ماژولتون رو به يک پورت ديگه بغير از‬
‫‪ Serial0‬متصل کنيد‪.‬‬
‫‪ -2‬اگه ميکروکنترلرتون فقط يک پورت سريال داره‪ ،‬از کتابخانه ‪ SoftwareSerial‬استفاده کنيد و‬
‫يک پورت سريال مجازی روی پينھای ديگر ميکرو ايجاد کنيد و ماژولتون رو بھش متصل کنيد‪.‬‬
‫)توی کانال آردوينو کاران جوان آموزش کامل ‪ SoftwareSerial‬رو بصورت فيلم قرارداده ام‪(.‬‬
‫‪ -3‬اگه پين اضافی نداريد که ‪ SoftwareSerial‬درست کنيد‪ ،‬فقط کافيه که موقع پروگرام کردن‬
‫ميکروکنترلر‪ ،‬ماژول رو ازش جدا کنيد‪ .‬و بعد از پروگرام کردن ھم از باتری يا شارژر موبايل‬
‫استفاده کنيد تا ماژولتون کار کنه و نبايد به کامپيوتر متصل باشه‪.‬‬

‫خب مثل اينکه از بحث اصلی دور شديم‪ .‬برگرديم بريم سراغ نصب بوت لودر آردوينو‪:‬‬

‫پس تا اينجا متوجه شديم که بوت لودر چيه و چه کاربردی داره‪ .‬بنابراين شما بايد تابحال متوجه شده باشيد‬
‫که در صورت عدم وجود بوت لودر آردوينو روی ميکروکنترلر ھم ميتوان با ‪ IDE‬آردوينو برای‬
‫ميکروکنترلر مورد نظر برنامه نوشت‪ .‬ولی نميشه با مبدل ‪ USB‬به سريال پروگرامش کرد‪.‬‬

‫اگه بخواھيم با مبدل ‪ USB‬به سريال پروگرامش کنيم‪ ،‬بايد بوت لودر آردوينو رو روش نصب بکنيم‪ .‬خب‬
‫حاال چطوری اين کار رو انجام بديم؟؟؟‬

‫جواب اينه‪ .....‬براحتی!!! ☺‬

‫حاال که ما ھمه چيز رو راجع به بوت لودر ميدونيم‪ ،‬ميدونيم که ميکروکنترلری که خريده ايم دارای بوت‬
‫لودر آردوينو نيست‪ .‬بنابراين يک پروگرامر ‪ STK500‬از يک نفر قرض ميگيريم و ميکروکنترلرمون‬
‫رو داخلش قرار ميديم و درايورش رو ھم روی کامپيوتر نصب ميکنيم‪ .‬البته اگر پروگرامر ديگه ای ھم‬
‫باشه که اسمش توی ليست پروگرامر ھای موجود در منوی ‪ Tools>>Programmer‬باشه ھيچ اشکالی‬
‫نداره‪ .‬فقط يادتون باشه که حتما ً درايورش رو نصب کرده باشد‪ .‬بعدش ميريم به ھمون منوی‬
‫‪ Tools>>Programmer‬و اسم پروگرامرمون رو انتخاب ميکنيم‪ .‬در مرحله بعدی بايد از منوی‬
‫‪ Tools>>Board‬ميکروکنترلر مورد نظرمون رو انتخاب کنيم‪ .‬و حاال بازدن گزينه ‪Burn‬‬
‫‪ Bootloader‬از منوی ‪ Tools‬می بينيد که بوت لودر آردوينو روی ميکروکنترلر روی پروگرامر آپلود‬
‫شد‪.‬‬
‫روش دوم اينه که کسی بھتون پروگرامر ‪ STK500‬قرض نميده‪☺☺☺ ...‬‬

‫ولی نگران نباشيد‪ .‬اگه شما يک برد آردوينو ‪ UNO‬يا ھر آردوينوی ديگه ای داشته باشيد‪ ،‬مشکل حل‬
‫ميشه‪  ...‬چطوری؟؟؟‬

‫جواب اينه‪ ...‬براحتی!!!‬

‫آردوينو ‪ UNO‬رو به کامپيوتر متصل کنيد‪.‬‬ ‫‪-1‬‬


‫از منوی ‪ Tools>>Board‬آردوينو ‪ UNO‬رو انتخاب کنيد‪.‬‬ ‫‪-2‬‬
‫از منوی ‪ Tools>>Programmer‬گزينه ‪ Arduino as ISP‬رو انتخاب کنيد‪.‬‬ ‫‪-3‬‬
‫از منوی ‪ File>>Examples>>11.ArduinoISP>>ArduinoISP‬رو باز کنيد‪.‬‬ ‫‪-4‬‬
‫برنامه باز شده رو داخل آردوينو آپلود کنيد‪.‬‬ ‫‪-5‬‬

‫تبريک ميگم شما يک پروگرامر ‪ ISP‬ساختيد‪ .‬حاال با ھمين پروگرامر ميتونيم شروع کنيم به آپلود برنامه‬
‫داخل ميکرو کنترلر‪ .‬فقط از اين به بعد به اين برد آردوينو ‪ UNO‬ميگيم ‪ Programmer‬که اشتباھی پيش‬
‫نيايد‪.‬‬

‫اگر بخواھيد ميتوانيد چند تا ‪ LED‬ھم بصورت زير به پروگرامر اضافه کنيد تا حالتھای مختلف پروگرام‬
‫شدن را ببينيد‪:‬‬

‫در صورتيکه پروگرامر شما ھنگام آپلود برنامه خطا ميدھد‪ ،‬يک عدد خازن الکتروليتی ‪16V_100uF‬‬
‫بين پين ‪ GND‬و ‪ RST‬يا ھمان ‪ RESET‬پروگرامر لحيم کنيد‪ .‬مخصوصا ً در آردوينو ‪.Nano‬‬

‫حاال مدار شکل زير را ببنديد‪ :‬توجه داشته باشيد که در مدارات زير برد آردوينويی که داخلش برنامه‬
‫‪ ArduinoISP‬رو ريخته ايم بنام ‪ Programmer‬و آردوينو ديگر که از روش ميکروکنترلرش رو‬
‫درآورده ايم و ميکروکنترلر خريداری شده رو قرار داده ايم‪ ،‬بنام ‪ Target‬نامگذاری شده اند‪ .‬بله درسته ما‬
‫بايد ميکروکنترلر خريداری شده رو با ميکروکنترلر يک آردوينو جايگزين کنيم تا بتونيم پروگرامش کنيم‪.‬‬
‫در غير اين صورت ميتوانيم ميکروکنترلر خريداری شده رو روی برد بورد بگذاريم و يک کريستال‬
‫‪ 16MHz‬و دوتا خازن ‪ 22pF‬به پين ھای کريستالش بزنيم و تغذيه اش رو ھم متصل کنيم‪ .‬و بعد پينھای‬
‫معادل نقشه زير رو بھش بزنيم و بعد کار رو ادامه بديم‪.‬‬

‫آردوينو ‪ UNO‬بعنوان پروگرامر آردوينو ‪UNO‬‬

‫شما ميتونيد ھر آردوينويی که داريد برنامه ‪ ArduinoISP‬رو داخلش بريزيد و به عنوان پروگرامر ‪ISP‬‬
‫استفاده نماييد‪ .‬به شکل ھای زير توجه کنيد‪:‬‬
‫آردوينو ‪ UNO‬بعنوان پروگرامر آردوينو ‪NANO‬‬

‫آردوينو ‪ MEGA‬بعنوان پروگرامر آردوينو ‪UNO‬‬


‫آردوينو ‪ MKR1000‬بعنوان پروگرامر آردوينو ‪UNO‬‬

‫حاال ديگه فرقی نميکنه که برای ‪ Target‬از آردوينو استفاده کنيد يا برد بورد‪ .‬مھم اينه که پين ھای ‪SPI‬‬
‫قسمت تارگت يا ھدف بصورت شکل ھای باال به پروگرامر متصل بشن‪ .‬من شماره پين ھای چند تا از‬
‫بردھای آردوينو رو براتون در جدول زير نشان داده ام بقيه اش رو خودتون از اينترنت ميتونيد پيدا کنيد‪.‬‬

‫اگر ھم پيدا کردن پين ھای ‪ SPI‬براتون سخته ميتونيد از شکل زير استفاده کنيد‪ .‬ترتيب پين ھای سوکت‬
‫‪ ICSP‬که روی تمامی برد ھای آردوينو وجود دارد بصورت شکل زير است‪ .‬که دقيقا ً به ھمان پين ھای‬
‫‪ SPI‬روی برد متصل است‪:‬‬
‫خب می بينيد که ھيچ بھونه ای نداريد برای اينکه نتونيد پروگرامر ‪ ISP‬بسازيد‪.‬‬

‫تنھا کاری که بعد از ساختن اين برد ھا بايد انجام دھيد اين است که پروگرامر ساخته شده رو به کامپيوتر‬
‫متصل کنيد و به منوی ‪ Tools>>Board‬برويد و برد آردوينوی ‪ Target‬رو انتخاب کنيد‪) .‬يعنی ھمون‬
‫ميکروکنترلری که ميخواھيد بوت لودر داخلش بريزيد(‪.‬‬

‫پورت ‪ com‬مناسب رو از منوی ‪ Tools>>Port‬انتخاب کنيد و ‪ Tools>>Programmer‬رو روی‬


‫‪ Arduino as ISP‬قرار بدين و سپس روی گزينه ‪ Tools>>Burn Bootloader‬کليک کنيد‪ .‬بوت لودر‬
‫ميکروکنترلر انتخاب شده روی ميکروکنترلر مورد نظر آپلود ميشه‪.‬‬

‫خيلی ھم عالی‪ ...‬تا اينجا ما تونستيم يک برد آردوينو بسازيم و بوت لودر ھم روش داشته باشيم‪ .‬حاال فقط‬
‫کافيه که ميکروکنترلر ساخته شده رو روی برد بورد کار بگذاريم و کريستال و خازن ھای عدسی رو‬
‫بھش متصل کنيم و تغذيه ھم بھش بديم‪ .‬و با يک مبدل ‪ USB‬به سريال راحت پروگرامش کنيم‪ .‬يادتون نره‬
‫که پروگرامر رو بعد از آپلود بوت لودر حتما ً روی ‪ Arduino as ISP‬قرار بدين‪ .‬و ‪ Board‬و ‪Port‬‬
‫مناسب رو ھم انتخاب کنيد‪ .‬برنامه تون رو توی محيط ‪ IDE‬آردوينو بنويسيد و بعد روی دکمه آپلود کليک‬
‫کنيد‪ .‬با کمال تعجب خواھيد ديد که برنامه روی ميکروکنترلر شما آپلود نميشه‪   .‬چرا؟؟؟‬
‫برای اينکه برد ھای آردوينو دارای يک مداری ھستند که به محظ شروع آپلود‪ ،‬يکبار مدار رو ريست‬
‫ميکند‪ .‬بنابراين اگر ميخواھيد برنامه تان آپلود شود به محظ اينکه برنامه کامپايل شد و نوشت ‪Uploading‬‬
‫بايد بالفاصله دکمه ريست رو روی برد ساخته شده خودتون بصورت لحظه ای فشار بدين‪☺☺☺ .‬‬

‫حاال بياييد ببينيم اگه نخواھيم بوت لودر آردوينو رو روی ميکروکنترلر بريزيم چيکار کنيم؟‬

‫سوال‪ :‬آيا بدون بوت لودر ھم ميشه برنامه رو روی ميکروکنترلر مورد نظرمون آپلود کرد؟؟؟‬

‫جواب‪ :‬بله‬

‫سوال‪ :‬چطوری؟‬

‫جواب‪ :‬براحتی‪☺ .‬‬

‫مثالً ما يک ميکروکنترلر ‪ ATMEGA32‬داريم‪ .‬و بردھای آن را نيز مثل توضيحات اول ھمين آموزش‬
‫روی نرم افزار ‪ IDE‬آردوينو نصب کرده ايم‪ .‬و يک پروگرامر ‪ STK500‬ھم داريم‪ .‬که درايور آن را ھم‬
‫روی کامپيوتر نصب کرده ايم‪.‬‬

‫تنھا کاری که بايد انجام دھيم اين است که يک سرچ توی اينترنت قسمت ‪ IMAGE‬بزنيم و دنبال‬
‫‪ ATMEGA32 ARDUINO PINOUT‬بگرديم‪ .‬خيلی سريع شماره پينھای آردوينو معادل‬
‫‪ ATMEGA32‬رو پيدا ميکنيم‪.‬‬
‫حاال ميکروکنترلر ‪ ATMEGA32‬رو داخل پروگرامر ‪ STK500‬قرار داده و‬

‫از منوی ‪ Tools>>Port‬پورت ‪ com‬مناسب رو انتخاب کنيد‪.‬‬ ‫‪-1‬‬


‫از منوی ‪ Tools >>Board‬برد ‪ ATMEGA32‬رو انتخاب کنيد‪.‬‬ ‫‪-2‬‬
‫از منوی ‪ Tools >>Programmer‬پروگرامر ‪ Atmel STK500 development board‬رو‬ ‫‪-3‬‬
‫انتخاب کنيد‪.‬‬
‫پس از اينکه برنامه تان را با توجه به پين ھای ميکرو در حالت آردوينو که از اينترنت دريافت‬ ‫‪-4‬‬
‫کرده ايد نوشتيد‪ ،‬از منوی ‪ sketch>>Upload Using Programmer‬رو بزنيد تا برنامه با‬
‫استفاده از پروگرامر ‪ STK500‬وارد ميکروکنترلر بشه‪.‬‬

‫برنامه رو با ھر پروگرامری که داريد ميتونيد به ھمين روش داخل ميکروکنترلر بريزيد‪ .‬فقط بايد اسم‬
‫پروگرامرتون رو از منوی ‪ Tools>>Programmer‬انتخاب کنيد‪.‬‬

‫روش دوم استفاده از پروگرامر ‪ ISP‬ساخت خودتان است‪:‬‬

‫‪ -1‬پين ھای ‪ SPI‬ميکروکنترلر ‪ ATMEGA32‬رو مانند توضيحات باال به پروگرامر ‪ ISP‬ساخت‬


‫خودمون متصل ميکنيم‪.‬‬

‫از منوی ‪ Tools>>Programmer‬گزينه ‪ Arduino as ISP‬رو انتخاب ميکنيم‪.‬‬ ‫‪-2‬‬


‫از منوی ‪ Tools>>Board‬برد ‪ ATMEGA32‬را انتخاب کنيد‪.‬‬ ‫‪-3‬‬
‫از منوی ‪ sketch>>Upload Using Programmer‬رو بزنيد‪.‬‬ ‫‪-4‬‬
‫☺☺☺‬ ‫‪-5‬‬
‫روش ديگه اينه که‪:‬‬

‫برنامه رو مينويسم و‬

‫‪ -1‬از منوی ‪ Tools>>Board‬برد ‪ Atmea32‬رو انتخاب ميکنيم‪.‬‬


‫‪ -2‬از منوی ‪ File>>Preferences‬رو انتخاب ميکنيم و گزينه ‪Show verboes output during‬‬
‫‪ Compilation‬را مانند تصوير زير تيک ميزنيم‪:‬‬

‫‪ -3‬حاال به منوی ‪ sketch‬رفته و گزينه ‪ Export Compiled Binery‬رو بزنيد‪.‬‬


‫‪ -4‬در منوی ‪ sketch‬روی گزينه ‪ Show sketch Folder‬کليک کنيد تا محل اجرای برنامه شما باز‬
‫شود‪ .‬خواھيد ديد که دو تا فايل ھگز در محل اجرای برنامه تون اضافه شده‪ .‬يکی فايل ھگز برنامه‬
‫بدون بوت لودر آردوينو است‪ .‬و ديگری فايل ھگز برنامه بھمراه بوت لودر آردوينو‪.‬‬
‫‪ -5‬شما ھرکدوم از اين فايلھا رو ميتونيد با ھر پروگرامری که داريد مستقيما ً داخل‬
‫ميکروکنترلرخودتون بريزيد و بعدش استفاده کنيد‪.‬‬
‫اگه فايل ھگزی که دارای بوت لودر آردوينو ھست رو آپلود کنيد‪ ،‬باز ھم ميتونيد بدون پروگرامر و با‬
‫استفاده از مبدل ‪ USB‬به سريال اون رو پروگرام کنيد‪ .‬چون تبديل به آردوينو شده است‪☺ .‬‬

‫خب دوستان گلم‪ ،‬و آردوينو کاران عزيز من ديگه خسته شدم و فکر کنم تا ھمينجا کفايت بکنه‪ .‬در برنامه‬
‫‪ Over The Air‬توضيح بدم‪ .‬بوت‬ ‫آموزشی بعدی ميخوام براتون در مورد بوت لودر ‪ OTA‬يا ھمون ‪ir‬‬
‫لودر ‪ OTA‬ھم يک برنامه ساده است که داخل ماژول ‪ ESP_01‬ريخته ميشه و ماژول ‪ ESP_01‬ھم به‬
‫پورت سريال آردوينو وصل ميشه‪ .‬و بعد ما ميتونيم با استفاده از اينترنت‪ ،‬برنامه مون رو به ماژول‬
‫‪ ESP_01‬بفرستيم تا برد آردوينو مون پروگرام بشه‪ ☺ .‬اينطوری ديگه نميخواد مثالً بردی رو که داخل‬
‫لوستر کار گذاشته ايم با داخل داشپورت ماشين جاسازی کرده ايم يا بردی که دور از دسترس ھست و مثالً‬
‫توی يک شعبه از بانک کار گذاشته ايم رو بياريم و به کامپيوتر متصل کرده و پروگرام کنيم و ورژن جديد‬
‫برنامه مون رو داخلش آپلود کنيم‪ .‬فقط کافيه که با اينترنت به اون ماژول ‪ ESP_01‬متصل شده و برنامه‬
‫مون رو بھش بديم تا آپلود بشه داخل آردوينو و تغييرات الزم اعمال بشه‪☺☺☺ .‬‬

‫بعنوان حسن ختام اين آموزش ھم ميخواھم ‪ PINOUT‬چند تا از ميکروکنترلر ھای ‪ AVR‬رو معادل‬
‫آردوينوشون رو قرار بدم‪:‬‬
‫برای ساخت برد آزمايشی آردوينو ميتوانيد از آموزش ساخت ‪ PCB‬برای ‪ ATMEGA32‬آموزش داده‬
‫شده در کانال آردوينو کاران جوان و يا آموزش ساخت آردوينو روی برد بورد در ھمين کانال نيز استفاده‬
‫نماييد‪.‬‬

‫نقشه کامل پروگرامر ‪ ISP‬بوسيله آردوينو ‪Nano‬‬


‫آردوينو کاران جوان ھميشه بھترين ھا رو برای شما آرزو ميکند‪.‬‬

‫پس با ما در کانال تلگرام آردوينو کاران جوان ھمراه باشيد و کانال رو به دوستانتون معرفی کنيد‪.‬‬

‫رضا اژدرکش‬

You might also like