Bài 8: Sử dụng biến trở để điều khiển độ sáng đèn Led (Analog In + Analog Out)

From MakerLab Wiki
Jump to navigation Jump to search

Danh sách thiết bị

Mô tả dự án

_ Trong bài này, bạn sẽ cần sử dụng kết hợp kiến thức học từ những bài trước, như cách sử dụng biến trở, cách điều khiển đèn Led.

_ Để làm một ứng dụng có chức năng giống đèn bàn học, cho phép bạn tự điều chỉnh được độ sáng của đèn phù hợp theo ý mình.

Các bước thực hiện

Tạo code

  1. Mở phần mềm IDE Arduino và tạo một Sketch mới.
  2. Copy đoạn code sau vào file dự án.
// Chọn tốc độ truyền dữ liệu qua cổng Serial
#define BAUDRATE 115200 // Đơn vị bps (Bits Per Second)

// Chọn chân đọc tín hiệu Biến trở
// Phải chọn chân Analog, để dùng tính năng (ADC)
#define POT_PIN A1 // A1

// Chọn chân điều khiển đèn Led
// Những chân Digital trên MakerEDU Shield đều có tính năng (PWM)
#define LED_PIN 9 // D9

/* ----------------------------------------------------- */

// Lưu "giá trị thô" đọc từ Biến trở
// Với bộ (ADC) có độ phân giải 10-bit
// Giá trị đọc được nằm trong khoảng từ 0 - 1023
int rawValue = 0;

// Thiết bị sử dụng nguồn điện áp 3.3V so với 5V (Analog 1023)
// Vậy nên giá trị "Analog MAX lý tưởng" nhận được là 675
int maxValue = 675;

// Lưu giá trị (PWM) cấp cho đèn Led, với độ phân giải 8-bit
// Giá trị này nằm trong khoảng 0 - 255
int powerLed;

/* ----------------------------------------------------- */

void setup()
{
  // Mở cổng Serial Baudrate 115200 bps
  Serial.begin(BAUDRATE);

  // Thiết lập chân D9 là Output để điều khiển Led
  pinMode(LED_PIN, OUTPUT);
}

/* ----------------------------------------------------- */

void loop()
{
  // Đọc giá trị thô từ Biến trở
  rawValue = analogRead(POT_PIN);

  // Kiểm tra có lớn hơn giá trị "Analog MAX lý tưởng" ko?
  // Nếu có thì cho cập nhập giá trị mới
  if (rawValue > maxValue)
  {
    maxValue = rawValue;
  }

  // Chuyển đổi giá trị từ thang đo Analog, sang giá trị thang đo (PWM)
  powerLed = map(rawValue, 0, maxValue, 0, 255);
  // Điều khiển độ sáng đèn Led theo Biến trở
  analogWrite(LED_PIN, powerLed);

  // In thông tin công suất cấp cho Led
  Serial.print("Led:");
  Serial.print(powerLed);
  Serial.print(" ");
  Serial.print("Min:");
  Serial.print(0);
  Serial.print(" ");
  Serial.print("Max:");
  Serial.print(255);
  Serial.println();
}

Giải thích code

  • bài 4, bạn sẽ thấy dù xoay biến trở thế nào, một là giá trị về 0, hai là giá trị tới một mức quanh khoảng gần ~675. Lý do là vì:
    _ Vi điều khiển trên bo Vietduino Uno hoạt động với nguồn VCC.
    _ Ở điều kiện lý tưởng, nguồn VCC được cấp chính xác 5V, giá trị qua bộ ADC đọc được sẽ là 1023.
    _ Khi đó, Module Biến trở với thiết kế mạch nguồn 3,3V giá trị ADC đọc được sẽ là 675.
Icon-Attention-White.png Chú ý:
Còn tùy vào nguồn DC bạn dùng để cấp cho VCC của bo mạch. Giá trị điện áp sẽ quanh khoảng ~5V.

Chính vì vậy, việc xác định sẵn trước giá trị ADC Max của Biến trở là không thể được.

  • Có nhiều cách để giải quyết vấn đề này, như cho chương trình đo nguồn mẫu 3,3V trước khi hoạt động, ...
    Bài này, mình dùng cách cập nhập giá trị ADC Max.

Quá trình vận hành của chương trình như sau:

  • Trước khi hoạt động, chương trình giả định giá trị ADC Max của Biến trở là 675.
  • Khi vào hoạt động bo mạch sẽ liên tục đọc tín hiệu trên biến trở.
  • Sau đó đối chiếu giá trị đọc được với giá trị ADC Max.
  • Nếu thấy vượt qua giá trị ADC Max, thì cho cập nhập ADC Max giá trị mới này. Ngược lại thì bỏ qua.
  • Sau đó chuyển giá trị ADC này sang giá trị PWM tương ứng.
  • Và điều khiển đèn Led với giá trị PWM đó, đồng thời gửi thông tin lên Serial.

Sơ đồ kết nối

MakerEDU Shield Thiết bị
Port A1 [MKE-M04] - Biến trở
Port D9 [MKE-M01] - Led 10mm

Nạp code

  1. Kết nối Module Biến trở đến Port A1 của MakerEdu Shield.
  2. Kết nối Module Led đến Port D9 của MakerEdu Shield.
  3. Dùng cáp USB-C kết nối giữa bo Vietduino Uno và máy tính.
  4. Vào mục Tools... thiết lập các cấu hình cho đúng với bo Vietduino Uno đang dùng.
  5. Nhấn vào "nút →" hoặc phím tắt [Ctrl+U] để nạp code cho bo mạch.

Kết quả

  1. Sau khi đã nạp code thành công, bạn có thể xoay núm Volume của biến trở và xem kết quả trực tiếp qua Led.
  2. Hoặc mở Serial Monitor, nhấn phím tắt [Ctrl+Shift+M], để xem tiến trình hoạt động của bo mạch.
  3. Lưu ý, bạn cần phải chọn đúng 115200 baud mới xem được dữ liệu bo mạch gửi lên.
Icon-Info-White.png Tip:
Nhấn phím tắt [Ctrl+Shift+L] để mở Serial Plotter lên, lúc này bạn có thể xem kết quả ở dạng đồ thị trực quan hơn.


MakerEdu Starter Kit Bai8.png

Bài tập thêm (nâng cao)

  • Bài tập 1 ★★★★☆:
    Cần sử dụng thêm 1x Module Nút nhấn [MKE-M02]1x Màn hình LCD [MKE-M07].
    Làm một ứng dụng bàn phím nhập hiển thị lên màn hình LCD, trong đó:
    _ Thao tác "nhấn nút" để di chuyển con trỏ đến từng vị trí ô trên màn hình LCD.
    _ Thao tác "xoay biến trở" để chọn kí tự bạn muốn hiển thị. Gồm các kí tự chữ từ "A...Z", "a...z" và kí tự số từ "0...1", ngoài ra còn có thêm kí tự " " (dấu cách).
  • Bài tập 2 ★★★★★:
    Cần dùng thêm 1x Module Driver [MKE-M10], 1x Motor DC, 1x Cánh quạt gắn vào Motor và các phụ kiện nguồn DC và cáp nguồn.
    Làm một ứng dụng điều khiển quạt thổi hoặc hút, có thể tăng giảm tốc độ tùy ý chỉ bằng duy nhất một Biến trở.
    _ Thao tác "xoay biến trở" điều chỉnh ở đơn vị (%), trong khoảng từ -100% đến +100%.
    _ Trong khoảng [-100% : 0%], motor quay nghịch với tốc độ quay thay đổi theo độ lớn (%).
    _ Trong khoảng [0% : +100%], motor quay thuận với tốc độ quay thay đổi theo độ lớn (%).
    Bạn có thể dùng thêm 1x Màn hình LCD [MKE-M07] để xem thông số đang điều chỉnh.

Nguồn tài liệu (tham khảo thêm)