Главная » Arduino » Подключаем инфракрасный датчик движения HC-SR501 к Arduino: основы и практика

Подключаем инфракрасный датчик движения HC-SR501 к Arduino: основы и практика

В этой статье мы узнаем о том, как подключить пассивный инфракрасный датчик HC-SR501 (PIR-датчик) или датчик движения к Arduino. Мы также узнаем о том, как работает этот датчик и его отдельные части.

Распиновка выводов PIR-датчика движения HC-SR501

Датчик движения PIR состоит из 3 выводов — VC, GND и вывод данных OUT.

Распиновка выводов PIR-датчика движения HC-SR501

  • VCC — плюс питания модуля.
  • OUT — выход, который становится высоким при обнаружении движения.
  • GND — минус питания модуля.

Характеристики HC-SR501

  • Рабочее напряжение: от 4.5 до 20 вольт (В).
  • Потребляемый ток: около 50 миллиампер (мА).
  • Выходное напряжение: HIGH — 3.3 В (при обнаружении сигнала), LOW — 0 В (в режиме ожидания).
  • Дистанция обнаружения: от 3 до 7 метров (м).
  • Угол обнаружения: до 120 градусов.
  • Задержка после обнаружения сигнала: от 5 до 300 секунд (сек).
  • Время блокировки перед следующим измерением: 2,5 секунды.

Составные части модуля PIR-датчика

Верхняя часть PIR-датчика представляет собой линзу с вырезанными в пластике концентрическими канавками.  Такие линзы называются линзами Френеля.

Контуры на пластике помогают собрать в фокусе параллельные лучи инфракрасного излучения, каждый из которых выступает в роли отдельной преломляющей поверхности. Эти поверхности увеличивают дальность и угол обзора PIR-датчика. Линза разделена на несколько секций, каждая из которых представляет собой отдельную линзу Френеля.

Когда вы отделите линзу Френеля от основного модуля, вы увидите лицевую сторону схемы, которая будет выглядеть следующим образом:

сам датчик

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

Если развернуть этот сенсорный модуль, то он будет выглядеть следующим образом:

основные узлы датчика

Обратная сторона модуля PIR-датчика состоит из:

  • PIR-контроллера BISS0001
  • Перемычка выбора триггера
  • Потенциометр регулировки чувствительности
  • Потенциометр регулировки временной задержки
  • Паяльные площадки RT и RL (термистор и LDR)
  • Регулятор напряжения 3,3 В
  • Защитный диод

 

  • PIR-контроллер BISS0001: контроллер BISS0001 является неотъемлемой частью модуля и выполняет функции основного контроллера. Его назначение — обработка сигналов, генерируемых чувствительным элементом PIR, и управление общей функциональностью датчика. Этот контроллер решает такие задачи, как усиление сигнала датчика, формирование сигнала и запуск других модулей, включая схему регулировки временной задержки.
  • Перемычка выбора триггера: эта перемычка или переключатель позволяет настроить режим работы датчика. Она имеет два различных режима:
    a. Режим одиночного срабатывания: в этом режиме датчик срабатывает только один раз при каждом обнаруженном событии движения. Он не будет срабатывать снова до тех пор, пока выходной пин не будет сброшен в исходное состояние. Этот режим подходит для случаев, когда требуется регистрация одно срабатывания на каждое событие движения, независимо от наличия движения в дальнейшем.
    b. Режим повторяющихся триггеров: при установке этого режима датчик будет срабатывать многократно до тех пор, пока он обнаруживает движение в пределах своего диапазона чувствительности. Он не требует сброса и будет продолжать выдавать сигнал о срабатывании до тех пор, пока обнаруживается движение. Этот режим удобен, когда требуется непрерывный контроль или отслеживание движения.
  • Потенциометр регулировки чувствительности: этот потенциометр предназначен для точной настройки чувствительности PIR-датчика (от 3 до 7 м). Вращая его, можно увеличить или уменьшить уровень чувствительности датчика. Увеличение чувствительности расширяет диапазон обнаружения, позволяя датчику обнаруживать движение на большем расстоянии, а уменьшение чувствительности сужает диапазон.
  • Потенциометр регулировки времени задержки: данный потенциометр позволяет регулировать временную задержку или длительность удержания высокого уровня выходного сигнала датчика (индикации движения) после обнаружения движения (от 5 до 300 сек.). Посредством регулировки этого потенциометра можно установить короткую или длинную временную задержку в зависимости от конкретных задач. Более короткая задержка подходит для задач, в которых важны кратковременные события движения, в то время как более длительная задержка полезна для сценариев, требующих длительного обнаружения.
  • Паяльные площадки RT и RL (термисторы и LDR): данные площадки позволяют подключать к сенсорному модулю дополнительные компоненты, такие как термисторы (RT) и фоторезисторы (LDR). Подключение этих компонентов позволяет расширить функциональные возможности датчика за счет повышения его температурной или световой чувствительности, что позволяет ему по-разному реагировать на различные условия окружающей среды.
  • Регулятор напряжения 3,3 В: этот компонент выполняет функцию регулятора напряжения, обеспечивая стабильное питание модуля PIR-датчика напряжением 3,3 В. Он обеспечивает работу модуля в заданном диапазоне напряжений, что способствует стабильной и надежной работе.
  • Защитный диод: защитный диод предохраняет модуль PIR-датчика от повреждений, вызванных обратным напряжением. Он пропускает ток только в одном направлении, обеспечивая защиту от случайных подключений обратной полярности или скачков напряжения.

Как работает PIR-датчик?

Любой объект с температурой выше абсолютного нуля испускает ИК-излучение, которое невидимо для человеческого глаза, но несет информацию о температуре и движении объекта.

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

В дальнейшем датчик непрерывно следит за окружающей обстановкой, сравнивая полученную картину ИК-излучения с ранее откалиброванным фоном. Когда в зоне видимости датчика перемещается теплый объект, например, человек или домашнее животное, это приводит к динамическому изменению картины ИК-излучения, принимаемого пироэлектрическим датчиком. Это изменение оперативно фиксируется датчиком.

Внутренняя схема датчика обрабатывает сигнал, поступающий с пироэлектрического датчика. Она включает в себя механизмы усиления и фильтрации сигнала, обеспечивающие точное и надежное обнаружение движения. Конечный выходной сигнал PIR-датчика HC-SR501 обычно представляет собой цифровой сигнал. При отсутствии движения этот сигнал остается в низком состоянии.

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

Часто задаваемые вопросы о PIR-датчиках

Какова дальность обнаружения PIR-датчика?

Дальность обнаружения PIR-датчика может быть различной, но обычно она составляет от 5 до 7 м в зависимости от технических характеристик датчика.

Как уменьшить количество ложных срабатываний при использовании PIR-датчика?

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

Могут ли PIR-датчики обнаруживать движение через стены?

Нет, датчики PIR не могут обнаружить движение через стены. Они предназначены для обнаружения движения в пределах прямой видимости, и на них влияют физические барьеры, такие как стены.

Принципиальная схема сопряжения Arduino и PIR-датчика HC-SR501

Соединение Arduino и PIR-датчика HC-SR501

 

  1. Подключите вывод VCC (или +) PIR-датчика к выходу 5 В Arduino.
  2. Подключите вывод GND (-) PIR-датчика к любому выводу GND на Arduino.
  3. Подключите вывод OUT (или сигнал) модуля PIR-датчика к выводу цифрового входа на Arduino (например, к выводу 5).

Пояснение кода

Ниже приведено пояснение к скетчу. Полный код можно найти в самом низу статьи.

const int pirPin = 5;

В этой строке определяется постоянная целочисленная переменная pirPin и ей присваивается значение 5. Она представляет собой цифровой вывод на Arduino, к которому подключен PIR-датчик. В данном примере PIR-датчик подключен к цифровому выводу 5

void setup()

Эта строка отмечает начало функции setup(), которая является специальной функцией в Arduino, выполняемой один раз при запуске программы. Она используется для задач инициализации.

pinMode(pirPin, INPUT);

Эта строка конфигурирует вывод pirPin (подключенный к PIR-датчику) как входной. Эта настройка сообщает Arduino, что мы будем считывать данные с этого вывода, а именно состояние PIR-датчика (HIGH или LOW).

Serial.begin(9600);
delay(20000);

Эта строка инициализирует последовательную связь со скоростью передачи данных 9600 бит в секунду. Последовательная связь используется здесь в целях отладки. Сообщения, посылаемые Arduino, можно просмотреть на мониторе последовательного интерфейса в Arduino IDE. Также дается задержка в 20000 миллисекунд для прогрева PIR-датчика.

void loop()

Эта строка обозначает начало функции loop(). Функция loop() является основной частью скетча Arduino и запускается после функции setup(). Она содержит код, который будет выполняться непрерывно.

int pirState = digitalRead(pirPin);

В этой строке объявляется целочисленная переменная pirState и ей присваивается значение, считанное с pirPin с помощью функции digitalRead(). Она считывает состояние PIR-датчика, которое может быть либо ВЫСОКИМ (обнаружено движение), либо НИЗКИМ (движения нет).

if (pirState == HIGH)

Эта строка запускает оператор if, который проверяет, равен ли pirState значению HIGH. Если PIR-датчик обнаружит движение (состояние HIGH), то будет выполнен код в следующем блоке.

Serial.println("Motion detected!");

Эта строка отправляет на последовательный монитор текст «Motion detected!», если PIR-датчик обнаружил движение. Это необходимо для отладки и может быть показано на последовательном мониторе.

delay(1000);

Эта строка добавляет в программу задержку в 1000 миллисекунд (1 секунда). Она используется для предотвращения непрерывных сообщений об обнаружении движения и дает время для стабилизации движения. Длительность задержки можно настроить по своему усмотрению.

else {
Serial.println("No motion detected.");
}

Эта строка запускает блок else, который будет выполняться, если значение pirState не равно HIGH (т.е. движение не обнаружено). Если PIR-датчик не обнаружил движения, то на последовательный монитор будет отправлен текст «Движение не обнаружено»

Полный скетч

void setup() {
  pinMode(pirPin, INPUT); // Устанавливаем вывод PIR-датчика как вход
  Serial.begin(9600); // Инициализация последовательной связи для отладки (необязательно)
  delay(20000);
}
void loop() {
  int pirState = digitalRead(pirPin); // Считываем состояние PIR-датчика (HIGH или LOW)
  if (pirState == HIGH) {
    // Движение обнаружено
    Serial.println("Motion detected!);
    delay(1000); // Задержка на 1 секунду (регулируется по необходимости)
  } else {
    // Движения нет
    Serial.println("No motion detected.");
  }
}



Добавить комментарий


.