Кошки. Породы, стерилизация

Подключения pir датчика к arduino. Датчик движения с Arduino, HC-SR04 и светодиодом (LED)

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

Примерно такие:


Реагируют они на изменение излучения в инфракрасном диапазоне, а именно в средней его части - 5-15 мкм (тело среднего здорового человека излучает в диапазоне около 9 мкм). С точки зрения конечного потребителя штука очень простая - вход питания (чаще 12 вольт) и выход реле (обычно твердотельное и с нормально замкнутыми контактами). Прокрался кто-нибудь тепленький мимо - реле сработало. Скукота. Но внутри все не так просто.
Сегодня мы немного времени посвятим теории, а затем распотрошим один такой девайс и сделаем из него не просто датчик, реагирующий на факт движения, но регистрирующий направление движения.

Переходим к практическим упражнениям

Вооружившись теоретическими сведениями достанем паяльник. На фото показан разобранный датчик (снята передняя крышка с линзами Френеля и металлический экран).


Смотрим маркировку ближайшей к пироэлектрическому сенсору (круглый металлический с окошечком - это он и есть) микросхемы и (о, удача!) ею оказывается LM324 - счетверенный ОУ. Путем рассматривания окружающих элементов находим вывод ОУ, наиболее вероятно подходящий для наших целей (в моем случае это оказался вывод 1 микросхемы). Теперь неплохо бы проверить, а то ли мы нашли. Обычно для этого используют осциллограф. У меня под рукой его не оказалось. Зато оказался ардуино. Поскольку уровень сигнала после усиления составляет порядка единиц вольт, и особой точности замеров нам не нужно (достаточно качественной оценки), то входы АЦП ардуино вполне подойдут. К найденному выводу ОУ и минусу питания паяем проводки и выводим на макетку. Провода не должны быть длинными. В противном случае есть шанс померить не сигнал датчика, а что-нибудь совершенно другое.
Теперь подумаем насколько быстро нужно считывать сигнал, чтобы получить что-то вменяемое. Выше было сказано, что частотный диапазон полезного сигнала ограничен величиной примерно 10 Гц. Вспоминая теорему Котельникова (или Найквиста - кому что больше нравится), можно сделать вывод, что замерять сигнал с частотой выше 20 Гц смысла нет. Т.е. период дискретизации в 50 мс вполне подойдет. Пишем простой скетч, который каждые 50 мс читает порт А1 и вываливает его значение в сериал (строго говоря, измерения сигнала происходят реже, чем через 50 мс, поскольку на запись в порт тоже нужно время, однако для наших целей это не важно).

Unsigned long time; void setup() { Serial.begin(9600); pinMode(A1, INPUT); time=millis(); } void loop() { if ((millis()-time) >= 50) { Serial.println(analogRead(A1)); } time=millis(); }

Включаем и машем перед датчиком руками (можно побегать, даже полезнее). На стороне компьютера данные с порта вываливаем в файл.
stty -F /dev/ttyUSB0 raw ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo cat /dev/ttyUSB0 > output.txt
Строим график (в файл добавлен столбец с нумерацией отсчетов):
gnuplot> plot "output.txt" using 1:2 with lines


И видим то, что, собственно, и хотели - разнополярные всплески напряжения. Ура, теория работает и провод припаян куда надо. А простой анализ (проще говоря - рассматривание) графика позволяет сделать вывод, что более или менее надежной фиксацией факта наличия движения можно считать отклонение сигнала на 150 единиц от среднего значения.
Настало время сделать, наконец, датчик направления движения.
Модифицируем схему. Помимо аналогового сигнала сенсора подключим к ардуино пару светодиодов (порты 2 и 3, не забудьте токоограничительные резисторы) и напишем чуток более сложный скетч.

Развернуть

int a1; int state2=0; long average=0; int n=0; unsigned long time; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(A1, INPUT); digitalWrite(2, LOW); digitalWrite(3, LOW); delay (30000); //мой датчик после включения //до начала работы тупит 30 сек. time=millis(); //тысячу раз делаем замер сигнала для //вычисления его среднего значения //чтобы было от чего отсчитывать отклонения while (n <= 1000) { ++n; a1=analogRead(A1); average=average+a1; delay(50); } average=average/1000; //одновременным включением светодиодов //сигнализируем, что система готова digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(1000); digitalWrite(2, LOW); digitalWrite(3, LOW); time=millis(); } void loop() { //опрашиваем датчик каждые 50 мс if ((millis()-time) >= 50) { //этим простым выражением аналаговый сигнал //превращаем в дискретный со значениями -1/0/1 a1=(analogRead(A1)-average)/150; //если было изменение полярности сигнала, то //включаем нужный светодиод switch (a1) { case 1: if (state2=-1) {digitalWrite(2, HIGH);digitalWrite(3, LOW);} state2=a1; break; case -1: if (state2=1) {digitalWrite(2, LOW);digitalWrite(3, HIGH);} state2=a1; break; } //повторяем сначала time=millis(); } }


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


Наслаждаемся результатом.

Обзор датчика пространства HC-SR501

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

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

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

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

Технические характеристики 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 вывода (рис. 3):
  • VCC - питание 5-20 В;
  • GND - земля;
  • OUT - цифровой выход (0-3.3В).

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

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

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

Загрузим скетч из листинга 1 на плату Arduino и посмотрим как датчик реагирует на препятствия (см. рис. 5). Модуль установим в режим работы L. Листинг 1 // Скетч к обзору датчика движения/присутствия HC-SR501 // сайт // контакт подключения выхода датчика #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; }

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

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

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

Создадим пример отправки sms при срабатывании датчика движения/присутствия на охраняемом объекте. Для этого будем использовать GPS/GPRS шилд. Нам понадобятся следующие детали:
  • плата Arduino Uno
  • GSM/GPRS шилд
  • npn-транзистор, например С945
  • резистор 470 Ом
  • динамик 8 Ом 1Вт
  • провода
Соберем схему соединений согласно рис. 6.

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

При срабатывании датчика вызываем процедуру отправки sms с текстовым сообщением Atten tion!!! на номер PHONE. Содержимое скетча представлено в листинге 2. GSM/GPRS шилд в режиме отправки sms потребляет ток до 2 А, поэтому используем внешний источник питания 12В 2А. Листинг 2 // Скетч 2 к обзору датчика движения/присутствия HC-SR501 // отправка sms при срабатывании датчика // сайт // контакт подключения выхода датчика #define PIN_HCSR501 2 // флаг сработки boolean flagHCSR501 false; // контакт подключения динамика int soundPin=9; // частота звукового сигнала int freq=587; // библиотека SoftwareSerial #include // номер телефона для отправки 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.

Принцип работы PIR (Passive Infra Red)- датчиков

Любой объект, обладающий какой-то температурой, становится источником электромагнитного (теплового) излучения, в том числе - человеческое тело. Длина волны этого излучения зависит от температуры и находится в инфракрасной части спектра. Это излучение невидимо для глаза и улавливается только датчиками. Их еще называют PIR-датчиками.

Это аббревиатура от слов «passive infrared» или «пассивные инфракрасные» датчики. Пассивные - потому что датчики сами не излучают, а только воспринимают излучение с длиной волны от 7 до 14 µм.

Человек излучает тепло. Его тепловое изображение в инфракрасных лучах показывает распределение температуры по поверхности тела. Более нагретые предметы выглядят светлее, более холодные - темнее, т.к. излучают меньше тепла.

PIR-датчик содержит чувствительный элемент, который реагирует на изменение теплового излучения. Если оно остается постоянным - электрический сигнал не генерируется.

Для того, чтобы датчик среагировал на движение, применяют специальные линзы (линзы Френеля) с несколькими фокусирующими участками, которые разбивают общую тепловую картину на активные и пассивные зоны, расположенные в шахматном порядке. Человек, находясь в сфере работы датчика, занимает несколько активных зон полностью или частично.

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

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

PIR - это сокращённое «passive infrared - пассивные инфракрасные» датчики. Пассивные - потому что датчики сами не излучают, а только воспринимают излучение с длиной волны от 7 до 14 мкм. PIR-датчик содержит чувствительный элемент, который реагирует на изменение теплового излучения. Если оно остается постоянным - электрический сигнал не генерируется. Чтобы датчик среагировал на движение, применяют линзы Френеля с несколькими фокусирующими участками, которые разбивают общую тепловую картину на активные и пассивные зоны, расположенные в шахматном порядке. Человек, находясь в сфере работы датчика, занимает несколько активных зон полностью или частично. Поэтому, даже при минимальном движении происходит перемещение из одних активных зон в другие, что вызывает срабатывание датчика. А вот фоновая тепловая картина меняется очень медленно и равномерно, поэтому датчик на нее не реагирует. Высокая плотность активных и пассивных зон позволяет датчику надежно определить присутствие человека при малейшем движении.

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

PIR датчик обнаруживает инфракрасный изменённый сигнал, вызванный движением человеческого тела и преобразует его в колебания напряжения. Схеме не требуется понижающий трансформатор и она может работать непосредственно от 220V. Балластный конденсатор С7 должен быть на 0.33uF/275V, а лучше на 400V.

Особенности схемы датчика

  • Рабочее напряжение схемы: 5V-12V.
  • Ток нагрузки 80 мА, когда реле включено.
  • В режиме ожидания ток: 100 мкА
  • ON/AUTO/OFF режимы работы.
  • Автосброс, если сигнал исчезает за 3 секунды.
  • Релейный выход для подключения нагрузки.
  • Фоторезистор LDR для обнаружения дневного/ночного режима.
  • Джампер J1 для установки режима.
  • Резистор PR1 устанавливает чувствительность датчика.
  • Резистор PR2 устанавливает выходную продолжительность сигнала состояния выхода.

Схема PIR датчика предлагает три режима работы (ON, AUTO, OFF), которые могут быть установлены вручную джампером J1. CDS система представляет собой КМОП-триггер Шмитта, что используется, чтобы различать дневное и ночное время.

Датчик движения ардуино позволяет отследить перемещение в закрытой зоне объектов, излучающих тепло (люди, животные). Такие системы часто применяют в бытовых условиях, например, для включения освещения в подъезде. В этой статье мы рассмотрим подключение в проектах ардуино PIR-сенсоров: пассивных инфракрасных датчиков или пироэлектрических сенсоров, которые реагируют на движение. Малые габариты, низкая стоимость, простота эксплуатации и отсутствие сложностей в подключении позволяет использовать такие датчики в системах сигнализации разного типа.

Конструкция ПИР датчика движения не очень сложна – он состоит из пироэлектрического элемента, отличающегося высокой чувствительностью (деталь цилиндрической формы, в центре которой расположен кристалл) к наличию в зоне действия определенного уровня инфракрасного излучения. Чем выше температура объекта, тем больше излучение. Сверху PIR-датчика устанавливается полусфера, разделенная на несколько участков (линз), каждый из которых обеспечивает фокусировку излучения тепловой энергии на различные сегменты датчика движения. Чаще всего в качестве линзы применяют линзу Френеля, которая за счет концентрации теплового излучения позволяет расширить диапазон чувствительности инфракрасного датчика движения Ардуино.

PIR-sensor конструктивно разделен на две половины. Это обусловлено тем, что для устройства сигнализации важно именно наличие движения в зоне чувствительности, а не сам уровень излучения. Поэтому части установлены таким способом, что при улавливании одной большего уровня излучения, на выход будет подаваться сигнал со значением high или low.

Основными техническими характеристиками датчика движения Ардуино являются:

  • Зона обнаружения движущихся объектов составляет от 0 до 7 метров;
  • Диапазон угла слежения – 110°;
  • Напряжение питания – 4.5-6 В;
  • Рабочий ток – до 0.05 мА;
  • Температурный режим – от -20° до +50°С;
  • Регулируемое время задержки от 0.3 до 18 с.

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

Принцип работы датчика движения на Arduino следующий:

  • Когда устройство установлено в пустой комнате, доза излучения, получаемая каждым элементом постоянна, как и напряжение;
  • При появлении в комнате человека, он первым делом попадает в зону обозрения первого элемента, на котором появляется положительный электрический импульс;
  • Когда человек перемещается по комнате, вместе с ним перемещается и тепловое излучение, которое попадает уже на второй сенсор. Этот PIR-элемент генерирует уже отрицательный импульс;
  • Разнонаправленные импульсы регистрируются электронной схемой датчика, которая делает вывод, что в поле зрения Pir-sensor Arduino находится человек.

Для надежной защиты от внешних шумов, перепадов температуры и влажности, элементы Pir-датчика на Arduino устанавливаются в герметичный металлический корпус. На верхней части корпуса по центру находится прямоугольник, выполненный из материала, который пропускает инфракрасное излучение (чаще всего на основе силикона). Чувствительные элементы устанавливаются за пластиной.

Схема подключения датчика движения к Ардуино

Подключение Pir-датчика к Ардуино выполнить не сложно. Чаще всего модули с сенсорами движения оснащены тремя коннекторами на задней части. Распиновка каждого устройства зависит от производителя, но чаще всего возле выходов есть соответствующие надписи. Поэтому, прежде чем выполнить подключение датчика к Arduino необходимо ознакомиться с обозначениями. Один выход идет к земле (GND), второй – обеспечивает выдачу необходимого сигнала с сенсоров (+5В), а третий является цифровым выходом, с которого снимаются данные.

Подключение Pir-сенсора:

  • «Земля» – на любой из коннекторов GND Arduino;
  • Цифровой выход – на любой цифровой вход или выход Arduino;
  • Питание – на +5В на Arduino.

Схема подключения инфракрасного датчика к Ардуино представлена на рисунке.

Пример программы

Скетч представляет собой программный код, который помогает проверить работоспособность датчика движения после его включения. В самом простом его примере есть множество недостатков:

  • Вероятность ложных срабатываний, за счет того, что для самоинициализации датчика требуется одна минута;
  • Отсутствие выходных устройств исполнительного типа – реле, сирены, светоиндикации;
  • Короткий временной интервал сигнала на выходе сенсора, который необходимо на программном уровне задержать, в случае появления движения.

Указанные недостатки устраняются при расширении функционала датчика.

Скетч самого простого типа, который может быть использован в качестве примера работы с датчиком движения на Arduino, выглядит таким образом:

#define PIN_PIR 2 #define PIN_LED 13 void setup() { Serial.begin(9600); pinMode(PIN_PIR, INPUT); pinMode(PIN_LED, OUTPUT); } void loop() { int pirVal = digitalRead(PIN_PIR); Serial.println(digitalRead(PIN_PIR)); //Если обнаружили движение if (pirVal) { digitalWrite(PIN_LED, HIGH); Serial.println("Motion detected"); delay(2000); } else { //Serial.print("No motion"); digitalWrite(PIN_LED, LOW); } }

Возможные варианты проектов с применением датчика

Пир-датчики незаменимы в тех проектах, где главной функцией сигнализации является определение нахождения или отсутствия в пределах определенного рабочего пространства человека. Например, в таких местах или ситуациях, как:

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

Пир-сенсоры просты в эксплуатации и не вызывают сложностей при подключении, имеют большую зону чувствительности и также могут быть с успехом интегрированы в любой из программных проектов на Ардуино. Но следует учитывать, что они не имеют технической возможности предоставить информацию о том, сколько объектов находится в зоне действия, и как близко они расположены к датчику, а также могут срабатывать на домашних питомцев.



Загрузка...