Датчик движения HC-SR501: устройство, настройка и работа с Arduino

Как устроен пироэлектрический модуль HC-SR501, что регулируют его потенциометры и перемычка и как подключить датчик к Arduino для сигнализации.
Из чего состоит модуль
HC-SR501 — модуль обнаружения движения (или присутствия), который реагирует на объекты, испускающие инфракрасное излучение. Его чувствительный элемент — PIR-датчик 500BP. Он работает на пироэлектрическом эффекте: в кристалле при изменении температуры возникает электрическое поле, и это изменение можно зафиксировать.

Сверху датчик закрыт линзой Френеля. Она расширяет зону обзора и усиливает приходящий инфракрасный сигнал. Обработкой сигнала и управлением работой модуля занимается микросхема BISS0001.

После подачи питания модулю нужно время на калибровку — примерно одна минута, и только потом он готов к работе. Размещать его рекомендуют подальше от открытых источников света.
Потенциометры и режимы L и H
На плате есть два подстроечных потенциометра и перемычка выбора режима. Первый потенциометр задаёт дальность обнаружения в пределах от 3 до 7 м. Второй определяет, сколько времени после срабатывания на выходе удерживается сигнал: от 5 до 300 секунд.
- Режим L — одиночное срабатывание. Обнаружив движение, модуль выставляет на выходе OUT высокий уровень на время, заданное вторым потенциометром, и в течение этого времени на новые движения не реагирует. Такой вариант подходит для охранных систем, где нужно подать сигнал на сирену.
- Режим H — срабатывание при каждом обнаруженном движении. Его удобно применять для управления освещением.

Характеристики
| Напряжение питания | 4,5–20 В |
| Ток потребления | 50 мА |
| Уровни на выходе OUT | HIGH — 3,3 В, LOW — 0 В |
| Дальность обнаружения | 3–7 м |
| Задержка после срабатывания | 5–300 с |
| Угол наблюдения | до 120° |
| Блокировка до следующего замера | 2,5 с |
| Режимы работы | L — одиночное срабатывание, H — при каждом событии |
| Рабочая температура | от −20 до +80 °C |
| Габариты | 32×24×18 мм |
Подключение к Arduino
У модуля три вывода: VCC — питание, GND — земля, OUT — цифровой выход с уровнями 0–3,3 В. В простейшем примере выход датчика заводят на контакт 2 платы Arduino, а динамик — на контакт 9. Контакт 2 выбран не случайно: на нём доступно внешнее прерывание int0, и срабатывания фиксируются именно через него.

Логика скетча такая. В setup запускается последовательный порт на скорости 9600 и назначается обработчик прерывания по нарастающему фронту: attachInterrupt(0, intHCSR501, RISING). Обработчик только поднимает флаг срабатывания. В основном цикле программа проверяет флаг, и если он установлен, отправляет в порт сообщение «Attention!!!», включает звуковой сигнал частотой 587 Гц на 5 секунд функцией tone и сбрасывает флаг. Для этого опыта модуль переводят в режим L.
После загрузки скетча остаётся подобрать потенциометрами длительность сигнала на выходе OUT и чувствительность, то есть расстояние, на котором объект фиксируется.
Пример: SMS при срабатывании
Тот же принцип можно развить до простой охранной сигнализации, которая при движении на объекте отправляет SMS. Для неё потребуются:
- плата Arduino Uno;
- датчик HC-SR501;
- GSM/GPRS-шилд;
- npn-транзистор, например С945;
- резистор 470 Ом;
- динамик 8 Ом 1 Вт;
- провода.
К предыдущему скетчу добавляется библиотека SoftwareSerial: обмен с шилдом идёт через программный последовательный порт на контактах 7 и 8 со скоростью 19200. При срабатывании датчика, помимо сообщения в порт и звука, вызывается подпрограмма отправки SMS. Она переводит модем в текстовый режим командой AT+CMGF=1, затем командой AT+CMGS передаёт номер получателя, отправляет текст «Attention!!!» и завершает передачу символом с ASCII-кодом 26 (Ctrl+Z).
Важная деталь по питанию: в момент отправки SMS шилд потребляет ток до 2 А, поэтому схему питают от внешнего источника 12 В 2 А.
Если датчик ведёт себя не так
Когда модуль не реагирует на движение, сначала проверяют правильность подключения, затем подстраивают потенциометрами дистанцию срабатывания и задержку длительности сигнала. Если же срабатываний слишком много, помогает подстройка задержки или перевод перемычки в режим одиночного срабатывания L.