B2 – Điều khiển đèn LED bằng độ rộng xung PWM

Trong bài này ta sử dụng hàm điều khiển chân IC để bật tắt LED. Đồng thời thời gian sáng tắt được điều chỉnh bằng độ rộng xung cấp ra.

  • Dùng 1 LED và 1 điện trở:
    • Nhận biết LED: có 1 chân dài là dương (+) và 1 chân ngắn là âm (-); dòng điện chạy từ (+) sang (-)
    • Trở có giá trị khoảng 220 Ohm, có thể tính theo công thức R = U/I với U là điện áp nguồn trừ điện áp LED ( U = 5V – 2V = 3V). Và dòng I qua LED khoảng 15mA.

 

  • Phân tích chương trình:

Hàm  analogWrite() được dùng để điều khiển cấp tín hiệu ra chân IC. Sử dụng 8 bit nên xung PWM có giá trị từ 0 đến 255 tương ứng với mức điện áp cấp ra chân IC. Như vậy, đèn LED sẽ sáng tối dựa vào giá trị PWM nhận được.

  • Ngoài ra, biểu thức điều kiện if…else đã được sử dụng.

if ( điều kiện) { hành động}

nếu điều kiện được thỏa mãn thì thực hiện hành động (đặt trong { }).

 

/*
 Fade

 Chỉnh sáng tối đèn LED nối vào chân số 9 sử dụng hàm 
analogWrite().

Hàm analogWrite() dùng tham số PWM, nếu ta muốn gắn LED
lên chân khác thì phải chú ý nó có hỗ trợ PWM. Trên các bo
Arduino, chân PWM được đánh dấu với ký hiệu "~" 
ví dụ như ~3, ~5, ~6, ~9, ~10 and ~11.

 This example code is in the public domain.
 */

int led = 9;           // khai báo chân sử dụng
int brightness = 0;    // khai báo độ sáng
int fadeAmount = 5;    // khai báo mức thay đổi độ sáng

// sau khi cấp nguồn thì hàm setup() chạy 1 lần duy nhất:
void setup() {
  // khai báo chân 9 là lối ra
  pinMode(led, OUTPUT);
}

// vòng lặp thực hiện các đoạn mã tuần tự là lặp lại:
void loop() {
  // đặt độ sáng ban đầu:
  analogWrite(led, brightness);

  // thay đổi độ sáng sau từng vòng lặp:
  brightness = brightness + fadeAmount;

  // đảo chiều độ sáng khi hết vòng tối --> sáng và sáng --> tối
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }
  //chờ 30 milliseconds để quan sát
  delay(30);
}


One Reply to “B2 – Điều khiển đèn LED bằng độ rộng xung PWM”

Leave a Reply

Your email address will not be published. Required fields are marked *