Search…

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

10/08/20206 min read
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.

Đố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.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024