Инфракрасный датчик движения HC-SR501 позволяет обнаруживать движение человека или домашнего животного на расстоянии до 7 метров при угле обзора до 110°. Расстояние обнаружения можно регулировать. Имеет два входа питания (+5 В и Земля) и один цифровой выход, по которому можно снимать данные. Если помех нет – на нем будет высокий уровень (~3,3 В), если есть – низкий (~0 В).
Режим работы модуля задаётся перемычкой (джампером). Есть два режима — режим H и режим L:
- Режим H (режим по умолчанию) — в этом режиме при срабатывании датчика несколько раз подряд на его выходе (на OUT) остаётся высокий логический уровень (на рисунке выше). В положении H датчик начинает отсчёт времени каждый раз после обнаружения движения. Другими словами, любое шевеление человека вызовет обнуление таймера отсчёта Т.
- Режим L — в этом режиме на выходе при каждом срабатывании датчика появляется отдельный импульс. Допустим, мы хотим управлять светом в ванной комнате. Зайдя в комнату, человек вызовет срабатывание датчика, и свет включится ровно на время, заданное резистором времени. По окончании периода, сигнал на выходе вернётся в исходное состояние, и датчик будет дать следующего срабатывания.
На плате HC-SR501 имеются дополнительные отверстия для двух компонентов, рядом расположена маркировка, посмотреть на нее можно сняв линзу Френеля. Назначение дополнительных отверстий:
- RT — предназначено для термистора или чувствительного к температуре резистора. Добавление этого позволяет использовать HC-SR501 в экстремальных температурах, а также в некоторой степени повышает точность работы детектора.
- RL — соединение для светозависимого резистора или фоторезистора. Добавляя компонент, HC-SR501 будет работать только в темноте, что является общим приложением для чувствительных к движению систем освещения.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
int PIRpin = 2; // датчик движения подключаем к 2-му цифр.выводу int ledpin = 3; // светодиод подключаем к 3-му цифр.выводу void setup() { pinMode(ledpin, OUTPUT); // на выход pinMode(PIRpin, INPUT); // на вход } void loop() { // светодиод не горит, если нет движения if(digitalRead(PIRpin)==LOW) { digitalWrite(ledpin,LOW); } // светодиод горит, если движение зафиксировано else { digitalWrite(ledpin,HIGH); } } |