مدولاسیون پهنای پالس (PWM) ESP32/ESP8266 با میکروپایتون- تغییر شدت نور LED

این آموزش نشان میدهد که چگونه با بردهای ESP32 و ESP8266 با استفاده از میکروپایتون، سیگنال‌های PWM تولید کنیم. به عنوان مثال، شدت نور یک LED را با تغییر چرخه کاری(duty cycle) کم و زیاد میکنیم.

پیشنیازها

برای دنبال کردن این آموزش نیاز دارید که فریمور میکروپایتون را در برد ESP32/ESP8266 نصب داشته باشید. همچنین برای نوشتن و آپلود کد، به یک IDE نیاز دارید. پیشنهاد ما این است که از Thonny IDE یا uPyCraft IDE استفاده کنید.

شماتیک

برای این مثال، یک LED را به برد ESP خود وصل کنید. ما در هر دو برد LED را به GPIO 5 وصل میکنیم اما شما میتوانید هر پین دیگری که مناسب PWM باشد را انتخاب کنید.

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

لیستی از قطعاتی که برای ساخت مدار نیاز داری، به شرح زیر است:

ESP32 یا ESP8266
LED 5 mm
مقاومت ۳۳۰ اهم
بردبرد
سیم جامپر

شماتیک ESP32

اگر از برد ESP32 استفاده میکنید، از دیاگرام شماتیک زیر استفاده کنید:

مدار ESP32

شماتیک ESP8266

اگر از برد ESP8266 استفاده میکنید، از دیاگرام شماتیک زیر استفاده کنند:

مدار ESP8266

نوشتن کد

اینجا کدی است که شدت روشنایی LED را در طی زمان، با افزایش duty cycle تغییر میدهد. این کد هم در ESP32 و هم در ESP8266 کار میکند:

from machine import Pin, PWM
from time import sleep

frequency = 5000
led = PWM(Pin(5), frequency)

while True:
  for duty_cycle in range(0, 1024):
    led.duty(duty_cycle)
    sleep(0.005)

کد چگونه کار میکند

برای ایجاد یک پین PWM، علاوه بر کلاس Pin، کلاس PWM را هم از ماژول machine وارد میکنیم.

from machine import Pin, PWM

سپس برای ایجاد آبجکت(شی) PWM که led نامیده میشود، داریم:

led = PWM(Pin(5), frequency)

برای ایجاد یک آبجکت PWM، شما باید به عنوان پارامتر، پینی که به آن متصل است، فرکانس سیگنال و چرخه کاری(duty cycle) را در نظر بگیرید.

فرکانس: فرکانس میتواند مقداری بین ۰ تا ۷۸۱۲۵ داشته باشد. برای کنترل روشنایی LED از فرکانس ۵۰۰۰ هرتز استفاده میشود.
چرخه کاری(duty cycle): duty cycle مقداری بین ۰ تا ۱۰۲۳ دارد که ۱۰۲۳ معادل ۱۰۰% چرخه(بیشترین شدت روشنایی) و ۰ معادل ۰% چرخه(خاموش) هستند.

ما duty cycle را در یک حلقه while تنظیم میکنیم؛ پس نیازی نیست که پارامتر duty cycle را تعریف کنیم. اگر در معرفی آبجکت PWM، چرخه کاری را تنظیم نکنیم، به صورت پیش فرض ۰ در نظر گرفته میشود.

برای تنظیم duty cycle، از متد ()duty در آبجکت PWM استفاده میکنیم و duty cycle را به عنوان آرگومان ارسال میکنیم:

led.duty(duty_cycle)

در داخل حلقه while، یک حلقه for ایجاد میکنیم که duty cycle را در هر حلقه با بازه‌ی ۵ میلی ثانیه، ۱ واحد افزایش میدهد.

for duty_cycle in range(0, 1024):
    led.duty(duty_cycle)
    sleep(0.005)

سینتکس تابع ()range به شکل زیر است:

range(start, stop, step)

start: مشخص میکند از چه شماره‌ای شروع شود. ما میخواهیم duty cycle از ۰ شروع شود.
stop: عددی که مشخص می کند در کدام موقعیت می خواهیم متوقف شویم. (بدون در نظر گرفتن آخرین عدد). بیشترین مقدار duty cycle مقدار ۱۰۲۳ است. چون ما در هر حلقه ۱ واحد افزایش duty cycle داریم، آخرین مقدار باید ۱+۱۰۲۳ باشد. پس از ۱۰۲۴ استفاده میکنیم.
step: عدد صحیحی که افزایش را مشخص میکند و به طور پیش فرض برابر ۱ است.

در هر حلقه، چرخه کاری LED را برابر مقدار کنونی متغیر duty_cycle تنظیم میکنیم:

led.duty(duty_cycle)

بعد از آن مقدار متغیر duty_cycle یک واحد افزایش میابد.

نمایش عملی

با استفاده از Thonny IDE یا uPyCraft IDE کد را در برد ESP ذخیره کنید. LED که به GPIO 5 متصل شده است، باید در طی زمان، شدت نورش بیشتر شود.

تغییر نور LED با گذر زمان

امیدواریم که این آموزش میکروپایتون برای شما مفید بوده باشد.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...