Как подключить датчик движения к ардуино
Перейти к содержимому

Как подключить датчик движения к ардуино

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

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

Датчик движения, или датчик перемещения — устройство (прибор) обнаруживающий перемещение каких либо объектов. Очень часто эти устройства, используются в системах охраны, сигнализации и мониторинга. Форм факторов этих датчиков существует великое множество, но мы рассмотрим именно модуль датчика движения для подключения к платам 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):

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

  1. Возможные ложные срабатывания, датчику необходима самоинициализация в течение одной минуты.
  2. Жесткая привязка к монитору порта, нет выходных исполнительных устройств(реле, сирена, светоиндикация)
  3. Слишком короткое время сигнала на выходе датчика, при обнаружении движения необходимо программно задержать сигнал на более долгий период времени.

Усложнив схему и расширив функционал датчика, можно избежать вышеописанных недостатков. Для этого потребуется дополнить схему модулем реле и подключить обычную лампу на 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, то между циклами сканирования программы еще не прошло секунды, и операции заключенные в теле конструкции пропускаются.

Как подключить датчик движения к Ардуино

Рассмотрим, как подключить PIR sensor к Ардуино (пироэлектрический инфракрасный датчик движения) и рассмотрим скетч для автоматического светильника, который будет включаться при обнаружении движения в комнате. Также рассмотрим функцию millis Arduino в языке C++, которую часто требуется использовать в программах (скетчах) для создания многозадачности микроконтроллера Ардуино Уно.

PIR датчик движения Ардуино: характеристики

Сегодня уже никто не удивляется при автоматическом включении освещения в подъездах многоквартирных домов, которые срабатывают при прохождении человека. В большинстве приборов установлены пассивные датчики движения (PIR). Рассмотрим в этой статье устройство датчика движения, схему его подключения к Arduino UNO и соберем на его основе автоматический включатель освещения.

Линза Френеля концентрирует инфракрасное излучение

Линза Френеля концентрирует инфракрасное излучение

Модуль с ПИР датчиком состоит из пироэлектрического элемента под пластиковой линзой Френеля — цилиндрическая деталь с прямоугольным кристаллом в центре, который улавливает уровень инфракрасного излучения и пропускает его через себя. При подключении IR к Arduino мы уже выяснили, что все предметы имеют инфракрасное излучение и чем выше температура, тем интенсивнее излучение.

Устройство пироэлектрического датчика движения

Устройство и распиновка пироэлектрического датчика движения

PIR датчики движения практически одинаковы по устройству. Диапазон чувствительности PIR сенсоров для Ардуино до 6 метров, угол обзора 110° x 70°. Питание — 5 Вольт, а выходной цифровой сигнал имеет значение 0, когда движения нет и значение 1 при наличии движения. Чувствительные элементы устанавливается в герметический корпус, который защищает от влажности и перепадов температур.

Как подключить датчик движения к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • PIR датчик движения HC-SR501;
  • беспаечная макетная плата;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа», «папа-мама».

Схема подключения PIR датчика к Ардуино УНО

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

Распиновка датчиков движения Ардуино у разных производителей может отличаться, но рядом с контактами есть надписи (см. фото выше). Поэтому, перед подключением внимательно изучите модуль. Один выход идет к GND, второй к питанию 5 Вольт (VCC), а третий выход (OUT) выдает цифровой сигнал с PIR сенсора. Соберите схему, как на фото выше, подключите светодиод к пину 12 на Ардуино и загрузите следующий скетч.

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

Пояснения к коду:
  1. с помощью директивы #define для портов 2 и 12 мы назначили соответствующие имена PIR и LED. Это сделано лишь для нашего удобства;
  2. в условном операторе if использовано двойное равенство: if (pirVal == HIGH) . Согласно языку программирования Ардуино, двойное равенство является оператором сравнения.

Скетч для светильника с PIR датчиком движения

Пояснения к коду:
  1. с помощью функции counttime = millis(); мы начинаем отсчет времени. И в отличие от функции delay Arduino, которая полностью прерывает программу, микроконтроллер может продолжать остальные вычисления в скетче.
  2. мы изменили время выключения светильника. Если в первом скетче светодиод выключался сразу после сигнала LOW с датчика. То сейчас мы даем 1 минуту до выключения светильника, на случай если человек не вышел из комнаты.

Заключение. HC-SR501 датчик движения Ардуино позволяет сделать автоматическое включение освещения в комнате или создать «умную» подсветку лестницу в доме с помощью адресной ленты ws2812b. В комментариях к этой записи вы можете оставлять вопросы или свои замечания по представленной теме, на все комментарии наших постоянных пользователей мы стараемся ответить максимально быстро.

Методы разработки потока программного обеспечения датчиков движения, работающих с Arduino

Привет, Хабр! Хочу предложить реализацию двух подходов разработки программного обеспечения датчика движения, работающего совместно с платой Arduino. Ни датчик движения [1], ни Arduino [2]. в дополнительной рекламе не нуждаются.

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

Основным датчиком который будем использовать является датчик движения PIR [3].

PIR датчики небольшие, недорогие, потребляют меньше энергии и совместимы с аппаратными платформами, такими как Arduino.

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

Кроме того понадобятся светодиоды: зеленый и красный. Шнуры, резисторы и макет: для завершения соединений понадобится пучок проводов и макет. Также понадобятся два резистора на 220 Ом и один 10 кОм.

Следующим составляющим будет плата Arduino: плата Arduino Uno. Для связи платы Arduino с компьютером используем кабель USB.

Разработка потока программного обеспечения

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

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

С помощью единственной инструкции Arduino вы можете включить или выключить светодиод.

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

Будем использовать один и тот же поток при написании кода для обоих методов программирования.

Проектирование аппаратной системы

Самым простым способом проектирования аппаратного обеспечения таких проектов является прототипирования. Инструмент, используемый для этой цели, называется Fritzing.

Fritzing активно поддерживает Arduino и другие популярные аппаратные платформы с открытым исходным кодом. Следующий рисунок показывает схему для проекта, разработанного с использованием Fritzing. Компоненты подключаем, как показано на рисунке:

Для завершения сборки схемы выполним следующие шаги:

  1. Подключить VCC (+ 5V) и заземлите от Arduino к макету.
  2. Подключить анод (длинный провод) красного светодиода к цифровому выводу 12 платы Arduino. Подключить катод (короткий провод) красного светодиода к земле с помощью резисторов на 220 Ом.
  3. Подключить анод (длинный провод) зеленого светодиода к цифровому выводу 13 платы Arduino. Подключите катод (короткий провод) зеленого светодиода к земле с помощью резисторов на 220 Ом.
  4. Подключить VDD датчика PIR к VCC на макете. Используйте один и тот же цвет проводки для представления одной и той же категории соединений. Это очень поможет в устранении неисправностей цепи.
  5. Подключить сигнал (средний вывод) датчика PIR к цифровой оси 7 Arduino с помощью нагрузочного резистора 10 кОм.

Теперь система готова к запуску программы Arduino.

Тестирование подключений оборудования

После завершения подключения цепи переходим непосредственно к разделам программирования. Рекомендуется использовать для проверки подключения цепи и проверки состояния датчика.

Предполагаем, что плата Arduino уже снабжена скетчом StandardFirmata. В противном случае необходимо загрузить скетч StandardFirmata на плату Arduino.

Лучший способ проверить реализацию схемы — использовать программу тестирования Firmata, которую была описана в предыдущей статье. Согласно настройке проекта, датчик PIR выдает события на вывод 7 Arduino.

В тестовой программе измените тип вывода 7 на Input и помашите рукой по датчику, и вы сможете увидеть состояние булавки как показано на следующем скриншоте:

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

Метод 1 — использование автономного скетча Arduino

Для запуска проекта выполняем:

  1. Открыть Arduino IDE.
  2. В меню «Файл» открыть новый альбом.
  3. Скопировать следующий код Arduino в скетч и сохранить его:

Функция setup ()

В предыдущем фрагменте кода были назначены переменные для вывода Arduino в начале программы. В функции setup () мы сконфигурировали эти переменные для определения как входных или выходных выводов:

Здесь pirPin, redLedPin и greenLedPin являются цифровыми булавками 7, 12 и 13 соответственно. В этой же функции мы также сконфигурировали плату Arduino для последовательного соединения со скоростью 9600 бит /с:

Функция loop ()

В функции loop ()многократно контролируем входной сигнал с цифрового контакта pirPin для обнаружения движения. Выход этого контакта ВЫСОКИЙ, когда обнаружено движение, и НИЗКИЙ в противном случае.

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

Работа с пользовательскими функциями Arduino

Function используются, когда сегмент кода повторно выполняется для выполнения того же действия. Пользователь может создать пользовательскую функцию для организации кода или выполнения повторяющихся действий. Чтобы успешно использовать пользовательскую функцию, пользователь должен вызвать их из обязательных функций Arduino, таких как loop (), setup () или любую другую функцию, которая приводит к этим обязательным функциям:

Ниже приведена настраиваемая функция, которую использовали в коде проекта:

В проекте функция blinkLED () не перенастраивает любое значение, когда оно вызывается из функции loop (). Следовательно, тип возвращаемого значения — void. При вызове функции мы передаем номер булавки и сообщение в качестве параметров:

Эти параметры затем используются в выполненном действии (запись сообщения на последовательный порт и настройка статуса светодиода) с помощью функции blinkLED (). Эта функция также вводит задержку для выполнения мигания с помощью функции delay ().

Тестирование

Спроектированная система была проверена в разделе «Тестирование аппаратного обеспечения» с помощью ручных входов через программу тестирования Firmata. Необходимо убедиться, что проект выполняет объективные задачи автономно и неоднократно.

С портом USB, подключенным к компьютеру, необходимо открыть средство последовательного мониторинга из среды IDEArduino, перейдя в меню «Сервис» | SerialMonitor или нажав Ctrl + Shift + M. На экране последовательного монитора должно появиться сообщение, аналогичное показанному:

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

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

Метод 2 — использование Python и Firmata

Можно использовать редактор по вашему выбору, но убедитесь, что сохраняются файлы с расширением .py. Скопируем следующие строки кода в новый файл и сохраним его как test.py:

Чтобы запустить этот файл, выполните следующую команду на терминале, где сохранен файл test.py:

Вы должны иметь возможность видеть текст PythonProgramming, напечатанный на терминале. Как вы можете видеть, файл начинается с #! / Usr / bin / python, который является местом установки Python по умолчанию. Добавив эту строку в свой код Python, вы можете напрямую выполнить файл Python с терминала. В операционных системах на основе Unix вам нужно сделать исполняемый файл test.py с помощью следующей команды:

теперь, поскольку ваш файл является исполняемым, вы можете напрямую запустить файл, используя следующую команду:

Теперь создадим новый файл Python со следующим фрагментом кода и запустим его. Обязательно необходимо изменить значение переменной порта в соответствии с вашей операционной системой:

В этом коде есть два основных компонента программирования: методы pyFirmata и функция Python для выполнения мигающего действия. Программа неоднократно обнаруживает события движения и выполняет мигающее действие.

В этом методе мы реализовали оператор while, чтобы поддерживать программу в цикле, пока пользователь не завершит работу вручную. Можно завершить код, используя комбинацию клавиш Ctrl + C.

Работа с методами pyFirmata

Работы с платой Arduino и протоколом Firmata необходимо начать с инициализации платы Arduino в качестве переменной. Метод pyFirmata, который позволяет пользователю назначить правление переменной Python, выглядит следующим образом:

Как только значение переменной присвоено, можно выполнять различные действия, такие как чтение пина или отправка сигнала на вывод с использованием этой переменной. Чтобы назначить роль контакту, используется метод get_pin (). В следующей строке кода d представляет цифровой вывод, 7 — номер вывода, а i означает, что тип вывода — это входной вывод:

Как только pin и его роль присваиваются переменной, эта переменная может использоваться для чтения или записи значений на выводе:

Можно напрямую записывать данные на конкретный вывод, как описано в следующем коде:

Здесь метод write (1) посылает сигнал HIGH на вывод.

Работа с функциями Python

Функция Python начинается с ключевого слова def, за которым следует имя функции и входные параметры или аргументы. Определение функции заканчивается двоеточием (:) и после этого отступы. Оператор return завершает функцию. Оно также передает это выражение в место вызова функции.

Если оператор return сохраняется без выражения, считается, что оно передало возвращаемое значение None:

Предыдущая структура может быть использована для создания настраиваемых функций для выполнения повторяющихся задач. В нашем проекте у нас есть функция blinkLED (pin, message) для выполнения мигающего светодиода. Эта функция посылает 1 (HIGH) и 0 (LOW) значение на указанный цифровой контакт, а также печатает сообщение на терминале. Он также вводит задержку для имитации мигающего действия:

Тестирование

После запуска кода Python на терминале можно начинать тестирование. Если все идет по проекту, вы должны иметь возможность видеть в терминале следующий вывод:

Вы должны иметь возможность видеть строку обнаружения движения на терминале, когда какое-либо движение обнаружено датчиком PIR. Преимущество использования Python заключается в том, что незначительные изменения, такие как изменение скорости мигания или замена ролей светодиодов, могут быть выполнены путем простого изменения кода Python без участия С помощью Arduino или электрической цепи.

Выводы

Сравнительный анализ результатов практической реализации проекта двумя методами программирования, которые мы применили в этой работе показывает, что метод который использует только скетч Arduino, представляет традиционную парадигму программирования микроконтроллера. Хотя этот метод более прост в реализации, ему не хватает экстенсивности, достигаемой интерфейсом Python-Arduino. Таким образом, для практического применения мы делаем выбор в пользу метода Python-Arduino.

Инфракрасный датчик движения (Zelo-модуль)

Инфракрасный датчик движения зафиксирует любое перемещения тёплых объектов: людей, животных и даже лунных рыб.

Видеообзор

Принцип работы

Каждый теплокровный объект является источником теплового излучения. Длина волны теплового излучения зависит от температуры и находится в инфракрасной части спектра. ИК излучение невидимо для глаза, но улавливается пироэлектрическими датчиками.

Примеры работы

Простой датчик движения

Инфракрасный датчик может работать даже без микроконтроллера. Соберите простой детектор движения объекта.

Что вам понадобится?
Схема устройства

При появлении объекта в зоне видимости датчика, лампочка загорится.

Используйте инфракрасный датчик движения как одно из зёрен в своём умном доме. Тут уже не обойтись без Arduino, Raspberry Pi или Iskra JS.

Пример для Arduino

Подключим датчик движения к Arduino Uno через Troyka Shield к 4 цифровому пину.

Схема устройства

Код программы

Выведем в Serial-порт текущее состояние датчика с обновлением каждые 100 миллисекунд.

После прошивки платы, вы увидите бегущие нули. А как только появится живой объект на горизонте — нули сменятся на единицы.

Пример для Iskra JS

Скоммутируем PIR-сенсор к Iskra JS через Troyka Shield к 4 цифровому пину.

Схема устройства

Код программы

Зафиксируем движение объекта с помощью Espruino и языка JavaScript.

В результате вы увидите сообщение в консоле, при обнаружении живого объекта в зоне видимости сенсора.

Пример для Raspberry Pi

Поймаем живой объект одноплатником Raspberry Pi, например, Raspberry Pi 4. Подключите сенсор движения к пину 4 Raspberry. Для избежания макеток и проводов используйте плату расширения Troyka Cap.

Схема устройства

Код программы

После запуска скрипта вы увидите текущие показатели сенсора. Пока движения нет — в консоли выводятся нули, при обнаружении живого объекта — единицы.

Элементы платы

Пироэлектрический сенсор с линзой Френеля

Модуль выполнен на пироэлектрическом сенсоре RD-624 в металлическом герметичном корпусе. Внутри компонента расположено два чувствительных элемента, которые смотрят на внешний мир через прямоугольное окно, которое пропускает инфракрасное излучение.

На пироэлектрический сенсор одевается Линза Френеля, которая концентрируют излучение, значительно расширяя диапазон чувствительности датчика.

Микросхема управления

Мозгом сенсора является микросхема BISS0001. Чип считывает и обрабатывает сигналы с PIR-сенсора. В итоге на выходе модуля бинарный цифровой. Есть движение — единица, нет — ноль.

Выбор режима работы

Режим работы модуля задается перемычкой . Есть два режима — режим H и режим L. На фото выше в модуле установлен режим H.

Режим H — в этом режиме при срабатывании датчика несколько раз подряд на его выходе (на OUT) остается высокий логический уровень.

Режим L — в этом режиме на выходе при каждом срабатывании датчика появляется отдельный импульс.

Регулировка режимов работы

На модуле расположено три потенциометра отвечающие за подстройку режима работы:

Световой индикатор

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

Датчик освещённости

Датчик освещённости на фоторезисторе GL5528, подкорректирует чувствительность модуля на солнечный свет. Это удобно при необходимости отключение работы сенсора в дневное время суток.

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

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