Bài 4: PWM | Thay đổi ánh sáng của LED trên Arduino

Bài 4: PWM | Thay đổi ánh sáng của LED trên Arduino

Chúc mừng bạn đã trãi qua 3 bài học đầu tiên trong khóa học lập trình Arduino cho người mới bắt đầu. Chắc bạn củng cảm thấy tự học arduino cũng không hề khó chút nào phải không?

Bài viết hôm nay mình sẽ hướng dẫn các bạn cách bật một con LED sáng dần và tắt dần như thế nào? Qua đó, các bạn sẽ tìm hiểu thêm một hàm mới là analogWrite() và cách sử dụng các chân PWM(băm xung arduino).

Sơ đồ đấu nối

bật-đèn-sáng-dần-tắt-dần-trên-arduino-uno

Các linh kiện cần thiết

Code mẫu

/*
   Fading Light
   This example shows how to fade an LED on pin 10 using the analogWrite() function.
*/
int ledPin = 6;       // the pin that the LED is attached to

void setup() {
      // declare pin 9 to be an output:
      pinMode(ledPin,OUTPUT);
      // initialize serial communication at 9600 bits per second:
      Serial.begin(9600);
}

void loop(){
      fadeOn(2000,5);
      fadeOff(2000,5);
}

void fadeOn(unsigned int time,int increament){
       //change the brightness by FOR statement
    for (byte value = 0 ; value < 255; value+=increament){ 
                // print out the value:
            Serial.println(value);
                // set the brightness of pin 10:
        analogWrite(ledPin, value);
        delay(time/(255/5));
        } 
}

void fadeOff(unsigned int time,int decreament){
       //change the brightness by FOR statement
    for (byte value = 255; value >0; value-=decreament){ 
            Serial.println(value);
        analogWrite(ledPin, value); 
        delay(time/(255/5)); 
    }
}

Giải thích code

void fadeOn(unsigned int time,int increament){
       //change the brightness by FOR statement
  for (byte value = 0 ; value < 255; value+=increament){ 
                // print out the value:
          Serial.println(value);
                // set the brightness of pin 10:
    analogWrite(ledPin, value);
    delay(time/(255/5));
        } 
}

Trong vòng lặp for điều kiện đưa ra khi giá trị Led = 0, thỏa value < 255 thì Led sẽ tăng thêm một giá trị nói một cách nôm na là giá trị càng tăng lên đồng nghĩa với việc đèn Led sẽ sáng dần lên và ngược lại.

analogWrite(ledPin, value);

Xung PWM

Xung là các trạng thái cao / thấp (HIGH/LOW) về mức điện áp được lặp đi lặp lại. Đại lượng đặc trưng cho 1 xung PWM (Pulse Width Modulation) bao gồm tần số (frequency) và chu kì xung (duty cycle).

Tần số là gì?

Tần số là số lần lặp lại trong 1 đơn vị thời gian. Đơn vị tần số là Hz, tức là số lần lặp lại dao động trong 1 giây.

Lấy ví dụ, 1Hz = 1 dao động trong 1 giây. 2Hz = 2 dao động trong 1 giây. 16MHz = 16 triệu dao động trong 1 giây.

Hoạt động của xung trong thực tế

Khoảng cách giữa 2 vạch màu xanh là một xung

analogWrite Tỉ lệ Chu kỳ xung
analogWrite(0) 0/255 0%
analogWrite(64) 64/255 25%
analogWrite(127) 127/255 50%
analogWrite(191) 191/255 75%
analogWrite(255) 255/255 100%

Hàm analogWrite() là một lệnh được ghi giá trị trên một chân của Arduino. Các chân PWM (~) thường xuất hiện trên Board Arduino Uno là 3, 5, 6, 9, 10, 11. 

Các chân PWM thường dùng để điều khiển độ sáng của một đèn Led hay là điều khiển động và sử dụng trong điều khiển Servo.

Lời kết

Qua bài 4 chúng ta biết được cách dùng analogWrite() trong việc điều khiển độ sáng của một bóng đèn Led là như thế nào. Ứng dụng của PWM trong Arduino. 

Cảm ơn các bạn đã đọc bài viết nếu thấy bài viết hữu ích nhớ cho 1 LikeShare cho mọi người cùng đọc nha.

Chúc các bạn thành công!

Trân trọng.

Bài viết liên quan

Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
highchill

ad ơi code trên em cho chạy thử nó chỉ chạy fadeOn ko chuyển qua fadeOff đc