🚗 سنسور پارک — همان بوقی که در ماشین میشنوی
سنسور پارک ماشین دقیقاً همان کاری را میکند که تو میتوانی با یک اولتراسونیک و یک بازر بسازی: هرچه نزدیکتر، بوق تندتر.
ایدهی اصلی: فاصله را به ریتم تبدیل کن
بهجای یک بوق ثابت، فاصلهی بین بوقها را به فاصلهی مانع گره بزن. دور: بوقهای تک و آهسته. نزدیک: تندتر. خیلی نزدیک: بوق ممتد.
چرا اینجا نمیشود از delay استفاده کرد
اگر با delay بین بوقها صبر کنی، در آن مدت فاصله را نمیخوانی و سنسور کند و بیجان میشود. اینجا دقیقاً جایی است که millis() لازم است.
const int trig = 9, echo = 10, buzzer = 8;
unsigned long lastBeep = 0;
bool beepOn = false;
long readDistance() {
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
long d = pulseIn(echo, HIGH, 30000);
return d == 0 ? 400 : d / 58;
}
void setup() {
pinMode(trig, OUTPUT); pinMode(echo, INPUT); pinMode(buzzer, OUTPUT);
}
void loop() {
long cm = readDistance();
long gap; // فاصلهی بین بوقها
if (cm > 100) gap = 0; // خبری نیست
else if (cm > 50) gap = 700;
else if (cm > 25) gap = 350;
else if (cm > 10) gap = 150;
else gap = -1; // ممتد
if (gap == 0) {
noTone(buzzer);
} else if (gap == -1) {
tone(buzzer, 2000);
} else if (millis() - lastBeep >= gap) {
lastBeep = millis();
beepOn = !beepOn;
if (beepOn) tone(buzzer, 1500); else noTone(buzzer);
}
delay(50);
}
قدم بعدی
- یک نوار از سه LED اضافه کن: سبز، زرد، قرمز — بازخورد دیداری کنار صوتی.
- فاصله را روی LCD نشان بده.
- دو سنسور بگذار تا بفهمی مانع از کدام طرف نزدیکتر است.