Инфракрасный датчик движения HC-SR501

Инфракрасный датчик движения HC-SR501

Товары

  • Обзор
  • Технические характеристики модуля
  • Подключение
  • Пример использования
  • Часто задаваемые вопросы FAQ

Принципиальная схема

На рисунке 1 показана простейшая схема сигнализации. Питание от любого источника постоянного тока напряжением 12V, способного обеспечить работу сирены F1. Сирена F1 — электронная сирена, предназначенная для автомобильных сигнализаций.

Рис. 1. Принципиальная схема включения сигнализации с применением датчика движения HC-SR501.

Переменным резистором установки длительности импульса, расположенным на плате датчика движения, нужно установить продолжительность звучания сирены после срабатывания. Работает эта схема следующим образом.

Чтобы поставить на охрану включаем S1. Питание поступает на датчик движения и он в течение 30-40 секунд не реагирует на движения. В это время уходим из помещения, закрываем дверь. Через 30-40 секунд после включения датчик движения выходит в рабочий режим.

Если теперь войти, на выходе датчика появится напряжение 3,ЗV. Оно поступает через R1 на базу транзистора VТ1. Но не сразу, потому что в схеме есть конденсатор С1, он задерживает рост напряжения на базе транзистора VТ1.

Это напряжение достигает критической величины через несколько секунд. Потом транзисторы VТ1 и VТ2 открываются и включают сирену F1, которая звучит столько времени, сколько установлено подстроечным резистором на плате датчика движения.

Цепь R1-C1 дает задержку включения сирены в несколько секунд, эта задержка нужна чтобы можно было войти в помещение и отключить сигнализацию скрыто расположенным выключателем S1. Если нужно чтобы сирена включалась без задержки — удалите конденсатор С1.

На рисунке 2 показана схема простейшего охранного устройства с вызовом посредством сотового телефона. Нужен старый, простой, кнопочный сотовый телефон с гарнитурой и возможностью вызова по введенному в память номеру нажатием кнопки гарнитуры (или звонка по последнему номеру нажатием кнопки гарнитуры). Этому требованию отвечают многие кнопочные сотовые телефоны, например, Samsung-GT-E212, FLY-DS105, Phillips-1500 и многие другие (Л.1).

В сотовый телефон, находящийся на охране вносят единственный номер, по которому он будет звонить. А канал электронного ключа на микросхеме D1 подключают параллельно кнопке гарнитуры этого сотового телефона.

При срабатывании датчика движения логическая единица с его выхода поступает на управляющий вход ключа микросхемы D1, её ключ открывается и работает как нажатие кнопки гарнитуры. Телефон звонит по заранее введенному в его память номеру. Получив на свой телефон вызов с его номера вы понимаете что датчик сработал.

Налаживание сводится к регулировке длительности импульса на выходе датчика движения (имеющимся на его плате подстроечным резистором) так, чтобы продолжительность «нажатия» кнопки гарнитуры была достаточной, для того чтобы телефон, к которому подключена эта гарнитура, стал набирать номер. Источником питания микросхемы D1 и датчика движения служит зарядное устройство сотового телефона, к которому подключена эта гарнитура.

PIR детектор движения HC-SR501

Для большинства наших проектов на Arduino, которые должны определять, когда человек покинул или вошел в зону, или приблизился, PIR датчики HC-SR501 являются отличным выбором. Они имеют низкое энергопотребление и низкую стоимость, довольно прочные, имеют широкий диапазон линз, с ними легко взаимодействовать, и они безумно популярны среди любителей.

PIR датчик HC-SR501 имеет три вывода: питание VCC, выход и земля (показано на рисунке ниже). Он имеет встроенный стабилизатор напряжения, поэтому он может питаться от любого постоянного напряжения от 4,5 до 12 вольт, обычно используется 5В. Кроме этого, у него есть несколько настроек. Давайте проверим их.

Рисунок 4 – Распиновка PIR датчика. Расположение компонентов на плате.

На плате есть два потенциометра для настройки пары параметров:

  • Чувствительность – устанавливает максимальное расстояние, на котором может быть обнаружено движение. Оно варьируется от 3 до 7 метров. На реальное расстояние, которое вы получите, может влиять планировка вашего помещения.
  • Время – устанавливает время, в течение которого выходной сигнал останется на высоком логическом уровне после обнаружения. Минимум – 3 секунды, максимум – 300 секунд или 5 минут.

Наконец, на плате есть перемычка (на некоторых моделях перемычка не впаяна). У нее есть два варианта настройки:

  • H – это удержание / повтор / повторный запуск. В этом положении HC-SR501 будет продолжать выдавать высокий логический уровень, пока он продолжает обнаруживать движение. Рисунок 5 – Работа PIR датчика HC-SR501 в режиме повторного запуска
  • L – это прерывающийся или неповторяющийся / без повторного запуска. В этом положении выходной сигнал останется на высоком логическом уровне в течение времени, установленного регулировкой потенциометра TIME. Рисунок 6 – Работа PIR датчика HC-SR501 в режиме без повторного запуска

Подключение PIR(датчика движения) к RaspberryPi.

В одном из своих постов я описывал как сделать умное зеркало. В комментариях поступило предложение подключить датчик движения. Опишу процесс подключения датчика,может быть кому-то будет полезна эта информация

Контакты на датчике:

В моем случае слева направо расположены контакты земли, управления и 5В. В датчиках разных производителей эти контакты могут быть расположены в другом месте или порядке.

Подключение датчика к GPIO:
GND-2 пин GPIO
OUT-11 пин GPIO
+5V-6 пин GPIO

Создание скрипта на питоне:

Теперь мы делаем скрипт python.
Создаем файл в каталоге MagicMirror с расширением .py(я назвал pir.py ). Открываем этот файл любым текстовым редактором и прописываем туда следующие строки :

import sys
import time
import RPi.GPIO as io
import subprocess

io.setmode(io.BOARD)
SHUTOFF_DELAY = 600 # секунды
PIR_PIN=11

def main():
io.setup(PIR_PIN, io.IN)
turned_off = False
last_motion_time = time.time()
while True:
if io.in put(PIR_PIN):
last_motion_time = time.time()
sys.stdout.flush()
if turned_off:
turned_off = False
turn_on()
else:
if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY):
turned_off = True
turn_off()
if not turned_off and time.time() > (last_motion_time + 1):
time.sleep(.1)
def turn_on():
subprocess.call («sh /home/pi/MagicMirror/monitor_on.sh», shell=True)

def turn_off():
subprocess.call («sh /home/pi/MagicMirror/monitor_off.sh», shell=True)

if __name__ == ‘__main__’:
try:
main()
except KeyboardInterrupt:
io.cleanup()

/.config/lxsession /, открываем LXDE-pi в текстовом редакторе и добавляем эту строку :
@sudo / usr / bin / python /home/pi/MagicMirror/ pir.py
Сохраняем изменения, выходим и перезагружаем raspberry pi.
Мои посты:

Пример №3: HC-SR501 и Arduino

Необходимые детали:
Arduino UNO R3 x 1 шт.
Датчика движения HC-SR501 x 1 шт.
Светодиоды 5 мм x 3 шт.
Резистор 0,125W, 320Om x 3 шт.
Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.

Подключение:
Хотя датчик HC-SR501 и самостоятельное устройство, его можно подключить к выводу микроконтроллера. В примере используем контроллер Arduino UNO R3, в котором можем учесть время включения и период сброса. Таким образом, устройство может быть более точным, так как вы не будете пытаться воспринимать движение вперед, когда датчик не готов. Так же, можно подключить несколько датчиков HC-SR501 к Arduino, что позволит позволит отслеживать движение в разных местах.
В следующем примере, мы подключим один HC-SR501 к Arduino в качестве индикации воспользуемся тремя светодиодами, каждый из который отображения состояния датчика :

  • Красный светодиод — этот светодиод указывает, что датчик не готов.
  • Желтый светодиод — этот светодиод указывает, что датчик готов к обнаружению движения.
  • Зеленый светодиод — этот светодиод горит в течение 3 секунд при срабатывании датчика. Вместо светодиода, можно управлять внешним выходом (например, модулем реле, который мы использовали ранее).
Читайте также  Номинальная мощность

Схема подключения:

Перемычка на HC-SR501 необходимо установить в положение «L», а так-же необходимо установить время на минимум (5 секунд), для этого поверните потенциометр в лева до упора. Теперь, когда вы все подключились, необходимо загрузить скетч.

Заключение

Датчики движения окружают нас повсюду. Благодаря охранным системам, их можно встретить практически в каждом помещении. Как мы выяснили, они очень просты в использовании и могут быть легко интегрированы в любой проект на Ардуино или Raspberry Pi.

Вот несколько ситуаций и мест, где может пригодиться датчик движения:

  • автоматическое включение света в подъезде дома, в ванной комнате и туалете, перед входной дверью в помещение;
  • сигнализация в помещении и во дворе;
  • автоматическое открывание дверей;
  • автоматическое включение охранной видеокамеры.

Как уже говорилось в самом начале, существуют и другие способы детектирования движения. О них мы поговорим на следующих уроках!

Вводим ip адрес устройства, открывается web интерфейс, переходим во вкладку Devices, нажимаем Edit

Name — имя любое

1st GPIO: выбрать GPIO-12 (D6)

Остальное поставить как на скрине, что-то можете под себя «подкрутить»

Нажимаем Submit и возвращаемся на вкладку Devices, машем рукой, перед датчиком движения, если значение меняется 0-1 то все ок, можно переходить к пункту 5

Схема подключения HCSR-501

Выход OUT датчика HCSR-501 является цифровым и работает с логикой 3,3В. Благодаря этому вы можете подключить этот модуль напрямую к Ардуино или Raspberry.

Для Ардуино подключите датчик следующим образом:

Когда вы это сделаете, все, что останется, — это в скетче определить, когда вывод OUT переключается с низкого на высокий уровень. Это происходит, когда в поле зрения детектора происходит перемещение объекта.

Эта программа проверяет состояние сигнала на выводе D2 каждые 100 мс. Если на нем появляется высокий сигнал (определение с помощью функции digitalRead()) — запускается функция alarm(), в которой выполняются действия, связанные с поднятием тревоги.

Функция alarm() будет вызываться повторно каждые 100 мс, пока на выходе OUT PIR детектора будет высокий уровень.

Однако на практике нам может понадобиться решение, при котором наше устройство должно реагировать не на состояние сигнала, а на его изменение.

Прерывания

В этом случае стоит попробовать механизм, называемый прерываниями. Прерывания — это реакция микроконтроллера от внешних систем — например, описываемого ИК-детектора. Сигнал с извещеателя прерывает работу основной программы. Таким образом, он заставляет микроконтроллер реагировать на обнаружение движения.

В отличие от вышеприведенного примера, Ардуино не опрашивает время от времени состояние датчика (digitalRead() в функции loop()), а прерывает выполнение кода программы в результате сигнала от PIR детектора. У Ардуино UNO есть 2 контакта, которые обрабатывают внешние прерывания: D2 и D3.

Изменим нашу программу:

Обратите внимание, что в основном цикле loop() функция alarm() вообще не вызывается! Программа выполняется непрерывно, отправляя текст «…test…» на последовательный порт каждые 100 мс.

Ключевым моментом здесь является оператор attachInterrupt() в функции setup(). Установка:

digitalPinToInterrupt — прерывание подключено к цифровому выводу D2,

alarm — прерывание обрабатывается функцией alarm(),

RISING — функция alarm() сработает, когда состояние вывода D2 изменится с низкого на высокий (запуск по нарастающему фронту).

Однако у такого подхода есть особенность — функция alarm() сработает только один раз, когда детектор обнаружит движение. В следующий раз функция alarm() сработает только тогда, когда извещатель вернется в низкое состояние и снова активируется

Помогите собрать электронный ключ для датчика движения.

#1 since88

  • Участник
  • 7 сообщений
    • Наверх

    #2 Naevus

  • Участник
  • 1 960 сообщений
  • since88 , Для ответа на вопрос нужна информация — ЧТО вы собираетесь коммутировать?

    ps Реле по вашей ссылке ДОЛЖНО отлично работать. Нарисуйте схему — как вы его подключали?

    • Наверх

    #3 since88

  • Участник
  • 7 сообщений
  • Коммутировать хочу освежителем воздуха эйрвик, датчик движения ставлю в разрыв питания освежителя

    Vcc реле — «+» 3v, gnd — «-» 3v, in — сигнал от датчика движения, no,com — разрыв питания освежителя воздуха.
    В обзорах вроде читал что на выходе у дат движения 0.33мА, не мало ли это для срабатывания реле?

    • Наверх

    #4 spc

  • Участник
  • 189 сообщений
  • Вообще-то, если у вашего реле все, как на картинке, то ключ там уже присутствует и собирать дополнительно ничего не надо. Что касается датчика, то лучше читать не в обзорах, а в техническом описании датчика. Из которого вытекает (читаем описание чипа BISS001, который обрабатывает данные PIR и напрямую подключен к выходу всего датчика), что максимальный ток — 10 мА при напряжении питания 5В.

    При этом напряжение питания всего датчика HC-SR501 заявлено в пределах 5В — 20В, что (несмотря на рабочий диапазон BISS001 от 3В до 5В) имеет свое объяснение. Дело в том, что для работы в диапазоне 5-20В датчик укомплектован регулятором напряжения 7133-1, который как раз и преобразует весь входной диапазон в 3,3В на выходе. В принципе, если верить описанию, это неплохой регулятор с малым падением напряжения, но даже в этом случае в описании указывается входное напряжение на уровне выходного +0,8В, т.е. минимум 4,1В. Более того, в датчике он подключен к входному питанию через диод — а на них как раз напряжение может падать прилично.

    1) По моему мнению дополнительный ключ вам не нужен — все должно быть уже в реле

    2) 3В входного питания для датчика HC-SR501 откровенно мало. Более того, учтите, что в процессе разряда напряжение на батарейках (если планируете питаться от освежителя) будет снижаться, что в данном случае вообще ни в какие ворота

    3) Выходной ток датчика HC-SR501 для управления реле со встроенным реле достаточен (я бы на всякий случай поставил токоограничительный резистор на 200 — 300 Ом — т.е. один вывод резистора к выходу HC-SR501, второй — к входу реле)

    Но вообще мне кажется, что собственного таймера освежителя вполне достаточно. Особенно если помнить, что в лучшем случае в присутствии людей освежитель будет «пшикать» как минимум раз в пять минут. Без людей (и ложных срабатываний), конечно, будет экономить спрей. Если в том дело — ну, может быть.

    • Наверх

    #5 Naevus

  • Участник
  • 1 960 сообщений
  • Дополню и расширю spc :
    На блоке реле стоит оптрон, которого вполне достаточно. Резисторы тоже не нужны — они в цепи оптрона уже есть. Выход с датчика и так 3,3в
    Да, сам модуль питается от 5 вольт, если питать от батареек, то нужно наверное подать питание после стабилизатора. Но не уверен насчет стабильности работы
    По инструкции к освежителю — первый пшик идет через 15сек после подачи питания. Эдак оно может просто вообще не успевает?

    Ну и — что экономим? Батарейки? У меня штатный комплект батареек работает второй год без замены.
    Аэрозоль? Тут да — штатный минимальный режим «раз в полчаса» растягивает баллон на 4 месяца. За это время запах надоедает уже Но по мне так — да — можно и по реже. С другой стороны — если «посетители» прут косяком — то полчаса уже маловато.

    Читайте также  Ящик для инструментов своими руками

    Сам думал над усовершенствованием, но до датчика движения не додумался пока (громоздко же!). Датчик освещенности, меняющий времязадающую цепь — чтбы в темноте вообще не включалось, а на свету раз в 15 минут можно (например). По моему — проще и удобнее, чем пшикать через 15 сек после каждого движения.

    Датчик движения смысл имеет в общественных туалетах, где свет горит постоянно (либо окно есть). И к габаритам/эстетике устройства требования ниже

    Итого — пробуйте питать датчик от 5 в (поставьте три батарейки). Если не поможет — повесьте на выход датчика светодиод вместо реле — для проверки работы самого датчика. Если работает — отложите датчик в сторону и попробуйте пощелкать реле, подавая принудительно 3в на вход.
    Но думаю — вопрос с питанием решит все проблемы

    since88 сказал:

    • Наверх

    #6 since88

  • Участник
  • 7 сообщений
  • Большое спасибо за ответы.
    Датчик движения запитывал от нокиевской зарядки соответственно 5В, также проверял его светодиодом — рабочий, а вот минус у датчика и реле были вроде разные, будем пробовать в общем. Соответсвено ставлю 3V батарейку на питание реле, 5V или более на датчик, земля у дат и реле одна от источника который дает 5V? Для чего все это делается)) Просто постоянно почитываю муську, был обзор про датчик движения, стало интересно смастерить что-нибудь на его основе, так придумал куда его применить.
    В дальнейшем планирую поставить реле отсрочки срабатывания, чтобы срабатывал освежитель например через 3 мин после срабатывания дат движения, чтобы не сидеть в «совещательной комнате» и не дышать химией))

    Проверил сейчас реле — запитав от батарейки 3V и подав + на клемму IN загорается светодиод возле релюшки, но реле не щелкает. Подключив на выходе реле, светодиод в разрыв питания — не загорается соответсвенно. Для чего кстати перемычки возле реле?

    • Наверх

    #7 Naevus

  • Участник
  • 1 960 сообщений
  • since88 , земля должна быть общая — иначе как блок реле «узнает» что на него подали сигнал? (цепь разомкнута)

    Перемычки. Не встречал именно такого модуля — на других модулях перемычка обычно одна и соединяет питание реле с входом питания (либо разъединяет — например когда сигнал 5в, а реле 12В). Если светодиод загорается, значит соединили все правильно — осталось узнать — попадает ли сигнал на оптрон (меджу перемычками бочонок с 4-мя выводами). И если попадает — что после оптрона — почему до реле не доходит ничо — возможно просто питания не хватает (батарейки старые — просадка идет, например).

    Если не лень — срисуйте схему вокруг перемычек — там вроде не много дорожек. Ну и попробовать подключать так же к батарейке без перемычек (по очереди без какой либо одной и без обеих). На реле, кстати, в нижней строчке что написано? Там напряжение — точно 3В? Мож вам китаец модуль перепутал и 5В реле пришло?

    • Наверх

    #8 since88

  • Участник
  • 7 сообщений
  • Программирование датчика движения в Arduino IDE

    int sensorState = 0;
    Перед setup () мы создаем переменную для хранения текущего состояния датчика. Он называется int, потому что это целое число или любое целое число (хотя мы будем использовать только значения 0 и 1, LOW и HIGH).

    void setup()
    <
    pinMode(2, INPUT);
    pinMode(13, OUTPUT);
    Serial.begin(9600);
    >

    Внутри настройки контакты сконфигурированы с помощью функции pinMode (). Контакт 2 сконфигурирован как вход, поэтому мы можем «слушать» электрическое состояние датчика. Контакт 13 сконфигурирован как выход для управления светодиодом. Чтобы отправлять сообщения, Arduino открывает новый канал последовательной связи с Serial.begin (), который принимает аргумент скорости передачи (какая скорость для связи), в данном случае 9600 бод в секунду.

    void loop()
    <
    // прочитайте состояние датчика / цифрового входа

    sensorState = digitalRead (2);

    Все, что после набора косых черт // является комментарием, просто для нас, людей, читающих и не включенных в программу, когда Arduino запускает ее.

    В основном цикле функция, называемая digitalRead (); проверяет состояние штыря 2 (который будет либо HIGH, либо LOW) и сохраняет это состояние в переменной sensorState, которую мы создали в верхней части.

    // проверяем, есть ли 5 вольт на выходе датчика. если это так, подаем 5 вольт на светодиод

    if (sensorState == HIGH) <
    digitalWrite(13, HIGH);
    Serial.println(«Sensor activated!»);
    > else <
    digitalWrite(13, LOW);
    >
    delay(10); //задержка, чтобы ничего не перегрузить

    Ниже двух строк комментариев является оператором if, который проверяет, является ли sensorState HIGH (== является оператором сравнения, не путать с =, который является оператором присваивания). Если условие выполнено, встроенный светодиод установлен HIGH (включен). Если нет, вместо этого выполняется код, содержащийся внутри else <: встроенный светодиод установлен LOW (выключен). Если утверждения могут существовать в одиночку или с одним или несколькими инструкциями else.