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

مقدمه

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

معرفی موج های PWM

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

معرفی موج های PWM

دوستان یادتون هست وقتی میخواستیم یه LED رو روشن و خاموش کنیم چیکار میکردیم؟ میومدیم در یک زمان مقدار 1 رو روی پاسه قرار میدادیم و مقداری تاخیر ایجاد میکردیم. یعنی به اندازه زمان تاخیر ما روی پایه مقدار 1 منطقی ( همون 5 یا 3.3 ولت) رو داشتیم و سپس مقدار 0 منطقی( 0 ولت)  رو روی اون پایه مینوشتیم و سپس مقداری تاخیر ایجاد میکردیم به عبارت دیگه به اندازه اون تاخیر مقدار 0 منطقی روی پایه مربوطه قرار میگرفت.

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

نمونه ای از یک موج PWM

حالا بیایید یه کار کنیم. این بار تاخیر مربوط به روشن شدن LED ها رو به اندازه 25% از کل زمان تاخیر مربوط به روشن شدن و خاموش شدن قرار بدید. در این حالت مشاهده خواهید کرد که نور LED هم به اندازه 25% ماکزیمم نورش خواهد بود و همینطور به هر اندازه زمان تاخیر شما میتونید نور LED رو کنترل کنید. به این تکنیک میگن مدولاسیون پهنای باند( به انگلیسی Pulse width modulation ) که PWM هم نامیده میشه.

نمونه ای از یک موج PWM

نمونه ای از یک موج PWM

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

البته این تکنیک که بخوایم با delay  این نور رو کنترل کنیم زیاد جالب نیست و راه های بهتری هم وجود داره که در ادامه خدمت شما عرض میکنیم. علتش هم اینه که مثلا وقتی که شما میخواید داده های یه سنسور رو بخونید و یا داده ها رو از طریق پورت سریال ارسال کنید عملا دیگه دستورات delay مربوط به LED انجام نمیشه و نهایتا شما وقتی میتونید این نور رو کنترل کنید که این داده ها رو ارسال کرده باشید و این فرایند تموم شده باشه  ولی شما میخواید در حین ارسال هم این نور داشته باشید و براتون میزان نور مهمه. پس باید از یه روشی غیر از delay استفاده کنیم. خوشبختانه در پردازنده ای که به وسیله آردوینو استفاده میشه یه بخش سخت افزار جداگانه برای این کار در نظر گرفته شده که وقتی شما  دارید یه کار دیگه رو هم انجام میدید ( مثلا یه سنسور رو میخونید یا داده ها رو ارسال میکنید) بتونید نور LED ها رو هم کنترل کنید. این سخت افزار از طریق پایه های دیجیتال شماره3, 5 , 6,  9 , 10 و 11 در دسترس  هست و میتونید با استفاده از دستور analogWrite() این کار رو انجام بدید.

این دستور دو تا آرگومان ورودی داره. آرگومان اول شماره پایه ای هست که میخواید شما از اون برای کنترل نور LED تون استفاده کنید و آرگومان دوم هم عددی بین 0 تا 255 هست که خیلی دور از ذهن نیست که بدونیم عدد 0 مشابه اینه که کل این موج خروجی روی پایه مقدارش صفر هست. عدد 128 یعنی 50 درصد از موج مقدار منطقی 1 و 50 درصد از موج مقدار منطقی صفر رو داره و در نهایت عدد 255 هم یعنی کل موج مقدار منطقی 1 رو داره.

به عنوان مثال دستور analogWrite(9,128)  یعنی ما میخوایم روی پایه شماره 9 از این خاصیت استفاده کنیم و مقدار روشنایی هم از بین اعداد 0 تا 255 روی مقدار 128 تنظیم کردیم که به این معناهست که میخوایم 50 درصد از ماکزیمم نور LED روشن بشه.

تذکر
استفاده از سه تا پایه مربوط به PWM کنار هم یه خاصیت خیلی خوب داره. اونم اینه که فرض کنید شما سه LED به رنگ های قرمز و سبز و آبی (همون RGB معروف )خریدید و در این صورت میتونید با این سه تا LED کل رنگ هایی که دلتون میخواد رو بسازید.

خوب حالا میخوایم وارد قسمت مربوط به کدنویسی بشیم. ابتدا مداری که در شکل زیر اومده رو ببندید. حتما توجه دارید که LED یه قطعه پلاریته دار هست و در جلسه مربوط به پلاریته چیست؟ اون رو بررسی کردیم. پس حواستون به پایه های مربوط به LED باشه که یه وقت اون رو اشتباه نزنید. حتما میدونید که در سر راه LED باید یه مقاومت بذاریم. این موضوع رو هم در جلسه مربوط به مقاومت LED بررسی کردیم. مقاومتی که ما در اینجا استفاده کردیم مقدارش 270 اهم هست ( قرمز، بنفش، قهوه ای)

مدار مربوط به کنترل نور LED

خوب حالا یه sketch جدید ایجاد کنید و کد زیر رو در اون بنویسید:

کد مربوط به کنترل نور LED

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

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

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

20 دیدگاه

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

    • با سلام و احترام.
      مشکل مربوط به اکانت شما حل شد.
      از مشکل پیش آمده عذرخواهی می کنیم.
      لطفا ایمیل خود را چک بفرمایید.
      با تشکر.
      تیم پشتیبانی robouav

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

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

      • سلام من اکانت خریدم اما به هیچ چیزی مثل آموزش ترانزیستور ها دسترسی ندارم

        • با سلام و احترام.
          مشکل مربوط به اکانت شما حل شد.
          از مشکل پیش آمده عذرخواهی می کنیم.
          لطفا ایمیل خود را چک بفرمایید.
          با تشکر.
          تیم پشتیبانی robouav

  • با سلام،
    فرض کنید موفق شدیم با پالسهایpwm شدت روشنایی را 50 درصد کاهش دهیم. حال سوال من این است با فرکانس خاموش و روشن شدنی که چشم قادر به دیدن آن نیست، چه ابزاری را برای تشخیص این قطع و وصل پیشنهاد میکنید. البته flicker tester های مختلفی حتی به صورت نرم افزار برای موبایل وجود دارد اما دقیق نیست، آیا میشود از فتودیود سریع برای دیتکت این فرکانس استفاده کرد؟ اگر چنین است امکان دارد مدار ساده ای برای بایاس این فتو دیود طراحی کنید و بگویید اثر خاموش و روشن شدن سریع ال ای دی چگونه بر روی فتو دیود منعکس و قابل اندازه گیری است؟

    ممنون از لطفتون

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

  • با سلام.
    با استفاده از دستور delay چطور میشه میزان نور رو کنترل کرد؟

    • با سلام.
      برای کنترل نور LED با استفاده از delay میتوانیم از یک حلقه استفاده کنیم. ( حلقه while بی نهایت میتواند گزینه مناسبی برای ما باشد.) سپس دستور روشن و خاموش کردن LED را قرار دهیم و بین این روشن و خاموش کردن میزان تاخیر خود را بگذاریم. توجه داشته باشید که در این حالت LED مکررا روشن و خاموش می شود. ولی نکته ای که وجود دارد این است که چشم ما قادر به دیدن این تکرارهای زیاد روشن و خاموش کردن نیست. به همین علت تصور میکنیم که نور LED را در میزان خاصی کنترل کرده ایم. این میزان خاص را میتوانید با تغییر مقدار delay ها بدست آورید.
      موفق باشید.

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