جلسه یازدهم دوره آردوینو – آموزش ورودی های آنالوگ در آردوینو

مقدمه

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

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

ورودی آنالوگ

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

بر روی برد آردوینو 6 پایه وجود داره که با نام “Analog In” مشخص شده ( پایه های A0 تا A5).این پایه ها همون پایه های ورودی آنالوگ هستند که میتونن مقدار دقیق ولتاژ ورودی به پایه هاشون رو بخونن و عملکردی که رو در پارگراف قبل میخواستیم رو برامون اجرا کنن. برای این کار از دستور analogRead() استفاده میکنیم

توضیح دستور analogRead

با استفاده از این دستور ما میتونیم مقدار ولتاژی رو که به یکی از این 6 تا پین وصل میشه رو به صورت خیلی دقیقتر بخونیم .این تابع یه آرگومان داره که این آرگومان شماره پایه ای هست که میخوایم مقدار ولتاژ رو ازش بخونیم. یعنی مثلا دستور analogRead(0) یعنی میخوایم مقدار ولتاژ بر روی پایه شماره 0 از ورودی های آنالوگ رو بخونیم. بدیهی هست که برای ذخیره مقدار خروجی این تابع باید یه متغیر تعریف کنیم و نتیجه خروجی این تابع رو برابر این متغیر قرار بدیم. 
و یه عدد رو از 0 تا 1023 برگردونیم که این عدد نشون میده که مقدار ولتاژ ما در ورودی چقدر هست. مثلا اگه ولتاژی ورودی 0 ولت باشه تابع ما مقدار 0 رو برمیگردونه یا   اگه ولتاژ ورودی 2.5 ولت باشه تابع ما مقدار 512 رو برمیگردونه و در نهایت اگه ولتاژ ورودی مقدار 5 ولت باشه تابع ما مقدار 1023 رو برمیگردونه.

خوب حالا مداری که در شکل زیر اومده رو ببندید  و همچنین کد مربوط به اون رو بنویسید. ( در این مثال قصد داریم LED بسته به میزان نور محیط چشمک بزنه. چون قرار چشمک بزنه باید 0 یا 1 بشه بنابراین باید از دستور digitalWrite() استفاده کنیم.

 

خوب حالا این کد رو بر روی بردتون بریزید و اگه همه این کارها رو درست انجام داده باشید خواهید دید که بسته به میزان نور محیط تون، LED روی برد ( البته میتونید یه LED خارجی هم به برد وصل کنید) چشمک میزنه.

سوال : کد را تحلیل کنید و بگویید که چرا بسته به میزان نور محیط LED روی بردبرد چشمک میزند؟

در مثال بعد قصد داریم نور یک LED رو مطابق با نور محیط تنظیم کنیم. به این معنا که اگر محیط تاریک بود نور LED کم باشد و اگر محیط روشن تر شد ، نور LED زیاد باشد. 

مدار این مثال البته یه خورده با مدار قبل فرق داره و باید به پایه شماره 9 یک LED متصل کنید. حالا کد زیر را در کامپایلر بنویسید و اجرا کنید و روی برد خودتون بریزید. ( سعی کنید ابتدا کد را خودتان تحلیل کنید)

سوال: چرا در کد بالا و در دستور analogWrite مقدار متغیر val بر عدد 4 تقسیم شده است؟

راه اندازی سنسورهای مشابه

با استفاده از مداری که در بخش قبل معرفی کردیم میشه تعداد زیادی سنسورهای مقاومتی دیگه ای هم متصل کرد بدون این که عملکردهاشون  تفاوت خیلی زیادی با هم داشته باشن. به عنوان مثال میتونید یه ترمیستور وصل کنید. ( ترمیستور قطعه ای هست که مقاومتش با تغییر دما تغییر میکنه). در این بخش میخوایم نشون بدیم که چگونه تغییر در مقدار مقاومت میتونه باعث تغییر در مقدار ولتاژ اندازه گیری شده توسط آردوینو بشه.

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

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

مثل همیشه میتونید ما رو در تلگرام و یا اینستاگرام دنبال کنید.

 

 

اشتراک گذاری:
مطالب زیر را حتما بخوانید

10 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

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

    • با سلام خدمت شما.
      بله – حداکثر ولتاژی که میتوانید به ورودی میکروکنترلر بدهید همین 5 ولت می باشد و ولتاژ اضافه (حتی به مقدار کم) باعث آسیب رسیدن به برد می شود و تحت هیچ شرایطی ولتاژ بیشتر از 5 ولت را به برد خود وصل نکنید.
      اگر میخواهید قطعه ای را راه اندازی کنید که ولتاژ بیشتری دارد به سادگی میتوانید از ماسفت ها استفاده کنید. به عنوان مثال همیشه برای راه اندازی یک موتور DC ساده از یک ماسفت استفاده می کنند و موتور را به آن ماسفت متصل میکنند و عملا مشکل را به صورت کامل حل می کنند.
      موفق باشید.

دیدگاهتان را بنویسید