Sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino

Trong bài này, mình sẽ hướng dẫn bạn chi tiết cách sử dụng cảm biến khoảng cách HC SR04 để đo khoảng cách đến vật thể, dựa trên mạch ESP32 và phần mềm Arduino IDE. 

Giới thiệu cảm biến siêu âm HC SR04

HC SR04 sử dụng sóng siêu âm để đo khoảng cách từ nó tới vật thể phía trước, theo nguyên lý gửi sóng siêu âm và chờ sóng siêu âm phản xạ lại khi gặp vật thể, để xác định vật thể ở xa hay gần.

Cảm biến siêu âm HC SR04 có thể đo được khoảng cách từ 2cm đến 400cm, với độ chính xác là 0,3cm. Đây là một module ESP32 phổ biến thường dùng trong các dự án điện tử, IoT,… của dân Makers. 

Dưới đây là hình ảnh minh họa 2 mặt của cảm biến siêu âm HC SR04:

Mặt trước của cảm biến khoảng cách HC SR04
Mặt sau của cảm biến khoảng cách HC SR04

Cách hoạt động

Cảm biến siêu âm HC SR04 hoạt động theo cách thức như sau:

  • Máy phát siêu âm (chân Trig) phát ra một dạng sóng siêu âm ở tần số cao (40kHz)
  • Sóng siêu âm này truyền qua không khí. Khi gặp vật thể, chúng sẽ bị phản xạ trở lại cảm biến
  • Máy thu siêu âm (chân Echo) nhận lại lượng sóng siêu âm phản xạ trở về

Dưới đây là sơ đồ minh họa cách hoạt động, để bạn hiểu rõ hơn trong khi sử dụng cảm biến khoảng cách HC SR04:

Cách hoạt động của cảm biến khoảng cách HC SR04

Dựa vào tốc độ và thời gian mà sóng siêu âm truyền đi, cảm biến HC SR04 có thể tính được khoảng cách đến vật thể, theo công thức sau:

Khoảng cách = (tốc độ âm thanh truyền đi trong không khí x thời gian) / 2

Lưu ý: Tốc độ truyền âm thanh trong không khí ở nhiệt độ 20°C là 343m/s.

Thông số kỹ thuật

  • Nguồn: 5V
  • Dòng điện: 15mA
  • Tần số hoạt động: 40kHz
  • Khoảng cách đo được xa nhất: 400cm
  • Khoảng cách đo được gần nhất: 2cm
  • Góc đo: 15 độ
  • Sai số: 0,3cm
  • Kích cỡ: 45 x 20 x 15mm

Trên cảm biến siêu âm HC SR04 có 4 chân như sau:

  • VCC: Nguồn cấp điện cho cảm biến (5V)
  • Trig: Chân đầu vào kích hoạt
  • Echo: Chân đầu ra
  • GND: Nối đất

Chuẩn bị phần cứng

  • Cảm biến đo khoảng cách HC SR04
  • ESP32
  • Breadboard
  • Dây Jumper

Sơ đồ kết nối

Để sử dụng cảm biến khoảng cách HC SR04 với ESP32, mình sẽ kết nối như hình bên dưới:

  • Chân Trig cảm biến – GPIO 5
  • Chân Echo cảm biến – GPIO 18
  • Chân VCC cảm biến  – VIN
  • Chân GND cảm biến – GND
Cách sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino - Sơ đồ kết nối
Cách sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino – Sơ đồ kết nối

Khi sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino, mình thường dùng chân GPIO 5 và GPIO 18, nhưng bạn có thể đổi thành bất kỳ chân GPIO phù hợp nào khác mà bạn muốn nhé!

Nạp chương trình vào Arduino IDE để sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino

Trước khi nạp chương trình vào Arduino IDE, phần mềm này của bạn cần cài tiện ích ESP32. IoTZone đã viết một bài hướng dẫn chi tiết về phần này, nếu chưa cài thì bạn có thể tham khảo làm thêm tại bài viết sau.

Dưới đây là một đoạn code đơn giản để bạn sử dụng cảm biến khoảng cách HC SR04 để đo khoảng cách:

const int trigPin = 5;
const int echoPin = 18;

//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distanceCm;
float distanceInch;

void setup() {
  Serial.begin(115200); // Starts the serial communication
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}

void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  
  // Calculate the distance
  distanceCm = duration * SOUND_SPEED/2;
  
  // Convert to inches
  distanceInch = distanceCm * CM_TO_INCH;
  
  // Prints the distance in the Serial Monitor
  Serial.print("Distance (cm): ");
  Serial.println(distanceCm);
  Serial.print("Distance (inch): ");
  Serial.println(distanceInch);
  
  delay(1000);
}

Bạn hãy upload đoạn code trên vào mạch ESP32 và quan sát kết quả nhé! Dưới đây mình sẽ giải thích chi tiết về từng dòng code để bạn hiểu hơn về cách sử dụng cảm biến khoảng cách HC SR04 với ESP32 và Arduino.

Giải thích chương trình

Khai báo chân Trig và chân Echo:

const int trigPin = 5;
const int echoPin = 18;

Khai báo vận tốc âm thanh của sóng siêu âm trong không khí là 334m/s (vì code đo khoảng cách bằng cảm biến siêu âm này đang dùng đơn vị cm/uS => chúng ta cần quy đổi 334m/s thành 0,034 cm/uS):

#define SOUND_SPEED 0.034

Đổi khoảng cách đo được từ cm thành inch:

#define CM_TO_INCH 0.393701

Khởi tạo các biến:

  • Duration: Lưu khoảng thời gian từ khi sóng siêu âm được gửi đi đến khi phản xạ lại
  • DistanceCm và DistanceInch giúp lưu khoảng cách ở đơn vị cm và đơn vị inch
long duration;
float distanceCm;
float distanceInch;

Setup()

Tạo Serial Monitor ở tốc độ 115200 để in giá trị khoảng cách đo được:

Serial.begin(115200); // Starts the serial communication

Cấu hình Trig là đầu ra (Trig gửi sóng siêu âm đi) và Echo là đầu vào (nhận sóng siêu âm phản hồi và gửi tín hiệu đến mạch ESP32 để đo khoảng cách bằng cảm biến siêu âm):

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input

Loop()

Phát ra sóng siêu âm khi cho chân Trig ở mức HIGH. Lưu ý rằng trước đó chúng ta cần để chân Trig ở mức LOW (không phát sóng siêu âm):

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

Chúng ta sử dụng câu lệnh sau để đo thời gian truyền sóng siêu âm:

duration = pulseIn(echoPin, HIGH);

Lưu ý: Hàm pulseI() sẽ đọc tín hiệu xung HIGH hoặc LOW trên chân, chúng cần thông tin là chân nào và trạng thái của xung để trả về kết quả là thời gian, tính bằng đơn vị micro giây. Độ dài xung tương ứng với thời gian sóng siêu âm đi tới vật thể cộng với thời gian sóng siêu âm phản xạ về

Khi đã có thời gian, chúng ta chỉ cần tính khoảng cách đến vật thể, bằng công thức sau:

distanceCm = duration * SOUND_SPEED/2;

Đổi khoảng cách từ cm sang inch:

distanceInch = distanceCm * CM_TO_INCH;

In khoảng cách đo được ra màn hình Serial:

Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);

Kết quả dự án đo khoảng cách bằng cảm biến siêu âm

Nạp chương trình vào board và bắt đầu sử dụng cảm biến khoảng cách HC SR04 để đo khoảng cách nhé!

Bạn hãy mở Serial Monitor (tốc độ truyền 115200), khởi động lại board mạch. Lúc đó, mạch sẽ bắt đầu đo khoảng cách bằng cảm biến siêu âm và in kết quả ra màn hình cho bạn quan sát, ví dụ:

Kết quả dự án đo khoảng cách bằng cảm biến siêu âm

Lời kết

Trên đây, IoTZone đã hướng dẫn cách sử dụng cảm biến khoảng cách HC SR04 để đo khoảng cách với mạch ESP32 và Arduino IDE. Đây chỉ là hướng dẫn cơ bản nhất, bạn hãy kết hợp thêm với các phần cứng khác như màn hình OLED, LCD, loa phát âm thanh,… để làm các dự án sinh động hơn nhé! Chúc các bạn thành công.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *