Ngoài các chân digital, các board Arduino còn có các chân analog input giúp đo các giá trị đầu vào là một dải giá trị thay vì chỉ là 0 và 1. Một số ví dụ như là nút chỉnh âm thanh (cho biết đang ở mức nào) hay cảm biến ánh sáng (độ sáng bao nhiêu)…
Các board Arduino thường có 6 đến 12 chân analog input tuy nhiên Node Wifi chỉ có 1 chân analog và đây cũng là điểm hạn chế nhất của dòng chip ESP8266. Trên board, chân analog này được đặt tên là A0 và có thể đo được điện thế từ 0 đến 3.3v.
Độ phân giải của chức năng chuyển đổi tín hiệu analog sang digital (ADC, Analog to Digital Converter) này của hầu hết các board Arduino và Node Wifi là 10 bits, tương đương với 210 = 1024, tức là dải giá trị từ 0 (0V) đến 1023 (3.3V).
Bạn cần chuẩn bị các thiết bị sau:
1 x Node Wifi.
1 x Module biến trở Rotary angle sensor.
Trong bài này ta sẽ sử dụng Rotary angle sensor để cấp đầu vào cho chân analog. Biến trở Rotary angle sensor là một loại điện trở thay đổi được giá trị bằng cách xoay núm vặn qua trái hoặc phải, cũng như việc bạn dùng những nút để chỉnh âm lượng trên các máy amply nghe nhạc. Khi giá trị điện trở thay đổi thì nó cũng làm cho điện thế truyền vào chân tín hiệu được thay đổi (chắc các bạn nhớ công thức huyền thoại I=U/R chứ) từ đó giá trị đọc được thay đổi theo.
Bạn cắm Rotary angle sensor vào cổng A0 của Node Wifi và upload đoạn code sau:
void setup() { // thiết lập Serial ở tốc độ 9600 bits per second: Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); // đọc giá trị từ pin analog 0: Serial.println(sensorValue); // in ra cửa sổ Serial giá trị đọc được delay(300); }
Trong đoạn code trêm chỉ có một câu lệnh mới là analogRead(A0). Câu lệnh này dùng để đọc giá trị tín hiệu đầu vào của chân analog A0 và lưu vào biến sensorValue và sau đó ta in ra cửa sổ Serial monitor.
Bạn upload đoạn code và mở cửa sổ Serial Monitor, quan sát sự thay đổi giá trị hiển thị khi vặn núm xoay của rotary sensor.
Để chuyển đổi giá trị trả về sang % thì bạn có thể tính toán bằng công thức sensorValue * 100 / 1023. Để có kết quả là giá trị thập phân, bạn cần khai báo biến sensorValue là float thay vì int.