📏 سنسور فاصله اولتراسونیک (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", [] ]
  ]
}
پایه در ووکویوصل به
VCCuno:5V
TRIGuno:9
ECHOuno:10
GNDuno:GND.1

LED هشدار را برای کوتاه ماندن مثال بدون مقاومت گذاشتیم؛ روی برد واقعی یک مقاومت ۲۲۰ اهم سری بگذار.

سیم‌کشی با آردوینو

پایه‌ی HC-SR04وصل به
VCC5V
TRIGپین 9
ECHOپین 10 (روی بردهای ۳٫۳ ولتی از راه مقسم ۱k و ۲k)
GNDGND
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: چاپ کنی، در نمودار سریال هم خط قشنگی می‌گیری.

دو نکته‌ی دقت که در شبیه‌ساز دیده نمی‌شوند ولی روی میز مهم‌اند: سرعت صوت با دما عوض می‌شود (حدود ۳۳۱ متر بر ثانیه در صفر درجه و حدود ۳۵۲ در سی‌وپنج درجه)، پس در تابستان و زمستان چند درصد اختلاف می‌بینی. و مخروط دید سنسور حدود ۱۵ درجه است؛ جسمی که کمی کنار باشد، دیده نمی‌شود یا لبه‌ی میز به‌جایش اندازه گرفته می‌شود. برای عدد پایدارتر، سه اندازه‌گیری بگیر و عدد وسطی (میانه) را نگه دار.

اشتباه‌های رایج

آموزش‌های مرتبط

سؤال‌های رایج

در ووکوی چطور فاصله‌ی سنسور HC-SR04 را عوض کنم؟

شبیه‌سازی را اجرا کن و روی خود سنسور کلیک کن؛ یک لغزنده ظاهر می‌شود که فاصله‌ی جسم فرضی را تعیین می‌کند. عدد سریال مانیتور باید با همان لغزنده تغییر کند.

چرا HC-SR04 گاهی صفر یا عدد خیلی بزرگ می‌دهد؟

یعنی پژواک درست برنگشته است: جسم خیلی دور، خیلی نزدیک (کمتر از حدود ۲ سانتی‌متر)، نرم مثل پارچه یا مورب است. با مهلت در pulseIn این حالت را جدا کن و چند اندازه‌گیری را میانگین بگیر.

HC-SR04 با ESP32 کار می‌کند؟

بله، ولی سنسور ۵ ولتی است و ECHO پالس ۵ ولتی می‌دهد. سنسور را از ۵ ولت تغذیه کن و ECHO را با یک مقسم مقاومتی به حدود ۳٫۳ ولت برسان تا به پایه‌ی ESP32 آسیب نزند.

📖 طرز کار، مشخصات فنی و نکته‌های خرید این قطعه در دانشنامه‌ی تینکرکد فارسی: سنسور فاصله اولتراسونیک (HC-SR04) آمده است.

آموزش‌هایی که از این قطعه استفاده می‌کنند

🦇

فاصله‌سنج اولتراسونیک 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)

همه‌ی ۱۰۵ قطعه ← · آموزش مدار

سنسور فاصله اولتراسونیک (HC-SR04) را در شبیه‌ساز امتحان کن 🚀