[{"data":1,"prerenderedAt":13},["ShallowReactive",2],{"blog:ultrasonic-hc-sr04":3},{"category":4,"cover_image":5,"html":6,"published_at":7,"seo_description":8,"seo_title":9,"slug":10,"sort_order":11,"title_fa":12},"sensors-inputs","\u002Fblog\u002Fultrasonic-hc-sr04.jpg","\u003Cp>در فصل «سنسور فاصله \u003Ccode dir=\"ltr\">HC-SR04\u003C\u002Fcode>» اولین «چشم» را به ربات دادیم؛ حسگری که می‌فهمد جلوی ربات چیزی هست یا نه و چقدر دور است. جالب اینجاست که این چشم اصلاً از نور استفاده نمی‌کند، بلکه از \u003Cstrong>صدا\u003C\u002Fstrong>؛ دقیقاً مثل کاری که خفاش‌ها و دلفین‌ها در تاریکی می‌کنند.\u003C\u002Fp>\n\n\u003Ch2>چطور واقعاً کار می‌کند\u003C\u002Fh2>\n\u003Cp>روی این ماژول دو استوانه می‌بینی: یکی بلندگو و یکی میکروفون. کارش را می‌شود در چهار قدم فهمید:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>تو یک پالسِ کوتاه (حدود ۱۰ میکروثانیه) به پایه‌ی \u003Ccode dir=\"ltr\">Trig\u003C\u002Fcode> می‌فرستی و می‌گویی «شروع کن».\u003C\u002Fli>\n\u003Cli>ماژول چند پالسِ صوتی با فرکانس \u003Ccode dir=\"ltr\">40 kHz\u003C\u002Fcode> بیرون می‌فرستد. این صدا \u003Cstrong>فراصوت\u003C\u002Fstrong> است، یعنی آن‌قدر زیر و تیز که گوشِ آدم اصلاً نمی‌شنودش.\u003C\u002Fli>\n\u003Cli>صدا در هوا جلو می‌رود، به مانع می‌خورد و مثل پژواک برمی‌گردد.\u003C\u002Fli>\n\u003Cli>پایه‌ی \u003Ccode dir=\"ltr\">Echo\u003C\u002Fcode> دقیقاً به‌اندازه‌ی مدتِ رفت‌وبرگشتِ صدا «۱» می‌ماند. پس هرچه مانع دورتر باشد، این زمان بیشتر است.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>حالا چطور از زمان به فاصله برسیم؟ سرعت صوت در هوا حدود \u003Ccode dir=\"ltr\">343 m\u002Fs\u003C\u002Fcode> است. اگر زمانِ رفت‌وبرگشت را داشته باشی، فاصله برابر است با سرعت ضرب‌در زمان، \u003Cstrong>تقسیم بر ۲\u003C\u002Fstrong>. چرا تقسیم بر ۲؟ چون صدا مسیر را دو بار طی کرده: یک‌بار رفت تا مانع و یک‌بار برگشت، ولی ما فقط فاصله‌ی یک‌طرفه را می‌خواهیم.\u003C\u002Fp>\n\u003Cp>اگر حساب کنی، می‌بینی که صدا برای طیِ هر سانتی‌متر (رفت‌وبرگشت) حدود ۵۸ میکروثانیه وقت می‌گیرد. برای همین یک قاعده‌ی سرانگشتیِ قشنگ داریم: \u003Cstrong>فاصله به سانتی‌متر برابر است با زمانِ اکو به میکروثانیه، تقسیم بر ۵۸\u003C\u002Fstrong>. همین یک تقسیم، هم ضرب در سرعتِ صوت و هم تقسیم بر ۲ را با هم انجام داده است.\u003C\u002Fp>\n\u003Cp>دو نکته‌ی ظریف هم خوب است بدانی. اول این‌که این سنسور مثل یک لیزرِ نازک جلو را نمی‌بیند؛ صدا به‌شکل یک \u003Cstrong>مخروط\u003C\u002Fstrong> پخش می‌شود، پس مانعی که کمی کنارِ محور باشد هم دیده می‌شود و همین گاهی خطا می‌سازد. به همین دلیل در ربات‌های واقعی چند بار پشت‌سرهم اندازه می‌گیرند و میانگین یا میانه را برمی‌دارند تا عددِ پرشی و اشتباه حذف شود. دوم این‌که سرعتِ صوت با دما کمی تغییر می‌کند؛ در هوای گرم‌تر صدا کمی تندتر می‌رود، برای همین در کارهای خیلی دقیق، دما را هم در محاسبه دخالت می‌دهند.\u003C\u002Fp>\n\n\u003Ch2>کاربردهای واقعی\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>سنسورهای پارکِ خودرو که وقتی به مانع نزدیک می‌شوی بوق می‌زنند.\u003C\u002Fli>\n\u003Cli>دوری‌گزینی از مانع در ربات‌های متحرک.\u003C\u002Fli>\n\u003Cli>درها و شیرهای آبِ خودکار که حضورِ آدم را حس می‌کنند.\u003C\u002Fli>\n\u003Cli>اندازه‌گیریِ سطحِ مایع در مخزن‌ها و سیلوهای صنعتی، بدون تماس با مایع.\u003C\u002Fli>\n\u003Cli>حفظ ارتفاعِ پروازِ پهپاد نسبت به زمین.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>در عمل: سیم‌کشی و کد\u003C\u002Fh2>\n\u003Cp>پایه‌ی \u003Ccode dir=\"ltr\">Trig\u003C\u002Fcode> را به \u003Ccode dir=\"ltr\">GPIO 5\u003C\u002Fcode> و \u003Ccode dir=\"ltr\">Echo\u003C\u002Fcode> را به \u003Ccode dir=\"ltr\">GPIO 18\u003C\u002Fcode> وصل کن، تغذیه به \u003Ccode dir=\"ltr\">5V\u003C\u002Fcode> و \u003Ccode dir=\"ltr\">GND\u003C\u002Fcode>. تابعِ زیر یک پالس می‌فرستد، طولِ اکو را با \u003Ccode dir=\"ltr\">time_pulse_us\u003C\u002Fcode> می‌گیرد و بر ۵۸ تقسیم می‌کند:\u003C\u002Fp>\n\u003Cpre class=\"code-block\" dir=\"ltr\">\u003Ccode dir=\"ltr\">from machine import Pin\nimport machine\nimport time\n\ntrig = Pin(5, Pin.OUT)\necho = Pin(18, Pin.IN)\n\ndef read_distance_cm():\n    trig.value(0)\n    time.sleep_us(2)\n    trig.value(1)\n    time.sleep_us(10)\n    trig.value(0)\n    t = machine.time_pulse_us(echo, 1, 30000)\n    if t &lt; 0:\n        return -1   # timeout\n    return t \u002F\u002F 58\n\nwhile True:\n    print(read_distance_cm(), \"cm\")\n    time.sleep_ms(200)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2>اشتباه‌های رایج\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>سطح‌های نرم یا کج:\u003C\u002Fstrong> پارچه، اسفنج و دیوارِ کج صدا را جذب می‌کنند یا به بیرون منعکس می‌کنند و اندازه‌گیری خطا می‌دهد.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>خیلی نزدیک بودن:\u003C\u002Fstrong> فاصله‌های کمتر از حدود ۲ سانتی‌متر قابل‌اعتماد نیست.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>ولتاژِ پایه‌ی \u003Ccode dir=\"ltr\">Echo\u003C\u002Fcode>:\u003C\u002Fstrong> در دنیای واقعی خروجیِ \u003Ccode dir=\"ltr\">Echo\u003C\u002Fcode> پنج‌ولتی است و باید با یک تقسیم‌کننده‌ی ولتاژ به پایه‌ی ۳٫۳ ولتیِ \u003Ccode dir=\"ltr\">ESP32\u003C\u002Fcode> برسد.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>نگذاشتنِ \u003Ccode dir=\"ltr\">timeout\u003C\u002Fcode>:\u003C\u002Fstrong> اگر پژواکی برنگردد و منتظر بمانی، برنامه قفل می‌کند؛ برای همین در کد یک سقفِ زمانی گذاشته‌ایم.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>همین حالا امتحان کن\u003C\u002Fh2>\n\u003Cp>مانع را جلوی سنسور جابه‌جا کن و عددِ فاصله را زنده ببین: \u003Ca href=\"\u002Flab\u002Fembed\u002Fterm-2-sensors\u002Fsession-09-ultrasonic\">شبیه‌ساز اولتراسونیک را باز کن\u003C\u002Fa>. برای یادگیری کاملِ فرمول و ترمزِ خودکار، سراغ \u003Ca href=\"\u002Fcourses\u002Fairo\u002Flessons\u002Ft2\u002Fs09-ultrasonic\">فصل سنسور فاصله\u003C\u002Fa> برو.\u003C\u002Fp>","2026-07-18T11:30:00Z","سنسور فاصله اولتراسونیک HC-SR04 با فرستادن صدای فراصوت و اندازه‌گیری زمان اکو فاصله را حساب می‌کند؛ سرعت صوت، فرمول تقسیم بر ۵۸ و کاربردهای واقعی.","سنسور اولتراسونیک HC-SR04 چطور فاصله را می‌سنجد؟ | یادستان","ultrasonic-hc-sr04",80,"سنسور فاصله اولتراسونیک HC-SR04 چطور فاصله را می‌سنجد؟",1784827101873]