Как подключить pir датчик

Share Button

Продолжаем серию уроков “Arduino для начинающих”. Сегодня мы разберем проект подключение PIR-датчика (движения) к Arduino и организуем автоматическую отправку e-mail при срабатывании датчика. Arduino является сердцем этого проекта — считывает показания ИК-датчика, и при обнаружении движения отдает компьютеру через порт USB команду отправить письмо. Обработку сигнала, поступающего на компьютер реализуем с помощью программы Python.

Список деталей для сборки модели

Для сборки проекта, описанного в этом уроке, понадобятся следующие детали:

  • Arduino UNO или аналог (подробнее, о том как выбрать Arduino здесь);
  • PIR-датчик (подойдет такой за $ 2);
  • бредбоард (можно купить за $2,4);
  • провода папа-папа (можно купить такую связку с большим запасом).

Arduino UNO

Подключение датчика HC SR501. Инфракрасный датчик движения pir. Дешёвый датчик и способы подключения

PIR-датчик

Бредбоард

Провода папа-папа

Также потребуется компьютер с подключением к Интернету, через него будем отправлять электронную почту! Роль компьютера в этом уроке может выполнять Raspberry Pi.

Схема подключения PIR-датчика к Arduino

К Arduino в этом проекте требуется подключить только PIR-датчик, поэтому провода от датчика можно подключить непосредственно к Arduino. Но т.к. в таком случае провода держаться немного не плотно удобнее использовать схему c бредбоард:

Схема подключения PIR-датчика к бредбоард

Схема подключения PIR-датчика к бредбоард

Arduino скетч

Arduino будет послать сообщение по USB Serial связи при обнаружении движения. Но если посылать e-mail при каждом срабатывании датчика, то можно получить огромное количество писем. Поэтому если прошло еще слишком мало времени от прошлого сигнала — будем посылать другое сообщение.
int pirPin = 7;
int minSecsBetweenEmails = 60; // 1 min
long lastSend = -minSecsBetweenEmails * 1000;
void setup()
pinMode(pirPin, INPUT);
Serial.begin(9600);
>
void loop()
long now = millis();
if (digitalRead(pirPin) == HIGH)
if (now > (lastSend + minSecsBetweenEmails * 1000))
Serial.println(«MOVEMENT»); lastSend = now;
>
else
Serial.println(«Too soon»); >
>
delay(500);
>

Переменная «minSecsBetweenEmails» может быть изменена на другое разумное значение. В примере она установлена на 60 секунд, и письма не будут отправлены чаще одной минуты. Чтобы отслеживать, когда последний раз была отдана команда слать e-mail используется переменная «lastSend». Ее инициализируем отрицательным числом, равным числу миллисекунд, указанных в переменной «minSecsBetweenEmails».

Это гарантирует нам обработку срабатывания PIR-датчика сразу как только скетч Arduino запущен. В цикле используется функция Millis () чтобы получить число миллисекунд с Arduino и сравнить со временем от прошлого срабатывания датчика и соответствующей отправке сообщения «MOVEMENT» (движение). Если сравнение показывает, что прошло слишком мало времени от прошлого срабатывания датчика, то несмотря на то, что движение было обнаружено, посылаем сообщение «Too soon» (Слишком рано). Перед тем как писать программу на Python для обработки сигнала, поступающего с Arduino на компьютер или Raspberry Pi по USB, можно проверить работу программы на Arduino, просто открыв Serial Monitor на Arduino IDE.

Serial Monitor Arduino IDE

Serial Monitor Arduino IDE

Установка Python и PySerial

Если в проекте используется компьютер с операционной системой Linux, например, Raspberry Pi, Python уже установлен. Если используется компьтер с операционной системой Windows, то Python требуется установить. В любом случае, потребуется установить библиотеку PySerial чтобы обеспечить связь с Arduino.

Установка Python на Windows

learn_arduino_Python_inst_win_setting_path

Чтобы установить Python на Windows, скачайте установщик с https://www.python.org/downloads/. Были сообщения о проблемах с PySerial на Windows при использовании Python 3, поэтому используем Python 2. После установки Python, в меню Пуск появится соответствующая группа. Но для установки PySerial нужно будет использовать Python из командной строки, поэтому добавим к переменной PATH среды Windows соответствующий каталог.

Чтобы сделать это, нужно зайти в Панель управления Windows, найти System Properties (Свойства системы). Затем нажать на кнопку с надписью Environment Variabes («Переменные среды») и в появившемся окне выбрать «Path» в нижней части System variables (Системные переменные). Нажать кнопку Edit («Изменить»), а затем в конце «Значение переменной», не удаляя имеющийся текст, добавить «; C: Python27». Не забывать «;» после каждой указанной папки. Чтобы проверить, что переменную PATH изменили корректно, в командной строке введем команду «“python». Должна появляться подобная картина:

learn_arduino_python_from_dosУстановка PySerial

Независимо от используемой операционной системы, скачиваем .tar.gz установочный пакет для PySerial 2.6 с https://pypi.python.org/pypi/pyserial Получаем файл с именем pyserial-2.6.tar.gz При использовании Windows нужно распаковать файл в папку. К сожалению, это не обычный файл ZIP, так что, возможно, потребуется скачать, например, 7-zip (http://www.7-zip.org/). При использовании компьютера с операционной системой Linux, например, при использовании в этом проекте Raspberry Pi, нужно открыть терминальную сессию, выполнить команду «CD» с указанием папки куда скачана pyserial-2.6.tar.gz, а затем выполнить следующую команду, чтобы распаковать установщик:
$ tar -xzf pyserial-2.6.tar.gz
Далее независимо от используемой операционной системы в командной строке выполняем команду “CD” c указанием папки pyserial-2.6 и выполняем команду:
sudo python setup.py install

Читайте также:  Как обкатать 2 тактный лодочный мотор

Код на Python

Что еще можно сделать с использованием PIR-датчика

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

Смотрите также:

Посты по урокам:

  1. Первый урок: Светодиод
  2. Второй урок: Кнопка
  3. Третий урок: Потенциометр
  4. Четвертый урок: Сервопривод
  5. Пятый урок: Трехцветный светодиод
  6. Шестой урок: Пьезоэлемент
  7. Седьмой урок: Фоторезистор
  8. Восьмой урок: Датчика движения (PIR) и E-mail
  9. Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22

Все посты сайта “Занимательная робототехника” по тегу Arduino .

Наш YouTube канал , где публикуются видео-уроки.

Не знаете, где купить Arduino ? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь . Низкие цены, спецпредложения и бесплатная доставка на сайтах Aliexpress и DealExtreme . Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY . Низкие цены и быструю доставку предлагает интернет-магазин ROBstore.

Автор Александр Гагарин. В статье использованы материалы learn.adafruit.com.

Источник: edurobots.ru

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

Рассмотрим, как подключить 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 датчика к Ардуино УНО

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

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

#define PIR 2 #define LED 12 void setup() < pinMode(PIR, INPUT); pinMode(LED,OUTPUT); > void loop() < int pirVal = digitalRead(PIR); if (pirVal == HIGH) < digitalWrite(LED, HIGH); delay(2000); > else < digitalWrite(LED,LOW); delay(2000); > >

Пояснения к коду:

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

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

#define LED 3 // назначаем порт для светодиода #define PIR 2 // назначаем порт для PIR sensor unsigned long counttime; // выделение памяти для счетчика void setup() < pinMode(LED, OUTPUT); pinMode(PIR, INPUT); > void loop() < // если есть движение включаем светодиод if (digitalRead(PIR) == HIGH) < digitalWrite(LED, HIGH); > // включаем счетчик на 1 минуту counttime = millis(); // если нет движения и прошла 1 минута if (digitalRead(PIR) == LOW millis() — counttime > 60000) < // если нет движения в течении 1 минуты выключаем светодиод digitalWrite(LED, LOW); > >

Пояснения к коду:

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

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

Источник: xn--18-6kcdusowgbt1a4b.xn--p1ai

Про датчик движения и подключение его к 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):

/* * PIR Sensor[PIN GND] -> Arduino Nano[PIN GND] * PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V] * PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0] */ void setup() < //Установить соединение с монитором порта Serial.begin(9600); >void loop() < //Считываем пороговое значение с порта А0 //обычно оно выше 500 если есть сигнал if(analogRead(A0) >500) < //Сигнал с датчика движения Serial.println(«Есть движение . «); >else < //Нет сигнала Serial.println(«Всё тихо. «); >>

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

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

Усложнив схему и расширив функционал датчика, можно избежать вышеописанных недостатков. Для этого потребуется дополнить схему модулем реле и подключить обычную лампу на 220 вольт через данный модуль. Сам же модуль реле будет подключен к пину 3 на плате Arduino Nano. Итак принципиальная схема:

Теперь пришло время немного усовершенствовать скетч, которым проверялся датчик движения. Именно в скетче, будет реализована задержка выключения реле, так как сам датчик движения имеет слишком короткое время сигнала на выходе при срабатывании. Программа реализует 10-ти секундную задержку при срабатывании датчика. При желании это время можно увеличить или уменьшить, изменив значение переменной DelayValue . Ниже представлен скетч и видео работы всей собранной схемы:

Читайте также:  Как убрать запах блювоты в машине

/* * PIR Sensor[PIN GND] -> 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; //prevMillis — переменная для хранения времени предидущего цикла сканирования программы //interval — временной интервал для отсчета секунд до выключения реле unsigned long prevMillis = 0; int interval = 1000; //DelayValue — период в течение которого реле удерживается во включенном состоянии int DelayValue = 10; //initSecond — Переменная итерации цикла инициализации int initSecond = 60; //countDelayOff — счетчик временных интервалов static int countDelayOff = 0; //trigger — флаг срабатывания датчика движения static bool trigger = false; void setup() < //Стандартная процедура инициализации порта на который подключен модуль реле //ВАЖНО. — чтобы модуль реле оставался в первоначально выключенном состоянии //и не срабатывал при инициализации, нужно записать в порт входа/выхода //значение HIGH, это позволит избежать ложных «перещелкиваний», и сохранит //состояние реле таким, каким оно было до включения всей схемы в работу pinMode(relout, OUTPUT); digitalWrite(relout, HIGH); //Здесь всё просто — ждем когда закончатся 60 циклов(переменная initSecond) //продолжительностью в 1 секунду, за это время датчик «самоинициализируется» for(int i = 0; i < initSecond; i ++) < delay(1000); >> void loop() < //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) < //Установить флаг срабатывания датчика движения if(!trigger) < trigger = true; >> //Пока флаг срабатывания датчика движения установлен while(trigger) < //Выполнять следующие инструкции //Сохранить в переменной currMillis //значение миллисекунд прошедших с момента начала //выполнения программы unsigned long currMillis = millis(); //Сравниваем с предидущим значением миллисекунд //если разница больше заданного интервала, то: if(currMillis — prevMillis >interval) < //Сохранить текущее значение миллисекунд в переменную prevMillis prevMillis = currMillis; //Проверяем счетчик задержки сравнивая его со значением периода //в течение которого реле должно удерживаться во включенном //состоянии if(countDelayOff >= DelayValue) < //Если значение сравнялось, то: //сбросить флаг срабатывания датчика движения trigger = false; //Обнулить счетчик задержки countDelayOff = 0; //Выключить реле digitalWrite(relout, HIGH); //Прервать цикл break; >else < //Если значение всё еще меньше, то //Инкрементировать счетчик задержки на единицу countDelayOff ++; //Удерживать реле во включенном состоянии digitalWrite(relout, LOW); >> > >

В программе присутствует конструкция:

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.on.kg

Arduino и ИК датчик движения

ИК датчик движения выдаёт цифровой сигнал, если замечает перемещение источника тепла в поле своего зрения. Вариантов исполнения модулей с этими датчиками существует много, в наборе GyverKIT идёт миниатюрный модуль на базе AM312. На плате нет ничего лишнего, поэтому модуль потребляет 8.5 мкА и отлично подходит для автономных проектов:

  • Питание: 2.7.. 12V
  • Ток потребления: 8.5 мкА
  • Угол обзора: 100 градусов
  • Дальность срабатывания: 3-5 метров
  • Таймаут: 2 секунды
  • Сигнал: 2 секунды

Подключение

Подключается к питанию и любому цифровому пину:

Обратите внимание на распиновку датчика: не на всех она подписана на плате, но можно определить сторону платы по компонентам:

Примеры

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

void setup() < Serial.begin(9600); >void loop()

Откроем плоттер и помашем над датчиком рукой:

Домашнее задание

  • Датчику по сути не нужен микроконтроллер! Сделайте сигнализацию, подав сигнал с датчика движения на светодиод, реле, активный зуммер, модуль мосфет-транзистора

Источник: kit.alexgyver.ru

Рейтинг
( Пока оценок нет )
Загрузка ...