- Cảm biến siêu âm là gì?
- Đ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
Vcc | 5V |
Trig | Một chân Digital output |
Echo | Một chân Digital input |
GND | GND |
Để đ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ả.
إرسال تعليق