کنترل نور LED توسط خروجی آنالوگ PWM در آردوینو

جلسه چهارم:خروجی آنالوگ PWM در آردوینو

در این مبحث از آموزش آردوینو ما می خواهیم با استفاده از کد دستوری analogWrite() میزان روشنایی یک لامپ ال ای دی را کنترل کنیم. AnalogWrite از مدولاسیون پهنای پالس (PWM) استفاده می کند. توسط PWM می توان یک پین دیجیتال آردوینو را با سرعت زیاد صفر و یک کرد. حال هر چقدر تعداد دفعات روشن و خاموش شدن آن پین دیجیتال در یک ثانیه بیشتر باشد ولتاژی نزدیکتر به VCC یا همان 5 ولت بر روی خروجی پایه ظاهر می گردد و بلعکس هر چقدر تعداد دفعات متناوب (صفر و یک شدن) در یک ثانیه کمتر باشد، ولتاژی نزدیک به GND یا همان 0 ولت بر روی خروچی پایه ظاهر می گردد.


لیست قطعات مورد نیاز

برد آردوینو Arduino UNO R3 مدل DIP1 عدد
لامپ LED سبز سایز 5mm میلی متر مدل مات1 عدد
مقاومت 220 اهم با توان 0.25 وات و تلرانس 1 درصد1 عدد
برد بورد (پروجکت برد) مدل GL1 عدد
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی)1 عدد

توضیحات پروژه

برای راه اندازی لامپ LED و اتصال آن به برد آردوینو باید همانند نقشه شماتیک زیر عمل کنید، به این صورت پایه بلند لامپ ال ای دی که نشان دهنده پلاریته مثبت آن است را به واسطه مقاومت 220 اهمی به پایه دیجیتال شماره 9 بر روی آردوینو متصل کنید. و پایه کوتاهتر لامپ ال ای دی که نشان دهند پلاریته منفی آن است را به منفی منبع تغذیه یا پایه GND بر روی آردوینو متصل کنید.

بعد قبل
کنترل نور LED توسط خروجی آنالوگ PWM در آردوینو
کنترل نور LED توسط خروجی آنالوگ PWM در آردوینو
بعد قبل

تعریف پایه آردوینو به عنوان خروجی

بعد از اینکه لامپ LED را همچون دو تصویر بالا به برد آردوینو خود متصل کردید، در اولین خط برنامه توسط دستور زیر، در تابع setup() پایه دیجیتال شماره 9 آردوینو را که به پلاریته مثبت لامپ ال ای دی متصل شده است، را خروجی تعریف می کنیم. همانطور که در دستور زیر مشاهده می کنید ما LED را خروجی قرار داده ایم، که در حقیقت LED یک متغیر از جنس Int می باشد که در شروع برنامه آنرا با نام LED از جنس Int تعریف کرده ایم و مقدار اولیه 9 به آن داده ایم. به زبان ساده تر می توان گفت در این دستور ما پایه شماره 9 آردوینو را خروجی تعریف کرده ایم.

تولید پالس PWM در آردوینو

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

همانطور که در دستور زیر مشاهده می کنید، در تابع analogWrite() ابتدا توسط متغیر LED که با عدد 9 مقدار دهی شده است پایه مورد نظر در آردوینو برای اعمال پالس های PWM را مشخص کرده ایم و سپس توسط متغیر brightness که یک متغیر از جنس Int با مقدار اولیه 0 می باشد را برای تعیین مقدار تناوب در یک ثانیه مشخص کرده ایم.

در تابع analogWrite() مقدار متغیر PWM می تواند عددی بین حداقل 0 الی حداکثر 255 باشد. همانطور که پیشتر ذکر شد در این تابع ما برای اعلام مقدار PWM از متغیری به نام brightness استفاده کردیم. به این ترتیب در هر بار اجرای تابع analogWrite() در حلقه برنامه ، اگر متغیر brightness با عدد 0 مقدار دهی شود حاصل پالس های اعمالی بر روی پایه PWM برابر با ولتاژ صفر خواهد شد، و اگر متغیر brightness با عدد 255 مقدار دهی شود حاصل پالس های اعمالی بر روی پایه PWM برابر با ولتاژ 5 ولت یا VCC خواهد شد. همچنین اگر متغیر brightness با عددی مابین 0 الی 255 مقدار دهی شود، بسته به عدد مقدار دهی شده، حاصل پالس های اعمالی بر روی پایه PWM برابر با ولتاژ متغیر صفر الی 5 ولت خواهد شد.

شرح عملکرد پروژه

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

همانطور که در دستور زیر مشاهده می کنید هر بار که دستور زیر در حلقه اجراء می شود، با استفاده از متغیر fadeAmount که با عدد 5 مقدار دهی شده است، به مقدار متغیر brightness تعدا 5 عدد اضافه می شود.

همانطور که در قسمت تابع analogWrite() توضیح دادیم، مقدار PWM می تواند بین حداقل 0 الی حداکثر 255 باشد. به این ترتیب با توجه به دستور بالا که در هر بار اجرا به مقدار brightness تعداد 5 عدد اضافه می شود، برای جلوگیری از زیاد شدن مقدار متغیر از 255 توسط دستور زیر شرطی می نویسیم که توسط آن به آردوینو دستور می دهیم، در هر بار تکرار حلقه متغیر brightness را بررسی کند و هر زمانیکه مقدار متغیر brightness از 255 بیشتر-مساوی و یا از عدد brightness صفر کمتر- مساوی شد، مقدار متغیر fadeAmount را معکوس کند، به زبان ساده تر اگر متغیر fadeAmount مثبت بود آنرا منفی و بلعکس اگر متغیر fadeAmount منفی بود آنرا مثبت کند. به این ترتیب هر زمان که متغیر brightness به عدد 255 برسد، در هر بار تکرار حلقه شروع به کم شدن به مقدار هر بار 5 واحد می کند و هر زمانکه متغیر brightness به عدد صفر رسید، در هر بار تکرار حلقه شروع به زیاد شدن به مقدار هر بار 5 واحد می کند.

در خط بعدی برنامه مدت زمانی را در هر بار تکرار حلقه صبر می کنیم، این مدت زمان برای این است که کاربر بتواند تغییر میزان شدت روشنایی لامپ LED را به صورت واضح درک کند. به همین خاطر توسط دستور زیر مدت زمان تاخیر را در واحد میلی ثانیه برای پردازشگر تعریف می کنیم:

سورس کد برنامه در نرم افزار آردوینو

آموزش صفر تا صد برنامه نویسی بردهای آردوینو – جلسه چهارم

 اطلاعات پروژه

 رمز فایل : www.electronics98.com (این مطلب فاقد فایل جهت دانلود است)

 محیط برنامه نویسی : Arduino (IDE)

 برنامه نویسی شده به زبان : ترکیبی از برنامه نویسی به زبان سی (C) یا سی پلاس پلاس (++C)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 9 مارس 2018

2 دیدگاه

  1. حالا اگر لازم باشه به جای 1 ال ای دی 500 تا رو کنرل کنم نظرتون چیه ؟؟
    آیا ترانزیستوری هست که با فرکانس PWM کار کنه؟
    راه حلتون چیه؟
    با تشکر

  2. فرهاد اکبری

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

 شرایط و قوانین ثبت دیدگاه

 فارسی بنویسید و از کیبورد فارسی استفاده کنید.

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

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

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.