Tác giả: Thợ điện vô duyên - Phạm minh liêm
Hé lô anh em, Vô Duyên lại lên đây!
Bữa nay anh em mình lại tỉ tê chuyện nghề ha.
Anh em muốn tui viết bài thứ mười tám trong chuyên mục "Vô Duyên - Hỏi Đáp Về Smart Home" với chủ đề "Tự học vi điều khiển" đúng không?
Vụ này thì tui khoái nè, vì nó là cái "cần câu cơm" của tui mà.
Ở mấy bài trước, anh em mình đã biết cách điều khiển đồ điện bằng Bluetooth.
Giờ mình học thêm một cái nữa, đó là cách làm một cái máy đo khoảng cách.
Cái này giống như anh em mình có thể đo chiều dài, chiều rộng của một cái phòng mà không cần dùng thước dây.
Nó rất hay, dùng để làm mấy cái xe tự hành hay là hệ thống chống trộm.
Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.
Bài 18: Sử dụng cảm biến siêu âm (HC-SR04) để đo khoảng cách
1. Cảm biến siêu âm là gì?
Nói thẳng luôn, cảm biến siêu âm giống như một con dơi vậy đó.
Nó sẽ phát ra một cái tiếng kêu mà tai người không nghe được, rồi chờ cái tiếng kêu đó dội lại.
Nó sẽ tính toán xem cái tiếng kêu đó đi và về mất bao lâu, từ đó tính ra khoảng cách từ nó tới vật cản.
Loại thông dụng nhất cho anh em mình tự học là HC-SR04.
Nó có 4 chân:
- VCC:
- Nguồn, nối vào 5V.
- GND:
- Đất, nối vào GND.
- Trig (Trigger):
- Chân phát tín hiệu.
- Echo:
- Chân nhận tín hiệu dội lại.
2. Chuẩn bị "đồ nghề"
Để làm bài này, anh em mình cần có:
- Một bo Arduino Uno.
- Một cái cảm biến siêu âm HC-SR04.
- Một cái đèn LED và một điện trở 220 Ohm.
- Vài sợi dây nối.
3. Đấu dây (Mạch điện)
Nói thiệt, cái này quan trọng lắm, anh em làm theo cho kỹ.
- Chân VCC:
- Nối vào chân 5V của Arduino.
- Chân GND:
- Nối vào chân GND của Arduino.
- Chân Trig:
- Nối vào chân số 9 của Arduino.
- Chân Echo:
- Nối vào chân số 10 của Arduino.
Ngoài ra, anh em mình nối thêm cái đèn LED vào chân số 13, để mình thử nghiệm cho dễ.
4. Lập trình và giải thích
Giờ, anh em mình mở phần mềm Arduino IDE lên, rồi copy cái đoạn code dưới đây vào:
// Khai bao chan cho cam bien sieu am
const int trigPin = 9;
const int echoPin = 10;
const int LED_PIN = 13;
// Khai bao bien de luu khoang cach va thoi gian
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // Chan Trig la dau ra
pinMode(echoPin, INPUT); // Chan Echo la dau vao
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600); // Mo cong Serial de xem khoang cach
}
void loop() {
// Bat dau do khoang cach
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Phat tin hieu sieu am trong 10 micro giay
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Do thoi gian tin hieu di va ve
duration = pulseIn(echoPin, HIGH);
// Tinh khoang cach
distance = duration * 0.034 / 2;
// Hien thi khoang cach len man hinh Serial Monitor
Serial.print("Khoang cach: ");
Serial.print(distance);
Serial.println(" cm");
// Neu khoang cach nho hon 10 cm, bat den LED
if (distance < 10 && distance > 0) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
delay(500); // Doi 0.5 giay roi do lai
}
Giải thích:
- "pinMode(trigPin, OUTPUT);" và "pinMode(echoPin, INPUT);":
- Dòng này giống như anh em mình dặn dò Arduino là "Chân "Trig" dùng để phát, chân "Echo" dùng để nhận nha!".
- "digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);":
- Ba câu lệnh này để làm cho chân "Trig" phát ra một xung điện ngắn trong 10 micro giây.
- "duration = pulseIn(echoPin, HIGH);":
- Câu lệnh này hay nè.
- "pulseIn()" sẽ đo xem cái chân "Echo" lên mức HIGH (tức là nhận được tín hiệu dội lại) trong bao lâu.
- "distance = duration * 0.034 / 2;":
- Đây là công thức tính khoảng cách.
- Lấy thời gian (`duration`) nhân với vận tốc âm thanh trong không khí (0.034 cm/micro giây), rồi chia cho 2 (vì thời gian là cả đi lẫn về).
Tổng kết
Tóm lại, bài này anh em mình đã biết cách sử dụng cảm biến siêu âm để đo khoảng cách.
Cái này là bước quan trọng để làm mấy cái xe tự hành tránh vật cản, hay là một cái hệ thống chống trộm, ứng dụng rất hữu ích trong các giải pháp smart home.
Nói nhiêu đó đủ rồi.
Hẹn anh em ở bài viết tiếp theo, mình sẽ học cách làm một cái đồng hồ đo nhiệt độ, độ ẩm và hiển thị lên màn hình LCD!

Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.