سنسور اولتراسونیک آردوینو؛ آموزش HC-SR04 و اتصال
سنسور اولتراسونیک آردوینو یکی از سادهترین و پرکاربردترین روشها
برای اندازهگیری فاصله در پروژههای الکترونیکی است. یکی از محبوبترین ماژولها
برای این کار HC-SR04 است که با ارسال امواج فراصوت و اندازهگیری
زمان برگشت انعکاس، فاصله جسم مقابل خود را محاسبه میکند.
اگر قصد ساخت ربات مسیریاب، سیستم تشخیص مانع، فاصلهسنج، پارکینگ هوشمند،
درب اتوماتیک یا یک پروژه آموزشی با Arduino را دارید، HC-SR04 میتواند
گزینه مناسبی باشد. در این مقاله عملکرد سنسور، پایهها، فرمول محاسبه فاصله،
نحوه اتصال به Arduino، کدنویسی، کتابخانه NewPing، خطاهای رایج و محدودیتهای
این سنسور را بررسی میکنیم.
📌 سنسور اولتراسونیک آردوینو در یک نگاه
HC-SR04
5V
40kHz
حدود 2 تا 400cm
Echo Pulse
Trigger / Echo
سنسور اولتراسونیک آردوینو چیست؟
سنسور اولتراسونیک برای اندازهگیری فاصله از امواج صوتی با فرکانسی بالاتر
از محدوده شنوایی انسان استفاده میکند. در HC-SR04 یک مبدل اولتراسونیک
وظیفه ارسال موج و مبدل دیگر وظیفه دریافت بازتاب آن را بر عهده دارد.
وقتی موج صوتی به یک جسم برخورد میکند، بخشی از آن به سمت سنسور بازمیگردد.
Arduino مدت زمانی را که از ارسال موج تا دریافت Echo طول کشیده اندازهگیری
میکند و با استفاده از سرعت صوت، فاصله جسم را به دست میآورد.
مدل متداول HC-SR04 دارای فرکانس کاری 40kHz و محدوده اسمی حدود 2 تا 400 سانتیمتر
است. مرجع منتشرشده همچنین دقت اسمی حدود 3 میلیمتر و زاویه اندازهگیری حدود
15 درجه را برای این مدل ذکر میکند.
💡 چرا HC-SR04 محبوب است؟
مدار ساده، قیمت مناسب، اتصال آسان به Arduino و امکان تشخیص فاصله بدون تماس
باعث شده HC-SR04 یکی از ماژولهای رایج در پروژههای آموزشی و رباتیک باشد.
HC-SR04 چگونه کار می کند؟
برای شروع اندازهگیری، پایه Trig باید حداقل به مدت 10 میکروثانیه
در وضعیت HIGH قرار بگیرد. سپس سنسور یک بسته 8 پالسی با فرکانس 40kHz ارسال میکند.
پس از ارسال، پایه Echo در حالت HIGH قرار میگیرد و مدت زمانی را
که طول میکشد موج به جسم برخورد کرده و برگردد، نشان میدهد.
Trigger
ارسال پالس شروع اندازهگیری
Ultrasonic Burst
ارسال امواج 40kHz
Echo
دریافت بازتاب موج
Calculation
محاسبه فاصله
پایه های HC-SR04 چیست؟
HC-SR04 معمولاً چهار پایه اصلی دارد: VCC، Trig، Echo و GND.
هر کدام از این پایهها وظیفه مشخصی دارند.
| پایه | نوع | وظیفه |
|---|---|---|
| VCC | Power | تغذیه سنسور |
| Trig | Input | شروع اندازهگیری |
| Echo | Output | مدت زمان بازگشت موج |
| GND | Ground | زمین مدار |
⚠️ Trig و Echo را جابهجا نکنید
Trig ورودی سنسور است و فرمان شروع اندازهگیری را دریافت میکند،
در حالی که Echo خروجی سنسور است و مدت زمان رفتوبرگشت موج را به Arduino
گزارش میدهد.
فرمول محاسبه فاصله در HC-SR04
Arduino در واقع فاصله را مستقیماً از سنسور دریافت نمیکند؛ بلکه مدت زمانی را
که پایه Echo در وضعیت HIGH است اندازهگیری میکند.
رابطه اصلی به شکل زیر است:
سرعت صوت در شرایط معمول تقریباً 340 متر بر ثانیه در نظر گرفته میشود.
اگر زمان را بر حسب میکروثانیه و سرعت صوت را حدود 0.034 سانتیمتر بر
میکروثانیه در نظر بگیریم، میتوان از فرمول زیر استفاده کرد:
مثال محاسبه فاصله
اگر مدت زمان Echo برابر 500 میکروثانیه باشد:
فاصله ≈ 500 × 0.034 ÷ 2 = 8.5 سانتیمتر
این محاسبه همان منطق مورد استفاده در آموزش مرجع برای تبدیل مدت پالس Echo
به فاصله است.
اتصال سنسور اولتراسونیک آردوینو به Arduino Uno
برای یک اتصال ساده میتوان VCC را به 5V، GND را به زمین Arduino،
Trig را به پایه دیجیتال 9 و Echo را به پایه دیجیتال 10 وصل کرد.
این همان سیمکشی پایهای است که در آموزش مرجع نیز استفاده شده است.
| HC-SR04 | Arduino Uno | وظیفه |
|---|---|---|
| VCC | 5V | تغذیه |
| Trig | D9 | Trigger |
| Echo | D10 | Echo |
| GND | GND | زمین |
🔌 اتصال سریع HC-SR04
VCC → Arduino 5V
GND → Arduino GND
Trig → Arduino D9
Echo → Arduino D10
کد سنسور اولتراسونیک آردوینو بدون کتابخانه
اگر میخواهید دقیقاً بفهمید HC-SR04 چگونه کار میکند، بهتر است در ابتدا
بدون کتابخانه آن را راهاندازی کنید. در این روش خودمان پالس Trigger را
تولید میکنیم، مدت زمان Echo را میخوانیم و فاصله را محاسبه میکنیم.
const int trigPin = 9;
const int echoPin = 10;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duration =
pulseIn(echoPin, HIGH, 30000);
if (duration == 0) {
Serial.println("Out of range");
} else {
float distance =
duration * 0.0343 / 2.0;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
delay(300);
}
توضیح کد HC-SR04
ابتدا پایه Trig بهعنوان خروجی و Echo بهعنوان ورودی تنظیم میشود.
سپس Trig برای چند میکروثانیه LOW شده و بعد یک پالس HIGH حدود 10 میکروثانیهای
ارسال میشود.
تابع pulseIn() مدت زمانی را که Echo در وضعیت HIGH قرار دارد
اندازهگیری میکند. این مقدار سپس در سرعت صوت ضرب و بر 2 تقسیم میشود تا
فاصله رفت و برگشت موج به فاصله یکطرفه تبدیل شود.
✅ مزیت این روش
بدون نصب هیچ کتابخانهای میتوانید منطق واقعی سنسور را ببینید و دقیقاً
متوجه شوید Trigger، Echo و محاسبه فاصله چگونه با یکدیگر کار میکنند.
راه اندازی HC-SR04 با کتابخانه NewPing
اگر هدف شما ساخت پروژه است و نمیخواهید منطق اندازهگیری زمان Echo را
در هر برنامه از ابتدا بنویسید، استفاده از کتابخانههایی مانند
NewPing میتواند کار را سادهتر کند. آموزش مرجع نیز از
NewPing برای سادهسازی خواندن فاصله استفاده میکند.
نصب NewPing در Arduino IDE
- Arduino IDE را باز کنید.
- وارد Library Manager شوید.
- عبارت NewPing را جستوجو کنید.
- کتابخانه مناسب را نصب کنید.
برای چنین پروژههایی کتابخانههای اختصاصی HC-SR04 نیز وجود دارند؛
مستندات رسمی Arduino هم یک کتابخانه HC-SR04 را در فهرست کتابخانههای خود
معرفی میکند که برای معماریهای مختلف Arduino ارائه شده است.
مثال پروژه؛ ساخت فاصله سنج با Arduino و HC-SR04
یکی از بهترین پروژههای آموزشی با این سنسور، ساخت یک فاصلهسنج ساده است.
Arduino فاصله را اندازهگیری کرده و مقدار آن را در Serial Monitor نمایش میدهد.
#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
NewPing sonar(
TRIGGER_PIN,
ECHO_PIN,
MAX_DISTANCE
);
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned int distance = sonar.ping_cm();
if (distance == 0) {
Serial.println("Out of range");
} else {
Serial.print("Distance = ");
Serial.print(distance);
Serial.println(" cm");
}
delay(300);
}
چرا HC-SR04 گاهی فاصله را اشتباه نشان می دهد؟
اگر خروجی سنسور ناپایدار است یا فاصلهای غیرمنطقی نمایش داده میشود،
لزوماً ایراد از کدنویسی نیست. ساختار هدف، زاویه قرارگیری سنسور، محیط،
نویز و جنس سطح میتوانند روی نتیجه اثر بگذارند.
1. سطح جسم مناسب نیست
اجسام بسیار نرم، زاویهدار یا سطوحی که امواج را در جهات مختلف بازتاب میکنند
میتوانند اندازهگیری را دشوارتر کنند.
2. جسم بیش از حد نزدیک است
مدل رایج HC-SR04 برای محدودهای حدود 2 سانتیمتر به بالا طراحی شده است؛
بنابراین نباید از آن انتظار اندازهگیری دقیق در فاصلههای بسیار نزدیک داشت.
3. جسم خارج از محدوده است
محدوده اسمی تا حدود 4 متر است، اما در فاصلههای بالا یا شرایط نامناسب محیطی
ممکن است Echo دریافت نشود یا دقت کاهش پیدا کند. منبع مرجع نیز اشاره میکند
که اندازهگیری در فاصلههای بیش از حدود 4 متر قابل اتکا نیست.
4. سنسور مقابل سطح صاف قرار نگرفته است
اگر سطح جسم زاویه زیادی نسبت به سنسور داشته باشد، انرژی صوتی ممکن است
مستقیماً به گیرنده برنگردد.
🚨 یک نکته مهم در عیب یابی
اگر سنسور گاهی صفر یا مقدارهای غیرعادی نشان میدهد، ابتدا سیمکشی،
تغذیه، فاصله جسم، زاویه سطح و زمان Timeout را بررسی کنید؛ قبل از اینکه
سراغ تغییرات پیچیده در کد بروید.
آیا HC-SR04 در هر محیطی دقیق است؟
خیر. دقت اعلامشده برای این سنسور به شرایط آزمایش و مشخصات همان مدل مربوط است.
دما، ویژگیهای سطح، زاویه جسم و شرایط نصب میتوانند بر مسیر انتشار و بازتاب
موج صوتی تأثیر بگذارند.
برای پروژههایی که نیازمند اندازهگیری بسیار دقیق یا محیطهای صنعتی پیچیده هستند،
بهتر است قبل از انتخاب نهایی، نوع سنسور فاصله و شرایط واقعی کار بررسی شود.
حالت 3 سیمه HC-SR04 چیست؟
در اتصال معمول HC-SR04 به دو پایه دیجیتال برای Trig و Echo نیاز داریم.
اما در بعضی کاربردها میتوان هر دو سیگنال را با یک GPIO مدیریت کرد؛
هنگام ارسال Trigger، پایه بهصورت خروجی و سپس برای دریافت Echo بهصورت ورودی
تنظیم میشود.
این روش برای زمانی مفید است که در پروژه چندین ماژول دارید و با کمبود GPIO
مواجه شدهاید. آموزش مرجع نیز نمونهای از اتصال سهسیمه را با اتصال Trig
و Echo به یک پایه ارائه میکند.
🔧 چه زمانی 3-Wire مفید است؟
وقتی تعداد GPIOهای پروژه محدود است و میخواهید یک پایه کمتر مصرف کنید.
البته باید کد و زمانبندی تغییر حالت GPIO را درست مدیریت کنید.
کاربردهای سنسور اولتراسونیک آردوینو
HC-SR04 به دلیل سادگی در پروژههای آموزشی، رباتیک و سیستمهای تشخیص مانع
کاربرد زیادی دارد.
- تشخیص مانع در ربات
- فاصلهسنج دیجیتال
- سیستم پارک و کمک پارک
- درب اتوماتیک
- تشخیص نزدیک شدن اشیا
- اندازهگیری ارتفاع یا سطح در پروژههای ساده
- پروژههای آموزشی Arduino
- کنترل آلارم بر اساس فاصله
🤖 یک کاربرد جذاب
میتوانید یک ربات بسازید که با نزدیک شدن مانع، فاصله را توسط HC-SR04
اندازهگیری کند و قبل از برخورد مسیر خود را تغییر دهد. همین پروژه یکی
از بهترین تمرینها برای یادگیری همزمان سنسور، Arduino و کنترل موتور است.
مزایا و معایب HC-SR04
| مزایا | محدودیتها |
|---|---|
| قیمت مناسب | حساس به شرایط سطح و محیط |
| مدار ساده | برای فاصله بسیار نزدیک مناسب نیست |
| مناسب پروژههای آموزشی | فاصلههای بالا قابل اتکای کمتری دارند |
| اتصال ساده به Arduino | برای کاربردهای صنعتی حساس نیاز به بررسی بیشتر دارد |
برای پروژه HC-SR04 چه قطعاتی لازم است؟
برای یک پروژه ساده فاصلهسنج میتوانید از Arduino، ماژول HC-SR04، بردبورد،
سیم جامپر و منبع تغذیه مناسب استفاده کنید. اگر پروژه رباتیک باشد، احتمالاً
به موتور، درایور موتور، چرخ، باتری و سایر قطعات الکترونیکی نیز نیاز خواهید داشت.
🛒 قطعات پروژه را از پژوهشگران تهیه کنید
برای ساخت پروژههای Arduino میتوانید HC-SR04، برد Arduino،
سنسورها، ماژولها، بردبورد، سیمها، مقاومتها و سایر قطعات موردنیاز
پروژه را در فروشگاه پژوهشگران بررسی کنید.
مقالات بیشتر درباره Arduino و سنسورها
مقالات بیشتر پژوهشگران
اگر به دنبال آموزشهای بیشتر درباره Arduino، ESP32، سنسورها،
ماژولها و پروژههای کاربردی الکترونیک هستید، مجموعه مقالات
پژوهشگران را ببینید.
برای انتخاب سنسور یا طراحی پروژه مشاوره فنی می خواهید؟
برای انتخاب قطعه و طراحی پروژه نیاز به مشاوره دارید؟
اگر در انتخاب HC-SR04، Arduino، سنسورهای فاصله، درایور موتور یا سایر
قطعات پروژه خود سوال دارید، قبل از خرید و ساخت مدار میتوانید برای
مشاوره فنی با مجموعه پژوهشگران در ارتباط باشید.
انتخاب درست سنسور در ابتدای پروژه میتواند از خطاهای اندازهگیری،
تغییر مدار و هزینههای اضافی جلوگیری کند.
جمع بندی سنسور اولتراسونیک آردوینو
سنسور اولتراسونیک آردوینو با استفاده از ارسال و دریافت امواج
فراصوت، امکان اندازهگیری فاصله بدون تماس را فراهم میکند. HC-SR04 یکی از
معروفترین نمونههای این خانواده است که از پایههای VCC، Trig، Echo و GND
استفاده میکند و با اندازهگیری مدت زمان Echo، فاصله جسم محاسبه میشود.
برای یادگیری بهتر، ابتدا میتوانید HC-SR04 را بدون کتابخانه راهاندازی کنید
و با pulseIn() زمان Echo را اندازه بگیرید. در پروژههای بزرگتر
استفاده از کتابخانه میتواند توسعه برنامه را سادهتر کند. همچنین در هنگام
استفاده واقعی باید محدودیت فاصله، زاویه جسم، شرایط سطح، تغذیه و سیمکشی را
در نظر بگیرید.
⚡ چک لیست سریع HC-SR04
✔ VCC را به تغذیه مناسب وصل کنید.
✔ GND را مشترک کنید.
✔ Trig و Echo را درست تعریف کنید.
✔ حداقل 10µs پالس Trigger را ایجاد کنید.
✔ زمان Echo را به فاصله تبدیل کنید.
✔ برای نتایج ناپایدار، شرایط سطح و زاویه جسم را بررسی کنید.
✔ در پروژههای بزرگ، روش نرمافزاری مناسب را انتخاب کنید.
تجربه شما از کار با HC-SR04 چیست؟
اگر قبلاً با HC-SR04 یا سنسورهای اولتراسونیک کار کردهاید،
تجربه خود را با ما و سایر علاقهمندان به الکترونیک به اشتراک بگذارید.
اگر با مشکل دقت، صفر شدن فاصله، نویز، تشخیص اشتباه مانع یا نحوه اتصال
این سنسور به Arduino مواجه شدهاید،
در بخش نظرات همین پایین برای ما بنویسید.
سوالات متداول درباره سنسور اولتراسونیک آردوینو
سنسور اولتراسونیک آردوینو چگونه فاصله را اندازه می گیرد؟
HC-SR04 یک موج اولتراسونیک ارسال میکند، بازتاب آن را دریافت میکند و
مدت زمان رفتوبرگشت موج را اندازه میگیرد. Arduino با استفاده از این زمان
فاصله جسم را محاسبه میکند.
پایه های HC-SR04 کدامند؟
چهار پایه اصلی این ماژول شامل VCC، Trig، Echo و GND است.
چرا HC-SR04 فاصله را اشتباه نشان می دهد؟
زاویه و جنس سطح، فاصله بسیار کم یا زیاد، سیمکشی، تغذیه، شرایط محیطی
و کیفیت بازگشت Echo میتوانند روی نتیجه اثر بگذارند.



