آموزش آردوینو – فصل دوم

//آموزش آردوینو – فصل دوم

آموزش آردوینو – فصل دوم

هر فصل از ۱۴ فصل آموزش آردوینوتقدیم میشه به یکی از امامان معصوم.این فصل تقدیم  میشه به:

امام حسین (ع)

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

اینهمه از مفهومی فهمیدن صحبت کردیم حالا میخایم یه کاری بکنیم که مفهومی بفهمیم . در نرم افزار آردوینو به مثال ReadAnalogVoltage برین و اونو بیارین :

کدهاش به صورت زیر هست:

اول کدهاشو یه بررسی بکنیم:

همونطور که تو فصل قبل گفتیم مفروضات رو در قسمت void setup می نویسیم ( اگه نمیدونین چیه فصل قبل رو بخونین)

میگه یه ارتباط سریال درست کن با سرعت ۹۶۰۰ .  این قسمتی هست که خیلی باهاش کار داریم .

اول باید یه ارتباط از نوع سریال بسازیم. ارتباط سریال؟!!

ارتباط سریال چیه ؟ ارتباط سریال در واقع یه نوع پروتکل خاص برای تبادل اطلاعات بین دو تا دستگاهه

پرو تکل چیه؟

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

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

اولی صحبت میکنه و دومی گوش میده و بعد دومی صحبت میکنه و اولی گوش میده.

حدیث از امام حسین (ع) :      

بخشنده‌ترین مردم کسی است که به آنکه چشم امید به او نبسته، بخشش ‌کند.

(کشف ‌الغمّة، ج۲، ص۳۰ )

در پروتکل سریال سه تا پین داریم:

– پین TX

– پین RX

– پین GND

 پین TX در حقیقت همون دهان هست! یعنی وقتی دستگاه میخاد حرف بزنه روی این پین اطلاعاتشو میفرسته!!

  پین RX در حقیقت همون گوش هست! یعنی وقتی اطلاعاتی سمت دستگاه میاد روی این پین گوش میده!

پین GND هم زمین یا گراند هست.

نکته اول!

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

همونطور که گفته شدپین  TX همون قسمتی هست که وقتی دستگاه میخاد اطلاعات رو به یه دستگاه دیگه بفرسته از اون استفاده میکنه.اما باز همین کافی نیست؟

چرا؟!!

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

اگه برابر نباشه چی میشه؟

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

به سرعت ارتباط بین دستگاه ها در پورت سریال باود ریت یا baud rate میگن.مثلا ۱۱۵۲۰۰ یا ۹۶۰۰. اگه تو پروژه های قبل ببینین( تو کانال تلگرام khodet_besazesh@ منظورمه ) سرعت باود ریت رو میتونستیم تغییر بدیم. سرعتهای متفاوتی برای دستگاه های مختلف در نظر میگیرند اما سرعت ۹۶۰۰ خیلی معروفه.

نکته دوم!

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

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

اگه خوب دقت کنین آردوینو شما با کابل یو اس بی به کامپیوترتون متصل شده !!!

عجب! یادم رفته بود!!  خب حالا متصل باشه باز چه ربطی به پورت سریال داره؟

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

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

آقا از این مثال چی رو قراره یاد بگیریم؟

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

خب! بعد این سنسور شما مثلا سنسور دما هست و بر اساس دمایی که این سنسور تشخیص میده به شما یه ولتاژ خروجی میده!

شما این ولتاژ خروجی سنسور رو وصل میکنی به ورودی آنالوگ A0 .

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

تو فصل قبلی(فصل اول) گفتیم که ورودی دیجیتال چیه ولی قرار شد بعدا بگیم که آنالوگ چیه!

آنالوگ:

یادگرفتیم (درفصل ۱) که حالت ها در دیجیتال یا صفر هست یا یک.

اما درآنالوگ , آردوینو ۱۰ بیتی هست .(یعنی ۲ رو ۱۰ بار ضربدر خودش بکنی) اگه نمیدونین۱۰ بیتی و … چیه اعداد ۱۰ بیتی “رو تو اینترنت راجع بهش بخونین بعد بیاین اینجا ادامه بدین . خیلی سخت نیست.

تو دیجیتال مقدارصفر میشد همون صفر ولت و مقدار یک میشد همون ۵ ولت.(آردوینو uno با ۵ ولت کار میکنه).

اما تو آنالوگ فرق میکنه به این صورت که مقدار صفر همون صفر ولت هست ولی مقدار ۵ ولت میشه ۱۰۲۳.بعبارت دیگه ولتاژی که روی پین آنالوگ قرار میگیره زمانیکه صفر ولت باشه ۰ نشون میده و وقت ۵ ولت باشه ۱۰۲۳ نشون میده.اگر ولتاژی بین ۰ تا ۵ ولت باشه یه مقداری بین صفر تا ۱۰۲۳ رو نشون میده. مثلا اگر ۲.۵ ولت داشته باشیم چند باید نشون بده؟ چون ۲/۵ نصف ۵ ولته و ۵ ولت میشه ۱۰۲۳ بنابراین میشه نصف ۱۰۲۳:

۱۰۲۳/۲=۵۱۱.۵

یعنی در حدود ۵۱۱ رو باید نشون بده.

برمیگردیم به قسمت بعدی یعنی void loop:

 این خط میگه که یه متغیری از نوع int یعنی صحیح درست کن (اعداد صحیح مثل ۱,۲,۳و…) و اون متغیر رو اسمشو بذار sensorValue و بعد مقدارش برابر باشه با مقداری که از پورت آنالوگA0 میخونی.

یعنیsensorValue مقدارش برابر مقداری هست که از ورودی آنالوگ A0 (پایه A0 روی بورد آردوینو) دریافت شده. همونطور که گفتیم مقدار آنالوگ دریافتی بین صفر تا ۱۰۲۳ یا به عبارتی بین صفر ولت تا ۵ ولت هست .اما عددی که دریافت میشه بین صفر تا ۱۰۲۳ هست باید یکاری کنیم تبدیل به ولتاژ بشه چجوری تبدیل به ولتاژش بکنیم ؟

اگر مقداری که ازورودی آنالوگ بدست اومده رو ضربدر (۱۰۲۳/۴) بکنیم مقدار ولتاژ درست در میاد. چجوری؟

بیشتر میتونی توضیح بدی؟

بله. ببین فرض کن عددی که بدست اومده ۱۰۲۳ هست پس باید ۱۰۲۳ رو ضربدر (۵/۱۰۲۳) بکنی که جوابش میشه ۵ ولت و بهت میگه که تو ۵ ولت رو دریافت کردی و درست هم هست .

ببین من متوجه شدم ها ولی خیلی خوب نفهمیدم!

 باشه بذار یه جور دیگه بگم .همونجوری که میدونی اگر پین رو بصورت خروجی آنالوگ تعریف کنی میتونی روی اون ولتاژ خروجی قرار بدی. خب فرض کن مثلا میخای ۳.۳ولت رو روی خروجی قرار بدی و با توجه به حرفهایی هم که زدیم میخایم اینکار رو بکنیم.

گفتیم چون آنالوگ ۱۰ بیتی هست و بین صفر تا ۱۰۲۳ قرار داره باید مقداری که میخای که اینجا ۳.۳ هست و میخوای تو خروجی آنالوگ قرار بگیره رو ضربدر ۱۰۲۳ کنی و بعدش تقسیم بر ۵ کنی در نتیجه میشه :

(۳/۳*۱۰۲۳)/۵=۶۷۵

حالا اگه ۵ ولت رو بخوایم بفرستیم چی :

(۵*۱۰۲۳)/۵=۱۰۲۳

اگه صفر ولت رو بخایم بفرستیم چی :

(۰/۱۰۲۳)/۵=۰

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

بریم سراغ بقیه کدها اینجا برعکس مثالی که در بالا زدیم رو داریم .یعنی میخایم از روی مقداری که پین آنالوگ دریافت میکنه ولتاژ رو بدست بیاریم:

خب میگه یه متغیری از جنس float یا اعشاری بنام voltage انتخاب کن که مقدارش برابر sensorValue (که همون پایه آنالوگA0)  , ضربدر ۵/۱۰۲۳ هست بکن.(توضیح دادیم چرا ضربدر ۵/۱۰۲۳ میشه)

آقا یه سوال؟ چرا از نوع اعشار هست؟

برای اینکه ولتاژ دریافتی ممکنه خورده داشته باشه یعنی اعشاری باشه مثل ۴/۴ ولت یا ۲/۳ ولت یا …

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

ابتدا روی علامت زیر کلیک میکنی تا برنامتو نرم افزار چک کنه و ببینه خطایی داری یا نه.اگه اینجا اشتباه کرده باشی ازبرنامه خطا میگیره و معمولا هم بهت میگه کجا خطا داشتی:

بعد از اینکه خطا تو درست کردی یا اگه اصلا خطا نداشتی میتونی برنامه رو روی اردوینو بریزی.برای اینکار روی قسمت زیر کلیک میکنی و برنامه روی آردوینو ریخته میشه :

چجوری تو کامپیوتر ببینیم؟

میتونیم از یه برنامه که از پورت سریال هست بنام hyperterminal استفاده کنیم .قبلا تو ویندوز xp بود اما تو ویندوز ۷ فکر کنم نیست اگه نداشتی میتونی از اینترنت دانلود کنی.اما یه راه خیلی راحت تر و بهتر هم هست و اونم اینه که خود نرم افزار آردوینو این قابلیت رو داره که پورت سریال رو برات نشون بده برای اینکار باید روی این قسمت کلیک کنی:

 وقتی کلیک کردی یه سری عدد میبینی که همینجوری میان و میرن مثل پایین:

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

خب از کجا بفهمیم که برنامه ای که نوشتیم درست کار میکنه یا اینکه بورد درست کار میکنه؟

میتونی بهش یه سنسور متصل کنی و مقدارشو بخونی .مثلا یه سنسور دمامتصل میکنی و بعدش بهش گرما میدی در نتیجه باید مقدار عددی که می بینی تغییر کنه.

الان از کجا سنسور بیارم ؟؟

آهان به مورد خوبی اشاره کردی!!

یادته اول فصل گفتیم که قراره مفاهیم رو متوجه بشیم که بعدا انشاا.. تو پروژه ها خیلی خوب عمل کنیم. من الان سنسور ندارم که!! ازکجا باید بفهمم برنامم درست کار میکنه؟ 

الان بهت میگم.قبول داری که پایه A0 مقدار ولتاژ آنالوگ ورودی رو میخونه ؟

بله

الان چون سنسور نداریم میتونیم یه ولتاژی از خود آردوینو بگیریم وبدیم به پایه ورودی .البته بهتره با یه مقاومت اینکاررو بکنیم .بستگی به بوردی که میخرین ممکنه یه سری ولتاژ روی خود آردوینوباشه . بورد UNO من اون وسط بورد ولتاژ ۵ و ۳.۳ و gnd که همون صفر ولت میشه رو  داره. در نتیجه من میتونم اونها رو امتحان کنم.یه مقاومت ۳۳۰ اهم دارم که یه سرش رو میزنم به پایهA0 و یه سر دیگرش رو هم میزنم به ۵ ولت و نتیجه اونو تو مانیتور پورت سریال میبینم به صورت زیر :

حالا میزنم به پایه gnd (همون صفر ولت) :

اینبار میزنم به پایه ۳.۳ ولت و نتیجه رو بصورت زیر می بینم :

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

بیایم روی یه پایه آنالوگ یه مقداری ولتاژ قرار بدیم و رو یک پایه آنالوگ دیگه اونو بخونیم .باید چیکار کنیم؟ بله باید بصورت زیر اول روی پایه آنالوگ A5 یه مقداری بنویسیم و بعد اونو رو پایه آنالوگ A0 بخونیم پس کد ها به شکل زیر میشه:

اول روی پایه آنالوگ A5 یه مقداری مثلا ۴ ولت رو قرار میدیم :

(۵/۱۰۲۳)* x = 4 ولت

 یعنی x باید چقدر باشه که ضربدر (۵/۱۰۲۳) بشه و برابر با ۴ باشه :

X=4/(5/1023) —->   x=( 1023*4 )/ 5  ——->   ۸۱۸.۴

 یعنی ۸۱۸.۴ که حدودی میشه ۸۱۸ رو در خروجی A5 قرار میدیم و توسط یه مقاومت  پایه A5 رو به A0 متصل میکنیم و مقدار پایه A0 رو میخونیم :

میزنه ۱۰۲۳؟!!  چرا ؟

شاید اشتباه شده یه عدد دیگه میزاریم مثلا ۳۰۰ میزارم :

میزنه ۱۰۲۳؟!!  چرا ؟

برای اینکه تو ورودی  پین های آنالوگ  یه چیزی هست به نام adc . 

Adc مخفف analog digital convertor هست . یعنی اینکه ولتاژ ورودی اگه رو پین باشه اونو تبدیل میکنه به دیجیتال و بعد متوجه میشه که چی هست. همونطور که گفتیم بین ۰ تا ۵ ولت رو تقسیم میکنه به ۱۰۲۳ و بعد متوجه میشه که چند هست.

حالا این بورد ها بر اساس adc ساخته شدند اما برعکسشو ندارند !!  یعنی چی؟

یعنی dac ندارند. بعبارت ساده تر نمیتونین بهش بگین مثلا با دستور (analogWrite(A5,818  رو پین A5 مقدار ۸۱۸ رو قرار بده که بعد اون ۴ ولت قرار بده!!

پس باید چیکار کنیم؟ اون دیگه یه راه حل خاصی داره که اسمش PWM هست و انشا.. توضیح میدیم.

PWM

وقتی PWM رو در اینترنت سرچ میکنین یه عالمه مفهوم مثل مدولاسیون پهنای پالس!! و … میاد که توضیح میده چیه اما میخایم اول مفهومش رو بفهمیم که یعنی چی!

فرض کنید یه هواکش دارین , بله هواکش! و کلید خاموش روشن کردن موتور این هواکش دست شماست.(صرفنظر از اینکه موتور هواکش DC یاAC هست) کلید رو روشن میکنید و شروع میکنه به چرخیدن و بعد کلید رو خاموش میکنین و خاموش میشه.

حالا یبار دیگه روشن میکنین و بعد از چند ثانیه خاموش میکنین اما تا یواش یواش میخاد خاموش بشه دوباره موتور رو روشن میکنین و تا میخاد سرعتش زیاد بشه خاموش میکنین و تا قبل از اینکه کامل خاموش بشه روشن میکنین و به همین ترتیب ادامه میدین . با اینکار میتونین سرعت موتور هواکش رو کنترل کنین یعنی هر چقدر زیادتر بزارین روشن بمونه و کمتر خاموش کنین سرعتش بیشتر میشه.

حالا فرض کنیم که یه بازه  زمانی خیلی کوچیک داریم مثلا ۲۰ میلی ثانیه (دو صدم ثانیه) و میایم این زمان رو به ۴ قسمت تقسیم میکنیم که میشه ۵ میلی ثانیه.

در حالت اول کلید رو روشن میکنیم  ۵ میلی ثانیه و بعد در ۵ میلی ثانیه های بعدی خاموش میذاریم باشه . یعنی ۱از۴رو روشن گذاشتیم و۳از۴ خاموش کردیم. ( یعنی۲۵  درصد روشن بوده)

در حالت دوم کلید رو روشن میکنیم ۵ میلی ثانیه و بعدش ۵ میلی ثانیه دیگه هم روشن میذاریم باشه. یعنی ۲از۴ روشن گذاشتیم و ۲از۴ دیگه رو هم خاموش ( یعنی ۵۰ درصد روشن بوده)

در حالت سوم کلید رو روشن میکنیم ۵میلی ثانیه و بعدش ۵ میلی ثانیه دیگه هم روشن میذاریم باشه و بعدش ۵ میلی ثانیه دیگه هم روشن میذاریم باشه. یعنی ۳از۴ رو روشن گذاشتیم و ۱از۴ دیگه رو هم خاموش ( یعنی ۷۵ درصد روشن بوده)

حالا این کار در ثانیه چند بار انجام میدیم ۵۰ بار که انجام بدیم میشه ۱۰۰۰ میلی ثانیه که میشه ۱ ثانیه. اتفاقی که میفته اینه :

 چون سرعت خیلی زیاده (۵۰ بار در یک ثانیه) در حالت اول خروجیمون میشه زمانیکه موتور روشن بوده تقسیم بر کل زمان. اگه ولتاژی که موتور باهاش روشن میشده رو ۵ ولت در نظر بگیریم داریم:

در حالت اول ۱/۴ روشن بوده پس میشه ۱/۴ ضربدر ۵ ولت:

۵*(۱/۴)=۱.۲۵

یعنی موتور با ۱.۲۵ ولت میچرخه یا به عبارت دیگه سرعت موتور کم میشه( ¼  سرعت اصلیش میچرخه)

در حالت دوم ۲/۴ روشن بوده پس میشه ۲/۴ ضربدر ۵ ولت:

۵*(۲/۴)=۲.۵

یعنی موتور با ۲.۵ ولت میچرخه یا به عبارت دیگه سرعت موتور کم میشه( ½  سرعت اصلیش میچرخه)

در حالت سوم ۳/۴ روشن بوده پس میشه ۳/۴ ضربدر ۵ ولت:

۵*(۳/۴)=۲.۵

یعنی موتور با ۳.۷۵ ولت میچرخه یا به عبارت دیگه سرعت موتور کم میشه( ¾   سرعت اصلیش میچرخه)

این اتفاق برای LED هم میفته چطوری ؟مثلا مانند حالتهای بالا نور LED هم کم نور و پرنور میشه. هر چقدر کلید بیشتر روشن بمونه نور LED هم پرنور تر میشه.  حالا چجوری میشه که ما کم نور یا پرنور میبینیم و متوجه نمیشیم که خاموش و روشن میشه؟

بدلیل اینه که سرعتش خیلی زیاده و ما متوجه نمیشیم ! یه چیزی شبیه تلویزیون! یعنی انقدر بصورت سریع تصاویر  از جلو چشممون رد میشند که احساس میکنیم تصاویر بهم پیوسته هستند و دارن حرکت میکنند!

خب حالا بیایم ببینیم که چجوری میشه اونوروی آردوینو پیاده سازی کرد. اگه دقت کنین بغل پایه های آردوینو UNO یه علامت خاصی شبیه ” مد” وجود داره. در حقیقت اون پایه هایی هستند که قابلیت PWM رو دارند.

خب بریم سراغ کار عملی. تا اینجا یه مقدار تئوری یاد گرفتیم وقتشه که ببینیم این PWM چجوری کار میکنه و خوشحال بشیم!

برای شروع ایندفعه رو میخایم خودمون برنامه رو بنویسیم و از مثالهای آردوینو استفاده نکنیم برای همین نرم افزار آردوینو رو باز کنین و از قسمت file یه برنامه جدید New رو انتخاب کنین:

اگه یادتون باشه گفتیم که بعضی از پایه ها pwm رو میتونن اجرا کنن.اون پایه هایی که علامت “مد” بغل پایه شون کشیده مثل پایه های ۹,۱۰,۱۱ و …

بطور مثال پایه ۹ رو انتخاب میکنیم . پس قدم اول اینه که پایه ۹ رو بعنوان خروجی  (output)تعریف کنیم.برای اینکه خروجی میخاستیم تعریف کنیم از دستور pinMode استفاده میکردیم و بعد پایه های که میخاستیم رو مینوشتیم که اینجا همون پایه هست و چون میخایم بعنوان خروجی در نظر بگیریم OUTPUT قرار میدیم:

pinMode(9, OUTPUT);

پس در قسمت voidsetup دستور بالا رو مینویسیم. بعد از اون میخایم ببینیم pwm  چجوری کار میکنه برای همین از دستورanalogWrite استفاده میکنیم. این دستور از دوتا قسمت تشکیل شده : اولی شماره پین رو مشخص میکنیم و قسمت دوم مقداری که میخاهیم اون پین خروجی داشته باشه.مقدارش هم با آنالوگ فرق میکنه اگه  یادتون باشه درآنالوگ(وقتی ازورودی میخاستیم بخونیم) از ۰ تا ۱۰۲۳ داشتیم که ۰ میشد صفر ولت و ۱۰۲۳ میشد (در این بورد) ۵ ولت. اما درخروجی pwm فرق میکنه.

چه فرقی؟

در pwm مقدار ۰ تا ۲۵۵ داریم بعبارت دیگه اگه بخاین صفر ولت بدین باید خروجی رو صفر در نظر بگیرین و اگر ۵ ولت باید خروجی رو ۲۵۵ در نظر بگیرین. به نسبت بقیه ولتاژها رو هم تقسیم کنین .پس هر ولتاژی تا ۵ ولت خواستین کافیه اونو تقسیم بر ۵ کنین و ضربدر عدد ۲۵۵ کنین.

مثلا اگر ۲ ولت بخاین میشه:

(۲/۵)*۲۵۵=۱۰۲

اگه ۳ ولت بخاین میشه :

(۳/۵)*۲۵۵=۱۵۳

اگه ۵ ولت بخاین میشه :

(۵/۵)*۲۵۵=۲۵۵

بریم سراغ برنامه نویسی اگه بخایم که رو پایه ۹خروجی صفر ولت باشه به اینصورت میشه:

  analogWrite(۹, ۰);

حالا میخام ببینم که خروجیم صفر شده چجوری میشه.چیکار باید بکنم؟ باید به یه چیزی متصل کنم که تغییراتشو بتونم ببینم مثلا مثل led .

Led رو تو فصل قبل گفتیم یه چیزی شبیه یه لامپ کوچیک که با جریان کم و ولتاژ کم کار میکنه که مدلهای مختلفی داره.یکی از اونها روی بورد آردوینو شما هست که فکر کنم به رنگ قرمز هست و وقتی آردوینو رو به کامپیوتر متصل میکنین روشن میشه. این led دو تا پایه داره که یه پایه اش از اون یکی پایه بلند تره . پایه بلند تره رو باید به مثبت یعنی به پین ۹ آردوینو متصل کنین و پایه کوچکتره رو متصل میکنین به یه مقاومت ۱۰۰ اهمی و اون پایه مقاومت ۱۰۰ اهمی رو هم به زمین متصل میکنین.  مقاومت رو برای این قرار میدیم led صدمه نبینه. تو فصل قبل پرسیدیم که مقدار مناسب اون مقاومت چند اهم هست؟ و چرا؟

رفتین تحقیق کنین چراو باید چند باشه آیا!؟؟

بعد از اون که led رو متصل کردین وبرنامه ای که نوشتین رو روی آردوینو پروگرام کنین:

خب اگه درست همه کار هار رو انجام داده باشین باید led خاموش باشه. حالا فرض کنیم که میخایم نورش نه کم باشه نه زیاد مثلا میذاریم ۱۲۷ .بنابراین به جای صفر مینویسیم ۱۲۷:

  analogWrite(۹, ۱۲۷);

خب میتونین اعداد دیگه ای از صفر تا ۲۵۵ رو بنویسید و نور led رو کمو زیاد کنین.

اما نکته مهم:

علی رغم اینکه PWM روی پین دیجیتال هست و معمولا بر روی پایه دیجیتال  دستور digitalWrite رو استفاده میکنیم اما اینجا از دستور analogWrite  روی پایه دیجیتال استفاده می کنیم چرا؟

بدلیل اینکه نتیجه کار بصورت آنالوگ هست یا بعبارتی تاثیر خروجی مثل حالت منطقی ۰ یا ۱ نیست بلکه نتیجه مانند آنالوگ میباشد!

 

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

تمرین:

–  به قسمت example و بعد analog و بعد به fading برین .مثالی از آردوینو هست برای pwm. سعی کنین قسمت های این مثال رو تغییر بدین و نتیجه رو ببینین تا مفهوم pwm رو بهتر متوجه بشین.

– اوناییکه میدونن پتانسیوتر چی هست , یه پتانسیومتر رو متصل کنن به ورودی آنالوگ A0 و بعد برنامه رو جوری تغییر بدن که با کم و زیاد کردن پتانسیومتر شدت نور led کم و زیاد بشه. اونهایی هم که نمیدونن سرچ کنند تو اینترنت و مطالعه کنند و اگه تونستن این تمرین رو انجام بدن. انشاا.. تو فصلهای بعد توضیح میدیم که پتانسیومتر چی هست.

حدیث از امام حسین (ع) :      

مردم بندگان دنیا هستند و دین لقلقۀ زبان‌شان است، تا زمانی كه آسایش‌شان برقرار باشد گرد آن می‌چرخند و آن‌گاه که با آزمایش غربال شوند، دینداران اندک خواهند بود.»

بحار الأنوار، ج ۴۴، ص ۳۸۳

توسط | ۱۳۹۷/۶/۱ ۱۳:۲۷:۴۴ دی ۳۰ام, ۱۳۹۶|آموزش آردوینو|بدون ديدگاه

ثبت ديدگاه