📏 سنسور فاصله اولتراسونیک (HC-SR04) (HC-SR04 Ultrasonic Sensor)
| اسم انگلیسی | HC-SR04 Ultrasonic Sensor |
|---|---|
| در ووکوی (Wokwi) | wokwi-hc-sr04 |
| دسته | 🌡️ سنسورها |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
سنسور فاصله اولتراسونیک HC-SR04 (HC-SR04 Ultrasonic Sensor) مثل خفاش کار میکند: یک بلندگوی کوچک صدای ۴۰ کیلوهرتز (بالاتر از شنوایی ما) میفرستد، گیرندهی کناری پژواک را میشنود و سنسور مدت رفتوبرگشت را به شکل طول یک پالس روی پایهی ECHO میدهد. آردوینو این زمان را به سانتیمتر تبدیل میکند؛ از حدود ۲ سانتیمتر تا حدود ۴ متر. سنسور دندهعقب، ربات مانعگریز، سطل زبالهی خودکار و قدسنج پروژههای همیشگیاش هستند.
HC-SR04 در ووکوی (Wokwi)
شناسهی این سنسور در ووکوی wokwi-hc-sr04 است با پایههای VCC، TRIG، ECHO و GND. نکتهی جذابش این است که حین اجرای شبیهسازی روی سنسور کلیک میکنی و با یک لغزنده فاصلهی جسم را عوض میکنی؛ یعنی بدون دست تکان دادن جلوی سنسور، کد هشدار را تست میکنی.
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 100, "left": 0 },
{ "type": "wokwi-hc-sr04", "id": "sonar", "top": -80, "left": 60 },
{ "type": "wokwi-led", "id": "led1", "top": -60, "left": 260, "attrs": { "color": "red" } }
],
"connections": [
[ "uno:5V", "sonar:VCC", "red", [] ],
[ "uno:9", "sonar:TRIG", "orange", [] ],
[ "uno:10", "sonar:ECHO", "blue", [] ],
[ "uno:GND.1", "sonar:GND", "black", [] ],
[ "uno:13", "led1:A", "green", [] ],
[ "uno:GND.1", "led1:C", "black", [] ]
]
}
| پایه در ووکوی | وصل به |
|---|---|
| VCC | uno:5V |
| TRIG | uno:9 |
| ECHO | uno:10 |
| GND | uno:GND.1 |
LED هشدار را برای کوتاه ماندن مثال بدون مقاومت گذاشتیم؛ روی برد واقعی یک مقاومت ۲۲۰ اهم سری بگذار.
سیمکشی با آردوینو
| پایهی HC-SR04 | وصل به |
|---|---|
| VCC | 5V |
| TRIG | پین 9 |
| ECHO | پین 10 (روی بردهای ۳٫۳ ولتی از راه مقسم ۱k و ۲k) |
| GND | GND |
| LED هشدار | پین 13 ← مقاومت ۲۲۰ اهم ← آند، کاتد به GND |
کد نمونه
// HC-SR04: distance in cm, with a timeout and a "too close" LED.
const int TRIG = 9;
const int ECHO = 10;
const int LED = 13;
const int ALARM_CM = 20;
void setup() {
Serial.begin(9600);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(LED, OUTPUT);
}
long readCm() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH); // a 10 us pulse starts one measurement
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long us = pulseIn(ECHO, HIGH, 30000); // give up after 30 ms (about 5 m)
if (us == 0) return -1; // no echo came back
return us / 58; // about 58 us per cm, there and back
}
void loop() {
long cm = readCm();
if (cm < 0) {
Serial.println("out of range");
} else {
Serial.print("distance:");
Serial.println(cm);
}
digitalWrite(LED, (cm > 0 && cm < ALARM_CM) ? HIGH : LOW);
delay(100); // at least ~60 ms between pings
}
عدد ۵۸ از سرعت صوت میآید: صدا در هوا حدود ۲۹ میکروثانیه برای هر سانتیمتر وقت میگذارد و چون مسیر رفت و برگشت است، دو برابرش میشود. اگر خروجی را با قالب distance: چاپ کنی، در نمودار سریال هم خط قشنگی میگیری.
دو نکتهی دقت که در شبیهساز دیده نمیشوند ولی روی میز مهماند: سرعت صوت با دما عوض میشود (حدود ۳۳۱ متر بر ثانیه در صفر درجه و حدود ۳۵۲ در سیوپنج درجه)، پس در تابستان و زمستان چند درصد اختلاف میبینی. و مخروط دید سنسور حدود ۱۵ درجه است؛ جسمی که کمی کنار باشد، دیده نمیشود یا لبهی میز بهجایش اندازه گرفته میشود. برای عدد پایدارتر، سه اندازهگیری بگیر و عدد وسطی (میانه) را نگه دار.
اشتباههای رایج
pulseInبدون مهلت: وقتی پژواکی برنگردد تا یک ثانیه منتظر میماند و کل برنامه کند میشود. عدد سوم (مهلت) را بگذار.- اندازهگیریهای پشتسرهم: کمتر از حدود ۶۰ میلیثانیه فاصله یعنی پژواک قبلی را دوباره میشنوی.
- جسم نرم یا مورب: پارچه، اسفنج و دیوار کج صدا را برنمیگردانند؛ برای تست از یک سطح صاف روبهرو استفاده کن.
- دو سنسور همزمان: صدای یکی را دیگری میشنود. آنها را به نوبت فعال کن.
آموزشهای مرتبط
- فاصلهسنج اولتراسونیک HC-SR04 با آردوینو
- پارکینگ هوشمند با دو سنسور اولتراسونیک
- HC-SR04 با میکروپایتون روی پیکو
- پروژهی رادار سروو
- درس سنسور پارک
سؤالهای رایج
در ووکوی چطور فاصلهی سنسور HC-SR04 را عوض کنم؟
شبیهسازی را اجرا کن و روی خود سنسور کلیک کن؛ یک لغزنده ظاهر میشود که فاصلهی جسم فرضی را تعیین میکند. عدد سریال مانیتور باید با همان لغزنده تغییر کند.
چرا HC-SR04 گاهی صفر یا عدد خیلی بزرگ میدهد؟
یعنی پژواک درست برنگشته است: جسم خیلی دور، خیلی نزدیک (کمتر از حدود ۲ سانتیمتر)، نرم مثل پارچه یا مورب است. با مهلت در pulseIn این حالت را جدا کن و چند اندازهگیری را میانگین بگیر.
HC-SR04 با ESP32 کار میکند؟
بله، ولی سنسور ۵ ولتی است و ECHO پالس ۵ ولتی میدهد. سنسور را از ۵ ولت تغذیه کن و ECHO را با یک مقسم مقاومتی به حدود ۳٫۳ ولت برسان تا به پایهی ESP32 آسیب نزند.
آموزشهایی که از این قطعه استفاده میکنند
فاصلهسنج اولتراسونیک HC-SR04 با آردوینو
سنسور اولتراسونیک HC-SR04 با میکروپایتون روی رزبری پای پیکو (time_pulse_us)
۳۰ ایده پروژه اینترنت اشیا با ESP32، از مبتدی تا پیشرفته (با قطعهها و نقطهی شروع)
پارکینگ هوشمند با آردوینو: دو سنسور اولتراسونیک، راهبند سروو و نمایش جای خالی روی LCD
قطعههای دیگرِ سنسورها
سنسور دما و رطوبت DHT11 / DHT22
DHT22 / DHT11 Temperature & Humidity Sensor
سنسور نور LDR (فتورزیستور)
Photoresistor (LDR)
سنسور حرکت PIR
PIR Motion Sensor (HC-SR501)
سنسور دما TMP36 / LM35
TMP36 / LM35 Temperature Sensor
سنسور شیب (تیلت)
Tilt Sensor (SW-520D)
گیرندهی مادون قرمز
IR Receiver (TSOP / VS1838B)