آردوینومقدماتی۸ دقیقه مطالعهArduino IDE 2.x / Uno R3

سنسور حرکتی PIR HC-SR501

اصول کار سنسور مادون‌قرمز غیرفعال PIR را می‌آموزید، جامپر و پتانسیومترهای HC-SR501 را تنظیم می‌کنید و با تشخیص حرکت، LED و پیام هشدار را فعال می‌کنید.

آنچه در این درس می‌آموزید

  • اثر حرارتی-برقی و نقش لنز فرنل را در تشخیص حرکت توضیح دهید
  • دو پتانسیومتر حساسیت و تأخیر و جامپر حالت را روی برد تنظیم کنید
  • حرکت را با ورودی دیجیتال بخوانید و یک سیستم هشدار ساده بسازید
نویسنده: تیم داکنامه · بازبینی: ۲۰۲۶-۱۰-۳۱
فهرست مطالب

لامپ راهرو که با ورود شما روشن می‌شود و زنگ خانه‌ای که با حرکت آژیر می‌کشد، هر دو به یک فناوری تکیه دارند: سنسور PIR یا مادون‌قرمز غیرفعال (Passive Infrared). برخلاف التراسونیک درس قبل که چیزی «می‌فرستد»، PIR هیچ چیزی منتشر نمی‌کند؛ فقط تابش حرارتی محیط را گوش می‌دهد و تغییرش را به سیگنال دیجیتال ساده تبدیل می‌کند. به همین دلیل مصرفش بسیار کم است و خروجی‌اش همان HIGH و LOW آشنایی است که در درس دکمه دیده‌اید — با این تفاوت که این «دکمه» را خودتان فشار نمی‌دهید.

اصول کار: دیده‌شدن حرارت در حال تغییر

هر جسمی بالای صفر مطلق، تابش مادون‌قرمز می‌فرستد و بدن انسان با دمای حدود ۳۷ درجه منبع تابش چشمگیری است. هستهٔ سنسور، عنصری «پروالکتریک» (Pyroelectric) است که هنگام تغییرِ تابش دریافتی، سیگنال الکتریکی کوچکی تولید می‌کند — دقت کنید: تغییر، نه خودِ مقدار. سنسور ثابت که رو به دیوار سرد است هیچ چیزی گزارش نمی‌کند؛ به‌محض ورود انسان به میدان، تابش ناگهان زیاد می‌شود و سیگنال زاده می‌شود.

نقش مهندسی‌شدهٔ روی سنسور را «لنز فرنل» (Fresnel Lens) بازی می‌کند: آن گنبد شیری‌رنگ با خطوط تقسیم‌بندی، تابش هر بخش از اتاق را روی عنصر می‌تاباند و میدان دید را به ده‌ها بخش تقسیم می‌کند. حرکت‌کردن انسان یعنی گذر از این بخش‌ها و به‌وجودآمدن موج‌های تغییر که سنسور می‌فهمد. خروجی ماژول پس از تقویت، یک پین دیجیتال ساده است: HIGH هنگام تشخیص حرکت و LOW در سکوت.

جامپر حالت و دو پتانسیومتر

برد HC-SR501 سه ابزار تنظیم دارد و شناختشان از کد مهم‌تر است:

ابزار تنظیم اثر
جامپر H حالت تکرار (Retrigger) تا وقتی حرکت ادامه دارد، خروجی HIGH می‌ماند؛ مناسب اکثر پروژه‌ها
جامپر L حالت تک‌بار (Single) یک بار HIGH می‌شود، سپس پس از پایان تأخیر خاموش می‌شود
پتانسیومتر حساسیت چرخش شعاع تشخیص را از حدود ۳ تا ۷ متر تغییر می‌دهد
پتانسیومتر تأخیر (Tx) چرخش مدت HIGH ماندن خروجی را از حدود ۳ ثانیه تا ۵ دقیقه تنظیم می‌کند

زمان گرم‌شدن

PIR پس از وصل‌کردن تغذیه، به یک دقیقه پایداری نیاز دارد: مدار داخلی آن با جریان راه‌اندازی و دمای خودش هماهنگ می‌شود و در این مدت خروجی‌ها غیرقابل‌اتکا هستند.

سیم‌کشی

آردوینو Uno ماژول HC-SR501
5V VCC
GND GND
D2 OUT

خروجی ماژول در سطح 3.3 ولت است که Uno به‌راحتی به‌عنوان HIGH می‌خواند؛ نیازی به مقسوم ولتاژ نیست. پین ۲ به‌طور عمد انتخاب شده تا در تمرین‌های پیشرفته‌تر بتوانید به وقفه هم وصلش کنید.

اسکچ کامل: هشدار حرکت

pir-motion.ino
const int pirPin = 2;
const int ledPin = 12;

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("PIR warming up for 60 seconds");
  delay(60000);  // Let the sensor stabilize
  Serial.println("Ready");
}

void loop() {
  int motion = digitalRead(pirPin);
  if (motion == HIGH) {
    digitalWrite(ledPin, HIGH);
    Serial.println("Motion detected");
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println("No motion");
  }
  delay(1000);
}

توضیح نکته‌های تازه:

  1. pinMode(pirPin, INPUT); — خروجی ماژول دیجیتال است؛ هیچ آنالوگ‌خوانی یا کتابخانه لازم نیست.
  2. delay(60000); در setup() — گرم‌شدن را صریح داخل برنامه می‌گزرانیم تا نخستین خوانش‌ها معتبر باشند.
  3. خوانش هر یک ثانیه و چاپ وضعیت، رفتار ماژول را شفاف نشان می‌دهد؛ در حالت جامپر H، تا زمانی که حرکت ادامه دارد یا پتانسیومتر تأخیر هنوز تمام نشده، HIGH می‌ماند.

در حالت جامپر H با حرکت انسان جلوی سنسور، خروجی سریال مانیتور چنین الگویی دارد:

خروجی کد

PIR warming up for 60 seconds Ready No motion Motion detected Motion detected No motion

جای‌گذاری و محدودیت‌ها

PIR فقط می‌گوید «حرکتی هست»؛ نه جهت، نه فاصله، نه شمارش افراد. و چون بر پایهٔ حرارت است، هر منبع گرمای جنبنده برایش مشتبه می‌شود:

  • سنسور را رو به منبع گرما (رادیاتور، پنجرهٔ آفتاب‌گیر، فن) نگذارید؛ تغییر ناگهانی تابش، تشخیص کاذب می‌سازد.
  • پشت لنز را نپوشانید و لنز را از گردوغبار و چربی تمیز نگه دارید؛ مسیر تابش است که میدان دید می‌سازد.
  • ارتفاع نصب حدود ۲ متر و رو به مسیر عبور (نه دیوار مقابل) بهترین نتیجه را می‌دهد.

اشتباهات رایج و عیب‌یابی

نشانه علت رایج راه‌حل
پیاپی Motion detected بدون کسی دورهٔ گرم‌شدن، جریان هوا یا منبع گرما یک دقیقه صبر کنید؛ سنسور را دور از فن و شوفاژ و نور مستقیم بگذارید
هرگز Motion detected نمی‌شود پتانسیومتر حساسیت در حداقل است یا لنز پوشیده شده حساسیت را به‌آرامی بالا ببرید و جلوی لنز را باز کنید
خروجی فقط چند لحظه HIGH است جامپر روی حالت L و پتانسیومتر تأخیر در کمینه جامپر را روی H بگذارید یا تأخیر را بیشتر کنید
خروجی همیشه HIGH می‌ماند تأخیر پتانسیومتر در بیشینه است یا حرکت پیوسته در میدان تأخیر را کم کنید و آزمایش را دور از منابع حرارت تکرار کنید
خوانش ناپایدار روی سریال زمین مشترک نشده یا سیم OUT شل است GND مشترک را چک کنید و اتصال بردبورد را سفت کنید

تمرین‌ها

تمرین

تمرین ۱ — شمارندهٔ رویداد حرکت

اسکچ pir-motion را طوری تغییر دهید که فقط هنگام «شروع» حرکت — یعنی گذر خوانش از LOW به HIGH — یک شمارنده را یکی افزایش دهد و پیام با شمارهٔ رویداد چاپ شود؛ در بقیهٔ لحظه‌ها چیزی چاپ نشود.

نمایش راه‌حل

وضعیت قبلی را در یک متغیر نگه می‌دارید و فقط گذر LOW به HIGH را می‌شمارید:

pir-counter.ino
const int pirPin = 2;
const int ledPin = 12;

int lastMotion = LOW;
int eventCount = 0;

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("PIR warming up for 60 seconds");
  delay(60000);
  Serial.println("Ready");
}

void loop() {
  int motion = digitalRead(pirPin);
  if (motion == HIGH) {
    digitalWrite(ledPin, HIGH);
    if (lastMotion == LOW) {
      eventCount++;
      Serial.print("Motion event: ");
      Serial.println(eventCount);
    }
  } else {
    digitalWrite(ledPin, LOW);
  }
  lastMotion = motion;
  delay(200);
}

با دو بار عبور جلوی سنسور، خروجی سریال مانیتور چنین است:

خروجی کد

Ready Motion event: 1 Motion event: 2

::: :::

خلاصه

  • PIR سنسور «غیرفعال» است: تابش مادون‌قرمز محیط را گوش می‌دهد و فقط تغییر آن را گزارش می‌کند؛ لنز فرنل میدان دید را به بخش‌های متعدد تقسیم می‌کند.
  • جامپر H تکرار و L تک‌بار است؛ پتانسیومترها حساسیت (شعاع) و مدت خروجی HIGH را تنظیم می‌کنند و مقادیر دقیق بین نسخه‌ها فرق دارد.
  • پس از وصل تغذیه ۳۰ تا ۶۰ ثانیه گرم‌شدن لازم است و پیش از آن خوانش‌ها قابل‌اتکا نیستند.
  • خروجی ماژول دیجیتال ساده (3.3 ولت) است و با digitalRead خوانده می‌شود؛ PIR جهت و فاصله نمی‌دهد.
  • منابع گرما و جریان هوا تشخیص کاذب می‌سازند؛ جای‌گذاری دور از رادیاتور و نور مستقیم ضروری است.

حالا تشخیص «اتفاق» را دارید و اندازه‌گیری «فاصله» را از درس قبل؛ در ادامه این دو حسگر را در پروژه‌های ترکیبی کنار هم می‌گذارید.

منابع و ارجاع‌ها

درس‌های مرتبط