GIAO TIẾP ADC
Xin chào các bạn!
Hôm nay, chúng ta sẽ thực hành giao tiếp ADC (Analog to Digital Converter) trên Arduino để đọc tín hiệu nhiệt độ từ cảm biến và hiển thị kết quả lên màn hình LCD.
🎯 MỤC TIÊU BÀI HỌC
- Đọc giá trị điện áp từ cảm biến nhiệt độ LM35 thông qua chân analog A0
- Chuyển đổi dữ liệu ADC thành nhiệt độ độ C
- Hiển thị kết quả nhiệt độ lên LCD 16×2
🛠️ PHẦN 1: LINH KIỆN CẦN CHUẨN BỊ
Truy cập https://www.tinkercad.com. Trong mô phỏng Tinkercad, do không có LM35 thật, ta sẽ dùng:
- Arduino UNO
- 1 LCD 16×2 (kết nối 4-bit)
- 1 biến trở 10kΩ (để mô phỏng đầu ra LM35)
- 1 biến trở nhỏ khác (điều chỉnh tương phản LCD) – tùy chọn
- Dây nối
🔌 PHẦN 2: KẾT NỐI PHẦN CỨNG
🧩 Kết nối biến trở mô phỏng LM35:
Biến trở (potentiometer) | Kết nối |
---|---|
Chân 1 | 5V |
Chân 2 (giữa) | A0 |
Chân 3 | GND |
🧩 Kết nối LCD 16×2 (4-bit):
Chân LCD | Arduino UNO |
---|---|
RS | D12 |
E | D11 |
D4 | D5 |
D5 | D4 |
D6 | D3 |
D7 | D2 |
VSS | GND |
VDD | 5V |
VO | giữa biến trở nhỏ |
RW | GND |
A (LED+) | 5V |
K (LED-) | GND |
💻 PHẦN 3: MÃ CHƯƠNG TRÌNH MẪU
#include <LiquidCrystal.h>
// Khai báo LCD dùng chế độ 4-bit
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensor = A0;
void setup() {
lcd.begin(16, 2);
lcd.print("Nhiet do: ");
}
void loop() {
int value = analogRead(sensor); // Đọc tín hiệu ADC từ A0
float voltage = value * 5.0 / 1023.0; // Đổi sang điện áp
float temp = voltage * 100; // Giả lập LM35: 10mV = 1 độ
lcd.setCursor(0, 1); // Chuyển dòng 2
lcd.print(temp); lcd.print(" C "); // In nhiệt độ
delay(1000); // Cập nhật mỗi 1 giây
}
🧠 GIẢI THÍCH CHƯƠNG TRÌNH
analogRead(A0)
đọc giá trị từ 0–1023- Điện áp = (value / 1023) × 5V
- LM35 sinh 10mV/°C → điện áp * 100 = °C
- Kết quả được in ra dòng thứ 2 của LCD
▶️ PHẦN 4: CHẠY MÔ PHỎNG TRONG TINKERCAD
- Nhấn Start Simulation
- Xoay biến trở để mô phỏng nhiệt độ thay đổi
- Quan sát giá trị nhiệt độ thay đổi trên LCD dòng thứ 2
🎯 PHẦN 5: TỔNG KẾT
✅ Sau bài học này, các bạn đã:
- Biết cách đọc tín hiệu analog (ADC) bằng Arduino
- Biết cách mô phỏng LM35 bằng biến trở
- Biết cách hiển thị dữ liệu lên LCD 16×2
🌱 GỢI Ý MỞ RỘNG
- Gửi nhiệt độ về Serial Monitor để giám sát từ xa
- Dùng cảm biến LM35 thật trong mô hình thực tế
- Hiển thị biểu tượng nhiệt độ “°C” bằng mã ASCII
🧪 Bài 1: Hiển thị nhiệt độ & trạng thái cảnh báo trên LCD
🎯 Mục tiêu:
- Hiển thị nhiệt độ đo được từ LM35 (hoặc biến trở mô phỏng)
- Nếu nhiệt độ > 35°C → hiển thị thêm “NONG!” trên dòng 2 LCD
- Nếu < 20°C → hiển thị “LANH!”
🧠 Kỹ năng:
- So sánh điều kiện
- Thay đổi nội dung LCD theo nhiệt độ thực tế
🧪 Bài 2: Lưu giá trị nhiệt độ cao nhất và thấp nhất
🎯 Mục tiêu:
- Hiển thị nhiệt độ hiện tại
- Ghi nhớ giá trị nhiệt độ cao nhất và thấp nhất đã đo được từ lúc bắt đầu
- Cập nhật liên tục trên LCD
🧠 Kỹ năng:
- Ghi giá trị max/min
- So sánh và cập nhật theo thời gian thực
🧪 Bài 3: Nhấn nút để chuyển giữa °C và °F
🎯 Mục tiêu:
- Đọc nhiệt độ như bình thường
- Khi nhấn nút → chuyển đổi hiển thị giữa °C và °F
- Cập nhật đúng đơn vị tương ứng trên LCD
🧠 Kỹ năng:
- Đọc nút nhấn (input_pullup)
- Biến đổi công thức từ °C sang °F:
°F = °C × 1.8 + 32
🧪 Bài 4: Gửi dữ liệu nhiệt độ qua Serial mỗi 5 giây
🎯 Mục tiêu:
- LCD hiển thị nhiệt độ như bình thường
- Cứ mỗi 5 giây → gửi nhiệt độ về Serial Monitor
🧠 Kỹ năng:
- Kết hợp hiển thị LCD và Serial
- Quản lý thời gian bằng
millis()
thay vìdelay()
🧪 Bài 5: Điều khiển LED bật/tắt theo ngưỡng nhiệt độ
🎯 Mục tiêu:
- Đọc nhiệt độ từ LM35
- Khi nhiệt độ > 40°C → bật LED (D13)
- Khi nhiệt độ < 40°C → tắt LED
- LCD hiển thị nhiệt độ và trạng thái LED
🧠 Kỹ năng:
- Điều khiển thiết bị theo cảm biến
- Kết hợp analog + digital output