Ардуино: инфракрасный датчик движения, ПИР

Тема сегодняшнего урока — датчик движения на основе пироэлектрического эффекта (PIR, passive infrared motion sensor). Такие датчики часто используются в охранных системах и в быту для обнаружения движения в помещении. Например, на принципе детектирования движения основано автоматическое включение света в подъезде или в ванной. Пироэлектрические датчики достаточно простого устроены, недороги и неприхотливы в установке и обслуживании.

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

Кстати сказать, существуют и другие способы детектирования движения. Сегодня всё чаще используют системы компьютерного зрения для распознавания объектов и траектории их перемещения. В тех же охранных системах применяются лазерные детекторы, которые дают тревожный сигнал при пересечении луча. Также используются тепловизионные датчики, способные определить движение только живых существ.

Принцип действия пироэлектрических датчиков движения

Пироэлектрики — это диэлектрики, которые создают электрическое поле при изменении их температуры. На основе пироэлектриков делают датчики измерения температуры, например, LHI778 или IRA-E700. Каждый такой датчик содержит два чувствительных элемента размером 1×2 мм, подключенных с противоположной полярностью. И как мы увидим далее, наличие именно двух элементов поможет нам детектировать движение.

Вот так выглядит датчик IRA-E700 компании Murata.

IRA-E700ST0

На этом уроке мы будем работать с датчиком движения HC-SR501, в котором установлен один такой пироэлектрический датчик. Сверху пироэлектрик окружен полусферой, разбитой на несколько сегментов. Каждый сегмент этой сферы представляет собой линзу, которая фокусирует тепловое излучение на разные участки ПИР-датчика. Часто в качестве линзы используют линзу Френеля.

irmodule_1

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

Drawing1

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

Человек движется, и его тепловое излучение через линзы попадает уже на второй PIR-элемент, который генерирует отрицательный импульс. Электронная схема датчика движения регистрирует эти разнонаправленные импульсы и делает выводы о том, что в поле зрения датчика попал человек. На выходе датчика генерируется положительный импульс (правый рисунок).

Настройка HC-SR501

На этом уроке мы будем использовать модуль HC-SR501. Этот модуль очень распространен и применяется во множестве DIY проектов в силу своей дешевизны.

У датчика имеется два переменных резистора и перемычка для настройки режима. Один из потенциометров регулирует чувствительность прибора. Чем она больше, тем дальше «видит» датчик. Также чувствительность влияет на размер детектируемого объекта. К примеру, можно исключить из срабатывания собаку или кошку.

SENS-IR-HC-SR501_sh

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

Наконец, третий элемент управления — перемычка, которая переключает режим датчика. В положении L датчик ведет отсчет Т от самого первого срабатывания. Допустим, мы хотим управлять светом в ванной комнате. Зайдя в комнату, человек вызовет срабатывание датчика, и свет включится ровно на время Т. По окончании периода, сигнал на выходе вернется в исходное состояние, и датчик будет дать следующего срабатывания.

В положении H датчик начинает отсчет времени T каждый раз после обнаружения движения. Другими словами, любое шевеление человека вызовет обнуление таймера отсчета Т. По-умолчанию, перемычка находится в состоянии H.

Подключение HC-SR501 к Ардуино Уно

Для соединения с микроконтроллером или напрямую с реле у HC-SR501 имеется три вывода. Подключаем их к Ардуино по следующей схеме:

HC-SR501GNDVCCOUT
Ардуино УноGND+5V2

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

IR_motion_схема

Внешний вид макета

IR_motion_bb

Программа

Как уже было сказано, цифровой выход датчика 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);
}

Загружаем программу на Ардуино и проверяем работу датчика. Можно покрутить настройки датчика и посмотреть как это отразится на его работе.

Управление светом при помощи датчика движения

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

Будем использовать модуль реле с защитой на основе опторазвязки, о котором мы уже писали в одном и уроков (урок про реле).

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

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

IR_motion_relay_схема

Внешний вид макета

IR_motion_relay_bb

Программа

Теперь напишем программу, которая будет при срабатывании датчика включать реле, а следовательно и освещение в комнате.

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);
}

Загружаем программу на Ардуино, аккуратно подключаем схему к бытовой сети и проверяем работу датчика.

Заключение

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

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

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

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


Изменено:

Ардуино: инфракрасный датчик движения, ПИР: 16 комментариев

  1. В туалете не вариант, т.к. пока стоишь, он выключает свет. Чтобы не выключал свет, приходится махать руками. Когда машешь руками, точность попадания ухудшается. Так что не вариант, ребята.

    • перемычку переставь на «Н» и будет тебе щястье. и таймаут подбери чтобы достаточно было. например 1 минуту, то есть любое шевеление в течение этой минуты будет продлевать отсчет еще на минуту. а когда выйдешь из сортира, то через минуту свет и погаснет совсем уже.

      • тоже не вариант… минуту в толкане сидишь, читаешь газету и вырубается )) и не вариант увеличивать тайм-аут… т.к. вышел с комнаты и свет еще горит N-ное время. По умолчанию кстати перемычка в положении H стоит ))
        Нужно комбинировать датчики, если хотите, чтобы свет сразу вырубился после ухода с комнаты и не вырубался в вашем присутствии…
        Комбинировать PIR и микроволновый датчик, либо использовать еще ультразвуковой датчик, но с условием изменения постоянного расстояния (при изменении постоянного расстояния выдавать true)

    • А энкодер поставить не вариант? Или теряется то «волшебство» без контактного управления?

  2. А если нужно датчик на включение USB гирлянды например — просто надо другое реле?

    • Да реле не принципиально какую нагрузку переключать. С вашим вариантом (USB), проще все же переключать 220В, но после реле блок с USB выходом что бы был… и все.

  3. Вопрос, для чего тут ардуина? Неужели пир датчик не может управлять реле?

    • Дык на выходе датчика же импульсный сигнал, т.е. напрямую всегда будет мигание.
      Хотя если ёмкость большую туда ставить, что б сгладить импульсы, но не факт что прокатит.

    • Сам не может. 3,3 В мало, но он спокойно может открывать транзистор, который сам может комутировать нагрузку или твердотельное реле. Либо открывает транзистор, а транзистор запускает обычное реле. Так что контроллер можно не ставить если просто для света.

  4. Ещё бы усложнить схему (а именно — скетч), так что бы датчик функционировал при определенных событиях!
    Например, датчик включался при условии отсутствия сотрудников на территории (данные через RFID по ID) и выключался при наличии таковых.
    В случае обнаружения отправлял оповещение через интернет.

  5. В скече пропущена «;»
    Имеется
    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;

    void setup() {
    Serial.begin(9600);
    pinMode(movPin, INPUT);
    }

    void loop(){
    int val = digitalRead(movPin);
    Serial.println(val);
    delay(100);
    }

  6. Там на плате есть еще две пары контактов:RT и RL. RT — для впайки терморезистора. RL — для впайки фоторезистора.
    Для чего может понадобиться терморезистор, как «участник» процесса, я так и не придумал. А вот при наличии фоторезистора датчик становится еще «умнее», а именно — включает освещение только в полной темноте. Очень ценная фича. Фоторезисторы на али продаются на полтинник — пучок. И еще, лепить Обдурино там, где можно обойтись четырьмя копеечными деталями (резистор 1-2к, любой маломощный транзистор N-P-N, диод и реле.
    Детально можно посмотреть здесь://mysku.ru/blog/aliexpress/43007.html

Добавить комментарий для Валерий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.