🚶 سنسور حرکت PIR با آردوینو: از دزدگیر ساده تا چراغ راهروی هوشمند

✍️ تیم ووکوی فارسی ·

چراغ راهروی ساختمان که با رد شدن تو روشن می‌شود، یا دزدگیری که با یک قدم شروع به جیغ زدن می‌کند، هر دو یک قطعه‌ی کوچک و ارزان دارند: سنسور حرکت PIR. در این آموزش می‌بینیم سنسور PIR دقیقاً چه چیزی را می‌بیند، دو پیچ نارنجی روی ماژول HC-SR501 چه کار می‌کنند، و با آردوینو اونو یک دزدگیر با بازر و شمارنده‌ی حرکت می‌سازیم. در پایان هم یک چراغ راهروی هوشمند داریم که فقط در تاریکی روشن می‌شود. این مدار را می‌توانی بدون خرید قطعه در شبیه‌ساز فارسی هم بچینی؛ همان ایده‌ای که ووکوی (Wokwi) را معروف کرد، این بار به زبان خودمان.

PIR چطور حرکت را می‌بیند؟

PIR مخفف Passive InfraRed است، یعنی «مادون قرمز غیرفعال». «غیرفعال» یعنی سنسور خودش هیچ نوری نمی‌فرستد؛ فقط گوش می‌دهد. هر چیز گرمی، از جمله بدن ما، پرتوی مادون قرمز می‌تاباند. داخل سنسور یک حسگر پیروالکتریک با دو نیمه هست. وقتی همه‌چیز ساکن است، هر دو نیمه به یک اندازه گرما می‌بینند و اختلافی نیست. وقتی تو از جلویش رد می‌شوی، اول یک نیمه گرمای تو را می‌بیند و بعد دیگری. همین اختلاف است که مدار داخلی را تحریک می‌کند و خروجی را HIGH می‌کند.

آن گنبد سفید مات روی سنسور هم یک عدسی فرنل است که فضای جلوی سنسور را به چند ناحیه‌ی کوچک تقسیم می‌کند تا رد شدن از هر ناحیه یک تغییر واضح بسازد. نتیجه‌ی مهم این طرز کار: PIR تغییر را می‌بیند، نه حضور را. اگر جلوی آن کاملاً بی‌حرکت بایستی، بعد از مدتی دیگر تو را نمی‌بیند.

پایه‌ها و تنظیمات ماژول HC-SR501

بخشکارش
VCCتغذیه‌ی ۵ ولت (ماژول معمولاً ۴٫۵ تا ۲۰ ولت را قبول می‌کند)
OUTخروجی دیجیتال: حدود ۳٫۳ ولت هنگام حرکت، صفر در حالت آرام
GNDزمین
پیچ Sx (حساسیت)برد دید را از حدود ۳ تا ۷ متر تنظیم می‌کند
پیچ Tx (زمان)مدت HIGH ماندن خروجی بعد از حرکت، از چند ثانیه تا چند دقیقه
جامپر H / LH: با هر حرکت تازه زمان تمدید می‌شود. L: یک بار HIGH و تمام

۳٫۳ ولت خروجی برای آردوینو اونو HIGH حساب می‌شود، پس مستقیم به پین دیجیتال وصلش کن؛ نه مقاومت لازم است و نه مقسم ولتاژ. برای شروع، پیچ زمان را تا ته خلاف عقربه‌ها بچرخان (کمترین زمان) و جامپر را روی H بگذار تا کنترل زمان دست کد خودت باشد.

قطعه‌ها و سیم‌کشی

قطعهپایهآردوینو
PIRVCC5V
PIROUTپین 2
PIRGNDGND
بازر+پین 8
بازر−GND
LEDآند (از راه مقاومت ۲۲۰)پین 13
LEDکاتدGND

کد کامل دزدگیر

// PIR motion sensor (HC-SR501) on an Arduino Uno.
// Beeps and counts once when motion starts, reports when it ends.
const int PIR_PIN = 2;
const int LED_PIN = 13;
const int BUZZER_PIN = 8;
const unsigned long WARMUP_MS = 30000;   // the PIR needs ~30 s to settle

int lastState = LOW;
int motionCount = 0;

void setup() {
  Serial.begin(9600);
  pinMode(PIR_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  Serial.println("Warming up the PIR...");
  delay(WARMUP_MS);
  Serial.println("Ready!");
}

void loop() {
  int state = digitalRead(PIR_PIN);

  if (state == HIGH && lastState == LOW) {   // motion just started
    motionCount++;
    Serial.print("Motion! count = ");
    Serial.println(motionCount);
    tone(BUZZER_PIN, 1200, 200);
  }
  if (state == LOW && lastState == HIGH) {   // motion ended
    Serial.println("All quiet.");
  }

  digitalWrite(LED_PIN, state);   // LED mirrors the sensor
  lastState = state;
  delay(50);
}

توضیح کد

اجرا در شبیه‌ساز، رایگان

سنسور PIR در تینکرکد فارسی جزو قطعه‌های رایگان آردوینو است. مثال آماده‌ی «دزدگیر PIR» مدار و کد را با هم بار می‌کند و درس ۲۵: دزدگیر با سنسور حرکت قدم‌به‌قدم یک آژیر واقعی با صدای بالا و پایین‌رونده می‌سازد. در مود ساده (بدون کد) هم وقتی PIR را انتخاب کنی، گزینه‌ی «حرکت می‌بینه؟» را در پنل ویژگی‌ها داری و می‌توانی واکنش مدار را بدون راه رفتن جلوی کامپیوتر ببینی. معنی دقیق‌تر این سنسور هم در واژه‌نامه: سنسور PIR آمده است.

پروژه‌ی کوچک: چراغ راهروی هوشمند

چراغ راهرو نباید وسط روز روشن شود و نباید وقتی هنوز در راهرو هستی خاموش شود. پس دو قطعه اضافه می‌کنیم: یک سنسور نور LDR روی A0 (با یک مقاومت ۱۰ کیلواهم به GND، مثل آموزش LDR) و یک رله روی پین 7 برای لامپ. هر حرکت تازه، تایمر بیست‌ثانیه‌ای را از نو شروع می‌کند.

// Mini project: hallway light. On with motion, only when it is dark,
// and it stays on for 20 s after the last movement.
const int PIR_PIN = 2;
const int LDR_PIN = A0;
const int RELAY_PIN = 7;
const int DARK = 350;                  // below this the hallway is dark
const unsigned long HOLD_MS = 20000;   // keep the light on for 20 s

unsigned long lastMotion = 0;
bool lightOn = false;

void setup() {
  Serial.begin(9600);
  pinMode(PIR_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
}

void loop() {
  bool dark = analogRead(LDR_PIN) < DARK;

  if (digitalRead(PIR_PIN) == HIGH && (dark || lightOn)) {
    lastMotion = millis();             // every movement restarts the timer
    if (!lightOn) Serial.println("Light ON");
    lightOn = true;
  }

  if (lightOn && millis() - lastMotion > HOLD_MS) {
    lightOn = false;
    Serial.println("Light OFF");
  }

  digitalWrite(RELAY_PIN, lightOn ? HIGH : LOW);
  delay(50);
}

به شرط (dark || lightOn) دقت کن. وقتی لامپ روشن شد، خودش راهرو را روشن می‌کند و LDR دیگر «تاریکی» نمی‌بیند. اگر فقط dark را چک می‌کردیم، حرکت‌های بعدی تایمر را تمدید نمی‌کردند و چراغ وسط راه رفتن تو خاموش می‌شد. نسخه‌ی کامل همین ایده در مثال «خانه‌ی هوشمند» آماده است و برای کار با لامپ واقعی ۲۲۰ ولت حتماً آموزش ماژول رله را بخوان.

اشکال‌های رایج

دزدگیرت را با رمز مسلح و غیرمسلح کن: کیپد ۴×۴ با آردوینو را بخوان و بعد مثال «دزدگیر کامل» را ببین. سنسورهای دیگر هم در بخش سنسورها منتظرند و همه‌ی پروژه‌های این برد در صفحه‌ی شبیه‌ساز آردوینو هستند.

دزدگیر PIR را رایگان اجرا کن 🚶

سؤال‌های رایج

چرا سنسور PIR بعد از روشن شدن بی‌دلیل تحریک می‌شود؟

PIR بعد از روشن شدن حدود سی ثانیه تا یک دقیقه وقت لازم دارد تا تصویر حرارتی محیط را یاد بگیرد. در این مدت خروجی‌اش قابل اعتماد نیست؛ برای همین در کد یک تأخیر گرم شدن می‌گذاریم.

برد سنسور PIR چقدر است؟

ماژول رایج HC-SR501 معمولاً بین سه تا هفت متر را با زاویه‌ای حدود ۱۲۰ درجه می‌بیند و با پیچ Sx روی ماژول تنظیم می‌شود.

آیا PIR از پشت شیشه حرکت را می‌بیند؟

معمولاً نه. شیشه‌ی معمولی بیشتر پرتوی مادون قرمز گرمای بدن را رد نمی‌کند، پس PIR پشت پنجره عملاً کور است.

مقاله‌های مرتبط

☀️

سنسور نور LDR (فتوسل) با آردوینو: مقسم ولتاژ، کد کامل و چراغ خواب خودکار

🪴

سنسور رطوبت خاک با آردوینو و ساخت سیستم آبیاری خودکار گلدان

💨

سنسور گاز MQ-2 با آردوینو: تشخیص دود و گاز، گرم شدن، آستانه و آژیر

🐞

ارورهای رایج آردوینو و معنی‌شان: از was not declared in this scope تا avrdude

همه‌ی آموزش‌های سنسورها و ماژول‌ها ← · همه‌ی مقاله‌ها