📏 هشدار فاصله با سنسور اولتراسونیک
سنسور اولتراسونیک دقیقاً مثل خفاش کار میکند: صدایی میفرستد که ما نمیشنویم و از زمان برگشتش فاصله را حساب میکند. این پروژه پایهی ربات مانعگریز و سنسور پارک است.
چطور کار میکند
یک پالس کوتاه به پایهی TRIG میدهی، سنسور صدا میفرستد، و پایهی ECHO بهاندازهی مدت رفتوبرگشت صدا HIGH میماند.
فرمول
سرعت صوت حدود ۳۴۰ متر بر ثانیه است، یعنی هر سانتیمتر حدود ۲۹ میکروثانیه. چون صدا مسیر را دو بار طی میکند:
فاصله (سانتیمتر) = مدت (میکروثانیه) ÷ ۵۸
کد
const int trig = 9, echo = 10, buzzer = 8;
void setup() {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
long readDistance() {
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
long duration = pulseIn(echo, HIGH, 30000); // با مهلت
if (duration == 0) return 400; // چیزی برنگشت
return duration / 58;
}
void loop() {
long cm = readDistance();
Serial.print(cm);
Serial.println(" cm");
if (cm < 10) tone(buzzer, 2000); // خیلی نزدیک
else if (cm < 30) tone(buzzer, 800); // نزدیک
else noTone(buzzer);
delay(100);
}
چرا مهلت (timeout) گذاشتیم؟
اگر هیچ مانعی نباشد، صدا هیچوقت برنمیگردد و pulseIn تا یک ثانیه منتظر میماند — برنامهات هنگ به نظر میرسد. آرگومان سوم این را به ۳۰ میلیثانیه محدود میکند.
محدودیتها
- برد مفید حدود ۲ تا ۴۰۰ سانتیمتر.
- روی سطح نرم (پارچه، اسفنج) و سطح خیلی مایل جواب نمیدهد، چون صدا برنمیگردد.
- بین دو اندازهگیری کمی صبر کن، وگرنه پژواک قبلی نتیجه را خراب میکند.