Про датчик движения и подключение его к 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, то между циклами сканирования программы еще не прошло секунды, и операции заключенные в теле конструкции пропускаются.
Ну и в завершение статьи видео от автора:
Детектор движения с использованием Arduino и PIR датчика
Обнаружение движений требуется во многих радиоэлектронных проектах. Это легко сделать с помощью PIR датчика. В этом проекте мы рассмотрим подключение PIR датчика к плате Arduino и сконструируем простой детектор движения на его основе. При обнаружения движения в нашем устройстве будет загораться светодиод и зуммер будет издавать звуковой сигнал.
Необходимые компоненты
Плата Arduino Uno (или любая другая)
PIR датчик (PIR Sensor Module)
Светодиод
Зуммер (Buzzer)
Макетная плата
Соединительные провода
Резистор 330 Ом
PIR датчик
PIR датчик представляет собой пироэлектрический инфракрасный (PIR) датчик движения. Подобные датчики часто используются в системах сигнализации и легко обнаруживают присутствие людей или животных. Они малые по габаритам, недорогие, потребляют мало энергии, легки в эксплуатации и практически не подвержены износу.
В PIR датчике присутствуют два важных элемента: пироэлектрический кристалл, который может обнаруживать тепловые сигнатуры от живого организма (человека/животных), и линзы Френеля, которые расширяют диапазон действия датчика. Также в PIR датчике доступно несколько вариантов опций, показанных на следующем рисунке.
Два потенциометра (оранжевый цвет) используются для управления чувствительностью и срабатывания по времени датчика. Основной контакт датчика (Dout) располагается между его контактами Vcc и Gnd. Датчик работает от напряжения 3.3 В, но также может работать и от напряжения 5 В. В левом верхнем углу датчик имеет переключатель режимов своей работы. Всего доступно два режима работы: “H” режим и “I” режим.
В “H” режиме на выходном контакте датчика Dout будет появляться напряжение высокого уровня (3.3V) когда в диапазоне действия датчика будет появляться человек. Спустя некоторое время, устанавливаемое с помощью потенциометра, напряжение на этом контакте становится низкого уровня. То есть в этом режиме напряжение высокого уровня на контакте Dout будет независимо от того присутствует ли еще человек в зоне действия датчика или покинул ее. Этот режим мы будем использовать в нашем проекте – в большинстве случаев он предпочтительней при работе с этим датчиком. Еще его называют режимом “с перезапуском”.
В режиме “I” напряжение высокого уровня (3.3V) на выходном контакте датчика Dout будет только тогда, когда человек находится в зоне действия датчика. Как только человек покинет ее, то спустя некоторое время, регулируемое с помощью потенциометра, на контакте Dout будет напряжение низкого уровня. То есть если вы будете ходить около датчика, то он будет постоянно срабатывать и выключаться. Этот режим еще называется режимом “без перезапуска”.
Примечание : местоположение контактов и потенциометров могут отличаться в зависимости от производителя PIR датчика.
Работа схемы
Схема устройства представлена на следующем рисунке.
Мы запитали PIR датчик от контакта 5V платы Arduino. Выходной контакт PIR датчика подключен к цифровому контакту 2 платы Arduino. Этот контакт Arduino будет работать в режиме ввода данных. Контакт 3 платы Arduino подключен к светодиоду и зуммеру. Он будет работать в режиме вывода данных. То есть когда на контакте 2 мы будем обнаруживать высокий уровень, мы будем подавать напряжение высокого уровня на контакт 3.
Объяснение работы программы
PIR датчик у нас подключен к контакту 2 платы Arduino, поэтому для этого контакта мы должны установить режим ввода данных. А для контакта 3, к которому подключены зуммер и светодиод, мы должны установить режим вывода данных. Режимы работы контактов мы должны задать в функции void setup().
void setup() <
pinMode(2, INPUT); //Pin 2 в режим ввода данных
pinMode(3, OUTPUT); //PIN 3 в режим вывода данных
>
Затем мы переходим к функции loop(). Как мы знаем, код внутри этой функции выполняется непрерывно (постоянно), пока на плату Arduino подано питание. Поэтому внутри данной функции мы постоянно будем проверять не появилось ли на контакте 2 напряжение высокого уровня с помощью следующей строчки кода:
if (digitalRead(2) == HIGH)
Если на этом контакте появилось напряжение высокого уровня это будет означать, что PIR датчик обнаружил движение (человека). При обнаружении этого события мы должны подать напряжение высокого уровня на контакт 3. Мы будем поочередно подавать на этот контакт высокий и низкий уровень с задержкой 100 мс, то есть светодиод будет мигать, а зуммер – издавать прерывистый сигнал.
void setup() <
pinMode(2, INPUT); //Pin 2 as INPUT
pinMode(3, OUTPUT); //PIN 3 as OUTPUT
>
void loop() <
if (digitalRead(2) == HIGH) // проверяем сработал ли PIR датчик
<
digitalWrite(3, HIGH); // включаем светодиод/зуммер
delay(100); // ждем 100 мс
digitalWrite(3, LOW); // выключаем светодиод/зуммер
delay(100); // ждем 100 мс
>
>
Работа проекта
После того как вы собрали схему рассматриваемого нами датчика движения на макетной плате и загрузили код программы (приведен в конце статьи) в плату Arduino вы можете приступать к тестированию работы проекта. Общий вид собранного устройства должен получиться примерно такой:
Подайте питание на плату Arduino и подождите 50-60 секунд пока PIR датчик откалибруется – не обращайте внимание на странности его срабатывания в течение этого времени. После этого попытайтесь двигаться напротив PIR датчика и вы будете наблюдать как будут срабатывать светодиод и зуммер. Более подробно весь этот процесс показан на видео в конце статьи.
Звучание зуммера/мигание светодиода должны прекратиться спустя некоторое время после того как прекратится движение напротив датчика. Вы можете поэкспериментировать с настройкой чувствительности датчика, вращая расположенный на нем потенциометр.
Исходный код программы
Код программы очень простой – я думая его понимание не вызовет у вас никаких затруднений. Как мы узнали из этой статьи, подключить PIR датчик к плате Arduino достаточно просто – не нужно подключать каких то дополнительных библиотек, работать с ШИМ-сигналом и АЦП как в случае с другими датчиками и т.д.
void setup() <
pinMode(2, INPUT); // Pin 2 в режим ввода данных
pinMode(3, OUTPUT); // PIN 3 в режим вывода данных
>
void loop() <
if (digitalRead(2) == HIGH)
<
digitalWrite(3, HIGH); // включаем светодиод/зуммер
delay(100); // ждем 100 мс
digitalWrite(3, LOW); // выключаем светодиод/зуммер
delay(100); // ждем 100 мс
>
>
Видео, демонстрирующее работу схемы
PIR Motion Controlled Relay Using Arduino Nano! © GPL3+
As the title says, this is a pretty simple PIR motion controlled relay using an Arduino Nano.
![]() |
| × | 1 | |
![]() |
| × | 1 | |
| × | 1 | ||
![]() |
| × | 1 | |
| × | 1 | ||
| × | 1 |
![]() |
| |
|
A little bit of back story.
This project was actually built before my Motion Activated Door Display aka. Arduino Project #8.
Because, I was still waiting for the WS2812B boards that time and remembered and asked my self «Hey! I have a couple of PIR motion sensors in my Arduino Arsenal. Now, what can I do with it?».
So, I came up with this one.
I guess that’s it.
Just watch the video if you want to know more.
Here are some helpful Images and links on how to connect and setup things.
Social Media Links To Follow (I mean, if you want to):