جلسه دهم آموزش آردوینو – معرفی موج های PWM و کنترل نور LED با استفاده از آن
مقدمه
با سلام خدمت همه شما دوستان گرامی.با دانشی که تا حالا بدست آوردیم میتونیم یه لامپ رو با استفاده از یک کلید on/off کنترل کنیم. حالا میخوایم یه مرحله بریم بالاتر. در این جلسه میخوایم یاد بگیریم که چطور نور یه LED رو کنترل کنیم. یعنی این نور کم و زیاد کنیم و علاوه بر حالت های روشن و خاموش حالت هایی هم باشه که LED روش باشه ولی نورش به مقداری که ما میگیم روشن باشه.پیشنهاد میکنم قبل از این که این مطلب رو بخونید مطلب زیر رو برای بهتر فهمیدن این جلسه بخونید:
معرفی موج های PWM
دوستان یادتون هست وقتی میخواستیم یه LED رو روشن و خاموش کنیم چیکار میکردیم؟ میومدیم در یک زمان مقدار 1 رو روی پاسه قرار میدادیم و مقداری تاخیر ایجاد میکردیم. یعنی به اندازه زمان تاخیر ما روی پایه مقدار 1 منطقی ( همون 5 یا 3.3 ولت) رو داشتیم و سپس مقدار 0 منطقی( 0 ولت) رو روی اون پایه مینوشتیم و سپس مقداری تاخیر ایجاد میکردیم به عبارت دیگه به اندازه اون تاخیر مقدار 0 منطقی روی پایه مربوطه قرار میگرفت.
حالا بیایید و یه جوری این 2 تا تاخیر مربوط به روشن و خاموش شدن رو عوض کنید که چشمک زدن LED قابل مشاهده نباشه. یعنی LED بین روشنی و خاموشی قرار بگیره. توجه داشته باشید که در این حالت هم LED روشن و خاموش میشه ولی این روشن و خاموش شدن به قدری سریع هست که چشم ما نمیتونه اون رو تشخیص بده و فقط یه مقدار نور بسته به اون تاخیرها میبینه. اگه زمان این تاخیرها یکی باشه LED دقیقا 50 درصد نور اصلی خودش رو داره.
حالا بیایید یه کار کنیم. این بار تاخیر مربوط به روشن شدن LED ها رو به اندازه 25% از کل زمان تاخیر مربوط به روشن شدن و خاموش شدن قرار بدید. در این حالت مشاهده خواهید کرد که نور LED هم به اندازه 25% ماکزیمم نورش خواهد بود و همینطور به هر اندازه زمان تاخیر شما میتونید نور LED رو کنترل کنید. به این تکنیک میگن مدولاسیون پهنای باند( به انگلیسی Pulse width modulation ) که 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 روشن بشه.
خوب حالا میخوایم وارد قسمت مربوط به کدنویسی بشیم. ابتدا مداری که در شکل زیر اومده رو ببندید. حتما توجه دارید که LED یه قطعه پلاریته دار هست و در جلسه مربوط به پلاریته چیست؟ اون رو بررسی کردیم. پس حواستون به پایه های مربوط به LED باشه که یه وقت اون رو اشتباه نزنید. حتما میدونید که در سر راه LED باید یه مقاومت بذاریم. این موضوع رو هم در جلسه مربوط به مقاومت LED بررسی کردیم. مقاومتی که ما در اینجا استفاده کردیم مقدارش 270 اهم هست ( قرمز، بنفش، قهوه ای)
خوب حالا یه sketch جدید ایجاد کنید و کد زیر رو در اون بنویسید:
البته دوستان ما این کد رو برای شما توضیح نمیدیم و از این به بعد باید خودتون دیگه بشینید و کدها رو تحلیل کنید تا خوب آردوینو رو یاد بگیرید ولی اگه نشستید و فکر کردید و جاییش رو مشکل داشتید بفرمایید تا ما به صورت کامل برای شما توضیح بدیم.
خوب دیگه به پایان این جلسه هم رسیدیم. مثل همیشه میتونید ما رو در تلگرام و یا اینستاگرام دنبال کنید:
20 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
تو رو خدا یکی جواب من رو بده
با سلام و احترام.
مشکل مربوط به اکانت شما حل شد.
از مشکل پیش آمده عذرخواهی می کنیم.
لطفا ایمیل خود را چک بفرمایید.
با تشکر.
تیم پشتیبانی robouav
سلام من میخوام یه وسیله آزمایشگاهی بسازم که در اون تعدادی لامپ ال ای دی در فواصل زمانی معین به صورت تکی و یا دوتا همزمان روشن بشه . میشه بگید چطور بردی لازم دارم و کدش رو چطور باید تهیه کنم؟ لطفا راهنمایی کنید.
با سلام خدمت شما.
نکته ای که وجود دارد این است که تعداد این LED ها برای شما چقدر می باشد. با توجه به آن چه گفتید احتمالا تعداد این LED ها زیاد می باشد و به همین دلیل برای تامین جریان آن نیاز به استفاده از مدارهای ماسفتی دارد. یکی از راه ها این است که از بردهای آماده مربوط به تابلوروان ها استفاده کنید و البته خود شما نیز میتوانید آن ها را طراحی کنید. پس از این کار به کمک نرم افزارهای مربوط به تابلوروان ها میتوانید تنظیمات خود را انجام دهید. البته به سادگی و با کمک روشن و خاموش کردن پین ها نیز میتوان این کار را انجام داد.
موفق باشید.
سلام من اکانت خریدم اما به هیچ چیزی مثل آموزش ترانزیستور ها دسترسی ندارم
با سلام و احترام.
مشکل مربوط به اکانت شما حل شد.
از مشکل پیش آمده عذرخواهی می کنیم.
لطفا ایمیل خود را چک بفرمایید.
با تشکر.
تیم پشتیبانی robouav
با سلام،
فرض کنید موفق شدیم با پالسهایpwm شدت روشنایی را 50 درصد کاهش دهیم. حال سوال من این است با فرکانس خاموش و روشن شدنی که چشم قادر به دیدن آن نیست، چه ابزاری را برای تشخیص این قطع و وصل پیشنهاد میکنید. البته flicker tester های مختلفی حتی به صورت نرم افزار برای موبایل وجود دارد اما دقیق نیست، آیا میشود از فتودیود سریع برای دیتکت این فرکانس استفاده کرد؟ اگر چنین است امکان دارد مدار ساده ای برای بایاس این فتو دیود طراحی کنید و بگویید اثر خاموش و روشن شدن سریع ال ای دی چگونه بر روی فتو دیود منعکس و قابل اندازه گیری است؟
ممنون از لطفتون
با سلام.
برای این موضوع روش های مختلفی پیشنهاد می شود که متاسفانه به دلیل طولانی بودن آن ، در قالب یک کامنت نمی گنجد. اما لینک های زیر میتواند برای شما کمک کننده باشد :
لینک
موفق باشید.
با سلام.
با استفاده از دستور delay چطور میشه میزان نور رو کنترل کرد؟
با سلام.
برای کنترل نور LED با استفاده از delay میتوانیم از یک حلقه استفاده کنیم. ( حلقه while بی نهایت میتواند گزینه مناسبی برای ما باشد.) سپس دستور روشن و خاموش کردن LED را قرار دهیم و بین این روشن و خاموش کردن میزان تاخیر خود را بگذاریم. توجه داشته باشید که در این حالت LED مکررا روشن و خاموش می شود. ولی نکته ای که وجود دارد این است که چشم ما قادر به دیدن این تکرارهای زیاد روشن و خاموش کردن نیست. به همین علت تصور میکنیم که نور LED را در میزان خاصی کنترل کرده ایم. این میزان خاص را میتوانید با تغییر مقدار delay ها بدست آورید.
موفق باشید.