Đo khoảng cách bằng cảm biến siêu âm HC-SRF04 sử dụng board Arduino Uno

Chào mừng bạn đến với bài viết hôm nay! Trong bài viết này, chúng ta sẽ tìm hiểu về cảm biến siêu âm HC-SRF04 và cách sử dụng nó để đo khoảng cách bằng board Arduino Uno. Hãy cùng khám phá chi tiết bên dưới.

Cảm biến siêu âm HC-SRF04

Cảm biến siêu âm HC-SRF04 (khoảng cách) là một loại cảm biến sóng cao tầng mà con người không thể nghe thấy được. Tuy nhiên, chúng ta có thể thấy được sự hiện diện của sóng siêu âm ở khắp mọi nơi trong tự nhiên. Động vật như dơi và cá heo cũng sử dụng sóng siêu âm để liên lạc với nhau, săn mồi và định vị trong không gian.

Cảm biến siêu âm HC-SRF04 được sử dụng rất phổ biến để xác định khoảng cách vì nó có giá thành rẻ và độ chính xác khá cao. Cảm biến này sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 đến 300cm.

Nguyên lý hoạt động

Để đo khoảng cách, ta sẽ phát một xung rất ngắn (5 microSeconds) từ chân Trig. Sau đó, cảm biến siêu âm sẽ tạo ra một xung HIGH ở chân Echo cho đến khi nhận lại được sóng phản xạ ở pin này. Chiều rộng của xung sẽ bằng với thời gian sóng siêu âm được phát từ cảm biến và quay trở lại.

Tốc độ của âm thanh trong không khí là 340 m/s, tương đương với 29,412 microSeconds/cm (106 / (340*100)). Khi đã tính được thời gian, ta sẽ chia cho 29,412 để nhận được khoảng cách.

Lưu ý: Cảm biến siêu âm càng xa thì càng bắt không chính xác, vì góc quét của cảm biến sẽ mở rộng dần theo hình nón. Ngoài ra, bề mặt xiên hay xù xì cũng làm giảm độ chính xác của cảm biến. Thông số kỹ thuật mà nhà sản xuất ghi ở dưới đây là của điều kiện lý tưởng, trong thực tế, độ chính xác của cảm biến sẽ phụ thuộc vào môi trường làm việc của nó.

Các chân chức năng

Cảm biến siêu âm

Code mẫu

#define TRIG_PIN 3
#define ECHO_PIN 2
#define TIME_OUT 5000

float GetDistance() {
  long duration, distanceCm;

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH, TIME_OUT);

  // convert to distance
  distanceCm = duration / 29.1 / 2;

  return distanceCm;
}

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {
  long distance = GetDistance();

  if (distance<0) {
    Serial.println("Echo time out !!");
  } else {
    Serial.print("Distance to nearest obstacle (cm): ");
    Serial.println(distance);
  }

  delay(1000);
}

Giải thích Code

Trong chương trình trên, chúng ta cần chú ý đến hàm pulseIn. Hàm này được sử dụng để trả về thời gian (tính bằng milisec) kể từ khi hàm này được gọi cho đến khi có tín hiệu tại chân được chỉ định trước. Nếu không nhận được tín hiệu hoặc quá thời gian timeout, hàm sẽ trả về 0.

Các tham số trong hàm pulseIn gồm:

  • ECHO_PIN: Chân chờ
  • HIGH: Giá trị chờ
  • TIME_OUT: Thời gian chờ tín hiệu, mặc định là 1s

Ta biết thời gian âm thanh truyền trong không khí ở 20°C là 344 m/s. Bằng quy tắc tam suất đơn giản, ta có thể dễ dàng tính được sóng âm di chuyển 1 cm trong không khí sẽ mất khoảng 29.1 ms. Do thời gian được tính từ lúc phát tín hiệu tới khi sóng âm phản xạ lại, ta chia đôi thời gian để có được quãng đường mà sóng âm đã đi.

Kết luận

Vậy là bạn đã tìm hiểu cách đo khoảng cách bằng cảm biến siêu âm HC-SRF04 và board Arduino Uno. Hãy lưu ý các cảnh báo trên và đảm bảo rằng bạn đã kết nối các dây nối đúng cách và sử dụng nguồn điện ổn định. Chúc bạn thành công!

FEATURED TOPIC

hihi