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ổ dòng lệnh để 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.
import time while True: light_value = pin41.read_analog() print(light_value) # In giá trị cảm biến ánh sáng led_value = translate(light_value, 0, 4095, 0, 255) print(led_value) # In giá trị độ sáng của đèn đã được tính toán led_onboard.show(0, (led_value, 0, 0)) time.sleep_ms(100)
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ổ dòng lệnh khi đưa tay che cảm biến. Đồng thời, đèn led RGB trên board cũng sẽ thay đổi theo.
light_value = pin41.read_analog()
Đặt biến light_value là giá trị tín hiệu Analog ở chân IO được chỉ định. Do cảm biến ánh sáng trả về tín hiệu Analog và được kết nối với cổng số 4 trên xController nên ta dùng pin41.read_analog(). Lúc này biến light_value sẽ trả về giá trị kiểu số nằm trong khoảng từ 0 đến 4095.
print(light_value)
In giá trị ra cửa sổ dòng lệnh trên phần mềm uPyCraft
Cửa sổ dòng lệnh của uPyCraft
>>> Ready to download this file,please wait! . download ok 0 0 4095 4095
Nếu cửa sổ dòng lệnh in ra các giá trị trong khoảng 0 đến 4095 và thay đổi khi bạn lấy tay che cảm biến ánh sáng thì cảm biến đã hoạt động tốt.
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:
led_value = translate(light_value, 0, 4095, 0, 255)
Bạn có thể xem lại bài trước để hiểu rõ hơn về hàm translate.
led_onboard.show(0, (led_value, 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 led_onboard.show(index, color). Hàm này có cú pháp như sau:
led_onboard.show(index, color)
Các tham số bao gồm:
Ở đây chúng ta đang sử dụng hệ màu RGB. Và trong ví dụ này, chúng ta chỉ cần thay đổi độ sáng của LED đỏ và tắt các LED xanh lục, xanh lam nên ta có hệ màu RGB như sau :
(led_value, 0, 0)
Với led_value là giá trị 0~255 sau khi đã quy đổi từ việc phân tích giá trị xuất ra từ cảm biến ánh sáng.
time.sleep_ms(100)
Dừng chương trình trong 100 mili giây để tránh chương trình in ra các giá trị quá nhanh làm chúng ta không nhìn kịp.