Делаем с помощью микроконтроллера arduino датчик движения

Датчик движения ардуино

Датчик движения ардуино позволяет отследить перемещение в закрытой зоне объектов, излучающих тепло (люди, животные). Такие системы часто применяют в бытовых условиях, например, для включения освещения в подъезде.

 В этой статье мы рассмотрим подключение в проектах ардуино PIR-сенсоров: пассивных инфракрасных датчиков или пироэлектрических сенсоров, которые реагируют на движение.

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

Описание датчика движения ардуино

Конструкция ПИР датчика движения не очень сложна – он состоит из пироэлектрического элемента, отличающегося высокой чувствительностью (деталь цилиндрической формы, в центре которой расположен кристалл) к наличию в зоне действия определенного уровня инфракрасного излучения. Чем выше температура объекта, тем больше излучение.

Сверху PIR-датчика устанавливается полусфера, разделенная на несколько участков (линз), каждый из которых обеспечивает фокусировку излучения тепловой энергии на различные сегменты датчика движения.

Чаще всего в качестве линзы применяют линзу Френеля, которая за счет концентрации теплового  излучения позволяет расширить диапазон чувствительности инфракрасного датчика движения Ардуино.

PIR-sensor конструктивно разделен на две половины. Это обусловлено тем, что для устройства сигнализации важно именно наличие движения в зоне чувствительности, а не сам уровень излучения. Поэтому части установлены таким способом, что при улавливании одной большего уровня излучения, на выход будет подаваться сигнал со значением high или low.

Основными техническими характеристиками датчика движения Ардуино являются:

  • Зона обнаружения движущихся объектов составляет от 0 до 7 метров;
  • Диапазон угла слежения — 110°;
  • Напряжение питания – 4.5-6 В;
  • Рабочий ток – до 0.05 мА;
  • Температурный режим – от -20° до +50°С;
  • Регулируемое время задержки от 0.3 до 18 с.

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

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

  • Когда устройство установлено в пустой комнате, доза излучения, получаемая каждым элементом постоянна, как и напряжение;
  • При появлении в комнате человека, он первым делом попадает в зону обозрения первого элемента, на котором появляется положительный электрический импульс;
  • Когда человек перемещается по комнате, вместе с ним перемещается и тепловое излучение, которое попадает уже на второй сенсор. Этот PIR-элемент генерирует уже отрицательный импульс;
  • Разнонаправленные импульсы регистрируются электронной схемой датчика, которая делает вывод, что в поле зрения Pir-sensor Arduino находится человек.

Для надежной защиты от внешних шумов, перепадов температуры и влажности, элементы Pir-датчика на Arduino устанавливаются в герметичный металлический корпус. На верхней части корпуса по центру находится прямоугольник, выполненный из материала, который пропускает инфракрасное излучение (чаще всего на основе силикона). Чувствительные элементы устанавливаются за пластиной.

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

Подключение Pir-датчика к Ардуино выполнить не сложно. Чаще всего модули с сенсорами движения оснащены тремя коннекторами на задней части. Распиновка каждого устройства зависит от производителя, но чаще всего возле выходов есть соответствующие надписи.

Поэтому, прежде чем выполнить подключение датчика к Arduino необходимо ознакомиться с обозначениями. Один выход идет к земле (GND), второй – обеспечивает выдачу необходимого сигнала с сенсоров (+5В), а третий является цифровым выходом, с которого снимаются данные.

Подключение Pir-сенсора:

  • «Земля» – на любой из коннекторов GND Arduino;
  • Цифровой выход – на любой цифровой вход или выход Arduino;
  • Питание – на +5В на Arduino.

Схема подключения инфракрасного датчика к Ардуино представлена на рисунке.

Пример программы

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

  • Вероятность ложных срабатываний, за счет того, что для самоинициализации датчика требуется одна минута;
  • Отсутствие выходных устройств исполнительного типа – реле, сирены, светоиндикации;
  • Короткий временной интервал сигнала на выходе сенсора, который необходимо на программном уровне задержать, в случае появления движения.

Указанные недостатки устраняются при расширении функционала датчика.

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

#define PIN_PIR 2
#define PIN_LED 13 void setup() { Serial.begin(9600); pinMode(PIN_PIR, INPUT); pinMode(PIN_LED, OUTPUT); } void loop() { int pirVal = digitalRead(PIN_PIR); Serial.println(digitalRead(PIN_PIR)); //Если обнаружили движение if (pirVal) { digitalWrite(PIN_LED, HIGH); Serial.println(«Motion detected»); delay(2000); } else { //Serial.print(«No motion»); digitalWrite(PIN_LED, LOW); }
}

Возможные варианты проектов с применением датчика

Пир-датчики незаменимы в тех проектах, где главной функцией сигнализации является определение нахождения или отсутствия в пределах определенного рабочего пространства человека. Например, в таких местах или ситуациях, как:

  • Включение света в подъезде или перед входной дверью автоматически, при появлении  в нем человека;
  • Включение освещения в ванной комнате, туалете, коридоре;
  • Срабатывание сигнализации при появлении человека, как в помещении, так и на придомовой территории;
  • Автоматическое подключение камер слежения, которыми часто оснащаются охранные системы.

Пир-сенсоры просты в эксплуатации и не вызывают сложностей при подключении, имеют большую зону чувствительности и также могут быть с успехом интегрированы в любой из программных проектов на Ардуино.

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

Источник: https://ArduinoMaster.ru/datchiki-arduino/arduino-datchik-dvizheniya/

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

Продолжаем серию уроков “Arduino для начинающих”.  Сегодня мы разберем проект подключение PIR-датчика (движения) к Arduino и организуем автоматическую отправку e-mail при срабатывании датчика.

Arduino является сердцем этого проекта — считывает показания ИК-датчика, и при обнаружении движения отдает компьютеру через порт USB команду отправить письмо.

Обработку сигнала, поступающего на компьютер реализуем с помощью программы Python.

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

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

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

Arduino UNO

PIR-датчик

Бредбоард

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

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

Установка 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 + '
' + 'From: ' + GMAIL_USER header = header + '
' + 'Subject:' + SUBJECT + '
' print header msg = header + '
' + TEXT + '

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

Читайте также:  Дроны - перспективная технология для современного кино - arduino+

Безусловно, PIR-датчик быть использован непосредственно с Arduino без соединения с компьютером.

В этом случае при срабатывании датчика можно включать предупреждающий звуковой сигнал, мигать светодиодом, или  включать освещение в помещении (через высоковольтное реле).

Источник: http://edurobots.ru/2014/10/arduino-dlya-nachinayushhix-urok-8-podklyuchenie-datchika-dvizheniya-pir-otpravka-e-mail/

Пироэлектрический инфракрасный (PIR) датчик движения и Arduino

PIR (пассивные инфракрасные датчики) сенсоры позволяют улавливать движение.

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

Пирлоэлектрический датчик движения — общая информация

ПИР датчики движения по сути состоят из пироэлектрического чувствительного элемента (цилиндрическая деталь с прямоугольным кристаллом в центре), который улавливает уровень инфракрасного излучения. Все вокруг излучает небольшой уровень радиации. Чем больше температура, тем выше уровень излучения.

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

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

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

В большинстве недорогих пир-датчиков используются недорогие чипы BISS0001 («Micro Power PIR Motion Detector IC»).

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

Одна из базовых моделей пироэлектрических датчиков подобного класса выглядит так:

Более новые модели PIR-датчиков имеют дополнительные выходы для дополнительной настройки и установленные коннекторы для сигнала, питания и земли:

ПИР датчики отлично подходят для проектов, в которых необходимо определять наличие или отсутствие человека в пределах определенного рабочего пространства.

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

Однако учтите, что пироэлектрические датчики не предоставят вам информации о том, сколько человек вокруг и насколько близко они находятся к датчику. Кроме того, сработать они могут и на домашних питомцев.

Общая техническая информация

Эти технические характеристики относятся к PIR датчикам, которые продаются в магазине Adafruit. Принцип работы аналогичных датчиков похожий, хотя технические характеристики могут отличаться. Так что прежде чем работать с ПИР-датчиком, ознакомьтесь с его даташитом.

  • Форма: Прямоугольник;
  • Цена: около 10.00 долларов в магазине Adafruit;
  • Выходной сигнал: цифровой импульс high (3 В) при наличии движения и цифровой сигнал low, когда движения нет. Длина импульса зависит от резисторов и конденсаторов на самом модуле и разная в различных датчиках;
  • Диапазон чувствительности: до 6 метров. Угол обзора 110° x 70°;
  • Питание: 3В — 9В, но наилучший вариант — 5 вольт;
  • BIS0001 (даташит);
  • RE200B (даташит);
  • NL11NH (даташит);
  • Parallax (даташит).

Ссылки для заказа оборудования, которое используется в статье в дальнейшем из Китая

>Для заказа с Aliexpress:

Принцип работы пироэлектрических (PIR) датчиков движения

PIR датчики не такие простые как может показаться на первый взгляд. Основная причина — большое количество переменных, которые влияют на его входной и выходной сигналы. Чтобы объяснить основы работы ПИР датчиков, мы используем рисунок, приведенный ниже.

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

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

Когда теплокровный объект (человек или животное), проходит мимо, он пересекает зону чувствительности первого сенсора, в результате чего  на модуле ПИР датчика генерируются два различных значения излучения.

Когда человек покидает зону чувствительности первого сенсора, значения выравниваются. Именно изменения в показаниях двух датчиков регистрируются и генерируют импульсы HIGH или LOW на выходе.

Конструкция PIR датчика

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

Рисунок из даташита Murata:

Рисунок из даташита RE200B:

На рисунке из даташита RE200B видно два чувствительных элемента:

На рисунке выше приведена внутренняя схема подключения.

Линзы

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

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

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

Поэтому в большинстве PIR датчиков используются линзы Френеля (рисунок из Sensors Magazine):

Линзы Френеля концентрируют излучение, значительно расширяя диапазон чувствительности пиродатчиков (рисунок с BHlens.com)

Рисунок из Cypress appnote 2105:

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

На рисунке ниже можно увидеть отдельные секции — линзы Френеля:

На этом макроснимке обратите внимание, что фактура отдельных линз отличается:

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

Рисунки из даташита NL11NH:

Ниже еще один рисунко. Более яркий, но менее информативный. Кроме того, обратите внимание, что у большинства датчиков угол обзора составляет 110 градусов, а не 90.

Рисунок из IR-TEC:

Подключение PIR датчика движения

Большинство модулей с инфракрасными датчиками движения имеют три коннектора на задней части. Распиновка может отличаться, так что прежде чем подключать, проверьте ее! Обычно рядом с коннекторами сделаны соответсвующие надписи.

Один коннектор идет к земле, второй выдает интересующий нас сигнал с сенсоров, третий — земля. Напряжение питания обычно составляет 3-5 вольт, постоянный ток. Однако иногда встречаются датчики с напряжением питания 12 вольт. В некоторых больших датчиках отдельного пина сигнала нет.

Вместо этого используется реле с землей, питанием и двумя переключателями.

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

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

Тестирование PIR датчика движения

Соберите схему в соответсвии с рисунком выше. В результате, когда PIR датчик обнаружит движение, на выходе сгенерируется сигнал HIGH, который соответсвует 3.3 В и светодиод загорится.

При этом учтите, что пироэлектрический датчик должен 'стабилизироваться'. Установите батарейки и подождите 30-60 секунд. На протяжении этого времени светодиод может мигать. Подождите, пока мигание закончится и можно начинать махать руками и ходить вокруг датчика, наблюдая за тем, как светодиод зажигается!

Настройка перезапуска датчика

У пироэлектрического датчика движения есть несколько настоек. Первой мы рассмотрим 'перезапуск'.

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

Обратите внимание, что при таком варианте подключения, светодиод не горит постоянно, а включается-выключается, когда вы двигаетесь возле него. Это опция 'без перезапуска' (non-retriggering).

Теперь установите коннектор в позицию H. После тестирования окажется, что светодиод горит постоянно, если кто-то движется в пределах зоны чувствительности датчика. Это режим 'перезапуск'.

Рисунок ниже из даташита датчика BISS0001:

Для большинства случаев режим 'перезапуск' (коннектор в позиции H кк это показано на рисунке ниже) лучше.

Настраиваем чувствительность

На многих инфракрасных датчиках движения, в том числе и у компании Adafruit, установлен небольшой потенциометр для настройки чувствительности. Вращение потентенциометра по часовой стрелке добавляет чувствительность датчику.

Изменение времени импульса и времени между импульсами

Когда мы рассматривает PIR датчики, важны два промежутка времени 'задержки'. Первый отрезок времени -Tx: как долго горит светодиод после обнаружения движения.

На многих пироэлектрических модулях это время регулируется встроенным потенциометром. Второй отрезок времени — Ti: как долго светодиод гарантированно не загорится, когда движения не было.

Изменять этот параметр не так просто, для этого может понадобится паяльник.

Давайте взглянем на даташит BISS:

На датчиках от Adafruit есть потенциометр, отмеченный как TIME. Это переменный резистор с сопротивлением 1 мегаом, который добавлен к резисторам на 10 килоом. Конденсатор C6 имеет емкость 0.01 микрофарат, так что:

Tx = 24576 x (10 кОм + Rtime) x 0.01 мкФ

Когда потенциометр Rtime в 'нулевом' — полностью повернут против часовой стрелки — положении (0 мегаом):

Tx = 24576 x (10 кОм) x 0.01 мкФ = 2.5 секунды (примерно)Когда потенциометр Rtime полностью повернут по часовой стрелке (1мегаом):

Tx = 24576 x (1010 кОм) x 0.01 мкФ = 250 секунд (примерно)

В средней позиции RTime время будет составлять около 120 секунд (две минуты). То есть, если вы хотите отслеживать движение объекта с частотой раз в минуту, поверните потенциометр на 1/4 поворота.

Для более старых/других моделей PIR датчиков

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

Нас интересуют резисторы R10 и R9. К сожалению, китайцы умею многое. В том числе и путать надписи. На рисунке выше приведен пример, на котором видно, что перепутаны R9 с R17. Отследить подключение по даташиту. R10 подключен к 3 пину, R9 — к 7 пину.

Например:

Tx is = 24576 * R10 * C6 = ~1.2 секунд

R10 = 4.7K и C6 = 10 нанофарад

и

Ti = 24 * R9 * C7 = ~1.2 секунд

R9 = 470K и C7 = 0.1 микрофарад

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

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

Напишем программу для считывания значений с пироэлектрического датчика движения. Подключить PIR датчик к микроконтроллеру просто. Датчик выдает цифровой сигнал, так что все, что вам необходимо — считывать с пина Arduino сигнал HIGH (рбнаружено движение) или LOW (движения нет).

При этом не забудьте установить коннектор в позицию H!

Подайте питание 5 вольт на датчик. Землю соежинети с землей. После этого соедините пин сигнала с датчика с цифровым пином на Arduino. В данном примере использован пин 2.

Программа простая. По сути она отслеживает состояние пина 2. А именно: какой на нем сигнал: LOW или HIGH. Кроме того, віводится сообщение, когда состояние пина меняется: есть движение или движения нет.

/*

* проверка PIR датчика движения

*/

int ledPin = 13;  // инициализируем пин для светодиода

int inputPin = 2;  // инициализируем пин для получения сигнала от пироэлектрического датчика движения

int pirState = LOW;  // начинаем работу программы, предполагая, что движения нет

int val = 0;  // переменная для чтения состояния пина

void setup() {

pinMode(ledPin, OUTPUT);  // объявляем светодиод в качестве  OUTPUT

pinMode(inputPin, INPUT);  // объявляем датчик в качестве INPUT

Serial.begin(9600);

}

void loop(){

val = digitalRead(inputPin);  // считываем значение с датчика

if (val == HIGH) {  // проверяем, соответствует ли считанное значение HIGH

digitalWrite(ledPin, HIGH);  // включаем светодиод

if (pirState == LOW) {

// мы только что включили

Читайте также:  Автоматика на ардуино: преимущества и примеры проектов

Serial.println(«Motion detected!»);

// мы выводим на серийный монитор изменение, а не состояние

pirState = HIGH;

}

} else {

digitalWrite(ledPin, LOW); // выключаем светодиод

if (pirState == HIGH){

// мы только что его выключили

Serial.println(«Motion ended!»);

// мы выводим на серийный монитор изменение, а не состояние

pirState = LOW;

}

}

}

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

Источник: http://arduino-diy.com/arduino-piroelektricheskiy-infrakrasnyy-PIR-datchik-dvizheniya

Arduino, датчик движения и релейный модуль

Как-то решил создать автоматическое освещение в туалете, надоело постоянно включать/выключать свет.

Что нам для этого понадобится?

  1. Arduino (используется в качестве программатора ASP).
  2. Релейный модуль.
  3. Датчик движения.
  4. Микроконтроллер ATtiny13.

Сразу хочу пояснить, датчик движения используется HC-SR501. Сам по себе он представляет законченное устройство, которое на выходе выдает логическую единицу если кто-то движется и ноль если движения нет. У себя на плате датчик имеет два переменных резистора: один регулирует частоту срабатывания а другой дальность срабатывания.На рисунке 1 показан сам датчик.

Рисунок 1 — Внешний вид датчика HC-SR50.

Режим работы Режим работы модуля задается перемычкой.

Всего два режима — режим H и режим L. Выбирается перемычкой.

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

Правда на моей версии датчика перемычка припаяна не была, а место под нее было рисунок 2.

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

Технические характеристики Напряжение питания: 4,5В — 20В Ток потребления: Плата пропали все платы и появились микроконтроллеры. И когда я попытался запрограммировать у меня среда начала ругаться. Тогда я решил залить прошивку в МК при помощи программы  AVR Burn-O-Mat т.к. у нее графический удобный интерфейс.

Как прошить мк при помощи AVR Burn-O-Mat читаем тут.

Как получить .hex файл из Ардуино читаем тут

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

Рисунок 3 — Релейный модуль

После того как мы научились прошивать МК из среды Ардуино, перейдем к написанию прошивки к датчику движения.

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

int led = 3;
int sensor = 4; // the setup routine runs once when you press reset:
void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); pinMode(sensor, INPUT);
} // the loop routine runs over and over again forever:
void loop() { digitalWrite(led, LOW); if (digitalRead(sensor)) { digitalWrite(led, HIGH); delay(30000); if (digitalRead(sensor)) { digitalWrite(led, HIGH); delay(15000); } delay(10000); } else digitalWrite(led, LOW);
}

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

Ниже привожу фотки устройства.

Эксперименты со светодиодом:

Подключил релейный модуль:

Прикрепленные файлы:

Источник: http://cxem.net/arduino/arduino116.php

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

Опубликовано 09.04.2013 13:05:00

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

В первой части данной статьи рассмотрим подключение такого датчика к Arduino, во второй части соберем подобие автоматического включателя освещения.

Компоненты для повторения (купить в Китае):

Arduino UNO, либо Arduino Nano, либо Arduino Mega

PIR-датчик 

Реле (одноканальное, 5В)

Макетная плата

Соединительные провода (перемычки)

Работа PIR-сенсора (Passive Infrared sensor), т.е. пассивного ИК датчика основывается на измерении инфракрасного излучения от объектов.

Работу можно разделить на два этапа:

1- Калибровка. При включении датчик измеряет инфракрасное излучение для получения эталонных значений.

2- Мониторинг. Датчик постоянно измеряет инфракрасное излучение и при отклонении от эталонного выдает единицу в порт.

Основные технические характеристики:

• Зона работы датчика: До 6 метров (110° x 70° область обнаружения)

• Рабочее напряжение: 5 — 9В

Модуль имеет 3 вывода (стандарта 2.54мм):

 GND: «-» питание. 

 OUT: Вывод выходного сигнала

 VCC: «+» питание.

Подключение датчика : 

GND на любой из GND пинов­­­ ардуино

OUT на любой из цифровых входов/выходов ардуино (в примерах подсоединено к 2)

VCC на + 5 вольт на ардуино

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

//Тестировалось на Arduino IDE 1.0.1
#define pirPin 2
#define ledPin 13 void setup()
{
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin,OUTPUT);
} void loop()
{
  int pirVal = digitalRead(pirPin);   //Если обнаружили движение
  if(pirVal == HIGH)
  {
    digitalWrite(LedPin, HIGH);
    Serial.print(«Motion detected»);
    delay(2000);
  }
  else
  {
    Serial.print(«No motion»);
    digitalWrite(LedPin,LOW);
  }
}

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

//Тестировалось на Arduino IDE 1.0.1
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30; //Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn; //Пауза, после которой движение считается оконченным
long unsigned int pause = 5000;
//Флаг. false = значит движение уже обнаружено, true — уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime;
int pirPin = 2; //вывод подключения PIR датчика
int ledPin = 13; //вывод сигнального диода void setup()
{
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);   digitalWrite(pirPin, LOW);
  //дадим датчику время на калибровку
  Serial.print(«Calibrating»);
  for(int i = 0; i < calibrationTime; i++)   {     Serial.print(«.»);
    delay(1000);
  }
  Serial.println(» done»);
  Serial.println(«SENSOR ACTIVE»);
  delay(50);
} void loop()
{
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  {
    //Если еще не вывели информацию об обнаружении
    if(lockLow)
    {
      lockLow = false;       Serial.println(«Motion detected»);
      delay(50);
    }        
    takeLowTime = true;
  }   //Ели движения нет
  if(digitalRead(pirPin) == LOW)
  {      
    //Если время окончания движения еще не записано
    if(takeLowTime)
    {
      lowIn = millis(); //Сохраним время окончания движения
      takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено
    if(!lockLow && millis() — lowIn > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
      lockLow = true;       Serial.println(«Motion finished»);
      delay(50);
    }
  }
}

 

Сборка автоматического светильника

Как и обещали в начале статьи мы соберем автоматический включатель света. Для обнаружения нам потребуется датчик движения, а для включения лампы накаливания (мощного потребителя) используем реле модуль. Если в качестве источника света использовать светодиоды, то можно обойтись и без него.  

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

//Тестировалось на Arduino IDE 1.0.1
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30; //Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn; //Пауза, после которой движение считается оконченным
long unsigned int pause = 5000; //Флаг. false = значит движение уже обнаружено, true — уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime; int pirPin = 2; //вывод подключения PIR датчика
int ledPin = 13; //вывод сигнального диода
int relayPin = 4; //реле пин void setup()
{
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);   //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
  digitalWrite(relayPin, HIGH);
  delay(4000);
  digitalWrite(pirPin, LOW);   //дадим датчику время на калибровку
  for(int i = 0; i < calibrationTime; i++)   {     //Во время калибровки будет мигать сигнальный диод     i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);     delay(1000);   }   //По окончанию калибровки зажжем сигнальный диод   digitalWrite(ledPin, HIGH);   delay(50); } void loop()
{
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  {
    //Если до этого момента еще не включили реле
    if(lockLow)
    {
      lockLow = false;       //Включаем реле.
      //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
      digitalWrite(relayPin, LOW);
      delay(50);
    }        
    takeLowTime = true;
  }   //Ели движения нет
  if(digitalRead(pirPin) == LOW)
  {      
    //Если время окончания движения еще не записано
    if(takeLowTime)
    {
      lowIn = millis(); //Сохраним время окончания движения
      takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено
    if(!lockLow && millis() — lowIn > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
      lockLow = true;       digitalWrite(relayPin, HIGH);
      delay(50);
    }
  }
}

 Купить в России  PIR датчик

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник: http://zelectro.cc/PIR_sensor

Управление углом поворота сервопривода с помощью ультразвукового дальномера HC-SR04 и Arduino Sensorshield

Здравствуйте, дорогие читатели нашего сайта. Сегодня мы с вами узнаем как управлять углом поворота сервопривода с изменением расстояния от ультразвукового дальномера до предмета. Также мы рассмотрим альтернативное подключение элементов с помощью Arduino SensorShield .

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

Сегодня же мы более подробно рассмотрим Sensorshield и узнаем преимущества использования этого шилда.

Технические характеристики Arduino Sensorshield

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

Шилд можно использовать для подключения следующих устройств

  • SD card
  • 32 servo controller
  • RB URF для ультразвуковых датчиков
  • 12864 LCD последовательный и параллельный интерфейс
  • APC220 wireless RF
  • Bluetooth
  • I2C

Ниже приведена схематическая распиновка платы Sensorshield, она вам поможет понять, в какие пины вам необходимо соединить тот или иной датчик.

Необходимые компоненты для подключения

Для полноценной работы нашего мини-проекта, нам понадобятся следующие устройства:

Все эти элементы можно приобрести по низкой цене и с высоким качеством в интернет магазине SmartElements.

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

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

Схема подключения

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

Я надеюсь подключить устройства у вас получилось, а теперь перейдем к самому важному этапу — программированию Arduino.

Скетч для управления углом поворота сервопривода

#include
#define coef 5
#define min_zone 6
#define max_zone 44
#define Trig 5
#define Echo 6
#define servoPin 11
Servo myservo; void setup() {
pinMode (Trig, OUTPUT); //инициируем как выход
pinMode (Echo, INPUT); //инициируем как вход
myservo.attach (servoPin);
myservo.write (0);
}
unsigned int impulseTime=0;
unsigned int distance_sm=0; void loop() {
digitalWrite (Trig, HIGH); /* Подаем импульс на вход trig дальномера */
delayMicroseconds (10); // равный 10 микросекундам
digitalWrite (Trig, LOW); // Отключаем
impulseTime = pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm = impulseTime/58; // Пересчитываем в сантиметры
if (distance_sm >= min_zone && distance_sm = min_zone && distance_sm<\p>

Источник: http://helpduino.ru/podklychenie_servo_HC-SR04.html

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

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

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

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

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

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

Читайте также:  Arduino gps: подключение и использование neo-6m

Кроме того понадобятся светодиоды: зеленый и красный. Шнуры, резисторы и макет: для завершения соединений понадобится пучок проводов и макет. Также понадобятся два резистора на 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 кОм.

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

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

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

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

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

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

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

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

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

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

  1. Открыть Arduino IDE.
  2. В меню «Файл» открыть новый альбом.
  3. Скопировать следующий код Arduino в скетч и сохранить его:Кодint pirPin = 7; //Pin number for PIR sensor
    int redLedPin = 12; //Pin number for Red LED
    int greenLedPin = 13; //Pin number for Green LED
    void setup(){ Serial.begin(9600); pinMode(pirPin, INPUT); pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT);
    }
    void loop(){
    // Function which blinks LED at specified pin number
    void blinkLED(int pin, String message){ digitalWrite(pin,HIGH); Serial.println(message); delay(1000); digitalWrite(pin,LOW); d int pirVal = digitalRead(pirPin);
    if(pirVal == LOW){ //was motion detected blinkLED(greenLedPin, «No motion detected.»); } else { blinkLED(redLedPin, «Motion detected.»); }
    }
    elay(2000);
    }
  4. Компилировать и загрузить скетч на доску Arduino.

Как и любая другая программа Arduino, код имеет две обязательные функции: setup () и loop (). Он также имеет настраиваемую функцию blinkLED () для конкретного действия, которое будет объяснено позже.

Функция setup ()

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

pinMode(pirPin, INPUT);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);

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

Serial.begin(9600);

Функция loop ()

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

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

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

Function используются, когда сегмент кода повторно выполняется для выполнения того же действия. Пользователь может создать пользовательскую функцию для организации кода или выполнения повторяющихся действий.

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

return-type function_name (parameters){ # Action to be performed Action_1; Action_2; Return expression;
}

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

void blinkLED(int pin, String message){ digitalWrite(pin,HIGH); Serial.println(message); delay(1000); digitalWrite(pin,LOW); delay(2000);
}

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

blinkLED(greenLedPin, «No motion
detected.»);

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

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

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

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

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

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

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

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

#!/usr/bin/python
a = «Python»
b = «Programming»
printa + » «+ b

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

$ pythontest.py

Вы должны иметь возможность видеть текст PythonProgramming, напечатанный на терминале.

Как вы можете видеть, файл начинается с #! / Usr / bin / python, который является местом установки Python по умолчанию.

Добавив эту строку в свой код Python, вы можете напрямую выполнить файл Python с терминала. В операционных системах на основе Unix вам нужно сделать исполняемый файл test.py с помощью следующей команды:

$ chmod +xtest.py

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

$. / test.py

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

Заголовок спойлера# pir_1.py
# Импортировать требуемые библиотеки
import pyfirmata
from time import sleep
# Определить настраиваемую функцию для выполнения действия Blink
def blinkLED(pin, message): print (message) board.digital[pin].write(1) sleep(1) board.digital[pin].write(0) sleep(1)
# Связать порт и панель с pyFirmata port = 'COM3'
board = pyfirmata.Arduino(port)
# Используйте поток итератора, чтобы избежать переполнения буфера
it = pyfirmata.util.Iterator(board)
it.start()
# Define pins pirPin = board.get_pin('d:7:i')
print(pirPin)
redPin = 12
greenPin = 13
# Check for PIR sensor input
while True:
# Ignore case when receiving None value from pin value = pirPin.read() while value is None: pass print(value) if value is True:
# Perform Blink using custom function blinkLED(redPin, «Motion Detected») else: blinkLED(greenPin, «No motion Detected»)
# Выключить плату
board.exit()

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

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

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

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

board = pyfirmata.Arduino(port)

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

pirPin = board.get_pin('d:7:i')

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

Value = pirPin.read ()

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

board.digital[pin].write(1)

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

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

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

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

def function_name(parameters): action_1
action_2
return [expression]

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

defblinkLED(pin, message):
print message board.digital[pin].write(1) sleep(1) board.digital[pin].write(0)
sleep(1)

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

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

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

Выводы

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

Ссылки

Источник: http://www.pvsm.ru/python/263857

Ссылка на основную публикацию