🅿️ ماموریت ۲۳: حسگر پارک
هرچی نزدیکتر، بوق تندتر. فاصله رو با map به فاصلهی زمانی بوق تبدیل کن.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه آردوینو روی صحنه باشه
- ☐ یه سنسور اولتراسونیک
- ☐ یه بازر
- ☐ کد از map استفاده کنه
- ☐ کد از tone استفاده کنه
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- Arduino Uno
- حسگر فاصله (HC-SR04)
- بازر زنگی
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- Arduino Uno (VCC5) ⟷ Ultrasonic (HC-SR04) (VCC)
- Arduino Uno (D9) ⟷ Ultrasonic (HC-SR04) (TRIG)
- Ultrasonic (HC-SR04) (ECHO) ⟷ Arduino Uno (D10)
- Ultrasonic (HC-SR04) (GND) ⟷ Arduino Uno (GND1)
- Arduino Uno (D8) ⟷ بازر زنگی (POS)
- بازر زنگی (NEG) ⟷ Arduino Uno (GND2)
کد
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);
Serial.begin(9600);
}
void loop() {
// closer = higher pitch
int pitch = map(50, 0, 100, 2000, 200);
long cm = readDistance();
Serial.print("fasele:");
Serial.println(cm);
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);
}
ماموریتهای مشابه
📏
ماموریت ۲۲: فاصلهسنج
7️⃣
ماموریت ۲۵: شمارش صفر تا نه
📊
ماموریت ۲۷: داشبورد سنسور
🎭
ماموریت ۱۸: دو چشمک با دو سرعت
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها