Меню

Датчик движения ардуино ложные срабатывания

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

Опубликовано: 25.10.2016 19:00

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

Датчик движения, или датчик перемещения — устройство (прибор) обнаруживающий перемещение каких либо объектов. Очень часто эти устройства, используются в системах охраны, сигнализации и мониторинга. Форм факторов этих датчиков существует великое множество, но мы рассмотрим именно модуль датчика движения для подключения к платам Arduino, и именно от фирмы RobotDyn. Почему именно этой фирмы? Я не хочу заниматься рекламой этого магазина и его продукции, но именно продукция данного магазина была выбрана в качестве лабораторных образцов благодаря качественной подаче своих изделий для конечного потребителя. Итак, встречаем — датчик движения (PIR Sensor) от фирмы RobotDyn:

Эти датчики малы по габаритам, потребляют мало энергии и просты в использовании. Кроме того — датчики движения фирмы RobotDyn имеют еще и маркированные шелкографией контакты, это конечно мелочь, но очень приятная. Ну а тем кто использует такие же датчики, но только других фирм, не стоит беспокоиться — все они имеют одинаковый функционал, и даже если не промаркированы контакты, то цоколёвку таких датчиков легко найти в интернете.

Основные технические характеристики датчика движения(PIR Sensor):

Зона работы датчика: от 3 до 7 метров

Рабочее напряжение: 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;

unsigned long currMillis = millis();

if(currMillis — prevMillis > interval)

// Наши операции заключенные в тело конструкции

Чтобы внести ясность, было решено отдельно прокомментировать эту конструкцию. Итак, данная конструкция позволяет выполнить как бы параллельную задачу в программе. Тело конструкции срабатывает примерно раз в секунду, этому способствует переменная interval. Сначала, переменной currMillis присваивается значение возвращаемое при вызове функции millis(). Функция millis() возвращает количество миллисекунд прошедших с начала программы. Если разница currMillis — prevMillis больше чем значение переменной interval то это означает, что уже прошло более секунды с начала выполнения программы, и нужно сохранить значение переменной currMillis в переменную prevMillis затем выполнить операции заключенные в теле конструкции. Если же разница currMillis — prevMillis меньше чем значение переменной interval, то между циклами сканирования программы еще не прошло секунды, и операции заключенные в теле конструкции пропускаются.

Читайте также:  Замена датчика распредвала n62

Ну и в завершение статьи видео от автора:

Источник

Arduino.ru

Глючит датчик движения (или я. )

Всем привет, помогите разобраться.

Сделал себе умную подсветку рабочей зоны на кухне. Лента уже давно была поклеена, включалось обычным врезным выключателем-кнопкой. С тех пор (прошло 6 лет) узнал о ардуино и немного чего-то научился. Собственно, потому возникло желание как-то улучшить банальное вкл/выкл.

Идея такова: поставил бесконтактный выключатель на основе сонара, кнопку сенсорную (ее не особо и нужно, но уже была дырка от прошлой щелкалки, соответственно не придумал ничего лучше, как продублировать включение/выключение ленты ею и закрыть дыркО заодно :)). Еще установил в укромном местечке датчик освещения и датчик движения. Идея в том, чтобы когда темно, и датчик движения ловит заходящего на кухню человека — лента включается на минимальную яркость и светится около 30 секунд. За это время человек либо включит нормальный свет кнопкой/сонаром, либо попил водички и утопал — через 30 секунд система, не улавливающая сигнала с датчика движения, погаснет.

Материалы таковы: Nano, сонар, кнопка, мини-датчик движения, датчик освещенности, мосфет.

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

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

Ну и два вопроса, кои особо не мешают, но работают некорректно и хотелось бы для себя их на будущее прояснить:

1. Расстояние, которое возвращает сонар (в цифровом эквиваленте, проверил через монитор порта) почему-то в 3-3.5 раз меньше реального. Именно потому в коде и стоит цифра 3 (в реальности это 10-11 см). Склоняюсь к тому, что это по причине библиотек для SR-04, а установлен SRF-05 (или нет?))

2. Millis(). Почему-то в данном случае при выставленной задержке в 70 секунд (плюс пару секунд задержка выключения самого датчика движения), отключение происходит через 34-36 секунд. Опять-же некритично, но хотелось бы иметь возможность выставлять точные значения.

Источник

Arduino.ru

Ложное срабатывание датчика движения с ардуино

Всё собрал по данному скетчу

А что, у самого датчика светодиода нет?

Если есть — как он себя ведет безо всякой Ардуинки?

Если нет — подключите к выходу через резистор и точно так же проверьте.

А что, у самого датчика светодиода нет?

Если есть — как он себя ведет безо всякой Ардуинки?

Если нет — подключите к выходу через резистор и точно так же проверьте.

Вместо pinMode(PIN_PIR, INPUT);

прописать pinMode(PIN_PIR, INPUT_PULLUP);

Вместо pinMode(PIN_PIR, INPUT);

прописать pinMode(PIN_PIR, INPUT_PULLUP);

И код, наконец, вставить по-человечески!

А что, у самого датчика светодиода нет?

Если есть — как он себя ведет безо всякой Ардуинки?

Если нет — подключите к выходу через резистор и точно так же проверьте.

У датчика нет светодиода. Вот здесь брал .

Я не спрашивал, где Вы его брали. Я посоветовал Вам подключить к выходу датчика светодиод, чтобы проверить, как датчик работает сам про себе без Ардуины. Обсуждать скетч, не зная, исправен ли датчик, бессмысленно.

А что, у самого датчика светодиода нет?

Если есть — как он себя ведет безо всякой Ардуинки?

Если нет — подключите к выходу через резистор и точно так же проверьте.

У датчика нет светодиода. Вот здесь брал .

Я не спрашивал, где Вы его брали. Я посоветовал Вам подключить к выходу датчика светодиод, чтобы проверить, как датчик работает сам про себе без Ардуины. Обсуждать скетч, не зная, исправен ли датчик, бессмысленно.

Читайте также:  Что такое поверочный интервал датчика

Подключил отдельно к датчику светодиод с резиком.

Спецом установил датчик в темную коробку — всё ок — не срабатывает.

Стоит его оттуда вынуть — подает сигнал на светодиод, через секунду гаснет, затем снова и снова.

Источник

Arduino и HC-SR501 (датчик движения)

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

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

Характеристики датчика по даташиту:

  1. Широкий диапазон рабочего напряжения: 4,5 – 20 В постоянного тока;
  2. Потребляемый ток покоя: ≈50 мкА;
  3. Напряжение на выходе: 3.3 В;
  4. Рабочая температура: от -15° C до 70° C;
  5. Размеры: 32*24 мм;
  6. Два режима работы;
  7. Максимальный угол обнаружения – 110°;
  8. Максимальная дистанция срабатывания – от 3 до 7 м (регулируется); При температуре более 30° C это расстояние может уменьшаться.

На модуль установлена линза Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик под названием 500BP. Датчик называется PIR (Passive Infra-Red). Пассивный он потому, что для обнаружения движения не используется какая-либо дополнительная энергия, кроме той, что испускается самими объектами.

500BP состоит из двух чувствительных элементов. Управляющая микросхема модуля регистрирует изменения сигналов от обоих элементов и по характеру их изменения обнаруживает движение объектов, испускающих инфракрасные сигналы (живых организмов).

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

Модуль HC-SR501 имеет 3 вывода:

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

Изменения этого сигнала зависят от выбранного режима работы. Он меняется перемычкой (отмечена на фото с подписями какой режим будет выбран). Если выбран H– при нескольких срабатываниях подряд на выходе датчика остаётся высокий уровень, при L– для каждого срабатывания будет подан свой импульс.

Также на самом модуле можно найти два переменных резистора, регулирующих дистанцию обнаружения движения (Distance Adjust) и время, в течение которого на выходе будет логическая единица (Delay Time Adjust). Дистанция регулируется в пределах 3 – 7 метров, задержка от 5 до 300 секунд.

И ещё немного о его особенностях. При работе с датчиком следует избегать источников света и тепла, закрывающих поверхность объектива модуля. Ветер также может создавать помехи. На большем расстоянии датчик более чувствителен.

Для реализации проекта из этой статьи нам потребуются следующие компоненты:

Подключение HC-SR501 к Arduino

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

  • GND подключаем к одноимённому выводу Arduino;
  • VCC к 5V;
  • OUT подключим к A0.

Подключение выхода модуля к аналоговому пину связано с тем, что цифровые пины Arduino работают с пятивольтовой логикой, а наш модуль рассчитан на 3.3 В. В скетче за логическую единицу мы примем значение более 500 на аналоговом порту. Это будет около 2.44 В и более.

Схема подключения hc-sr501:

Подключение в Arduino IDE

Теперь загружаем в Arduino следующий скетч и открываем монитор порта.

Этот скетч можно использовать лишь для проверки работы датчика, для практического применения он слабо годится.

Теперь расширим функционал устройства, добавив реле и лампу на 220 В.

Реле подключим к 3 цифровому пину Arduino. Питание – 5V.

Общий провод (COM) реле подключаем к фазе 220 В, NO (Normally Open, нормально разомкнутый контакт, пока через реле не потечёт ток, он будет разомкнут) подключаем к лампе, другой контакт лампы – к нолю 220 В.

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

Длительность работы лампы после срабатывания датчика и дальность обнаружения движения будет регулироваться переменным резистором на датчике. В скетче ничего менять не надо.

Читайте также:  Установка датчика омывающей жидкости киа рио 2

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

Товары, используемые в материале

Arduino NANO V3 (ATmega 328P / CH340G)

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

KY-019 – Одноканальное реле 250В / 10А

Шлейф проводов «Мама — Мама» (30см, 40шт.)

Самые популярные материалы в блоге

За все время

За сегодня

6 комментариев . Оставить новый

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

Здравствуйте! Проверяйте переменную два раза, один по срабатыванию триггера, а второй – через 5 секунд. На самом датчике выставите потенциометром минимально короткую задержку. После 5 секунд проверяйте переменную на наличие логической единицы еще раз, а уже после этого – щелкайте актуаторами 🙂

Добрый день уважаемый Вольтик,
помогите пожалуйста в моём случае. У меня есть код и все прекрасно работает. Свет для коридора.
Но я хочу добавить ещё 2 датчика движения на пин. 2 и 4. Понимаю что нужно прописывать для каждого пина свой код и на этом всё! Код оигинальный который работает:
#include

#define piro 8
#define mosfet 9
#define foto A0
#define pot A1
#define switch1 7

#define nightVAL 200
#define minPWM 5
#define smooth 7

pinMode (piro, INPUT);
pinMode (mosfet, OUTPUT);
pinMode (switch1, INPUT_PULLUP);

TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;

pwm = map (analogRead (pot), 0, 1023, 0, 255);

if (digitalRead (switch1) == LOW)
if (debouncer.fell())
<
for (int i1 = 0; i1 = 0; i2–)
<
analogWrite (mosfet, i2);
delay (smooth);
>
>
else if (debouncer.read() == HIGH)
<
if ((analogRead (foto) Arduino Nano[PIN GND]
* PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V]
* PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0]
* Relay Module[PIN IN] -> Arduino Nano[PIN 3]
*/
//relout – пин модуля реле
const int relout = 3;
//trigger – флаг срабатывания датчика движения
boolean trigger = false;

void setup()
<
/*Стандартная процедура инициализации порта на который подключен модуль реле.
ВАЖНО. – чтобы модуль реле оставался в первоначально выключенном состоянии,нужно записать в порт входа/выхода значение HIGH, это позволит избежать ложных “перещелкиваний”,
и сохранит состояние реле таким, каким оно было до включения всей схемы в работу*/
pinMode(relout, OUTPUT);
digitalWrite(relout, HIGH);

//задержка в минуту для инициализации датчика
delay(60000);
>

void loop()
<
//Считать значение с аналогового порта А0
//Если значение выше 500
if(analogRead(A0) > 500)
<
//Установить флаг срабатывания датчика движения
if(!trigger)
<
trigger = true;
>
>
else
<
//Снять флаг срабатывания датчика движения
trigger = false;
//Выключить реле
digitalWrite(relout, HIGH);
>

//Пока флаг срабатывания датчика движения установлен
while(trigger)
<
//Включить реле
digitalWrite(relout, LOW);
if(analogRead(A0) > 500)
<
//Установить флаг срабатывания датчика движения
if(!trigger)
<
trigger = true;
>
>
else
<
//Снять флаг срабатывания датчика движения
trigger = false;
//Выключить реле
digitalWrite(relout, HIGH);
>
>
>

Зачем нужен тригер и цикл while, когда достаточно одного условия вначале loop ? и потом, логика неверная, реле замкнуто когда нет движений а когда есть – размыкает, там либо менять местами HIGH с LOW, либо проводок в реле перекинуть. Не написано какой режим установлен на датчике H или L.

Источник

Adblock
detector