Tìm hiểu cảm biến siêu âm HC-SR04
6 phút đọc12/05/2024Nguyễn Minh Hoàng

Nguyên lý hoạt động, cách kết nối và lập trình đo khoảng cách với Arduino cực kỳ chi tiết. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
Tìm hiểu cảm biến siêu âm HC-SR04
Nguyên lý hoạt động
HC-SR04 dùng sóng âm tần số 40 kHz để đo khoảng cách:
- Chân TRIG nhận xung 10µs → cảm biến phát 8 xung 40 kHz
- Sóng âm đi đến vật → phản xạ về
- Chân ECHO output HIGH trong suốt thời gian sóng đi và về
- Khoảng cách = (thời gian ECHO / 2) × tốc độ âm (343 m/s = 0.0343 cm/µs)
Công thức:
code
distance_cm = pulseIn(ECHO, HIGH) × 0.034 / 2Thông số kỹ thuật
| Thông số | Giá trị |
|---|---|
| Điện áp | 5V DC |
| Dòng tiêu thụ | 15 mA |
| Góc đo | 15° |
| Khoảng cách | 2cm – 400cm |
| Độ phân giải | 0.3cm |
| Tần số | 40 kHz |
Kết nối với Arduino
| HC-SR04 | Arduino Uno |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | Pin 9 |
| ECHO | Pin 10 |
Code đo khoảng cách cơ bản
cpp
const int TRIG = 9;
const int ECHO = 10;
void setup() {
Serial.begin(9600);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
float getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
float distance = duration * 0.034f / 2.0f;
return distance;
}
void loop() {
float d = getDistance();
Serial.printf("Khoảng cách: %.1f cm\n", d);
delay(200);
}Code lấy trung bình nhiều lần để giảm nhiễu
cpp
float getDistanceAvg(int samples = 5) {
float sum = 0;
int valid = 0;
for (int i = 0; i < samples; i++) {
float d = getDistance();
if (d >= 2.0f && d <= 400.0f) { // loại bỏ giá trị ngoài range
sum += d;
valid++;
}
delay(20);
}
return valid ? sum / valid : -1.0f;
}Ứng dụng thực tế
- Robot tránh vật cản: khi khoảng cách < 20cm → dừng và rẽ
- Đo mực nước: gắn trên bình, tính chiều cao nước
- Cổng tự động: phát hiện người đứng trước
- Đỗ xe tự động: cảnh báo khoảng cách đến vật
Lưu ý quan trọng
- Bề mặt mềm (vải, xốp) hấp thụ sóng âm → đọc không chính xác
- Góc nghiêng > 15° so với bề mặt → tín hiệu phản xạ yếu
- Nhiều HC-SR04 gần nhau có thể gây nhiễu lẫn nhau
- Không hoạt động tốt trong môi trường nhiều tiếng ồn âm tần cao
Gợi ý dùng bài viết trong lớp học
Câu hỏi khởi động
- Linh kiện/kỹ thuật trong bài giải quyết vấn đề gì trong robot thật?
- Nếu nối sai nguồn hoặc đọc sai tín hiệu, robot sẽ biểu hiện như thế nào?
- Có cách nào đo hoặc quan sát hiện tượng thay vì đoán lỗi không?
Hoạt động thực hành nhanh
- Giáo viên cho học viên xem linh kiện hoặc sơ đồ liên quan đến chủ đề Tìm hiểu cảm biến siêu âm HC-SR04.
- Học viên dự đoán chân nguồn, chân tín hiệu và dữ liệu đầu ra.
- Chạy code mẫu ở cấu hình an toàn, sau đó thay đổi một tham số.
- Mỗi nhóm ghi nhận lỗi gặp phải và cách kiểm tra theo thứ tự nguồn, GND, tín hiệu, code.
Checklist kỹ thuật
- Luôn kiểm tra điện áp hoạt động trước khi nối với board điều khiển.
- In dữ liệu ra Serial Monitor khi làm việc với cảm biến hoặc thuật toán.
- Với motor/servo, cấp nguồn tải riêng và nối chung GND với board.
- Ghi lại thông số đã calibration để lần sau không phải chỉnh lại từ đầu.
Câu hỏi ôn tập
- Thông số nào quan trọng nhất khi chọn linh kiện này cho robot?
- Lỗi nào dễ xảy ra nhất trong lớp học và cách phát hiện nhanh nhất là gì?
- Có thể mở rộng kiến thức này thành dự án robot nào?
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.
Chia sẻ bài viết