پایه ها در آردوینو – آموزش آردوینو جلسه سوم
قراره با پایه ها در آردوینو آشنا بشیم و اولین پروژه ی آموزش رو هم ببندیم.
بی مقدمه بریم سراغ مطلب:
انواع پایه ها در آردوینو:
پایه ها در آردوینو 2 نوع هستند.پایه های دیجیتال و آنالوگ .
- پایه های دیجیتال به شکل ورودی و خروجی تعریف میشن و پایه های آنالوگ فقط ورودی هستند. بصورت پیش فرض تمامی پایه ها به صورت ورودی تعریف شدن.
تابع pinMode :
برای تعریف پایه ها به صورت ورودی یا خروجی از تابع pinMode استفاده می کنیم:
1 |
;pinMode(pin,mode) |
(زبان کدهامون گفتیم شبیه به زبون c/c++ هست ، پس باید حواستون به حروف کوچیک و بزرگ باشه چون کامپایلر به حروف کوچیک و بزرگ حساسه و هرکدوم رو یک معنی تشخیص میده)
در این تابع:
pin: شماره پایه
mode: حالت پایه است که به صورت ورودی INPUT یا خروجی OUTPUT تعریف میشه.
مثلا:
توی کد زیر پایه ی 13 رو به اسم ledPin معرفی کردیم و توی خط بعد خروجی تعریفش کردیم:
1 2 |
int ledPin=13; pinMode(ledPin,OUTPUT); |
پول آپ (pull up) وپول دون (pull down) پایه ها در آردوینو
در حالت خروجی امپدانس پایه ها در حالت پایین قرار میگیرند . خب یعنی پایه ها می تونند جریان تا حدود 40mA بدن که برای روشن کردن یک LED کافیه. اما برای راه اندازی رله یا موتور حتما باید از تقویت کننده های جریان مناسب استفاده کنیم.توجه داشته باشید که اگر زیادی از پایه ها جریان بکشید ، ممکنه ترانزیستور های داخلی پایه ها بسوزه یا حتی باعث سوختن کامل تراشه بشه. پس بهتره با سری کردن یک مقاومت 220 اهم یا یک کیلو اهم جریان خروجی رو محدود میکنیم.
در حالت ورودی پایه ها امپدانس بالایی نشون میدن (حدود 100 مگا اهم) و وقتی نمونه برداری میکنید و مثلا از یک سنسور سیگنال میگیرین جریان کمی رو از مدار میکشه که اون رو برای ارتباط با انواع سنسورها مناسب میکنه.
توی حالت ورودی پس پایه ها جریان کمی میکشن که اگر به مدار دیگری متصل نباشن ، مقدار اونها به صورت تصادفی تغییر میکنه و مطلوب ما نیست، برای حل این مشکل پایه هارو به مقدار ولتاژ مشخصی وصل میکنیم که این کار رو میشه با pullup کردن چه داخلی و چه خارجی انجام داد.(یعنی 2 مدل پول آپ داریم، داخلی و خارجی)
چون پول آپ خارجی شبیه به میکرو ها و قطعات دیگه ی الکترونیکه ، اینجا فقط پول آپ داخلی رو معرفی میکنیم، که اکثر مواقع همین روش هم بهترین روشه.
پول آپ داخلی پایه ها در آردوینو:
تابع digitalWrite :
در پایه های آردوینو پول آپ داخلی با دستور digitalWrite انجام میشه:
1 |
digitalWrite(pin,value); |
در تابع فوق
pin: شماره پایه
value :با دو مقدار HIGH (فعال کردن مقاومت بالاکش یا پول آپ) و یا LOW (غیرفعال کردن مقاومت بالاکش یا پول دون) انجام میشه.
اگر پایه ها را به صورت خروجی تعریف کنیم، HIGH به معنای یک شدن 5V و LOW به معنای صفر شدن 0V پایه هستش.
خواندن مقدار پایه ی دیجیتال در آردوینو : تابع ()digitalRead :
خواندن مقدار پایه ی دیجیتال هم با تابع digitalRead() انجام میشه که شماره پایه ی دیجیتال رو به صورت ورودی میگیره و صفر یا یک بودنش رو به صورت خروجی تحویل میده.
وقتشه از چند تا پروژه ساده شروع کنیم کارکردن با آردوینو رو.
اینکه این نرم افزارو از کجا دانلود کنیم توی بخش نرم افزار مطلب: آموزش برنامه نویسی آردوینو – جلسه اول : معرفی آردوینو گفته شد.
توی ورژن های قدیمی آردوینو باید بعد از نصب IDE ، بعد از اتصال برد به کامپیوتر صبر میکردین تا درایور از اینترنت دانلود بشه! اما توی ورژن های اخیر همراه با نرم افزار درایور ها هم بدون دردسر نصب میشن! اگه شما هم مثل من آردوینو UNO خریدین ، بعد اتصال اون به کامپیوتر 2 تا LED میبینید که روشن میشه، یکی دائمی و یکی هم حالت چشمک زن .
Led ای که با حالت دائمی روشنه نشانگر روشن بودن برد و اتصال VCC هستش و اون چشمک زنه ، هم به پایه ی 13 بردتون وصله که شرکت برای تست برد روی اون یک برنامه ریخته و به شما سالم بودن بردتون رو گوش زد میکنه ، این Led بجز روی برد UNO روی بردهای Zero و Mega هم وجود داره.
اگه بردتون رو بار اول نیست به کامپیوتر وصل میکنید . خودتون میتونید برنامه ی Blink زیر رو روی بردتون بریزید تا این عمل چشمک زدنِ led پایه ی 13 رو ببینید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int ledpin=13; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. //levinic.ir pinMode(ledpin, OUTPUT); } // the loop function runs over and over again forever //levinic.ir void loop() { digitalWrite(ledpin, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(ledpin, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } |
خروجی این برنامه توی نرم افزار شبیه ساز پروتئوس این شکلی میشه:
برای ریختن هر برنامه ای روی برد آردوینو باید به 2 تا نکته حتما توجه کنید.
- پورتی که بردتون از طریق USB به اون متصل شده رو به IDE معرفی کنید .
- اسم دقیق بردتون رو به IDE معرفی کنین.
که براتون نحوه ی انجام هر 2 کار رو توی تصاویر زیر نشون دادم.
بعد از نوشتن کد و تنظیم port و مشخص کردن مدل بردتون توی نرم افزار باید اون رو با استفاده از کلید های زیر ، کد رو کامپایل کنید و روی آردوینو بریزید:
با زدن کلید verify اول از شما میخواد که پروژه رو سیو کنید، بعد کد شمارو خطایابی میکنه. اگر صحیح بود که هیچی، اگر نبود باید ارور هایی رو که میده رفع کنید. بعد از رفع ارور ها با زدن گزینه آپلود (فلش) کد شما روی برد ریخته میشه!
بریم سراغ توضیحات برنامه ای که نوشتیم!
به کدی که بالا نوشتیم و شما توی محیط IDE نوشتین توجه کنید:
برنامه نویسی تووی آردوینو 3 بخش کلی داره ،
- پیش پردازنده ها
- حلقه setup
- حلقه loop
1 2 3 4 5 6 7 8 9 |
pre processor’s void setup() { } void loop(){ } |
پیش پردازنده ها:
توی بخش پیش پردازنده ها مثلا کتابخونه هامون رو صدا میزنیم یا متغیرهایی که محلی نیستن رو تعریف می کنیم.(توی کد بالا این کارو کردیم)
حلقه ی setup:
توی بخش setup کارهایی که باید یکبار انجام بشه رو تعریف میکنیم، مثلا یکبار لازمه که بگیم پایه ها ورودی یا خروجی باشن، یا مثلا به برد میگیم که میخوایم از سریال استفاده کنیم(سریال رو بعدا توضیح میدم چیه).
حلقه ی loop:
و حلقه ی loop که یک حلقه بی نهایته و کارهایی که میخوایم همیشه انجام بشه رو اونجا مینویسیم، مثلا اگر قرار باشه یک دماسنج به برد وصل کنیم این کار نیاز به این داره که تمامی لحظات ،آردوینو دما رو از دماسنج بگیره و به ما نشون بده! در نتیجه باید توی حلقه بی نهایت عمل خوندن اطلاعات رو انجام بدیم تا این عمل در هر لحظه انجام بشه!( اینطوری همیشه انجام میشه اما اگر توی Setup بنویسیم فقط یکبار این کار انجام میشه که بدرد نمیخوره و متوجه تغییرات نمیشیم).
اگر دم دستتون LED دارین (یا شبیه سازی) میتونید Led رو بین یک پایه ی دیجیتال دیگه و زمین (پایه ی GND ) وصل کنید و بجای عدد 13 ، عدد اون پایه رو قرار بدین و چشمک زدن پایه هایی غیر 13 روهم تست کنید و ببینید.
delay هم که تابع تاخیره ، و هرعددی که داخل پرانتزش بنویسید بر حسب میلی ثانیه بین روشن و خاموش بودن فاصله میندازه.
و پروژه دوم که توضیح نمیدمش تا خودتون تحلیلش کنید، اما اگر سوالی درموردش داشتین بپرسین:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
int switchstate = 0; void setup() { pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(2, INPUT); } void loop() { //levinic.ir switchstate = digitalRead(2); if (switchstate == LOW) { digitalWrite(3, HIGH); // turn the green LED on pin 3 on digitalWrite(4, LOW); // turn the red LED on pin 4 off digitalWrite(5, LOW); // turn the red LED on pin 5 off } //levinic.ir else { digitalWrite(3, LOW); // turn the green LED on pin 3 off digitalWrite(4, LOW); // turn the red LED on pin 4 off digitalWrite(5, HIGH); // turn the red LED on pin 5 on delay(250); digitalWrite(4, HIGH); // turn the red LED on pin 4 on digitalWrite(5, LOW); // turn the red LED on pin 5 off delay(250); //levinic.ir } } |
که میتونید فایل شبیه سازی اون با نرم افزار پروتئوس رو هم دانلود کنید:
امیدوارم مفید بوده باشه. موفق باشید
سلام بزرگوار.
جدا خسته نباشید. در عین سادگی و شیوایی بیان، بسیار کاربردی آموزش داد اید. بی نهایت سپاسگزارم.
سلام اقا مهدی.ممنون. خوشحالم که کمکتون کرده
موفق باشید 😊
سلام یک سوال ! میشه بگید کاربرد _ int_ چیه ؟
int یک نوع متغیر هستش
http://levinic.ir/آموزش-برنامه-نویسی-آردوینو-جلسه-دوم/
و اگر کلا با زبان سی آشنایی ندارین:
http://levinic.ir/آموزش-برنامه-نویسی-زبان-c-متغیرها-در-c/
با عرض سلام و تشکر از آموزشهای خوبتون
سؤالي داشتم
من زبان c تقریبا خوبه ولی تا حالا آردونیو کار نکردم
چطور میتونم یک کتابخونه از آردونیو به c تبدیل کنم بهترین راهش چیه
سلام منظورتون از سی فکرمیکنم کار با avr بوده؟
اگر بلدین با سی کتابخونه بنویسین ، زبون اردوینو تفاوت انچنانی با سی نداره و شبیه c++ هستش، کافیه از الگوریتم کتابخونه الگو بگیرین!
سلام برادر خدا قوت
به نظرتون چه بردی بخریم که هم برای شروع خوب باشه هم بعدا بتونیم پروژه های قوی تری باهاش کار کنیم؟
سلام ؛ ممنون
برد نرمال که بتونین باهاش تغریبا همه کار بکنین مدل UNO هستش و به 90 درصد نیاز ها جواب میده . اگر کارهای خاصی بخواین انجام بدین بهتره برین سراغ مگا یا DUE که کمتر پیش میاد. یا حتی برای پروژه های کوچیک آردوینو های مینی هستن و …
خلاصه پیشنهاد من UNO هستش 🙂
سلام وقتتون بخیر
من تازه باآموزش شما همراه شدم واقعا برای فعلا فوق العاده بوده.
میخواستم بدونم این شبیه سازی در پروتئوس که برای برد اردینو انجام دادید در خود کتابخونه نرم افزار پروتئوس نیست از کجا اوردید؟
خودتون طراحی اش کردید؟
برای همه پروژه ها که با این برد هست میشه شبیه سازی رو انجام داد؟
سلام
آره تغریبا میشه ولی خب دقت کافی نداره و باگ زیاد دارن کتابخونه های مختلفی که من امتحان کردم ، بهتره کلا عملی ببنیدن ولی اگر کتابخونه هاشو میخواین سرچ کنین چند تایی هستن…
سلام
عالی بود.
موفق باشید.
یاعلی (ع) مدد
یاحق
سلام مجدد!
ممنون و همچنین
یاا حق 🙂
مهندس آموزش هاتون عالی هستن.
مرسی.لطف داری شما 🙂