Меню

Arduino код для датчика движения

Детектор движения с использованием 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 напряжение высокого уровня с помощью следующей строчки кода:

Если на этом контакте появилось напряжение высокого уровня это будет означать, что 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 мс
>
>

Видео, демонстрирующее работу схемы

Источник

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

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

Источник

Arduino для начинающих. Урок 8. Подключение датчика движения (PIR). Отправка E-mail

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

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

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

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

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

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

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

Схема подключения 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

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

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

Читайте также:  Убедитесь что палец полностью накрыл датчик самсунг а51

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

Чтобы установить 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». Должна появляться подобная картина:

Установка 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

Код на Python

Теперь создаем программу на Python. Для этого копируем данный код в файл с именем «movement.py». На Linux можно использовать «нано» редактор, на Windows, вероятно, самый простой способ сделать файл с помощью редактора Python ‘IDLE » (доступен из группы программ Python в меню Пуск).

import time
import serial
import smtplib
TO = ‘putyour@email.here’
GMAIL_USER = ‘putyour@email.here’
GMAIL_PASS = ‘putyourpasswordhere’
SUBJECT = ‘Intrusion!!’
TEXT = ‘Your PIR sensor detected movement’
ser = serial.Serial(‘COM4’, 9600)
def send_email():
print(«Sending Email»)
smtpserver = smtplib.SMTP(«smtp.gmail.com»,587)
smtpserver.ehlo() smtpserver.starttls()
smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS)
header = ‘To:’ + TO + ‘\n’ + ‘From: ‘ + GMAIL_USER
header = header + ‘\n’ + ‘Subject:’ + SUBJECT + ‘\n’
print header
msg = header + ‘\n’ + TEXT + ‘ \n\n’
smtpserver.sendmail(GMAIL_USER, TO, msg)
smtpserver.close()
while True:
message = ser.readline()
print(message)
if message[0] == ‘M’ :
send_email()
time.sleep(0.5)

Перед тем как запустить программу Python вносим некоторые изменения (все они в верхней части программы). Программа предполагает, что электронные письма создаются из аккаунта Gmail. Если его нет регистрируем (даже если это только для этого проекта). Изменяем значение переменной «TO» на адрес электронной почты, куда будут отправляться уведомления. Изменяем значение «GMAIL_USER» на адрес электронной почты Gmail и соответственно пароль в следующей строке (GMAIL_PASS). Также можно изменить тему и текст сообщения для отправки («SUBJECT» и «TEXT»). Необходимо установить последовательный порт, к которому подключена Arduino в строке ser = serial.Serial(‘COM4’, 9600) Для Windows, это будет что-то навроде «COM4» для Linux — что-то навроде «/dev/tty.usbmodem621». К какому порту компьютера подключена плата смотрим в Arduino IDE в правом нижнем углу. После этих изменений, запускаем программу из командной строки / терминала: python movement.py Готово! Когда PIR-датчик срабатывает вскоре приходит сообщение на указанный e-mail.

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

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

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

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

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

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

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

Источник

Adblock
detector