Компоненты · 5 мин чтения

PIR-датчик движения (HC-SR501): обнаружение движения с Arduino, ESP32 и Pico

Как работает PIR-датчик движения? Подключение HC-SR501, настройка чувствительности и времени, режимы H/L, код для Arduino, ESP32 и Pico, свет по движению и защита от ложных срабатываний.

PIR-датчик (Passive InfraRed, пассивный инфракрасный) — дешёвый датчик с очень малым потреблением, который замечает, когда человек или животное движется в его поле зрения. Свет на лестнице, который включается сам, охранные системы и автоматические дверные звонки обычно работают на PIR. Слово «пассивный» значит, что датчик сам ничего не излучает: он только «слушает» инфракрасное излучение тёплых предметов вокруг. Самая популярная модель в проектах на Arduino — HC-SR501.

PIR-датчик движения HC-SR501
PIR-датчик HC-SR501: белый купол — линза Френеля; на плате под ним два подстроечных резистора и перемычка режима срабатывания.

Как работает PIR-датчик?

Любой предмет теплее абсолютного нуля испускает инфракрасное излучение, а человеческое тело сильнее всего излучает на длине волны 9–10 микрометров. Сердце датчика — пироэлектрический элемент, который реагирует на это излучение, и он разделён на две половины. Когда ничего не движется, обе половины видят одинаковое излучение, их сигналы взаимно гасятся, и выход молчит. Когда кто-то пересекает поле зрения, сначала одна половина, а потом другая получает больше излучения; схема модуля улавливает эту разницу, и пин OUT переходит в HIGH.

Белый купол сверху — это линза Френеля. Она делит поле зрения на десятки маленьких зон и фокусирует излучение каждой зоны на элементе. Когда человек переходит из одной зоны в другую, сигнал меняется; поэтому PIR-датчик отлично замечает движение, но не видит человека, который стоит совершенно неподвижно.

Характеристики HC-SR501

ПараметрЗначение
Напряжение питания4,5–20 V (рекомендуется 5 V)
Ток в режиме ожиданияОколо 50 µA
ВыходЦифровой: 3,3 V при движении, 0 V без него
Дальность обнаружения3–7 м (регулируется)
Угол обзораОколо 110°
Время удержания выходаПримерно от 3 секунд до 5 минут (регулируется)
Время блокировкиОколо 2,5 секунды после выключения выхода
Время прогрева30–60 секунд после включения питания

Настройки на модуле

  • Резистор Sx (чувствительность): задаёт дальность обнаружения. Поворот по часовой стрелке увеличивает её примерно с 3 до 7 метров.
  • Резистор Tx (время): задаёт, сколько выход остаётся в HIGH после обнаружения движения. Поворот по часовой стрелке удлиняет время.
  • Перемычка H (повторное срабатывание): пока движение продолжается, таймер каждый раз запускается заново; идеально для управления светом.
  • Перемычка L (однократное срабатывание): когда время выходит, выход переходит в LOW, даже если движение продолжается; дальше нужно новое срабатывание.
  • Время блокировки: примерно 2,5 секунды после перехода выхода в LOW новое движение не регистрируется; это не настраивается.
Для первых экспериментов поверни оба резистора до упора против часовой стрелки (минимальное время, минимальная чувствительность) и поставь перемычку в H. Так не придётся ждать по нескольку минут после каждой проверки; задавать время позже в коде гораздо гибче.

Распиновка и подключение HC-SR501

ПинНазначениеArduino UnoESP32Raspberry Pi Pico
VCCПитание5VVIN (5V)VBUS (5V)
OUTЦифровой выход (3,3 V)D2GPIO 27GP16
GNDЗемляGNDGNDGND
На большинстве модулей названия пинов напечатаны на верхней стороне платы, под белым куполом. Купол можно аккуратно снять, прочитать подписи и надеть обратно.

Обнаружение движения с Arduino

Код ниже ждёт, пока датчик прогреется, а затем один раз пишет сообщение в монитор порта, когда движение начинается, и один раз — когда заканчивается, включая и выключая встроенный светодиод Arduino. Следить только за сменой состояния, а не выводить значение выхода снова и снова — тот же подход, что и в настоящих проектах.

C++ (Arduino IDE)
1const int PIR_PIN = 2;
2const int LED_PIN = 13;        // dahili LED / built-in LED
3
4bool motion = false;
5
6void setup() {
7  pinMode(PIR_PIN, INPUT);
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10  Serial.println("Sensör ısınıyor / warming up...");
11  delay(30000);                  // ilk 30 sn kararsız / unstable for ~30 s
12  Serial.println("Hazır / ready");
13}
14
15void loop() {
16  bool now = digitalRead(PIR_PIN);
17  if (now && !motion) {
18    Serial.println("Hareket algılandı / motion detected");
19    digitalWrite(LED_PIN, HIGH);
20    motion = true;
21  } else if (!now && motion) {
22    Serial.println("Hareket bitti / motion ended");
23    digitalWrite(LED_PIN, LOW);
24    motion = false;
25  }
26}
Сразу после включения питания датчик 30–60 секунд «изучает» обстановку и в это время может срабатывать сам по себе. Если выждать это время в коде или игнорировать первые срабатывания, ложных тревог при каждом запуске системы не будет.

Свет по движению: отсчёт времени через millis()

Хранить время свечения в коде, а не на резисторе Tx модуля, намного гибче. Код ниже запоминает момент каждого обнаружения движения и выключает свет через 20 секунд после последнего движения, так что свет горит, пока в комнате кто-то двигается. К LIGHT_PIN можно подключить светодиод или модуль реле для сетевой лампы; если реле active LOW, поменяй местами HIGH и LOW в последней строке. Подключение реле разобрано в статье Что такое модуль реле?

C++ (Arduino IDE)
1const int PIR_PIN = 2;
2const int LIGHT_PIN = 7;               // LED ya da röle / LED or relay
3const unsigned long ON_TIME = 20000;   // son hareketten sonra 20 sn / 20 s after last motion
4
5unsigned long lastMotion = 0;
6
7void setup() {
8  pinMode(PIR_PIN, INPUT);
9  pinMode(LIGHT_PIN, OUTPUT);
10}
11
12void loop() {
13  if (digitalRead(PIR_PIN) == HIGH) {
14    lastMotion = millis();             // her harekette süreyi yenile / refresh on every motion
15  }
16  bool on = (lastMotion != 0) && (millis() - lastMotion < ON_TIME);
17  digitalWrite(LIGHT_PIN, on ? HIGH : LOW);
18}

PIR с ESP32 и Raspberry Pi Pico

Выход HC-SR501 уже 3,3 V, поэтому его можно подключать к ESP32 и Pico напрямую, без делителя напряжения. А вот сам модуль питай от 5 V: ниже 4,5 V его встроенный стабилизатор работает нестабильно. На ESP32 работает тот же код Arduino; в проектах на батарейках, если отправить ESP32 в глубокий сон и будить его выходом PIR (ext0 wakeup), батарея прослужит на недели дольше. На Pico с MicroPython можно ловить движение через прерывание, ничего не пропуская:

MicroPython
1from machine import Pin
2import time
3
4pir = Pin(16, Pin.IN)            # GP16
5led = Pin(25, Pin.OUT)           # dahili LED; Pico W'de Pin("LED") / onboard LED; Pin("LED") on Pico W
6
7def on_motion(pin):
8    led.value(pin.value())       # hareket varken yanar / on while there is motion
9    print("Hareket / motion" if pin.value() else "Bitti / ended")
10
11pir.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=on_motion)
12
13while True:
14    time.sleep(1)

Как избежать ложных срабатываний

  • Не направляй на источники тепла: батареи отопления, решётки кондиционера, солнечные окна и горячие лампы вызывают срабатывание резкими перепадами температуры.
  • Держи подальше от движущихся предметов: шторы, растения или ветки, качающиеся на ветру, выглядят как движение, если нагрелись на солнце.
  • Очисти питание: реле и Wi-Fi-модули дают помехи по питанию; поставь конденсатор 100 µF между VCC и GND датчика.
  • Отодвинь немного от ESP32: HC-SR501 прямо рядом с антенной Wi-Fi может иногда срабатывать сам; обычно помогают несколько сантиметров расстояния и короткий провод.
  • Если есть домашние животные: снизь чувствительность и установи датчик повыше, слегка наклонив вниз.
  • Не ставь за стекло: обычное стекло задерживает инфракрасное излучение, поэтому датчик за окном не увидит движения снаружи.

PIR, микроволновый радар или ультразвук?

ПараметрPIR (HC-SR501)Микроволновый радар (RCWL-0516)Ультразвук (HC-SR04)
Что обнаруживаетТёплые движущиеся объектыЛюбое движениеРасстояние до предмета впереди
Сквозь тонкую стенку или корпусНетДаНет
Неподвижно стоящий человекНетНетИзмеряется как расстояние
ПотреблениеОчень низкое (~50 µA)Низкое (~3 mA)Среднее (~15 mA)
Типичное применениеОсвещение, сигнализацииСкрытые датчики, открывание дверейОбнаружение препятствий, измерение уровня

Если нужно знать, движется ли кто-то, а не есть ли кто-то в комнате, PIR — самое экономичное решение. Если нужно измерить, как далеко находится предмет, загляни в статью Датчик расстояния HC-SR04.

Идеи проектов с PIR-датчиком

  • Автоматический свет в коридоре: включай лампу через реле при движении и выключай после 30 секунд без движения.
  • Охранная сигнализация: включай зуммер, если в ночном режиме замечено движение; про звуковую часть читай в статье Что такое зуммер?
  • Умный ночник: объедини PIR с фоторезистором (LDR), чтобы лампа включалась, только когда темно и кто-то двигается.
  • Уведомления на телефон: отправляй сообщение в Telegram с ESP32 при обнаружении движения.
  • Экономичный дисплей: включай подсветку LCD, когда кто-то подходит, и выключай, когда уходит.
  • Счётчик посетителей: считай каждое движение через дверной проём и показывай число на дисплее.

Частые ошибки и как их исправить

  • Выход всё время в HIGH: слишком большое время Tx или постоянное движение в режиме H; убавь резистор и убедись, что датчик не смотрит на источник тепла.
  • Никогда не срабатывает: возможно, на VCC не 5 V, датчик ещё прогревается или провод OUT подключён не к тому пину, что указан в коде.
  • Срабатывает сам каждые несколько секунд: шумное питание; добавь конденсатор и отодвинь датчик от реле и Wi-Fi-модулей.
  • Сразу после окончания движения не срабатывает снова: время блокировки около 2,5 секунды — это нормально, датчик исправен.
  • Неудачная установка: PIR лучше всего замечает движение поперёк поля зрения; человека, идущего прямо на датчик, он замечает позже.

PIR-датчик — один из лучших вариантов для первого проекта умного дома: подключается тремя проводами, а результат виден сразу. В приложении BlueGrays есть пошаговые проекты со светом по движению, дверным звонком и сигнализацией — со схемами подключения и кодом.

Частые вопросы

На каком расстоянии срабатывает PIR-датчик?

HC-SR501 замечает движение на расстоянии от 3 до 7 метров в угле около 110 градусов. Дальность задаётся резистором Sx (чувствительность) на модуле; поворот по часовой стрелке её увеличивает.

Замечает ли PIR-датчик неподвижно стоящего человека?

Нет. PIR реагирует только на изменение инфракрасного излучения, то есть на движение. Человека, который сидит совершенно неподвижно, он не заметит. Чтобы понять, есть ли кто-то в комнате, используют радары присутствия mmWave, например LD2410.

Работает ли PIR-датчик через стекло?

Нет. Обычное оконное стекло не пропускает инфракрасное излучение человеческого тела, поэтому датчик за стеклом не видит движения снаружи. Для улицы устанавливай датчик снаружи, в месте, защищённом от дождя.

Работает ли HC-SR501 от 3,3 V?

Ниже 4,5 V его стабилизатор работает нестабильно, поэтому нужно питание 5 V. Выход уже 3,3 V, так что его можно подключать прямо к ESP32 или Pico. Если нужна система полностью на 3,3 V, возьми маленький PIR-модуль AM312, который работает от 2,7–12 V.

Почему мой PIR-датчик срабатывает сам по себе?

Чаще всего причина — период прогрева, источники тепла, на которые смотрит датчик (батареи, солнце, кондиционер), и помехи по питанию. Игнорируй первые 60 секунд, отверни датчик от источников тепла, поставь конденсатор между VCC и GND и держи датчик подальше от Wi-Fi-модулей.

Чем отличаются режимы H и L на HC-SR501?

В режиме H (повторное срабатывание) таймер выхода запускается заново при каждом обнаружении, пока движение продолжается, поэтому свет горит, пока есть движение. В режиме L (однократное) выход выключается, когда заданное время вышло, даже если движение продолжается; новое срабатывание возможно после времени блокировки.

Все проекты
Детектор движения на датчике движения
#24Новичок
Premium

Детектор движения на датчике движения

Простой охранник, который сообщает, что кто-то вошёл в комнату. Датчик движения улавливает тепло человеческого тела, а Arduino держит светодиод включённым, пока есть движение, и гасит его, когда движе

4.6(47)
67
Дверной звонок и свет с датчиком движения
#25Средний
Premium

Дверной звонок и свет с датчиком движения

Когда кто-то подходит к твоей двери, ты узнаёшь об этом ещё до звонка. Как только датчик движения замечает человека, загорается светодиод, а зуммер играет мелодию из трёх нот сверху вниз; когда мелоди

4.7(54)
71
Автоматическое освещение с PIR-датчиком движения на ESP32
#121Средний
Premium

Автоматическое освещение с PIR-датчиком движения на ESP32

В этом проекте PIR-датчик движения HC-SR501 замечает, что кто-то вошёл в комнату, и автоматически включает светодиод. Время свечения отслеживается через millis(); каждое показание HIGH обновляет время последнего движения, и светодиод гаснет не раньше чем через 10 секунд после последнего HIGH. Текущий код ещё и ждёт 50 ms на каждом цикле через delay(50), поэтому цикл не полностью неблокирующий. Подходит для освещения лестниц, шкафов и ванной.

4.4(24)
38
Умное освещение на ESP32 (PIR + LDR + реле + OLED)
#141Продвинутый
Premium

Умное освещение на ESP32 (PIR + LDR + реле + OLED)

Сделай умное освещение для коридора, ванной или кладовки на ESP32! С PIR-датчиком движения, датчиком освещённости LDR и модулем реле собирается классический сценарий «свет включается при движении в темноте»: если вокруг уже светло, движение свет НЕ включает, и днём энергия экономится. Свет горит 30 секунд; если движение продолжается, таймер сбрасывается, и свет горит дольше. OLED SSD1306 крупно показывает состояние (ON / DAYTIME / WAITING) и обратный отсчёт.

4.3(6)
11
Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
#145Продвинутый
Premium

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)

Умная охранная сигнализация, которая при обнаружении движения PIR-датчиком включает зуммер и светодиод и одновременно сразу отправляет владельцу уведомление в Telegram. В ней есть 30-секундная пауза, ограничивающая частоту повторных тревог; этот механизм не проверяет срабатывания PIR и не устраняет ложные тревоги. Подходит для дома, гаража, склада или мастерской. С ESP32-CAM можно добавить уведомления с фото, а с обычной ESP32 DevKit V1 приходят текстовые.

0.0(0)
9
Лазерная сигнализация
#22Средний
Premium

Лазерная сигнализация

Ты ставишь невидимую лучевую ограду, совсем как в кино. Лазер светит на датчик освещённости с другой стороны; как только кто-то проходит и прерывает луч, загорается светодиод и звучит зуммер, а когда

4.8(64)
83
Лазерная охранная система
#23Продвинутый
Premium

Лазерная охранная система

Совсем как сцены ограблений с лазерами в фильмах: лазерный луч светит на датчик освещённости, и как только кто-то входит и прерывает луч, загорается красный светодиод и начинает звучать зуммер. Сигнал

4.8(60)
77