آموزش PWM در آردوینو
شما یاد خواهید گرفت که PWM چیست و چگونه میتوانید خروجی PWM را از پینهای دیجیتال آردوینو با استفاده از تابع `analogWrite()` به دست آورید.
PWM چیست ؟
PWM مخفف Pulse Width Modulation (مدولاسیون عرض پالس) است و یک تکنیک است که برای کنترل روشنایی LED، تنظیم سرعت موتور DC، کنترل موتور سروو یا مواردی که نیاز به خروجی آنالوگ با ابزارهای دیجیتال دارید، استفاده میشود.
پینهای دیجیتال آردوینو یا ۵ ولت (در حالت HIGH) یا ۰ ولت (در حالت LOW) ارائه میدهند و خروجی آنها یک سیگنال موج مربعی است. بنابراین، اگر بخواهیم روشنایی یک LED را کم کنیم، نمیتوانیم ولتاژی بین ۰ تا ۵ ولت از پین دیجیتال دریافت کنیم، اما میتوانیم زمان روشن (ON) و خاموش (OFF) سیگنال را تغییر دهیم. اگر زمان روشن و خاموش را بهسرعت تغییر دهیم، روشنایی LED تغییر خواهد کرد.
قبل از ادامه، بیایید برخی اصطلاحات مرتبط با PWM را بررسی کنیم:
– (زمان روشن): زمانی که سیگنال در حالت HIGH است.
– (زمان خاموش): زمانی که سیگنال در حالت LOW است.
– دوره (Period): مجموع زمان روشن و زمان خاموش.
– چرخه وظیفه (Duty Cycle): درصدی از زمان که سیگنال در طول یک دوره در حالت HIGH است.
بنابراین، در چرخه وظیفه ۵۰٪ و فرکانس ۱ هرتز، LED به مدت نیم ثانیه روشن و نیم ثانیه دیگر خاموش خواهد بود. اگر فرکانس را به ۵۰ هرتز (۵۰ بار روشن و خاموش در ثانیه) افزایش دهیم، LED برای چشم انسان با نصف روشنایی دیده خواهد شد.
آردوینو و PWM
نرمافزار Arduino IDE دارای یک تابع داخلی به نام `analogWrite()` است که میتوان از آن برای تولید سیگنال PWM استفاده کرد. فرکانس سیگنال تولیدشده برای اکثر پینها حدود ۴۹۰ هرتز است و میتوان مقداری بین ۰ تا ۲۵۵ را با استفاده از این تابع تنظیم کرد.
– `analogWrite(0)` به معنای سیگنال با چرخه وظیفه ۰٪ است.
– `analogWrite(127)` به معنای سیگنال با چرخه وظیفه ۵۰٪ است.
– `analogWrite(255)` به معنای سیگنال با چرخه وظیفه ۱۰۰٪ است.
در آردوینو اونو، پینهای PWM شامل ۳، ۵، ۶، ۹، ۱۰ و ۱۱ هستند. فرکانس سیگنال PWM در پینهای ۵ و ۶ حدود ۹۸۰ هرتز و در سایر پینها ۴۹۰ هرتز است. پینهای PWM با علامت ~ مشخص شدهاند.
کنترل روشنایی LED از طریق کد
ابتدا، اتصالات را طبق توضیحات زیر انجام دهید:
پای مثبت LED را به پین دیجیتال ۶ آردوینو متصل کنید. سپس یک مقاومت ۲۲۰ اهمی را به پای منفی LED متصل کنید و سر دیگر مقاومت را به پین زمین (GND) آردوینو وصل کنید.
حالا بیایید یک کد برای تغییر روشنایی LED با استفاده از PWM بنویسیم.
کد آردوینو
کد زیر را در Arduino IDE آپلود کنید و LED شروع به کم و زیاد شدن روشنایی خواهد کرد.
//Initializing LED Pin
int led_pin = 6;
void setup() {
//Declaring LED pin as output
pinMode(led_pin, OUTPUT);
}
void loop() {
//Fading the LED
for(int i=0; i<255; i++){
analogWrite(led_pin, i);
delay(5);
}
for(int i=255; i>0; i--){
analogWrite(led_pin, i);
delay(5);
}
}
کد آردوینو برای کنترل دستی روشنایی LED
در اتصالات قبلی، یک پتانسیومتر ۱۰ کیلواهم اضافه کنید و دو سر پتانسیومتر را به ۵ ولت و GND آردوینو متصل کنید. سپس، سر وسط (لغزنده) پتانسیومتر را به پین A0 آردوینو وصل کنید.
کد آردوینو
کد را در Arduino IDE آپلود کنید و با چرخاندن دستگیره پتانسیومتر، روشنایی LED تغییر خواهد کرد.
int led_pin = 6;
int pot_pin = A0;
int output;
int led_value;
void setup() {
pinMode(led_pin, OUTPUT);
}
void loop() {
//Reading from potentiometer
output = analogRead(pot_pin);
//Mapping the Values between 0 to 255 because we can give output
//from 0 -255 using the analogwrite funtion
led_value = map(output, 0, 1023, 0, 255);
analogWrite(led_pin, led_value);
delay(1);
}