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

Содержание:

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

Модуль датчика движения( или присутствия)  HCSR501 на основе пироэлектрического эффекта (рис. 1) состоит из PIR-датчика 500BP (рис. 2) с дополнительной электрической развязкой на микросхеме BISS0001 и линзы Френеля, которая используется для увеличения радиуса обзора и усиления инфракрасного сигнала (рис. 3). Модуль используется для обнаружения движения объектов, излучающих инфракрасное излучение. Чувствительный элемент  модуля  –  PIR-датчик 500BP. Принцип его работы  основан на пироэлектричестве. Это явление возникновения электрического поля в кристаллах при изменении их температуры.

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

Рисунок 1. Модуль датчика движения/присутствия HC-SR501

Управление работой датчика осуществляет микросхема BISS0001. На плате расположены два потенциометра, с помощью первого настраивается дистанция обнаружения объектов (от 3 до 7 м), с помощью второго —  задержка после первого срабатывания датчика (5 — 300 сек).  Модуль имеет два  режима – L и H. Режим работы устанавливается с помощью перемычки. Режим L – режим единичного срабатывания, при обнаружении движущегося объекта на выходе OUT устанавливается высокий уровень сигнала на время задержки, установленное вторым потенциометром. На это время датчик не реагирует на движущиеся объекты. Этот режим можно использовать в системах охраны для подачи сигнала тревоги на сирену. В режиме H датчик срабатывает каждый раз при обнаружении движения.  Этот режим можно использовать  для включения освещения.

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

PIR-датчик 500BP

Рисунок 2. PIR-датчик 500BP


Линза Френеля

Рисунок 3. Линза Френеля


Технические характеристики HC-SR501

  • Напряжение питания: 4.5-20 В;
  • Ток потребления : 50 мА;
  • Напряжение на выходе OUT: HIGH – 3,3 В, LOW – 0 В;
  • Интервал обнаружения: 3-7 м;
  • Длительность задержки после срабатывания: 5 — 300 сек;
  • Угол наблюдения до 120;
  • Время блокировки до следующего замера: 2.5сек.;
  • Режимы работы: L — одиночное срабатывание, H — срабатывание при каждом событии;
  • Рабочая температура от -20 до +80C;
  • Габариты 32x24x18 мм.

Подключение инфракрасного датчика движения к Arduino

Модуль имеет 3 вывода (рис. 4):

  • VCC — питание 5-20 В;
  • GND — земля;
  • OUT — цифровой выход (0-3.3В).
Назначение контактов и настройка HC-SR501

Рисунок 4. Назначение контактов и настройка HC-SR501

Подключим модуль HC-SR501 к плате Arduino (Схема соединений на рис. 5) и напишем простой скетч, сигнализирующий звуковым сигналом и сообщением в последовательный порт, при обнаружении движущегося объекта. Для фиксации срабатываний микроконтроллером будем использовать внешние прерывания на вход 2. Это прерывание int0.

Схема соединений подключения модуля HC-SR501 к плате Arduino

Рисунок 5. Схема соединений подключения модуля HC-SR501 к плате Arduino

Загрузим скетч из листинга 1 на плату Arduino и посмотрим как датчик реагирует на препятствия (см. рис. 6). Модуль установим в режим работы L.

Листинг 1

//  Скетч к обзору датчика движения/присутствия HC-SR501

// makerplus.ru

// контакт подключения выхода датчика

#define PIN_HCSR501 2

// флаг сработки

boolean flagHCSR501=false;

// контакт  подключения динамика

int soundPin=9;

// частота звукового сигнала

int freq=587;

void setup() {

// инициализация последовательного порта

Serial.begin(9600);

// запуск обработки прерывания int0

attachInterrupt(0, intHCSR501,RISING);

}

void loop() {

if (flagHCSR501 == true) {

// Сообщение в последовательный порт

Serial.println("Attention!!!");

// звуковая сигнализация на 5 сек

tone(soundPin,freq,5000);

// обнулить флаг сработки

flagHCSR501 = false;

}

}

// обработка прерывания

void intHCSR501() {

// установка флага сработки датчика

flagHCSR501 = true;

}
Вывод данных в монитор последовательного порта

Рисунок 6. Вывод данных в монитор последовательного порта

С помощью потенциометров  экспериментируем с длительностью сигнала на выходе OUT и чувствительностью датчика (расстоянием фиксации объекта).


Пример использования

Создадим пример отправки sms при срабатывании датчика движения/присутствия на охраняемом объекте. Для этого будем использовать GPS/GPRS шилд.

Нам понадобятся следующие детали:

Соберем схему соединений согласно рис. 7.

Схема проекта

Рисунок 7. Схема соединений

При срабатывании датчика вызываем процедуру отправки sms с текстовым сообщением Attention!!! на номер PHONE. Содержимое скетча представлено в листинге 2. GSM/GPRS шилд в режиме отправки sms потребляет ток до 2 А, поэтому используем внешний источник питания 12В 2А.

Листинг 2

//  Скетч 2 к обзору датчика движения/присутствия HC-SR501

//  отправка sms при срабатывании датчика

//  makerplus.ru

// контакт подключения выхода датчика

#define PIN_HCSR501 2

// флаг сработки

boolean flagHCSR501 false;

// контакт  подключения динамика

int soundPin=9;

// частота звукового сигнала

int freq=587;

// библиотека SoftwareSerial

#include <SoftwareSerial.h>

// номер телефона для отправки sms

#define PHONE "+79034461752"

// Выводы для SoftwareSerial (у вас могут быть 2,3)

SoftwareSerial GPRS(7, 8);

void setup() {

// инициализация последовательного порта

Serial.begin(9600);

// запуск обработки прерывания int0

attachInterrupt(0, intHCSR501,RISING);

// для обмена с GPG/GPRS шилдом

GPRS.begin(19200);

}

void loop() {

if (flagHCSR501 == true) {

// Сообщение в последовательный порт

Serial.println("Attention!!!");

// звуковая сигнализация на 5 сек

tone(soundPin,freq,5000);

// отправить sms

SendSMS();

// обнулить флаг сработки

flagHCSR501 = false;

}

}

// обработка прерывания

void intHCSR501() {

// установка флага сработки датчика

flagHCSR501 = true;

}

// подпрограмма отправки sms

void SendSMS() {

// AT-команда установки text mode

GPRS.print("AT+CMGF=1\r");

delay(100);

// номер телефона

GPRS.print("AT + CMGS = \"");

GPRS.print(PHONE);

GPRS.println("\"");

delay(200);

// сообщение

GPRS.println("Attention!!!");

delay(200);

// ASCII код ctrl+z – окончание передачи

GPRS.println((char)26);

delay(200);

GPRS.println();

}

Часто задаваемые вопросы FAQ

   1. Модуль не срабатывает при движении объекта

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

    2. Датчик срабатывает слишком часто

  • Настройте потенциометром задержку длительности сигнала.
  • Установите перемычку в режим единичного срабатывания L.