Cảm biến siêu âm HC-SR04 và cách sử dụng

  1. Cảm biến siêu âm là gì?
Cảm biến siêu âm HC-SR04 được sử dụng rất phổ biến để xác định khoảng cách vì RẺ và CHÍNH XÁC. Cảm biến HC-SR04 sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 300cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình.
Cảm biến siêu âm HC-SR04 sử dụng nguyên lý phản xạ sóng siêu âm. Cảm biến gồm 2 module.1 module phát ra sóng siêu âm và 1 module thu sóng siêu âm phản xạ về. Đầu tiên cảm biến sẽ phát ra 1 sóng siêu âm với tần số 40khz. Nếu có chướng ngại vật trên đường đi, sóng siêu âm sẽ phản xạ  lại và tác động lên module nhận sóng. Bằng cách đo thời gian từ lúc phát đến lúc nhận sóng ta sẽ tính được khoảng cách từ cảm biến đến chướng ngại vật.
2. Thông số kỹ thuật và sơ đồ nối chân.
  • Điện áp: 5V DC
  • Dòng hoạt động: < 2mA
  • Mức cao: 5V
  • Mức thấp: 0V
  • Góc tối đa: 15 độ
  • Khoảng cách: 2cm – 450cm (4.5m)
  • Độ chính xác: 3mm
Vcc5V
TrigMột chân Digital output
EchoMột chân Digital input
GNDGND
             Sơ đồ nối chân giữa cảm biến siêu âm với Arduino
3. Đo khoảng cách bằng cảm biến siêu âm.

Để đo khoảng cách, ta sẽ phát 1 xung rất ngắn (5 microSeconds - ú) từ chân Trig. Sau đó, cảm biến sẽ tạo ra 1 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 (hằng số vật lý), 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 ghi ở dưới đây là của nhà sản xuất test trong điều khiện lý tưởng, còn thực tế thì tùy theo môi trường làm việc của cảm biến.

Hàm đo khoảng cách

void dokhoangcach()

{

  digitalWrite(trig, LOW); 

  delayMicroseconds(2);

  digitalWrite(trig, HIGH);  

  delayMicroseconds(10); 

  digitalWrite(trig, LOW); 

  // Đo độ rộng xung HIGH ở chân echo.

  thoigian = pulseIn(echo, HIGH);

  khoangcach = thoigian / 2 / 29.412;

}

4. Sơ đồ kết nối với Arduino Uno R3 và chương trình mô phỏng đo khoảng cách

Sơ đồ kết nối


Chương trình mô phỏng

const int trig = 12;  //Chân trig nối với chân 12

const int echo = 11; // chân echo nối chân 11

unsigned long thoigian; // Đo thời gian phản hồi

int khoangcach; //Khoảng cách nhận được         

void setup() {

  // put your setup code here, to run once:

  pinMode(trig, OUTPUT); //chân trig là chân OUTPUT

  pinMode(echo, INPUT); //Chân Echo là chân INPUT

  Serial.begin(9600); //Khởi động cổng 9600 để xem kết quả

}

void loop() {

  // put your main code here, to run repeatedly:

  khoangcach = 0;

  dokhoangcach();

  Serial.println(khoangcach);

  //delay(500);

  }

void dokhoangcach()

{

  digitalWrite(trig, LOW); 

  delayMicroseconds(2);

  digitalWrite(trig, HIGH);  //bật chân trig trong 10 micro giây

  delayMicroseconds(10); 

  digitalWrite(trig, LOW); // tắt chân trig

  // Đo độ rộng xung HIGH ở chân echo.

  thoigian = pulseIn(echo, HIGH); //Đo độ rộng xung HIGH ở chân echo

  khoangcach = thoigian / 2 / 29.412; //Tính khoảng cách

}

Giải thích code:

Trong chương trình trên quan trọng nhất là hàm dokhoangcach(). Đầu tiên cấp tín hiệu cho chân trig (bật xung HIGH ở chân 12 sau đó delay 10 micro giây). Ngay từ khi chân trig ở mức HIGH thì chân echo cũng ở mức HIGH, đến khi nhận được tín hiệu phản hồi khi gặp vật cản chân echo sẽ trở về LOW. Bàng cách đo độ rộng xung HIGH chân echo thoigian = pulseIn(echo, HIGH); sẽ biết được thời gian từ lúc phát ra đến khi nhận được tín hiệu phản hồi.

khoangcach = thoigian / 2 / 29.412; thoigian/2 vì chỉ tính khoảng cách 1 chiều, còn 29,412 là đơn vị microSeconds/cm đổi từ 340m/s (tốc độ âm thanh).

Trong vòng lặp loop chỉ cần gọi hàm dokhoangcach() rồi in biến toàn cục khoangcach ra Serial port để xem kết quả.

Nhận xét, góp ý, thắc mắc, câu hỏi của bạn

Mới hơn Cũ hơn