STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Đo Khoảng Cách Trong Không Gian Với Cảm Biến SRF05 Và Arduino

    Hướng dẫn sử dụng cảm biến sóng siêu âm SRF05 để đo khoảng cách từ vật cản và code mẫu với Arduino.
    Vũ Quang Huy

    Vũ Quang Huy

    29/09/2014
    10/08/2020
    6 phút đọc
    Đo Khoảng Cách Trong Không Gian Với Cảm Biến SRF05 Và Arduino

    Đối với robot, khi ở chế độ tự động, nó phải lấy thông tin của môi trường xung quanh như: khoảng cách, nhiệt độ, độ ẩm, ánh sáng, ... sau đó tiến hành phân tích các dữ liệu, cuối cùng ra quyết định. Ví dụ như robot hút bụi tự động tìm đường đi thì nó phải tính được phía trước có vật cản hay không, và tiến hành đi tới hay rẽ sang một hướng khác.

    Để lấy được thông tin các vật cản phía trước có thể sử dụng nhiều loại cảm biến, trong đó có thể ứng dụng có thể dùng cảm biến khoảng cách bằng sóng âm SRF05.

    Thiết bị cần chuẩn bị

    • 1 x Arduino Uno R3.
    • 1 x cảm biến siêu âm SRF05.
    • 1 x breadboard để cắm mạch test.
    • Dây cắm các loại.

    Cảm biến siêu âm SRF05

    Sóng siêu âm (sonar) là một loại sóng cao tầng mà con người không thể nghe thấy. Tuy nhiên, 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. Các loài động vật như dơi, cá heo, ... dùng sóng siêu âm để liên lạc với nhau, để săn mồi hay định vị trong không gian.

    Nguyên tắc mà các loài vật sử dụng sóng âm để định vị rất đơn giản, có thể tóm gọn trong 3 bước sau:

    1. Vật chủ phát ra sóng âm.
    2. Sóng âmva chạm với môi trường xung quanh và phản xạ lại.
    3. Dựa vào thời gian phát/thu, khoảng cách giữa vật chủ và môi trường xung quanh tính ra.

    Tính toán khoảng cách cũng phụ thuộc rất nhiều vào môi trường truyền dẫn, ví dụ như sóng âm truyền trong môi trường nước hay kim loại sẽ nhanh hơn rất nhiều so với sóng âm được truyền trong môi trường không khí. Sóng âm không thể truyền được trong môi trường chân không.

    Theo nguyên tắc này, dựa vào sự tiến bộ của khoa học công nghệ hiện đại, ứng dụng của sóng âm trong cuộc sống rất nhiều, có thể kể đến như thiết bị định vị dưới biển của tàu ngầm, thiết bị radar, các thiết bị đo khoảng cách môi trường như đo độ sâu của đại dương, ...

    Cá heo, dơi, tàu ngầm dùng sóng âm.

    Cảm biến siêu âm SRF05 cũng hoạt động theo nguyên tắc trên, thiết bị gồm có 2 loa - thu và phát - cùng với 5 chân để kết nối với Arduino. Theo tài liệu của nhà sản xuất thì tầm hoạt động tối đa của cảm biến này nằm trong khoảng 5m.

    Cảm biến siêu âm SRF05
    Cảm biến siêu âm SRF05

    Chức năng của các chân này như sau:

    • Vcc: cấp nguồn cho cảm biến.
    • Trigger: kích hoạt quá trình phát sóng âm, quá trình kích hoạt khi một chu kì điện cao / thấp diễn ra.
    • Echo: bình thường sẽ ở trạng thái 0V, được kích hoạt lên 5V ngay khi có tín hiệu trả về, sau đó trở về 0V.
    • Gnd: nối với cực âm của mạch.
    • OUT: không sử dụng.

    Dựa theo mô tả trên, tiến hành lắp mạch cảm biến siêu âm.

    Lắp đặt cảm biến

    Sơ đồ lắp:

    • Vcc: nối với nguồn 5V của Adruino.
    • Gnd: nối với PIN GND.
    • Trigger: nối với PIN 8.
    • Echo: nối với PIN 7.
    Sơ đồ mạch test cảm biến siêu âm SRF05 và Arduino.
    Sơ đồ mạch

    Mạch sau khi hoàn tất lắp đặt

    Sơ đồ mạch test cảm biến siêu âm SRF05 và Arduino thực tế.
    Sơ đồ mạch test cảm biến siêu âm SRF05 và Arduino thực tế.

    Lập trình điều khiển

    Lập trình cho cảm biến mỗi chu kì 1s kích hoạt cảm biến và kiểm tra xem có vật cản ở xung quanh hay không.

    1. Thực hiện mỗi chu kì 1s.
    2. Kích hoạt cảm biến bằng việc bật PIN Trigger theo thứ tự LOW - HIGH - LOW qua hàm digitalWrite.
    3. Tính toán khoảng cách thu được bằng việc sử dụng hàm pulseIn và các công thức tính.
    4. Nếu khoảng cách trả về < 0.5m thì in ra thông báo có vật cản.
    5. Lặp lại quy trình này.

    Đoạn code thực hiện công việc này như sau:

    #define TRIG_PIN 8
    #define ECHO_PIN 7
    #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);
    }
    • Hàm getDistance: trả về khoảng cách từ cảm biến đến các vật thể gần nó - sẽ được đề cập chi tiết ở dưới.
    • Hàm setup(): cung cấp các tham số cần thiết cho chương trình.
      • Serial.begin(9600): khai báo sử dụng Output của Adruino IDE, để bật cửa sổ output ta dùng menu Tools > Serial Monitor hay tổ hợp phím Ctrl + Shift + M.
      • pinMode(TRIG_PIN, OUTPUT): khai báo sử dụng trigger pin (PIN 8) để xuất tín hiệu.
      • pinMode(ECHO_PIN, INPUT): khai báo sử dụng echo pin (PIN 7) để nhận tín hiệu.
    • Hàm loop():
      • if (distance <= 0) ... else ...: tuỳ thuộc vào khoảng cách trả về mà có xử lý tương ứng.
      • Sau đó delay(1000): dừng 1 giây, trước khi Arduino gọi lại loop().

    Hàm getDistance()

    Hàm getDistance() trả về khoảng cách từ cảm biến siêu âm đến vật thể gần nhất (nếu có) hay trả về 0 nếu xung quanh cảm biến không có bất kỳ vật thể nào. Để sử dụng được cảm biến, cần truyền tín hiệu cho PIN trigger theo chu kỳ LOW - HIGH - LOW.

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

    Chờ tín hiệu phản hồi lại qua PIN 7 - echo. Arduino cung cấp hàm pulseIn có tác 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 PIN chỉ định trước, hay trả về 0 nếu không nhận được tín hiệu / quá thời gian timeout.

    Cú pháp của hàm này như sau:

    pulseIn(pin, value) 
    pulseIn(pin, value, timeout)

    Với các tham số:

    • PIN chờ
    • Giá trị chờ
    • Thời gian chờ tín hiệu, mặc định là 1s.

    Sau khi có thời gian, tính toán khoảng cách bằng công thức:

    distanceCm = duration / 29.1 / 2;

    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 tính được sóng âm di chuyển 1 cm trong không khí sẽ mất 1000 / 344 * 100 ~= 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, vì vậy chia đôi sẽ ra được quãng đường mà sóng âm đã đi, cuối cùng có được khoảng cách.

    Kết quả thực thi

    Kết quả của cảm biến siêu âm.
    0 Bình luận
    Điện Tử Ứng Dụng

    Điện Tử Ứng Dụng

    Kiến thức điện tử, Arduino, Raspberry Pi, giới thiệu sản phẩm.

    Đề xuất

      Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
      STDIO

      Trang chính

      Công ty TNHH STDIO

      30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn

      383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

      Đã thông báo Bộ Công Thương
      ©STDIO, 2013 - 2020