Vận dụng kiến thức về tín hiệu Analog Input đã học để làm việc với cảm biến ánh sáng và điều khiển đèn LED đa màu RGB được tích hợp sẵn trên xController.
Tìm hiểu cách sử dụng cửa sổ Serial Monitor để xem và theo dõi kết quả đọc được từ cảm biến, từ đó có thể viết đúng logic hoạt động của chương trình.
Viết chương trình điều chỉnh độ sáng của đèn LED RGB một cách tự động dựa vào ánh sáng môi trường.
Cảm biến ánh sáng có nhiều loại, trong đó loại dùng quang trở là phổ biến nhất. Quang trở là một loại điện trở mà giá trị của nó thay đổi theo cường độ ánh sáng nó thu được. Nếu đặt ở môi trường có ít ánh sáng, có bóng râm hoặc bóng tối thì điện trở của quang trở sẽ tăng cao. Ngược lại, nếu đặt ở ngoài nắng, hoặc nơi có ánh sáng thì điện trở sẽ giảm.
Ta có thể sử dụng cảm biến ánh sáng trong rất nhiều ứng dụng thực tế, ví dụ như bật tắt đèn tự động mỗi khi trời tối.
xController được tích hợp sẵn 2 đèn LED đa màu RGB trên board. Đèn LED RGB là đèn LED đặc biệt, có thể phát sáng với nhiều màu khác nhau (lên đến 16 triệu màu). Màu của đèn LED được tổng hợp từ 3 đèn màu đỏ (Red), xanh lục (Green), xanh lam (Blue) bên trong.
Các LED màu này có độ sáng từ 0 đến 255. Để thay đổi màu đèn LED RGB, chúng ta sẽ thay đổi độ sáng của 3 LED màu này.
Cửa sổ Serial Monitor (gọi tắt là cửa sổ Serial) là một công cụ rất hữu ích để quan sát và theo dõi những thông tin trong một chương trình, như in kết quả đọc được từ cảm biến, giúp chỉnh sửa lỗi chương trình một cách dễ dàng.
Bạn có thể mở Serial Monitor bằng cách click vào Tools -> Serial Monitor.
#include <xcontroller.h> XController xcon; int lightSensorPin = A4_1; // cảm biến ánh sáng nối với cổng 4 int sensorValue= 0; // giá trị đọc được từ cảm biến int outputValue= 0; // giá trị xuất ra cho LED RGB void setup() { Serial.begin(9600); } void loop() { // đọc giá trị cảm biến ánh sáng (0-4095) sensorValue = analogRead(lightSensorPin); // in ra cửa sổ Serial kết quả đọc được Serial.println(sensorValue); // chuyển kết quả đọc được sang dải giá trị 0-255 outputValue = map(sensorValue, 0, 4095, 0, 255); // in ra kết quả chuyển đổi Serial.println(outputValue); // thay đổi màu sắc của LED RGB, chỉ thay đổi giá trị màu đỏ xcon.showLED(0, outputValue, 0, 0); delay(100); }
Giải thích chương trình
Sau khi nạp chương trình, Bạn có thể xem giá trị của cảm biến ánh sáng và kết quả tính toán độ sáng của đèn LED RGB trong cửa sổ Serial Monitor.
#include <xcontroller.h>
Để sử dụng thư viện của xController, bạn cần cài đặt như hướng dẫn ở trên. Trong chương trình, bạn cần khai báo thư viện (có tên <xcontroller.h>) bằng câu lệnh #include.
XController xcon;
Sau khi khai báo thư viện của xController, chúng ta khai báo một đối tượng là XController. Đối tượng này có các hàm để chúng ta làm việc với các chức năng tích hợp trên xController như đèn LED RGB, loa hay cảm biến gia tốc,…
Serial.begin(9600);
Khởi tạo giao tiếp Serial với tốc độ (baud rate) là 9600. Để thông tin hiển thị đúng trong cửa sổ Serial, bạn phải chọn tốc độ truyền nhận (ở góc dưới bên phải của giao diện màn hình Serial) đúng với giá trị dùng để khởi tạo trong chương trình.
Serial.println(sensorValue);
In ra cửa sổ Serial giá trị đọc được từ cảm biến và ngắt xuống dòng. Một câu lệnh tương tự cũng in ra cửa sổ Serial nhưng không ngắt xuống dòng là Serial.print().
outputValue = map(sensorValue, 0, 4095, 0, 255);
Như ta đã biết, cảm biến xuất ra tín hiệu Analog có giá trị từ 0 đến 4095, trong khi độ sáng của 3 đèn LED trong đèn LED RGB tích hợp nhận giá trị từ 0 đến 255. Vậy nên, ta cần quy đổi hai thang đo này thành một:
Để chuyển đổi tự động, chúng ta sử dụng hàm map() cho phép chuyển đổi giá trị trong 1 dải giá trị này sang 1 dải giá trị khác.
Cú pháp của câu lệnh map như sau:
map(value, fromLow, fromHigh, toLow, toHigh)
Các tham số:
xcon.showLED(0, outputValue, 0, 0);
Để thay đổi màu và độ sáng của đèn LED RGB trên xController, chúng ta sử dụng hàm showLED(). Hàm này có cú pháp như sau:
showLED(whichLED, redValue, greenValue, blueValue);
Các tham số bao gồm:
Để thay đổi độ sáng của đèn LED RGB, chúng ta chỉ cần thay đổi độ sáng của LED đỏ và tắt các LED xanh lục, xanh lam.
Sau khi nạp chương trình, bạn thử lấy tay che cảm biến ánh sáng và quan sát sự thay đổi độ sáng của cả 2 đèn LED RGB trên xController.