سنسور HC-SR04 با ارسال امواج فراصوت و اندازهگیری زمان بازگشت پژواک، فاصلهٔ یک جسم را از ۲ سانتیمتر تا حدود ۴ متر تشخیص میدهد. این سنسور در پروژههای رباتیک (تشخیص مانع)، پارکینگ هوشمند و اندازهگیری سطح مایعات بسیار پرکاربرد است.
نحوهٔ کارکرد سنسور
پایهٔ TRIG یک پالس کوتاه ۱۰ میکروثانیهای دریافت میکند تا سنسور موج فراصوت بفرستد؛ سپس پایهٔ ECHO به مدت زمانی که موج طول کشیده تا برگردد، در وضعیت HIGH میماند. تابع استاندارد آردوینو pulseIn() دقیقاً همین مدتزمان را اندازه میگیرد — معادل time_pulse_us() در میکروپایتون.
const int TRIG_PIN = 5;
const int ECHO_PIN = 18;
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // حداکثر ۳۰ میلیثانیه انتظار
if (duration == 0) {
return -1; // تایماوت / پاسخی دریافت نشد
}
return (duration * 0.0343) / 2;
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
float d = readDistanceCm();
if (d >= 0) {
Serial.print("فاصله: ");
Serial.print(d);
Serial.println(" سانتیمتر");
} else {
Serial.println("پاسخی دریافت نشد");
}
delay(500);
}پایهٔ ECHO این سنسور معمولاً ۵ ولت خروجی میدهد که برای GPIO سهولتی ESP32 خطرناک است؛ حتماً از یک تقسیمکنندهٔ ولتاژ (دو مقاومت) استفاده کنید یا از نسخهٔ ۳٫۳ ولتی این سنسور (مثل RCWL-1601) بهره ببرید.
برای اجرای دقیق کد بالا (با پایههای TRIG=5, ECHO=18)، یک پروژهٔ خالی Arduino/ESP32 در Wokwi بسازید.
ساخت پروژهٔ خالی Arduino/ESP32 در Wokwi ↗کارگاه عملی: وقتی فاصله کمتر از ۱۰ سانتیمتر شد، یک LED هشدار را روشن کنید — پایهٔ اول یک سیستم سادهٔ تشخیص مانع برای ربات.