// تعریف پینهای متصل به قطعات
const int trigPin = 13; // پین Trig سنسور التراسونیک
const int echoPin = 12; // پین Echo سنسور التراسونیک
const int ledPin = 14; // پین LED
const int buzzerPin = 27; // پین بازر
// تعریف متغیرها
long duration; // برای ذخیره زمان رفت و برگشت صدا
int distance; // برای ذخیره فاصله محاسبه شده
int thresholdDistance = 20; // آستانه فاصله برای فعال شدن هشدار (بر حسب سانتیمتر)
void setup() {
// راهاندازی ارتباط سریال برای مشاهده مقادیر در Serial Monitor (اختیاری ولی برای دیباگ مفید است)
Serial.begin(115200);
// تنظیم حالت پینها (ورودی یا خروجی)
pinMode(trigPin, OUTPUT); // Trig پین خروجی است
pinMode(echoPin, INPUT); // Echo پین ورودی است
pinMode(ledPin, OUTPUT); // LED پین خروجی است
pinMode(buzzerPin, OUTPUT); // Buzzer پین خروجی است
}
void loop() {
// 1. ارسال پالس از سنسور برای اندازهگیری
// ابتدا پین Trig را برای ۲ میکروثانیه خاموش میکنیم تا پالس تمیز باشد
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// سپس پین Trig را به مدت ۱۰ میکروثانیه روشن میکنیم
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 2. خواندن پالس بازگشتی و محاسبه فاصله
// pulseIn مدت زمانی را که پین Echo در حالت HIGH است بر حسب میکروثانیه اندازهگیری میکند
duration = pulseIn(echoPin, HIGH);
// محاسبه فاصله بر اساس فرمول:
// فاصله = (زمان * سرعت صدا) / 2
// سرعت صدا در هوا تقریباً 0.034 سانتیمتر بر میکروثانیه است
distance = duration * 0.034 / 2;
// چاپ فاصله در Serial Monitor برای دیباگ
Serial.print("Distance: ");
Serial.println(distance);
// 3. بررسی شرط هشدار
// اگر فاصله کمتر از آستانه و همچنین بزرگتر از صفر بود (برای جلوگیری از خطا)
if (distance < thresholdDistance && distance > 0) {
// هشدار را فعال کن
digitalWrite(ledPin, HIGH); // LED را روشن کن
tone(buzzerPin, 1000); // بازر را با فرکانس 1000 هرتز به صدا درآور
} else {
// در غیر این صورت هشدار را غیرفعال کن
digitalWrite(ledPin, LOW); // LED را خاموش کن
noTone(buzzerPin); // صدای بازر را قطع کن
}
// یک تأخیر کوتاه قبل از اندازهگیری بعدی
delay(100);
}