Bài 8. Ngõ vào Analog
Trong bài học này, bạn sẽ sử dụng Serial Monitor để hiển thị giá trị đọc được từ ngõ vào analog, và sau đó mở rộng ra với việc sử dụng 8 LED ở bài học 4. Theo đó, bạn có thể điều khiển số bóng LED sáng dựa trên kết quả đọc từ biến trở.
Linh kiện cần thiết
Để thực hành bài tập này, chúng ta cần sử dụng một số linh kiện như sau
STT | Tên linh kiện | SL | Hình ảnh |
1 | Đèn LED 5mm | 8 | |
2 | Điện trở 270 Ω | 8 | |
3 | 74HC595 | 1 | |
4 | Biến trở 10 kΩ | 1 | |
5 | Breadboard | 1 | |
6 | Arduino UNO | 1 | |
7 | Dây nối dạng cắm |
Thí nghiệm
Trước khi sử dụng LED, hãy thử một thí nghiệm nhỏ với chỉ biến trở và Arduino Serial Monitor. Hãy kết nối breadboard như hình bên dưới:
Nạp vào Arduino đoạn sketch sau:
/* Bài 8. Ngõ vào Analog */ int potPin = 0; void setup() { Serial.begin(9600); } void loop() { int reading = analogRead(potPin); Serial.println(reading); delay(500); }
Mở trình Serial Monitor, và bạn sẽ thấy dòng số xuất hiện.
Chỉnh núm xoay của biến trở và để ý rằng giá trị số thay đổi từ 0 đến 1023.
Trình Serial Monitor hiển thị giá trị đọc từ chân analog A0 sử dụng dòng lệnh:
int reading = analogRead(potPin);
Điện áp từ chân A0 được chuyển đổi thành số từ 0 đến 1023.
Biến trở
Trong thí nghiệm ở trên với Serial Monitor, biến trở bằng cách nào đó thay đổi giá trị điện áp ở ngõ vào A0 và đoạn sketch chuyển đổi điện áp này thành giá trị số từ 0 đến 1023.
Biến trở của bạn có một đường vòng tròn đóng vai trò như một điện trở, trong ví dụ của chúng ta, là 10 kΩ. Tuy nhiên, điểm khác biệt đối với điện trở, đó là nó còn có một tiếp điểm ở giữa gọi là tranh trượt (slider). Tiếp điểm này sẽ xoay khi bạn xoay núm điện trở. Do đó nếu bạn kết nối một đầu cuối của biến trở với 5V và đầu còn lại với GND, khi đó điện áp tại slider sẽ thay đổi từ 0 đến 5V khi bạn điều chỉnh nó.
Sơ đồ cắm chân breadboard
Hãy thử làm điều gì đó thú vị với biến trở này. Chúng ta có thể dùng nó để điều khiển ánh sáng LED.
Sơ đồ cắm breadboard tương tự như bài 4, tuy nhiên có một số chân cắm thay đổi, và biến trở được kết nối thêm vào Arduino.
Code Arduino
Nạp đoạn sketch sau vào board Arduino của bạn.
/* Bài 8. Ngõ vào Analog và LED */ int potPin = 0; int latchPin = 5; int clockPin = 6; int dataPin = 4; int leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { int reading = analogRead(potPin); int numLEDSLit = reading / 114; //1023 / 9 leds = 0; for (int i = 0; i < numLEDSLit; i++) { bitSet(leds, i); } updateShiftRegister(); } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
Bạn sẽ nhận ra rằng có rất nhiều đoạn mã tương tự như ở bài 5. Do vậy bạn có thể quay ngược lại để xem lại cách điều khiển LED. Tiêu điểm chính của sketch này là ngõ vào Analog liên quan đến dòng lệnh mà chúng ta định nghĩa chân analog được kết nối với thanh trượt của biến trở.
int potPin = 0;
Lưu ý rằng chúng ta không cần đặt bất kì lệnh gì trong ‘setup’ để đặt ngõ vào analog.
Trong vòng lặp chính, chúng ta đọc giá trị analog như sau:
int reading = analogRead(potPin);
Nhưng sau đó giá trị đọc được này phải được chuyển thành số đèn LED sáng, từ 0 đến 8. Dãy số từ 0 đến 8 thực sự có 9 giá trị. Do đó chúng ta cần chuyển thang giá trị bằng cách chia giá trị đọc được cho 114.
int numLEDSLit = reading / 114; //1023 / 9
Để sáng đúng số LED, chúng ta sử dụng vòng lặp ‘for’ đến từ 0 đến ‘numLEDSLit’ (số LED sáng) và đặt bit tại vị trí đó. Vòng lặp như sau:
leds = 0; for (int i = 0; i < numLEDSLit; i++) { bitSet(leds, i); }
Cuối cùng chúng ta cập nhật thanh ghi bằng cách gọi hàm:
updateShiftRegister();
Chúng ta có thể làm gì thêm?
Điều khiển độ sáng tối của một LED đơn ứng với giá trị đọc được của biến trở thì đơn giản hơn nhiều. Hãy thử thay đổi sketch để thử làm điều đó.
Trả lời