ИК-датчик движения HC-SR501
HC-SR501 - пироэлектрический инфракрасный датчик движения, позволяет обнаруживать движение в контролируемой зоне. Представляет из себя модуль состоящий из ИК сенсора 500BP, линзы Френеля, и управляющей модулем микросхемы BISS0001. Режим работы модуля задается перемычкой (режим H или режим L).
В режиме H при срабатывании датчика несколько раз подряд на его выходе (на OUT) остается высокий логический уровень. В режиме L на выходе при каждом срабатывании датчика на выход подается отдельный импульс.
Не рекомендуется использовать датчик в местах с резкими перепадами температур - резкий всплеск инфракрасного излучения от нагрева он будет воспринимать как появление перемещающегося объекта, что может вызвать ложное срабатывание.
HC-SR501 часто применяется в охранных сигнализациях, а так же в умных домах для контроля освещения при появлении в помещении человека.
Технические характеристики
- Напряжение питания: 4.8В до 20В
- Статический ток: 50 мА
- Уровня выходного сигнала: 3.3 В / низкий 0 В
- Время задержки: 0.5 — 200с (регулируемая)
- Время блокировки: 2.5 с
- Угол работы: < 100
- Рабочая температура: -15С до + 70C
- Определение объектов: 23 мм
- Габариты: 33мм x 25мм x 24мм
На модуль установлена линза Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик под названием 500BP. Датчик называется PIR (Passive Infra-Red). Пассивный он потому, что для обнаружения движения не используется какая-либо дополнительная энергия, кроме той, что испускается самими объектами.
500BP состоит из двух чувствительных элементов. Управляющая микросхема модуля регистрирует изменения сигналов от обоих элементов и по характеру их изменения обнаруживает движение объектов, испускающих инфракрасные сигналы (живых организмов).
Контакты датчика
Назначение выводов:
Модуль HC-SR501 имеет 3 вывода:
- VCC — положительное напряжение постоянного тока от 4,5 до 20 В постоянного тока.
- OUTPUT — логический выход на 3,3 вольта. LOW не указывает на обнаружение, HIGH означает, что кто-то был обнаружен.
- GND — заземление.
Назначение перемычек:
- H — это настройка Hold или Repeat. В этом положении HC-SR501 будет продолжать выдавать сигнал HIGH, пока он продолжает обнаруживать движение.
- L — Это параметр прерывания или без повтора. В этом положении выход будет оставаться HIGH в течение периода, установленного настройкой потенциометра TIME.
На плате HC-SR501 имеются дополнительные отверстия для двух компонентов, рядом расположена маркировка, посмотреть на нее можно сняв линзу Френеля.
Назначение дополнительных отверстий:
- RT — это предназначено для термистора или чувствительного к температуре резистора. Добавление этого позволяет использовать HC-SR501 в экстремальных температурах, а также в некоторой степени повышает точность работы детектора.
- RL — это соединение для светозависимого резистора или фоторезистора. Добавляя компонент, HC-SR501 будет работать только в темноте, что является общим приложением для чувствительных к движению систем освещения.
Подключение HC-SR501 к Ардуино Уно
Для соединения с микроконтроллером или напрямую с реле у HC-SR501 имеется три вывода. Подключаем их к Ардуино по следующей схеме:
HC-SR501 | GND | VCC | OUT |
Ардуино Уно | GND | +5V | 2 |
Программа для датчика
Как уже было сказано, цифровой выход датчика HC-SR501 генерирует высокий уровень сигнала при срабатывании. Напишем простую программу, которая будет отправлять в последовательный порт «1» если датчик увидел движение, и «0» в противном случае.
const int movPin = 2 void setup() { Serial.begin(9600); pinMode(movPin, INPUT); } void loop() { int val = digitalRead(movPin); Serial.println(val); delay(100); }
Загружаем программу на Ардуино и проверяем работу датчика. Можно покрутить настройки датчика и посмотреть как это отразится на его работе.
Программа для управления светом при помощи датчика движения
Теперь напишем программу, которая будет при срабатывании датчика включать реле, а следовательно и освещение в комнате.
const int movPin = 2; const int relPin = 3; void setup() { Serial.begin(9600); pinMode(movPin, INPUT); pinMode(relPin, OUTPUT); } void loop(){ int val = digitalRead(movPin); if (val) digitalWrite(relPin, HIGH); else digitalWrite(relPin, LOW); }
Загружаем программу на Ардуино, аккуратно подключаем схему к бытовой сети и проверяем работу датчика.