Giới thiệu sản phẩm
#define trigPin 5
#define echoPin 4
#define redPin 9
#define yellowPin 10
#define greenPin 8
long previousDistance = 0; // Khoảng cách trước khi đo
int peopleCount = 0; // Biến đếm số người đi qua
void setup() {
// Cài đặt các chân
pinMode(trigPin, OUTPUT); // Cảm biến siêu âm: Chân Trig là OUTPUT
pinMode(echoPin, INPUT); // Cảm biến siêu âm: Chân Echo là INPUT
pinMode(redPin, OUTPUT); // Đèn đỏ là OUTPUT
pinMode(yellowPin, OUTPUT); // Đèn vàng là OUTPUT
pinMode(greenPin, OUTPUT); // Đèn xanh là OUTPUT
Serial.begin(115200); // Khởi tạo Serial Monitor để hiển thị khoảng cách và số người
}
void loop() {
// Gửi xung siêu âm
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Đọc thời gian phản hồi của xung siêu âm
long duration = pulseIn(echoPin, HIGH); // Đo thời gian nhận phản hồi xung
// Tính khoảng cách (cm)
float distance = duration * 0.034 / 2; // Công thức tính khoảng cách
// Hiển thị khoảng cách lên Serial Monitor
//Serial.print("Khoang cach: ");
//Serial.print(distance);
//Serial.println(" cm");
// Điều kiện phát hiện người đi qua (khoảng cách thay đổi đáng kể)
if (abs(distance - previousDistance) > 5 && distance < 10) {
// Nếu khoảng cách thay đổi đáng kể và vật thể gần (dưới 100cm), coi như có người đi qua
peopleCount++; // Tăng số người đi qua
// Hiển thị số người đã đếm lên Serial Monitor
Serial.print("So nguoi da di qua: ");
Serial.println(peopleCount);
// Cập nhật khoảng cách trước đó
previousDistance = distance;
// Điều khiển đèn giao thông dựa trên số người đi qua
if (peopleCount < 5) { // Nếu có ít người đi qua
digitalWrite(redPin, HIGH); // Bật đèn đỏ
digitalWrite(greenPin, LOW); // Tắt đèn xanh
digitalWrite(yellowPin, LOW); // Tắt đèn vàng
} else if (peopleCount < 10) { // Nếu có một số người đi qua
digitalWrite(redPin, LOW); // Tắt đèn đỏ
digitalWrite(greenPin, LOW); // Tắt đèn xanh
digitalWrite(yellowPin, HIGH); // Bật đèn vàng
} else { // Nếu có nhiều người đi qua
digitalWrite(redPin, LOW); // Tắt đèn đỏ
digitalWrite(greenPin, HIGH); // Bật đèn xanh
digitalWrite(yellowPin, LOW); // Tắt đèn vàng
}
delay(500); // Thêm một chút độ trễ trước khi đo lại
}
}
Hình ảnh sản phẩm

Sản phẩm cùng tác giả
Sản phẩm liên quan
Không có sản phẩm nào
Đăng nhập để tham gia bình luận