Tìm hiểu về cảm biến âm thanh và ứng dụng vào bật tắt đèn LED RGB tích hợp trên xController.
Cảm biến âm thanh có thể dùng để phát hiện và đo cường độ âm thanh của môi trường xung quanh. Chúng ta có thể ứng dụng cảm biến này để điều khiển đèn LED RGB bằng tiếng vỗ tay.
Viết chương trình
import time led_state = 0 while True: sound_value = pin41.read_analog() if sound_value > 1000: led_state = 1 - led_state time.sleep(0.3) if led_state == 0: led_onboard.show(0, (0, 0, 0)) else: led_onboard.show(0, (255, 0, 0)) time.sleep(10)
Sau khi nạp chương trình, bạn thử vỗ tay hoặc gõ nhẹ vào micro của cảm biến để bật tắt đèn LED RGB trên board.
Các câu lệnh đọc giá trị cảm biến và lưu vào biến tương tự như các bài trước.
Để kiểm tra có phát hiện tiếng vỗ tay hay không, chúng ta dùng cấu trúc if đã được giới thiệu ở các bài trước để đảo trạng thái của đèn LED RGB như sau:
# nếu giá trị cảm biến lớn hơn 1000 thì đảo trạng thái bật tắt của đèn LED if sound_value > 1000: led_state = 1 - led_state time.sleep(0.3)
Câu lệnh if sẽ kiểm tra kết quả đo được có lớn hơn 1000 hay không, nếu có thì sẽ đảo trạng thái đèn LED lưu trong biến led_state. Giá trị 1000 ở đây gọi là ngưỡng, do chúng ta tự đo và ấn định. Trong trường hợp này, nếu chúng ta để ngưỡng càng nhỏ thì chương trình sẽ chạy càng nhạy.
led_state = 1 - led_state
Câu lệnh đảo trạng thái LED đơn giản từ 0 thành 1 hoặc từ 1 thành 0: Nếu led_state đang có giá trị là 0 thì led_state mới sẽ là 1 – 0, sẽ thành 1. Ngược lại, nếu led_state đang là 1 thì led_state có giá trị mới là 1 – 1, sẽ thành 0.
time.sleep(0.3)
Sau khi xử lý xong, chúng ta cần phải tạm dừng chương trình trong một thời gian ngắn để tránh trường hợp do chương trình chạy quá nhanh, lúc đó tiếng động truyền vào kéo dài chưa kịp dứt thì sẽ bị xử lý nhiều lần, tạo ra kết quả bật tắt không mong muốn.
# bật tắt đèn LED RGB dựa vào trạng thái đã được xử lý if led_state == 0: led_onboard.show(0, (0, 0, 0)) else: led_onboard.show(0, (255, 0, 0))
Cuối vòng lặp, chúng ta sẽ dùng cấu trúc if else để bật tắt đèn LED, tùy vào giá trị của biến led_state. Hàm để bật tắt LED RGB (thực chất là thay đổi màu vì ta chỉ sử dụng màu đỏ) là hàm led_onboard.show() đã được giải thích ở bài học trước.