جلسه هجدهم : راه اندازی LCD کاراکتری 1602

به نام خدا
اول جلسه یه پیشنهاد دارم : این که اول کل جلسه رو یه دور تا آخر بخونین بعد قسمت های سخت افزاریش رو اجرا کنین چون دو روش ارائه میشه. پس تا آخر جلسه رو بخونید هر کدوم از دو روش رو که خواستین انجام بدین.
این جلسه قصد داریم در مورد LCD کاراکتری 1602 حرف بزنیم . اول بگیم که چرا به این میگن 1602: این نمایشگر 16 تا ستون و دو تا سطر داره همین ! در مورد این که چرا لازمه تو پروژه هامون LCD داشته باشیم فکر نمی کنم هیچ نیازی داشته باشه که توضیح بدم. فقط همینو بگم که تا الان هر چیزی رو که می خواستیم ببینیم (مثلا عدد پتانسیومتر ) روی کنسول سریال آردوینو می دیدیم ولی خب خیلی مواقع ممکنه مدارمون رو از کامپیوتر جدا کنیم و با یه سوئیچ آداپتور ببریمش یه جایی وصلش کنیم که هیچ نوع کامپیوتری نباشه که بتونیم از کنسول سریالش استفاده کنیم. وقتی تو همچین شرایطی گرفتار شدیم می ریم سراغ استفاده از انواع LCD ها.
character_2x16_modules_lcd_display_hd44780_controller_black_on_yg
این نمایشگر 16 تا پایه داره که اگه به عکس بالا یه کم دقیق بشید کنار پینها یه شماره 1 می بینید یه شماره 16 . ارتباط آردوینو و این LCD به صورت پارالل هست به همین خاطر باید یه عالمه پین رو وصل کنیم پس بدون فوت وقت بریم سراغ سخت افزار مدرا .

مواد لازم :
هر نمونه آردوینو در دسترس
LCD کاراکتری 1602
برد بورد کوچیک
پتانسیومتر
مقاومت 220 اهم
سیم نری به نری

خب حالا مدارتون رو مثل عکس زیر ببندید :
LCD_Base_bb_Fritz
LCD_Base_bb_Schem
میدونم مدارش زیاد دل و روده داشت بنابراین خسته نباشید.
پروژه ای که می خوایم انجام بدیم اینه که هر چیزی رو که از کنسول سریال دریافت کردیم توی LCD نمایش بده .
برای این کار کتابخونه Liquid Crystal رو به کتابخونه های آردوینو اضافه کنید:
Adafruit_LiquidCrystal-master
آموزش اضافه کردن کتابخونه هم اینجاست:

بعد از این که کتابخونه رو به صورت موفقیت آمیز به آردوینو اضافه کردید مثل عکس زیر کد serialdisplay رو بیارید :
2016-01-30_14-07-20
خب با یه همچین کدی مواجه میشید (البته من نیم کیلو کامنت بالاش رو پاک کردم ):
2016-01-30_14-09-10

قسمت های مختلف :
1:معرفی کتابخونه LiquidCrystal

2: اگه یادتون باشه قبلا هر وقت یه پین رو استفاده می کردیم میومدیم توی هدر برنامه بهش اسم می دادیم . الان اگه بشمارید 6 تا سیم از LCD وصل کردیم به پین های آردوینو . قائدتا باید 6 تا متغیر تو هدر تعریف می کردیم . پس کو ؟ چرا نکردیم ؟ همین خط دستوری که اینجا نوشتیم (LiquidCrystal lcd(12, 11, 5, 4, 3, 2 دقیقا همین کار رو میکنه. فقط فرقش اینه که اون تعریف کردنا به جای اینه اینجا نوشته بشه رفته تو کتابخونه نوشته شده .

3.توی این قسمت کانفیگ پین هایی که تو قسمت 2 معرفی شد انجام میشه.تابع begin در کتابخونه LiquidCrystal پین های معرفی شده در قسمت 2 رو به صورت ورودی / خروجی کانفیگ میکنه. علاوه بر این تعداد سطر و ستون های LCD به عنوان آرگومان های ورودی این تابع قرار داده میشه (یعنی 2 و 16).

4: کانفیگ ارتباط سریال با baude rate مساوی 9600.

بافر ارتباط سریال : قبل از توضیح پارت پنجم لازمه در مورد بافر سریال یه توضیح خیلی ساده بدم. در همین حد بدونید که بافر سریال یه واسطه . یعنی هر آنچه که شما توی کنسول سریال آردوینو تایپ می کنید قبل از این که با دستور Serial.read بریزیدش تو یه متغیر، توی بافر سریال ذخیره میشه. بافر رو یه چیزی مثل شکل زیر تصور کنید که هر کاراکتری که ما تو کنسول تایپ می کنیم میره تو یکی از خونه های این بافر می شینه.

2016-01-30_14-53-39
5: این جا داریم میگیم اگه چیزی توی بافر ارتباط سریال وجود داشت بیا کارای توی کروشه رو انجام بده . دقت کنید با if نوشته . دستور Serial.available میاد تعداد متغیرهایی رو که توی بافر ارتباط سریال هست رو خروجی میده. یعنی مثلا اگه شما تو کنسول سریال تایپ کرده باشید salam خروجی دستورSerial.available عدد 5 هست (یعنی 5 تا کاراکتر). اینجا داره میگه اگه خروجی این دستور بزرگتر از صفر بود (یعنی یه چیزی توی کنسول سریال آردوینو نوشته شده بود (اصلا مهم نیست چند تا)) بیا دستور های بین دو کروشه مربوط به این if رو اجرا کن.

6: اینجا 100 میلی ثانیه صبر می کنه تا کل اون چیزی که ما توی کنسول سریال تایپ کردیم تو بافرارتباط سریال جا بگیره .

7: با دستور clear تمام داده های روی LCD پاک میشه در واقع LCD رو خالی می کنه تا داده بعدی روش چاپ بشه.

8 و 9 : اتفاقی که توی این دو خط کد می افته اینه که داده های خونه های بافر ارتباط سریال دونه دونه روی LCD چاپ میشن تا جایی که بافر خالی بشه. علت این که از while استفاده شده اینه که باید تک تک خونه ها رو خالی کنه تا جایی که دیگه بافر خالی بشه . بعد با دستور (()lcd.write(Serial.read میاد هر چیزی رو که از کنسول سریال میگیره توی LCD چاپ می کنه.

دقیق تر بگم ؟
بار اول که وارد دستور (while (Serial.available() > 0 میشه خروجی دستور Serial.available() مساوی 5 خواهد بود (چون salam توی بافر سریاله ) .بنابراین شرط برقراره و از while عبور میکنه میاد دستور (()lcd.write(Serial.read رو اجرا می کنه .

اگه یادتون باشه توی جلسه ای که در مورد ارتباط سریال حرف میزدیم می گفتیم Serial.read فقط یک کاراکتر رو بر می گردونه . یعنی اگه توی بافر سریال ما مثل بالا salam نوشته شده باشه نمیاد کل salam رو به عنوان خروجی بده فقط S رو برمیگردونه و بعد بافر سریال رو به این شکل در میاره یعنی S رو از اون خارج می کنه :
2016-01-30_15-23-13
توی همین بار اول کاراکتر S با دستور (()lcd.write(Serial.read روی LCD چاپ میشه.
به آخر while  می رسیم .طبق خاصیت حلقه while یک باردیگه شرایط while چک میشه. اگر شرط برقرار باشه وارد حلقه میشه اگه شرط برقرار نباشه از حلقه while خارج میشه.
بار دوم که قراره شرط while چک بشه خروجی دستور Serial.available() مساوی 4 خواهد بود بنابراین بازم شرط برقراره و یک بار دیگه دستور (()lcd.write(Serial.read اجرا میشه و این بار a از بافر سریال خارج میشه و توی LCD چاپ میشه .

اینطوریه که کارکاترها دونه دونه از بافر خارج میشن و روی LCD چاپ میشن تا جایی که بافر خالی بشه و خروجی دستور Serial.available() مساوی صفر بشه. در این حالت شرط while  برقرار نمیشه و از حلقه خارج میشیم.

برای این که حرف منو بهتر درک کنین این قسمت از کد رو تغییر بدید و اپلود کنید:
2016-01-30_16-42-17
همونطور که میبیند هر کدوم از کاراکترها با فاصله زمانی 2 ثانیه روی LCD چاپ میشن.

خب تا این جای داستان پارت اول جلسه تموم شد که راه اندازی اولیه نمایشگر بود. توی کتابخونه LiquidCrystal علاوه بر serialdisplay مثال های دیگه ای هم وجود داشت که می تونید اجرا کنید و ببینید و اگه سوالی داشتید تو انجمن بپرسید .

**************************************************************************

آزار دهنده ترین قسمت انجام این پروژه قسمت سیم بندی اون بود که مجبور بودیم n تاسیم رو با مقاومت و پتانسیومتر استفاده کنیم .
یه راه حل خیلی خوب وجود داره که به جای این همه بند و بساط با 4 تا دونه سیم بتونیم ارتباط نمایشگر و آردوینو رو فراهم کنیم.
برای این کار فقط باید دستمونو بکنیم تو جیبمون و یه دونه از درایور های LCD بخریم :2016-01-30_16-17-22

بعد از این که اینو خریدید لحیمش کنیمد پشت LCD به این شکل :
2016-01-30_16-15-27

وقتی لحیم کاری تموم شد الان سخت افزارمون رو به این شکل می بندیم :
LCD 1602 I2C SCH

می بینید فقط 4 تا دونه سیم .بدون پتانسیومتر ، بدون مقاومت و بدون n تا سیم. اگه دقت کنید علاوه بر VCC و GND دو تا پین دیگه وجود داره به نام های SCL و SDA. این دو تا پین ، پین های ارتباط I2C هستن . ارتباط I2C یکی از پرکاربردترین پروتکل های ارتباطی تو کار ماست . خیلی از سنسورها خیلی از نمایشگرهامون با این پروتکل کار میکنن و ما باید بتونیم تشخیصشون بدیم و راهشون بندازیم. حالا یه سوال پیش میاد و اونم اینه که یه قطعه رو که پروتکل ارتباطیش I2C هست چطوری تشخیص بدیم؟
جواب سوال اینه که به پین های قطعه نگاه می کنیم در صورتی که روی پینهای قطعه اسم های SCL و SDA وجود داشت پروتکل ارتباطی اون قطعه I2C هست.

حالا قطعه هایی رو که پروتکل ارتباطیشون I2C هست چجوری به آردوینو وصل کنیم ؟آیا پین خاصی دارن ؟
مطابق جدول زیر این قطعه ها رو به آردوینو وصل می کنیم :
2016-01-30_16-39-40

یعنی اگه با آردوینو UNO کار می کنید باید به پایه های آنالوگ 4 و 5 وصل کنید. اگه با مگا کار می کنید به پایه های دیجیتال 20 و 21 وصل کنید و الی آخر.

ما روی UNO کار می کنیم بنابراین به پایه های آنالوگ 4 و 5 وصل می کنیم . دقت کنین که ترتیب پایه ها تغییر نکنه که اگه جا به جا بزنین پروژه به هیچ عنوان کار نمی کنه.

خب مدار رو بستید حالا کتابخونه زیر رو به نرم افزار آردوینو اضافه کنید:
LiquidCrystal_I2C

مثل حالت قبل مطابق عکس زیر مثال serialdisplay رو بیارید :
2016-01-30_16-47-28

کدی مثل همون کد قبلی رو به این صورت میبینید (البته من بازم کامنت ها رو پاک کردم ) :
2016-01-30_16-50-17

1: معرفی کتابخونه Wire (در مواقع استفاده از پروتکل I2C صدا زده میشه )

2.معرفی کتابخونه LiquidCrystal_I2C

3.این جا تعداد سطر ها و ستون ها و آدرس I2C نمایشگر معرفی میشه (دقت کنید هر قطعه ای که با I2C کار کنه یه آدرس خاص داره مثلا مال این LCD آدرسش 0X27 هست)

4. بک لایت (نوز زمینه) نمایشگر صدا زده میشه.

بقیه قسمت های کد دقیقا مثل قبله و با همون توشیحات می تونید درکش کنید. کد رو آپلود کنید و استفاده کنید.

همون کیفیت کد با یه کتابخونه متفاوت و البته با سادگی سخت افزار بسیار زیاد اجرا شد.
پایان

جلسه هشتم: آموزش Burn کردن بوت لودر آردوینو

 

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

برای Burn کردن بوت لودر به یه پروگرامر avr احتیاج داریم. این پروگرامر می تونه هر چیزی باشه. مثلا usbtiny یا stk500 یا usbasp و یا هر پروگرامر مناسب دیگه ای. ما تو این جلسه از پروگرامر ارزون usbasp استفاده می کنیم.
ATMEL_AVR_Programmer_USBisp-500x500

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

خب تا این جا فقط داشتیم پروگرامر رو مهیا می کردیم. این قسمت قراره پروگرامر رو به برد آردوینو وصل کنیم. برای این کار از پین های ICSP آردوینو استفاده می کنیم. پین هایی که میگیم ( و توی شکل زیر مشخص شده) 6 تا پین هدر مربوط به ارتباط SPI میکرو هست.
ArduinoUno_r2_front450px

برای وصل کردن پروگرامر usbasp به آردوینو از شکلهای زیر استفاده کنید:
USBasp_ISP_KANDA

ArduinoUno_R3_Pinouts

دقت کنید که پین های متناظر باید به هم وصل بشن. یعنی مثلا miso به miso، زمین (GND) به زمین، Vcc به Vcc و الییییی آخر. اما این وسط یه نکته کلیدی داریم. به پین های usbasp ردیف پایین دقت کنید. 4 تا گراند (زمین) داره. شاید تو دید اول فکر کنین همه این 4 تا گراند به هم وصلن در صورتی که اصلا اینطور نیست. از بین این 4 تا فقط دو تا گراند سمت چپ به هم وصلن و اون دوتای دیگه نه به هم وصلن نه به این دو تا. بنابراین تنها نکته کلیدی برای موفقیت اینه که همه این گراندها رو به هم  وصل کنید.
خب بخش سخت افزاری تموم شد از این جای داستان به بعد به بخش نرم افزاری می رسیم. usbasp رو بزنید به پورت USB کامپیوترتون. ازتون برای نصب درایور می خواد. این درایور. اگه بلد نیستید درایور نصب کنید برید اینجا قدم به قدم باهاش پیش برید.

بعد از نصب درایور وارد محیط آردوینو بشید. از منوی Tools وارد Board بشید. این جای داستان خیلی مهیجه. اگه قصد دارید بوت لودر مربوط به UNO رو Burn کنید نوع بردتون رو UNO بزارید. اگه قصد دارید بوت لودر مربوط به MEGA رو Burn کنید نوع بردتون رو MEGA انتخاب کنید و الی آخر.
SDSD

مرحله بعد توی همون منوی Tools وارد گزینه Programmer بشید و usbasp رو انتخاب کنید:
dfdf

و اما قدم آخر:
گزینه burn bootloader رو بزنید.
121212121212

دو تا عکس آخر مراحل burn شدن رو نشون میده:
sasasasass
daddaddad

اینم از burn کردن بوت لودر به ساده ترین روش ممکن. البته این راه تنها راهی نیست که بشه باهاش بوت لودر burn کرد. مثلا اگه از پروگرامرهای usbtiny استفاده کنید نصف راهی که اومدیم خودش آماده و حاضره. مستقیم وصلش می کنیم به آردوینو و burn می کنیم.

جلسه چهارم: نرم افزار Arduino

به نام خدا
میریم سراغ جلسه چهارم: آموزش نرم افزار آردوینو.
دوستان اول جلسه اعلام میدارم که اگر در تشخیص عکس ها مشکل داشتید روی اون ها کلیک کنید لطفا.
تا این جای کار داشتیم میگفتیم میکروکنترلر چیه؟ بعد رفتیم سراغ AVR و آردوینو. جلسه پیش هم کلا تو داستان معرفی برد آردوینو بودیم. تا الان هر چیزی که گفتیم تو زمینه سخت افزار بود این جلسه کلا در مورد نرم افزار و نحوه کد نویسی صحبت می کنیم.
قدم اول اینه که نرم افزار رو نصب کنیم پس برید به این لینک و ورژن آخر رو نصب کنید(ماشاءالله این جماعت روز به روز ورژن میدن بیرون بنابراین نمیشه بگی کدوم ورژن).

شما با هر سیستم عاملی که کار کنید میتونید فایل نصبی مورد نظرتون رو پیدا کنید. حالا یه سری از دوستان ویندوزی، ادمین نیستن یعنی نمیتونن فایل EXE نصب کنن، به شما دوستان غیر ادمین هم فکر شده و میتونید فایل ZIP دانلود کنید و توی یکی از درایوهای مورد نظرتون کپی کنید.
تا این جای جلسه فرض بر اینه که شما تونستید نرم افزار رو نصب کنید.

imgres

خب نرم افزار رو که باز می کنید با محیطی شبیه شکل زیر مواجه میشید:
1

به جای این که بیایم تک تک قسمت های نرم افزار رو معرفی کنیم و بعدا هم یادمون بره کدوم قسمت کجا استفاده میشد منوی بالای نرم افزار رو بیخیال می شیم فعلا میریم سراغ کلیات نرم افزار و 5 تا کلید اصلی اون. اسم این نرم افزار اسکچ (Sketch) هست (در آینده از این اسم استفاده خواهیم کرد).

خب به ترتیب از سمت چپ شروع میکنیم:
Untitledاین کلید کامپایله. یعنی شما برنامه رو نوشتید و قصد دارید عیب یابی کنید(کامپایل کنید) اینو میزنید، خطاهای برنامه رو براتون معین می کنه.

Untitledاین کلید مربوط به آپلود کردنه یعنی شما کد رو نوشتید و آماده آپلود هستید، این کلید رو بزنید و از انجام پروژتون لذت ببرید. البته این کلید قبل از آپلود کردن یه بار کامپایل میکنه و اگه خطایی در کدنویسی پیدا نکرد بعد آپلود میکنه.

Untitledبرای باز کردن فایل جدید اسکچ باید از این کلید استفاده کنید.

Untitledاین کلید برنامه های از پیش نوشته شده رو باز میکنه (open کردن).

Untitledوقتی کد می نویسید باید هر ثانیه به این فکر کنید که ممکنه یه بلای ناگهانی نازل بشه و اسکچ شما بسته بشه. این امر مساوی هست با این که بهتون بگن مثلا 100 خط کد شما پریده و این دقیقا مساوی هست با ایست قلبی. برای پیشگیری از این موضوع با زدن این کلید کدهاتون رو ذخیره(Save) کنید.

الان میریم سراغ آپلود کردن اولین کد توی آردوینو: پروژه LED چشمک زن.
قدم به قدم باهم بریم جلو.
1. کابل USB رو به آردوینو و پورت USB کامپیوتر وصل کنید.
connected-arduino-uno
2. تو این مرحله باید به آردوینو پورت COM اختصاص داده بشه. معمولا اینطوریه که به محض کانکت کردن کابل USB خود سیستم عامل شروع می کنه به نصب درایور و بعد از اتمام نصبش یه پورت COM مثلا COM4 بهش اختصاص میده( اگه دوستان در اختصاص پورت COM مشکل داشته باشن در آینده یه جلسه کوتاه به این قضیه اختصاص می دیم.)

3. مرحله بعد که مرحله نیمه نهاییه اینه که بریم توی مثال های(Examples) نرم افزار آردوینو و برنامه چشمک زن رو بیاریم. نرم افزار رو باز کنید و برید توی File
1
از اونجا گزینه Examples بعد Basics و در آخر Blink رو انتخاب کنید.
2

بعد از انتخاب این برنامه صفحه اسکچ زیر براتون باز میشه(در مورد خطوط کد نویسی در آینده صحبت می کنیم):
11

4.و اما مرحله فینال آپلود کردن کد.
اول لازمه که تنظیمات برد رو انجام بدید. این تنطیمات دوتا مرحله داره. تنظیم برد مورد استفاده و پورت com. برای انتخاب برد آردوینویی که استفاده می کنید برید به منوی Tools و از گزینه Board آردوینویی رو که دارید باهاش کار میکنید انتخاب کنید مثلا arduino UNO.
56565

بعد بیاید توی همون منوی Tools و از گزینه Port اون پورت کامی که در مرحله 2 بهتون اختصاص داده شده بود رو انتخاب کنید.
777777777777777777

برای پایان این پروسه کد رو کامپایل کنید اگر خطای کد نویسی نداشتیدآپلود کنید.
سشسشس

حالا از کجا بفهمیم کد توی برد آپلود شده؟
در صورتی که کد به درستی کامپایل بشه قسمت پایین اسکچ پیغام “Done Uploding” نمایش داده میشه:

ww

حالا به بردتون نگاه کنید. یه LED چشمک زن با فاصله زمانی 1 ثانیه داره چشمک میزنه.

روندی که بالا گفتیم پروسه آپلود کردن کد توی برد آردوینو هست. شما هر کد دیگه ای هم که داشته باشید می تونید با این روند توی برد آردوینو خودتون آپلود کنید.

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

پایان جلسه

جلسه سوم : سخت افزار آردوینو

به نام خدا موضوع این جلسه، آموزش سخت افزار آردوینو هست که بیس آموزش، آردوینو UNO است.

ArduinoUno_R3_Front (1)

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

1
USB connector(قسمت زرد رنگ):
با این پورت آردوینو با کابل USB به کامپیوتر وصل می شه. حالا چه احتیاجی به این کابل USB وجود داره؟
1. تامین ولتاژ مصرفی آردوینو، به زبان ساده تر یعنی روشن کردن آردوینو.
2.پروگرام کردن آردوینو با همین کابل انجام میشه یعنی فقط کافیه کد رو داشته باشیم کابل USB رو وصل می کنیم و آپلود می کنیم.
3.ارتباط سریال بین کامپیوتر و آردوینو (این قسمت مربوط به بخش برنامه نویسی است که در جلسات آینده مورد بحث قرار می گیرد.)

سوکت آداپتور (قسمت صورتی رنگ) :
هروسیله ای برای روشن شدن به ولتاژ یا به اصلاح عامیانه تر برق احتیاج داره. آردوینو هم از این قاعده جدا نیست. برای روشن کردن آردوینو چند تا راه داریم. اولین راه همون کابل USB بود. حالا فرض کنید یه مدار با آردوینو بستیم که قراره توی یه مطب یا توی بانک ازش استفاده بشه. اگه قرار باشه تنها راه روشن کرد آردوینو کابل USB باشه، باید همه جا دنبال خودمون لپتاپ هم ببریم که منطقی نیست. حالا اومدن توی بردهای آردوینو یه سوکت قرار دادن که میشه به اون سوئیچ آداپتور وصل کرد و با همون ولتاژ مصرفی آردوینو فراهم میشه.
آداپتور-مودم-12-ولت-2-آمپر-شارژر-منبع-تغذیه-12v-2a-آداپتور-مودم-آدپتور-سوئیچ-هاب-آداپتور-هارد-آداپتور-12-اداپتور آداپتور ها ولتاژها وجریان های متفاوتی دارن. حواستون باشه اینطوریا هم نیست که هر ولتاژی دوست داشته باشیم به آردوینو بدیم. معمولا آداپتورهای 5 ولت یا 9 ولت به آردوینو وصل کنید. شدیدا پیشنهاد میکنیم که 12 ولت به آردوینو وصل نکنید چون در طولانی مدت مجبور می شید باهاش خداحافظی کنید.
حالا اومدیم یه بنده خدایی پیدا شد می خواست مدارشو برداره ببره وسط صحرا باهاش کار کنه و لپتاپ هم نتونه ببره. وسط صحرا ؟ پریز برق واسه آداپتور ؟راه حل: پایه vin (در مورد این پایه بعدا توضیح داده میشه).

منبع تغذیه (قسمت نارنجی رنگ):

Untitled
برای توضیح پین های این قسمت با مثال میریم جلو. فرض کنید دو تا سنسور داریم یکی دما یکی فشار. سنسور دما 5 ولت و سنسور فشار 3.3 ولت برای روشن شدن احتیاج دارن(همون VCC). از کجا ولتاژ بیاریم؟
اگه با avr کار کنیم باید دوتا رگولاتور 5 ولت و3.3 ولت بزاریم تا از خروجی این رگولاتورها به سنسورها ولتاژ بدیم ( اگه ولتاژ بیشتر از حد تحملشون بهشون داده بشه می سوزن).

حالا اگه با آردوینو کار کنیم این دوتا رگولاتوری که ازشون حرف زدیم به صورت پیش فرض روی خود برد قرار گرفته و خروجی 5 ولت و 3.3 ولت آماده و حاضر وجود دارن. یعنی اگه شما با یکی از راه های قبلی (کابل USB یا آداپتور) خود آردینو رو روشن کرده باشین روی این دو تا پایه ولتاژهای 5 ولت و 3.3 ولت آماده استفاده هستن (شک دارید ولتمتر بزارید).
علاوه بر این، دو تا پایه زمین (GND) هم داره. برای روشن شدن سنسور علاوه بر ولتاژ دادن باید پایه گراند هم متصل باشه در غیر این صورت با وجود وصل بودن vcc سنسور روشن نمیشه.

تا الان تکلیف 4 تا پایه روشن شد حالا میریم سراغ پایه Vin. تو قسمت سوکت آداپتور یه اشاره کوچیکی کردیم. فرض کنید یه پروژه داریم که باید دمای هوای صحرا در طول یک روز اندازه گیری بشه و به ایستگاهی در فاصله یک کیلومتری فرستاده بشه. پس باید به مدت یک روز آردوینو و سنسور دما و فرستنده بی سیم توی صحرا کار گذاشته بشن. وسط صحرا نمی تونیم با آداپتور آردوینو رو روشن کنیم (پریز برق نداریم خب) میریم سراغ کابل USB. برای استفاده از کابل باید لپتاپ ما بتونه به مدت یک روز شارژ نگه داره! عملا با دو روش قبلی کاری از پیش نمیبریم.
یعنی پروژه کنسل ؟ خیر میریم سراغ پایه Vin. میشه با باتری هم آردوینو رو روشن کرد . باتری دو تا خروجی داره : ولتاژ و زمین. کافیه خروجی ولتاژ باتری به پایه Vin و گراندش به گراند آردوینو وصل بشه. البته مثل آداپتور اینجا هم مجاز نیستیم هر ولتاژی بهش بدیم. سایت سازنده خودش پیشنهاد کرده ماکزیمم 12 ولت بهش بدید ( زیر 5 ولت هم قاعدتا نباید بهش ولتاژ داد).
البته پایه Vin یه کاربرد دیگه هم داره. وقتی ولتاژ آردوینو با آداپتور فراهم بشه روی این پایه همون ولتاژ آداپتور میوفته یعنی اگه آداپتور 9 ولت وصل کرده باشید روی این پایه ولتاژی حدود 9 ولت میوفته. زمانی هم که آردوینو با کابل USB روشن بشه روی پایه Vin تقریبا 5 ولت میوفته.

و اما پایه IOREF. سطح منطقی ای که برد باهاش کار میکنه روی این پایه میفته. مثلا آردوینو UNO روی پین های ورودی خروجیش با سطح منطقی 5 ولت کار میکنه ولی آردوینو DUE با ولتاژ 3.3 ولت کار می کنه.

در مورد پایه ریست پایان همین جلسه در قسمت کلید ریست توضیح میدیم.

ورودی و خروجی های دیجیتال (قسمت سبز رنگ):

Untitled
قبل از این که وارد موضوع اصلی بشیم شاید یه عده معنی دیجیتال و آنالوگ رو ندونن .اون دوستان برن اینجا یه دوری بزنن و بیان.
آردوینو 14 تا پین دیجیتال داره از D0 تا D13. این پین ها هم به عنوان ورودی هم به عنوان خروجی تعریف میشن. یه موقع دنبال این هستیم که رله خاموش روشن کنیم پس پین به عنوان خروجی در نظر گرفته میشه. بعضی موقع ها یه سنسور دیجیتال داریم (مثل سنسور تشخیص حرکت) در این شرایط پین به عنوان ورودی تعریف میشه.
یه نکته ظریفی این وسط وجود داره. درسته موتورها هم با پایه های دیجیتال کار میکنن ولی هر پایه آردوینو فقط 40 میلی آمپر جریان داره پس عملا موتور راه انداختن با آردوینو به تنهایی کار جالبی نیست و باعث سوختنش می شه.نه تنها موتور، هر سنسوری که جریانی بیشتر از تحمل آردوینو بکشه باعث سوختنش میشه. روی هر پین آردوینو هم PULL UP داخلی وجود داره که اگه پایه به عنوان ورودی در نظر گرفته بشه با برنامه نویسی میتونیم ازش استفاده کنیم.
بعضی از این 14 تا پین آردوینو علاوه بر دیجیتال بودن ویژه گی های دیگه ای هم دارن که توضیحشون همینجاست و جلسه های بعدی روی هر کدوم ازاونها پروژه انجام میدیم.
1- پایه های سریال (Rx & Tx) : پایه های D0 و D1 آردوینو به صورت پیش فرض به عنوان پایه های ارتباط سریال در نظر گرفته شدن. پروگرام کردن آردوینو از طریق کامپیوتر هم از طریق همین 2 تا پین صورت میگیره. طوری که وقتی آردوینو در حال پروگرام شدنه این دو تا پایه که به دو تا led وصل هستن شروع به چشمک زدن می کنن. خیلی کم پیش میاد از این دو تا پایه به عنوان پین های دیجیتال در حین انجام پروژه استفاده بشه. مثلا فرض کنید بیایم به پایه های D0و D1 رله وصل کنیم و با کد نویسی اون ها رو خاموش و روشن کنیم، در حین مسیر آپلود کردن کد تو نرم افزار آردوینو یه ارور میده چرا که پین هایی که برای پروگرام کردن لازم داره ما بهشون رله وصل کردیم و استفاده شدن. بنابراین اول رله ها رو جدا می کنیم بعد پروگرام می کینم و دوباره رله ها رو وصل می کنیم. خب چه کاریه؟ از اول به دو تا پین دیگه وصل می کردیم تا این مکافات کندن و وصل کردن رو نداشته باشیم.
حالا اومدیم و مجبور شدیم با ماژولی(مثل بلوتوث) کار کنیم که ار تباطش با آردوینو از نوع TTL بود، یعنی مجبور بودیم از پایه های Rx و Txاستفاه کینم. واقعا باید برای هر بار کد آپلود کردن دائم سیم جدا کنیم و وصل کنیم؟ جواب منفیه
شما میتونید به صورت نرم افزاری پین های ارتباط سریال رو اضافه کنید. البته نمیتونید از هر پین دلخواهی هم استفاده کنید. بسته به اینکه روی کدوم نوع آردوینو کار می کنید این پین ها متفاوت هستن. به این ترفند SoftwareSerial میگن که در آینده نزدیک روش مانور خواهیم داد.

2- اینتراپت (وقفه):
اول بخونید ببینید اینتراپت چیه.
در مورد کیس خاص ما یعنی آردوینو UNO دو تا وقفه خارجی روی پین های D2و D3 وجود داره که میشه با برنامه نویسی ازاونها استفاده کرد. روال کلی وقفه اینطوریه که وقتی روی پین D2 سیگنال بیفته (به عبارتی trigger بشه) میکرو دست از اجرای هر کاری بکشه و بره یه عملیات مخصوص وقفه انجام بده(اصطلاحا میگن تابع  وقفه رو انجام بده). برای مثال فرض کنید کد اصلی روی میکرو شمارش اعداد باشه، حالا ما یه وقفه تعریف کنیم که اگه پایه D2 توسط یه رله خارجی تحریک شد پیغام “Relay ” رو چاپ کنه روی lcd. برنامه رو استارت می کنیم. میکرو شروع میکنه به شمارش 1 ، 2 ،3 و همینطوری میره جلو روی عدد 8 رله را روشن میکنیم بنابراین در اون لحظه پایه D2 تحریک شده وتابع مربوط به وقفه باید انجام باشه بنابراین در عدد 8 متوقف میشه میره پیغام “Relay ” رو روی lcd نشون میده و بر میگرده در ادامه شروع میکنه 9 ،10 ،11 و….
شکل کلی یک پالس به صورت زیره:

clk
همونطور که از شکل معلومه هر پالس لبه بالارونده و لبه پایین رونده داره. وقتی از وقفه صحبت می کنیم می تونیم تعیین کنیم پالسی که به پایه D2 داده میشه روی کدوم لبه حساس باشه. یعنی اگه به لبه بالارونده پالس رسید زیر برنامه وقفه اجرا بشه یا روی لبه پایین رونده. حتی میشه تعیین کرد به ازای هر تغییری که در سطح منطقی بوجود میاد زیر برنامه اجرا بشه.

3- 6 تا پین از 14 پین دیجیتال آردوینو UNO به صورت PWM هم کار میکنن. پین های 3، 5، 6، 9، 10 و 11. وقتی از PWM صحبت می کنیم یاد راه اندازی موتورهای DC می افتیم. ما میتونیم با استفاده از مد کاری PWM به موتورهای DC سرعت چرخش متفاوتی بدیم. با نحوه عملکرد این مد توجلسات آینده با جزئیات بیشتر و دقیق تر آشنا میشیم.

4- هر سنسوری برای برقراری ارتباط با پردازنده از یه پروتکل استفاده میکنه. بعضی ها از SPI و بعضی ها از I2C استفاده می کنن (البته یه سری از سنسورها هم ساده تر ازاین حرفا راه اندازی میشن که بعدا می بینیم). روی برد آردوینو برای هر کدوم از این دوتا پروتکل ارتباطی، پین های مشخصی در نظر گرفته شده.
اول در مورد ارتباط I2C حرف میزنیم. کلا اگه بخواهیم تشخیص بدیم سنسوری که قراره باهاش کار کنیم I2C هست یا نه کافیه به پین هاش نگاه کنیم اگه SCL و SDA داشت زدیم وسط خال. قدم بعد از تشخیص پروتکل ارتباطی سنسور، اینه که وصلش کنیم به آردوینو. برای آردوینو UNO از پین های آنالوگ A4 و A5(تو همین جلسه میگیم کجاس) استفاده میکنیم ولی بقیه مدل های آردوینو دقیقا پین هایی به اسم های SCL و SDA دارن. در آینده نزدیک با راه اندازی یه سنسور I2C کامل متوجه میشید داستان از چه قراره.

میایم سراغ SPI .برای تشخیص سنسور SPI دنبال دو تا پین تابلو برگردین: MOSI و MISO. روی برد آردوینو پین های دیجیتال 10 و 11 و 12 و 13 مخصوص پروتکل SPI هستن. ما گفتیم دنبال دوتا پین بگردین الان 4 تا پین باید وصل کنیم چی شد؟ MOSI و MISO پین هایی بود که با دیدنشوم مطمئن می شدیم سنسور از نوع SPI هست ولی در حقیقت این روش ارتباطی با 4 تا سیم داده رد و بدل میکنه به خاطر همین ما هم 4 تا پین معرفی کردیم.

5- پین دیجیتال شماره 13. این پین تو آردوینو خاصه چرا که یه led بهش وصله. گهگاهی توی پروژه هایی که داریم انجام میدیم لازمه برای آلارم یا حتی چک کردن یه LED رو روشن خاموش کنیم. مثلا فرض کنید یا سنسور تشخیص حرکت داریم و هدف اینه که به محض تشخیص هر نوع حرکتی یه آلارم به ما بده. میتونیم از این led داخلی استفاده کنیم تا به محض تشخیص جا به جایی این led روشن بشه.

پین AREF در قسمت آنالوگ توضیح داده خواهد شد.

• ورودی آنالوگ (قسمت آبی رنگ):
Untitled
6 پین بالا ورودیهای آنالوگ برد آردوینو است که با نام های A0 تا A5 مشخص شده اند. بعضی سنسورها مثل فوتوسل انالوگ هستن یعنی داده هاشون به صورت پیوسته تغییر میکنه. بدون شک نمیشه داده این سنسورها رو با پایه دیجیتال خوند پس میایم سراغ پایه آنالوگ.  خروجی سنسور وارد یه مبدل آنالوگ به دیجیتال (ADC) ده بیتی میشه و عددی بین 0 تا 1023 به عنوان داده سنسور مورد استفاده قرار می گیره. این در شرایطی هست که سنسور با ولتاژ 5 ولت کار کنه ( یعنی ماکزیم ولتاژ قابل تحمل اون 5 ولت باشه). وقتی ولتاژ قابل تحمل سنسور پایین تر باشه(مثلا 3.3 ولت) لازمه اون ولتاژ به پایه AREF هم داده بشه تا ولتاژ ورودی مرجع آنالوگ به 3.3 ولت تبدیل بشه. با اینکار رزولوشن تبدیل آنالوگ به دیجیتال بالاتر میره.

حالا یه بنده خدایی پیدا شده توی پروژش اصلا سنسور آنالوگ نداره ولی 15 تا سنسور دیجیتال باید راه بندازه. بالاتر گفتیم که کلا 14تا پین دیجیتال داریم که پین 0 و 1 هم عملا قابل استفاده نیست. بنابراین فقط 12 تا پین دیجیتال باقی میمونه در حالی که ما 15 تا سنسور داریم. یا باید بریم سراغ یه آردوینو دیگه که تعداد پایه هاش بیشتر باشه یا از یه تریک جدید استفاده کنیم . تریک جدید اینه که اون 6 تا پایه آنالوگ میتونن به عنوان دیجیتال هم استفاده بشن. یعنی چی؟
یعنی ما میتونیم به پایه A0 بگیم پایه شماره 14 دیجیتال و تا آخر به A5 بگیم پایه دیجیتال 19. با این کار دقیقا 20 تا پایه دیجیتال داریم که با کم کردن پایه 0 و 1 (به خاطر آپلود کردن کد) عملا 18 تا پایه دیجیتال داریم (هورا شدیم).

کلید ریست (قسمت آبی رنگ):

Untitled

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

جلسه دوم : چرا آردوینو ؟

به نام خدا
وارد جلسه دوم می شیم.
اول باید بدونیم آردوینو چیه؟
به زبان ساده، آردوینو بردیه که از پردازنده و یک سری قطعات الکترونیکی دیگه مثل خازن و مقاومت و رگولاتور و کریستال و … تشکیل شده . آردوینو انواع مختلفی داره که بسته به نوعش، پردازنده ای که روش استفاده شده متفاوته. مثلا روی آردوینو UNO میکروکنترلر مورد استفاده، ATMEGA32 هست. قطعات الکترونیکی که به صورت پیش فرض روی برد آردوینو قرار گرفته، برای راه اندازی ساده تر میکروکنترلر AVR هست که در ادامه در مورد آنها بیشتر توضیح داده میشه. همین قطعات الکترونیکیه که با قرار گرفتن در کنار AVR بردی متفاوت و پرکاربرد را بوجود آورده. ناگفته نمونه بعضی از بردهای آردوینو میکروکنترلر ARM استفاده میکنن.

حالا چرا از خود AVR استفاده نکنیم و بیایم سراغ آردوینو ?
کسانی که با AVR کار کرده باشن خوب میدونن، حتی اگه بخوای یک پروژه LED چشمک زن ساده هم راه اندازی کنی علاوه برخود AVR به یک سری سخت افزار جانبی مثل رگولاتور و کریستال و سیم بندی واسه تغذیه و زمین کردن(مهم ترین پایه ها) کنترلر AVR نیاز داری. حالا این وسط اگه یه موقع میکرو را بر عکس تو مدار جا بزنی یا اشتباه به یه پایه دیگه اون ولتاژ بدی عملا میکرو می سوزه و تا بخواد دستت بیاد چجوری اشتباه نکنی، عملا مقدار هنگفتی پول خرج کردی و دل زده شدی و الفرار.
این اول داستان نیست. پروگرام کردن AVR هم یه سری مشکلات داره .در بهترین حالت که پروگرامر از نوع USB باشه، باید AVR را از مدار خارج کنی، وصلش کنی روی پروگرامر، کد رو آپلود کنی، دوباره از برد پروگرامر جداش کنی و بزاریش تو مدار ( اگه اشتباه نزاری). اگه از کد نویسی مطمئن باشی و نخواد به خاطر یه اشتباه کوچک کد را عوض کنی 4 مرحله وجود داره تا آپلود کنی.
اینم یک نمونه از پروگرامر که اگه قصد دارید از AVR به تنهایی استفاده کنید باید همه جا دنبالتون باشه .
avr programmer-1
تا این قسمت از جلسه توضیح راه اندازی پروژه LED چشمک زن با AVR بود. از این جای داستان به بعد پروژه LED چشمک زن را با آردوینو پیاده سازی میکنیم .(الان صرفا یک شمای کلی از نحوه کار با آردوینو بیان میشه. جزئیات بحث آردوینو، مطمئنا در جلسات بعدی مطرح خواهد شد.)
خب شروع میکنیم .
قطعات مورد نیاز: برد آردوینو + کابل USB .
سخت افزار همین جا تمام میشه .شما به هیچ چیز دیگری (حتی LED) احتیاج ندارید. رگولاتور و کریستال و همه سخت افزارهای دیگه ای که برای راه اندازی پروژه LED چشمک زن لازمه روی این برد به صورت پیش فرض قرار گرفته. برای آپلود کردن کد کافیه کابل USB رو به آردوینو وصل کنید، در نرم افزار آردوینو با اشاره یک کلید آپلود کنید. یعنی بعد از آماده شدن کد فقط با 2 حرکت می تونید آپلود کنید.
اگر فرض کنیم کسی در کد نویسی وارد نباشه، مطمئنا چندین بار لازمه کد برنامه را تغییر بده. حالا اگه با AVR کار کنه به ازای هر تغییری که در کد بوجود بیاره و بخواد آپلود کنه باید 4 مرحله را طی کنه اما، اگه بخواد با آردوینو پروژه انجام بده هیچ نیازی نداره میکرو از مدار جدا بشه، همونطوری که تمام اجزای مدار سر جاشه کابل USB وصل میشه و برنامه آپلود میشه.
خیلی قابل درکه که پروگرام کردن و ساخت مدار پروژه چشمک زن توسط آردوینو نسبت به AVR کار بسیار ساده تری است.
DEV01158-01-L1401607442538ad512d0411 حالا اگه قصد داشته باشیم در حوزه کد نویسی وارد بشیم و تفاوت ها را در این حوزه هم بیان کنیم، یه بار دیگه برمی گردیم به پروژه LED چشمک زن. اگر بخواهیم با نرم افزار های مخصوص AVR کد نویسی کنیم، اول برنامه(هدر برنامه) باید تعدادی تابع را include کنیم تا بتونیم از توابع مورد نیاز استفاده کنیم. بعد برای این که پین میکرو را 0 و 1 کنیم (تا LED روشن و خاموش بشه) اول باید به ریجسترها مقدار بدیم تا اون پین خروجی بشه، بعد پایه را 0 و 1 کنیم. ریجسترهایی که استفاده میشه معمولا اسم هایی دارن که به خاطر سپردنشون برای بعضی افراد کار مشکلیه .
حالا اگه بخواهیم همین کد رو توی آردوینو بنویسیم نه نیازه تابعی را include کنیم نه به ریجستری مقدار بدیم .با یک خط کد نویسی پین به عنوان خروجی در نظر گرفته میشه. دستوری که با اون پین را معرفی می کنیم، دستور pinMode هست که به خاطر سپردنش کار ساده ایه. در نرم افزار آردوینو کدنویسی به زبان ++c است.
برای مقایسه، دو تا کد میزاریم اولی کدنویسی AVR است:

define F_CPU 4000000UL#
 <include <avr/io.h#
 <include <avr/delay.h#
 "include “myTimer.h#
 (int main (void
 }
 ;DDRC = 0xFF
 } (while(1
 ;(PORTC |=(1<<0
 ;(delay_ms(250
 ;(PORTC &= ~(1 << 0
 ;(delay_ms(250
 ;{
 {

دومی کد نویسی آردوینو است:

}()void setup
 ;(pinMode(13, OUTPUT
 {
 }()void loop
 ;(digitalWrite(13, HIGH
 ;(delay(250
 ;(digitalWrite(13, LOW
 ;(delay(250
 {

 

پایان این جلسه را اعلام میکنیم.
در صورت داشتن هر گونه سوالی به لینک فروم در آفتاب رایانه مراجعه کنید.