🚶 سنسور حرکت PIR (PIR Motion Sensor (HC-SR501))
| اسم انگلیسی | PIR Motion Sensor (HC-SR501) |
|---|---|
| در ووکوی (Wokwi) | wokwi-pir-motion-sensor |
| دسته | 🌡️ سنسورها |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
سنسور حرکت PIR (PIR Motion Sensor) ماژولی با یک گنبد سفید مات است که گرمای بدن در حال حرکت را از چند متری تشخیص میدهد؛ رایجترین مدلش HC-SR501 است. خروجیاش ساده است: وقتی حرکت ببیند HIGH و وقتی همهجا آرام باشد LOW. با آن چراغ راهروی خودکار، دزدگیر، شمارندهی رفتوآمد یا دستگاهی که فقط وقتی کسی جلویش هست روشن میشود میسازی. در این صفحه سنسور را در ووکوی میچینیم و کدی مینویسیم که شروع و پایان هر حرکت و مدتش را ثبت کند.
سنسور PIR در ووکوی (Wokwi)
شناسهی سنسور در ووکوی wokwi-pir-motion-sensor است و سه پایهی VCC، OUT و GND دارد. ووکوی آدم مجازی ندارد که از جلوی سنسور رد شود؛ وقتی شبیهسازی در حال اجراست روی سنسور کلیک کن تا گزینهی شبیهسازی حرکت را ببینی و خروجی را برای چند ثانیه HIGH کنی.
{
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-pir-motion-sensor", "id": "pir1", "top": -130, "left": 150, "attrs": {} }
],
"connections": [
[ "pir1:VCC", "uno:5V", "red", [] ],
[ "pir1:OUT", "uno:2", "green", [] ],
[ "pir1:GND", "uno:GND.1", "black", [] ]
]
}
| پایه در ووکوی | وصل به |
|---|---|
pir1:VCC | uno:5V |
pir1:OUT | uno:2 |
pir1:GND | uno:GND.1 |
در تینکرکد فارسی هم PIR رایگان است: مدار آمادهی دزدگیر PIR را باز کن یا درس دزدگیر با سنسور حرکت را قدمبهقدم برو.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| VCC | 5V (ماژول HC-SR501 حدود ۴٫۵ تا ۲۰ ولت را قبول میکند) |
| OUT | پین 2 |
| GND | GND |
| LED نشانگر | LED داخلی برد روی پین 13؛ سیم اضافه لازم نیست |
خروجی OUT حدود ۳٫۳ ولت است. اونو آن را HIGH میخواند و برای ESP32 و پیکو هم مستقیم و بیخطر است؛ فقط تغذیهی VCC را از ۵ ولت بده. پیچ زمان روی ماژول (Tx) را برای این کد روی کمترین مقدار بگذار تا مدتهایی که چاپ میشود به حرکت واقعی نزدیک باشند.
کد نمونه
بهجای «حرکت هست یا نیست»، این برنامه لبهها را میگیرد: لحظهی شروع حرکت را با شماره و زمان چاپ میکند و وقتی خروجی دوباره LOW شد، میگوید حرکت چقدر طول کشید. ثابت WARMUP_MS زمان گرم شدن سنسور واقعی است؛ در ووکوی آن را صفر کن تا منتظر نمانی.
// PIR on pin 2: log when each motion starts, ends and how long it lasted.
const int PIR_PIN = 2;
const unsigned long WARMUP_MS = 30000; // real HC-SR501; use 0 in Wokwi
bool moving = false;
unsigned long startedAt = 0;
int events = 0;
void setup() {
Serial.begin(9600);
pinMode(PIR_PIN, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("Warming up...");
delay(WARMUP_MS);
Serial.println("Ready");
}
void loop() {
bool now = digitalRead(PIR_PIN) == HIGH;
digitalWrite(LED_BUILTIN, now ? HIGH : LOW);
if (now && !moving) { // motion started
events++;
startedAt = millis();
Serial.print("Motion #");
Serial.print(events);
Serial.print(" at ");
Serial.print(startedAt / 1000);
Serial.println(" s");
}
if (!now && moving) { // motion ended
Serial.print(" lasted ");
Serial.print((millis() - startedAt) / 1000.0, 1);
Serial.println(" s");
}
moving = now;
}
عدد «lasted» همیشه کمی بیشتر از حرکت واقعی است، چون زمان نگهداری پیچ Tx هم در آن هست.
اشتباههای رایج
- هشدارهای دروغ در دقیقهی اول: سنسور واقعی بعد از روشن شدن حدود سی ثانیه تا یک دقیقه وقت میخواهد تا محیط را یاد بگیرد. بدون زمان گرم شدن، چند هشدار بیدلیل میگیری.
- انتظار تشخیص حضور: PIR تغییر گرما را میبیند، نه آدم ساکن را. کسی که بیحرکت پشت میز نشسته، بعد از مدتی برای سنسور «ناپدید» میشود.
- خروجیای که LOW نمیشود: پیچ Tx روی بیشترین مقدار است و ماژول چند دقیقه HIGH میماند؛ یا سنسور رو به بخاری، پنجرهی آفتابگیر یا دریچهی کولر است.
- پایههای جابهجا: ترتیب VCC، OUT و GND در ماژولهای مختلف یکی نیست. قبل از وصل کردن، نوشتهی زیر گنبد را بخوان.
آموزشهای مرتبط
- سنسور حرکت PIR با آردوینو: دزدگیر و چراغ راهرو
- مدارهای پیکو: دزدگیر حرکتی با وقفه و Timer
- ۳۰ مدار ESP32، از جمله دزدگیر حرکتی
- پیزو بزرگ برای آژیر دزدگیر
- رله برای روشن کردن لامپ با حرکت
سؤالهای رایج
سنسور PIR را در ووکوی چطور تحریک کنم؟
وقتی شبیهسازی در حال اجراست روی سنسور wokwi-pir-motion-sensor کلیک کن و حرکت را شبیهسازی کن؛ خروجی OUT برای چند ثانیه HIGH میشود.
چرا PIR آدم بیحرکت را نمیبیند؟
چون PIR فقط تغییر گرما بین دو نیمهی حسگرش را میبیند. کسی که کاملاً ساکن است تغییری نمیسازد؛ برای حضور ثابت باید از سنسور دیگری مثل اولتراسونیک یا رادار استفاده کرد.
خروجی PIR را مستقیم به ESP32 وصل کنم؟
بله. خروجی HC-SR501 حدود ۳٫۳ ولت است و برای ESP32 و پیکو بیخطر است؛ فقط خود ماژول را از ۵ ولت تغذیه کن.