Про датчик движения и подключение его к Arduino
Опубликовано: 25.10.2016 19:00
Всем привет, сегодня мы рассмотрим устройство под названием датчик движения. Многие из нас слышали об этой штуке, кто то даже имел дело с этим устройством. Что же такое датчик движения? Попробуем разобраться, итак:
Датчик движения, или датчик перемещения — устройство (прибор) обнаруживающий перемещение каких либо объектов. Очень часто эти устройства, используются в системах охраны, сигнализации и мониторинга. Форм факторов этих датчиков существует великое множество, но мы рассмотрим именно модуль датчика движения для подключения к платам Arduino, и именно от фирмы RobotDyn. Почему именно этой фирмы? Я не хочу заниматься рекламой этого магазина и его продукции, но именно продукция данного магазина была выбрана в качестве лабораторных образцов благодаря качественной подаче своих изделий для конечного потребителя. Итак, встречаем — датчик движения (PIR Sensor) от фирмы RobotDyn:
Эти датчики малы по габаритам, потребляют мало энергии и просты в использовании. Кроме того — датчики движения фирмы RobotDyn имеют еще и маркированные шелкографией контакты, это конечно мелочь, но очень приятная. Ну а тем кто использует такие же датчики, но только других фирм, не стоит беспокоиться — все они имеют одинаковый функционал, и даже если не промаркированы контакты, то цоколёвку таких датчиков легко найти в интернете.
Основные технические характеристики датчика движения(PIR Sensor):
Зона работы датчика: от 3 до 7 метров
Угол слежения: до 110 о
Рабочее напряжение: 4,5. 6 Вольт
Потребляемый ток: до 50мкА
Примечание: Стандартный функционал датчика можно расширить, подключив на пины IN и GND датчик освещенности, и тогда датчик движения будет срабатывать только в темноте.
Инициализация устройства.
При включении, датчику требуется почти минута для инициализации. В течение этого периода, датчик может давать ложные сигналы, это следует учесть при программировании микроконтроллера с подключенным к нему датчиком, или в цепях исполнительных устройств, если подключение производится без использования микроконтроллера.
Угол и область обнаружения.
Угол обнаружения(слежения) составляет 110 градусов, диапазон расстояния обнаружения от 3 до 7 метров, иллюстрация ниже показывает всё это:
Регулировка чувствительности(дистанции обнаружения) и временной задержки.
На приведённой ниже таблице показаны основные регулировки датчика движения, слева находится регулятор временной задержки соответственно в левом столбце приведено описание возможных настроек. В правом столбце описание регулировок расстояния обнаружения.
Подключение датчика:
- PIR Sensor[PIN GND] — Arduino Nano[PIN GND]
- PIR Sensor[PIN 5V] — Arduino Nano[PIN 5V]
- PIR Sensor[PIN OUT] — Arduino Nano[PIN A0]
- PIR Sensor[PIN IN] — для датчика освещенности
- PIR Sensor[PIN GND] — для датчика освещенности
Типичная схема подключения дана на схеме ниже, в нашем случае датчик показан условно с тыльной стороны и подключен к плате Arduino Nano.
Скетч демонстрирующий работу датчика движения(используем программу Serial Monitor Pro):
Скетч является обычной проверкой работы датчика движения, в нём есть много недостатков, таких как:
- Возможные ложные срабатывания, датчику необходима самоинициализация в течение одной минуты.
- Жесткая привязка к монитору порта, нет выходных исполнительных устройств(реле, сирена, светоиндикация)
- Слишком короткое время сигнала на выходе датчика, при обнаружении движения необходимо программно задержать сигнал на более долгий период времени.
Усложнив схему и расширив функционал датчика, можно избежать вышеописанных недостатков. Для этого потребуется дополнить схему модулем реле и подключить обычную лампу на 220 вольт через данный модуль. Сам же модуль реле будет подключен к пину 3 на плате Arduino Nano. Итак принципиальная схема:
Теперь пришло время немного усовершенствовать скетч, которым проверялся датчик движения. Именно в скетче, будет реализована задержка выключения реле, так как сам датчик движения имеет слишком короткое время сигнала на выходе при срабатывании. Программа реализует 10-ти секундную задержку при срабатывании датчика. При желании это время можно увеличить или уменьшить, изменив значение переменной DelayValue . Ниже представлен скетч и видео работы всей собранной схемы:
В программе присутствует конструкция:
unsigned long prevMillis = 0;
int interval = 1000;
unsigned long currMillis = millis();
if(currMillis — prevMillis > interval)
// Наши операции заключенные в тело конструкции
Чтобы внести ясность, было решено отдельно прокомментировать эту конструкцию. Итак, данная конструкция позволяет выполнить как бы параллельную задачу в программе. Тело конструкции срабатывает примерно раз в секунду, этому способствует переменная interval. Сначала, переменной currMillis присваивается значение возвращаемое при вызове функции millis(). Функция millis() возвращает количество миллисекунд прошедших с начала программы. Если разница currMillis — prevMillis больше чем значение переменной interval то это означает, что уже прошло более секунды с начала выполнения программы, и нужно сохранить значение переменной currMillis в переменную prevMillis затем выполнить операции заключенные в теле конструкции. Если же разница currMillis — prevMillis меньше чем значение переменной interval, то между циклами сканирования программы еще не прошло секунды, и операции заключенные в теле конструкции пропускаются.
Ну и в завершение статьи видео от автора:
Инфракрасный датчик движения (Zelo-модуль)
Инфракрасный датчик движения зафиксирует любое перемещения тёплых объектов: людей, животных и даже лунных рыб.
Видеообзор
Принцип работы
Каждый теплокровный объект является источником теплового излучения. Длина волны теплового излучения зависит от температуры и находится в инфракрасной части спектра. ИК излучение невидимо для глаза, но улавливается пироэлектрическими датчиками.
Примеры работы
Простой датчик движения
Инфракрасный датчик может работать даже без микроконтроллера. Соберите простой детектор движения объекта.
Что вам понадобится?
Схема устройства
При появлении объекта в зоне видимости датчика, лампочка загорится.
Используйте инфракрасный датчик движения как одно из зёрен в своём умном доме. Тут уже не обойтись без Arduino, Raspberry Pi или Iskra JS.
Пример для Arduino
Подключим датчик движения к Arduino Uno через Troyka Shield к 4 цифровому пину.
Схема устройства
Код программы
Выведем в Serial-порт текущее состояние датчика с обновлением каждые 100 миллисекунд.
После прошивки платы, вы увидите бегущие нули. А как только появится живой объект на горизонте — нули сменятся на единицы.
Пример для Iskra JS
Скоммутируем PIR-сенсор к Iskra JS через Troyka Shield к 4 цифровому пину.
Схема устройства
Код программы
Зафиксируем движение объекта с помощью Espruino и языка JavaScript.
В результате вы увидите сообщение в консоле, при обнаружении живого объекта в зоне видимости сенсора.
Пример для Raspberry Pi
Поймаем живой объект одноплатником Raspberry Pi, например, Raspberry Pi 4. Подключите сенсор движения к пину 4 Raspberry. Для избежания макеток и проводов используйте плату расширения Troyka Cap.
Схема устройства
Код программы
После запуска скрипта вы увидите текущие показатели сенсора. Пока движения нет — в консоли выводятся нули, при обнаружении живого объекта — единицы.
Элементы платы
Пироэлектрический сенсор с линзой Френеля
Модуль выполнен на пироэлектрическом сенсоре RD-624 в металлическом герметичном корпусе. Внутри компонента расположено два чувствительных элемента, которые смотрят на внешний мир через прямоугольное окно, которое пропускает инфракрасное излучение.
На пироэлектрический сенсор одевается Линза Френеля, которая концентрируют излучение, значительно расширяя диапазон чувствительности датчика.
Микросхема управления
Мозгом сенсора является микросхема BISS0001. Чип считывает и обрабатывает сигналы с PIR-сенсора. В итоге на выходе модуля бинарный цифровой. Есть движение — единица, нет — ноль.
Выбор режима работы
Режим работы модуля задается перемычкой . Есть два режима — режим H и режим L. На фото выше в модуле установлен режим H.
Режим H — в этом режиме при срабатывании датчика несколько раз подряд на его выходе (на OUT) остается высокий логический уровень.
Режим L — в этом режиме на выходе при каждом срабатывании датчика появляется отдельный импульс.
Регулировка режимов работы
На модуле расположено три потенциометра отвечающие за подстройку режима работы:
Световой индикатор
Индикаторный светодиод дублирующий выходной сигнал с датчика движения. При высоком уровне сигнала с модуля — светодиод горит, при низком — не горит.
Датчик освещённости
Датчик освещённости на фоторезисторе GL5528, подкорректирует чувствительность модуля на солнечный свет. Это удобно при необходимости отключение работы сенсора в дневное время суток.
Troyka-контакты
На модуле выведена группа Troyka-контактов:
Как работает PIR датчик HC-SR501, и его взаимодействие с Arduino
Лаборатория каждого сумасшедшего ученого, или секретная комната подростка, нуждается в улучшенной защите от вторжения мошенников или братьев и сестер. Если вы один из них, вам, вероятно, стоит подумать о приобретении пассивного пироэлектрического инфракрасного (PIR) датчика. PIR датчики позволяют вам определять, когда кто-то находится в комнате, когда не должен быть там.
Рисунок 1 – Как работает PIR датчик HC-SR501, и его взаимодействие с Arduino
Хотя это может показаться чем-то из шпионского фильма, но вы, вероятно, используете PIR датчики каждый день. Этот датчик вы можете найти в большинстве современных систем безопасности, автоматических выключателях света, механизмах открывания гаражных ворот и аналогичных применениях, где работа какого-либо электрического устройства необходима только в присутствии людей.
Как работает PIR датчик движения?
Если вы не знали, все объекты с температурой выше абсолютного нуля (0 Кельвинов / -273,15°C), включая человеческие тела, испускают тепловую энергию в виде инфракрасного излучения. Чем горячее объект, тем большее излучение он излучает.
PIR датчик разработан специально для обнаружения таких уровней инфракрасного излучения. В основном он состоит из двух основных составляющих: пироэлектрического датчика и специальной линзы, называемой линзой Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик.
Рисунок 2 – PIR датчик, пироэлектрический датчик, два слота обнаружения
Пироэлектрический датчик на самом деле имеет две прямоугольные прорези, выполненные из материала, который пропускает инфракрасное излучение. За ними находятся два отдельных инфракрасных сенсорных электрода: один из которых отвечает за создание положительного выходного сигнала, а другой – отрицательного. Причина такого решения заключается в том, что мы ищем изменение инфракрасных уровней, а не сами окружающие инфракрасные уровни. Два электрода подключены так, чтобы они подавляли друг друга. Если одна половина видит больше или меньше инфракрасного излучения, чем другая, выходной сигнал будет высоким или низким.
Когда датчик находится в режиме ожидания (то есть вокруг датчика нет движения), оба слота обнаруживают одинаковое количество инфракрасного излучения, что приводит к нулевому выходному сигналу.
Но когда мимо проходит теплый объект, подобный человеку или животному; сначала он перекрывает одну половину PIR датчика, что вызывает появление положительного дифференциального изменения между двумя половинами. Когда теплый объект покидает чувствительную область, происходит обратное, в результате чего датчик генерирует отрицательное дифференциальное изменение. Соответствующий импульс сигналов приводит к тому, что датчик устанавливает на выходном выводе высокий логический уровень.
Рисунок 3 – Принцип действия PIR датчика
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 датчика HC-SR501
Печатная плата HC-SR501 имеет площадки для двух дополнительных компонентов. Они обычно обозначаются как «RT» и «RL». Обратите внимание, что на некоторых платах обозначения могут быть закрыты «купольной» линзой на стороне, противоположной компонентам.
Рисунок 7 – PIR датчик. Площадки для фоторезистора и термистора
- RT – предназначен для термистора или термочувствительного резистора. Его добавление позволяет использовать HC-SR501 при экстремальных температурах, а также в некоторой степени повышает точность детектора.
- RL – это место для подключения светочувствительного резистора (LDR) или фоторезистора. При добавлении этого компонента HC-SR501 будет работать только в темноте, это обычное применение для систем освещения, чувствительных к движению.
Дополнительные компоненты могут быть припаяны непосредственно к плате или выведены в удаленные места с помощью проводов и разъемов.
Распиновка PIR датчика HC-SR501
HC-SR501 имеет 3-контактный разъем, который соединяет его с внешним миром. На него выведены следующие контакты:
Рисунок 8 – Распиновка PIR датчика HC-SR501
VCC – вывод питания для PIR датчика HC-SR501, к которому мы подключаем вывод 5V на Arduino.
Выходной контакт – логический выход с TTL уровнем 3,3 В. Низкий логический уровень означает, что движение не обнаружено, высокий логический уровень означает, что было обнаружено какое-то движение.
GND должен быть подключен к земле Arduino.
Использование PIR датчика в качестве автономного устройства
Одна из причин, по которой PIR датчик HC-SR501 является чрезвычайно популярным, заключается в том, что он является очень универсальным датчиком, который самодостаточен. А подключив его к каким-либо микроконтроллерам, таким как Arduino, вы сможете еще больше расширить его универсальность. Для нашего первого эксперимента мы будем использовать HC-SR501 отдельно, чтобы показать, насколько он полезен сам по себе.
Схема соединений для этого эксперимента очень проста. Батареи подключены к выводам датчика VCC и GND, а маленький красный светодиод подключен к выходному контакту через ограничивающий ток резистор 220 Ом. И всё!
Теперь, когда PIR обнаруживает движение, на выходном контакте появляется высокий логический уровень, и светодиод загорается!
Рисунок 9 – Тестовая схема подключения PIR датчика без использования Arduino. Она показывает, как можно использовать PIR датчик в автономных приложениях.
Помните, что при включении питания необходимо подождать 30-60 секунд, пока PIR датчик не адаптируется к инфракрасной энергии в помещении. В течение этого времени светодиод может немного мигать. Подождите, пока светодиод не погаснет, а затем подвигайтесь перед ним, махая рукой, чтобы увидеть, что светодиод загорается.
Подключение PIR датчика к Arduino UNO
Теперь, когда у нас есть полное понимание того, как работает PIR датчик, мы можем подключить его к нашей плате Arduino!
Подключить PIR датчики к микроконтроллеру очень просто. PIR действует как цифровой выход, поэтому всё, что вам нужно делать, это отслеживать, когда на его выходном выводе установится высокий логический уровень (обнаружено движение) или низкий логический уровень (не обнаружено). Подайте на PIR датчик напряжение 5 В и подключите землю. Затем подключите выход к цифровому выводу 2.
Вам нужно установить перемычку на HC-SR501 в положение H (повторный запуск), чтобы он работал правильно. Вам также нужно будет установить время на минимум (3 секунды), повернув потенциометр «время» против часовой стрелки до упора. Установите чувствительность в любое положение, которое вам нужно, либо, если не уверены, установите ее в среднее положение.
Теперь вы готовы загрузить код и начать работу PIR датчиком.
Рисунок 10 – Подключение PIR датчика к Arduino UNO
Код Arduino
Код очень прост и в основном отслеживает, является ли входной сигнал на выводе 2 высоким или низким.
В конце, при обнаружении движения мы печатаем сообщение в монитор последовательного порта.
Рисунок 11 – Вывод приложения PIR датчика в мониторе последовательного порта
Что нужно учесть перед проектированием приложений на базе PIR датчиков
Как и для большинства PIR датчиков, HC-SR501 требуется некоторое время для адаптации к инфракрасной энергии в помещении. Это занимает от 30 до 60 секунд при первом включении датчика.
Кроме того, датчик имеет период «сброса» около 5 или 6 секунд после считывания. В течение этого времени он не обнаружит никакого движения.
При проектировании системы на базе HC-SR501 вам необходимо будет учитывать эти длительности задержек.