Trong bài học trước, chúng ta đã tìm hiểu về Digital Input thông qua nút nhấn với 2 trạng thái là HIGH và LOW. Tuy nhiên trong thực tế, đôi lúc chúng ta cần nhiều hơn 2 trạng thái như vậy. Một số ví dụ: nút điều chỉnh âm thanh (cho biết âm lượng đang ở mức nào) hay cảm biến ánh sáng (độ sáng là bao nhiêu),…
Trong bài học này, chúng ta sẽ cùng tìm hiểu về tín hiệu Analog và lập trình điều khiển thời gian chớp tắt đèn LED bằng giá trị của cảm biến xoay.
Khác với tín hiệu Digital Input, tín hiệu Analog Input giúp đo các giá trị đầu vào theo một dải giá trị thay vì chỉ là HIGH và LOW.
Tuy nhiên, xét về bản chất, máy tính chỉ có thể hiểu được tín hiệu Digital (các giá trị 0 và 1). Do đó, các chip vi điều khiển đều có 1 bộ chuyển đổi từ tín hiệu Analog sang Digital, gọi là ADC (Analog to Digital Converter).
Âm thanh được thu lại và xử lý qua ADC thành tín hiệu số
Lưu ý: Trong 6 cổng mở rộng của xController, chỉ có cổng 4, 5 và 6 là có bộ ADC và có thể giao tiếp được với các module sử dụng tín hiệu Analog. Giá trị tín hiệu các chân Analog này có dải từ 0 (tương ứng với 0V) đến 4095 (tương ứng với 3.3V).
Ví dụ: Nếu giá trị tín hiệu Analog xuất ra là 2047 thì điện áp sẽ nằm trong khoảng 1.65V.
import time while True: sensor_value = pin41.read_analog() pin11.write_digital(1) time.sleep_ms(sensor_value) pin11.write_digital(0) time.sleep_ms(sensor_value)
Sau khi nạp chương trình vào board, bạn xoay biến trở sẽ thấy sự thay đổi về thời gian bật tắt đèn LED.
Nếu xoay về tận cùng bên trái (giá trị là 0) thì LED sẽ chớp liên tục và rất khó để nhận ra trạng thái bật tắt của đèn LED. Ngược lại, nếu xoay về tận cùng bên phải, giá trị đọc được sẽ là 4095 (tương đương với hơn 4 giây), bạn sẽ dễ dàng nhìn thấy LED bật và tắt hơn.
sensor_value = pin41.read_analog()
Câu lệnh này đọc giá trị analog của cảm biến xoay gắn vào ở cổng 4 và lưu vào biến tên là sensor_value.
Hàm read_analog() sẽ trả về giá trị kiểu số nằm trong khoảng từ 0 (cảm biến xoay hết về bên trái) đến 4095 (cảm biến xoay hết về bên phải) .
Biến là các giá trị có thể thay đổi bất cứ lúc nào. Chúng ta sử dụng biến để lưu các giá trị cần dùng lại ở trong chương trình sau đó. Các biến phân biệt bằng tên gọi. Ví dụ trong câu lệnh trên trên, tên biến là sensor_value và nó chứa giá trị đọc được của cảm biến.
Trong Python, các biến không cần khai báo trước, chỉ cần gán giá trị trước khi được sử dụng và có thể gọi ra sử dụng sau đó.
time.sleep_ms(sensor_value)
Để tạm dừng chương trình, chúng ta sử dụng một hàm mới khác với hàm time.sleep() đã dùng trong các bài trước. Hàm sleep_ms() tạm dừng chương trình một khoảng thời gian truyền vào nhưng với đơn vị là mili giây, thay vì là giây như hàm sleep().
Câu lệnh sleep_ms() có cú pháp như sau:
time.sleep_ms(s)
Tham số truyền vào:
Ta cho dừng chương trình bằng với giá trị của cảm biến được lưu trong biến sensor_value.
Do giá trị cảm biến trả về tối đa là 4095, nên thời gian chương trình dừng tối đa sau mỗi lần bật và tắt là 4095 mili giây, tương đương với hơn 4 giây.