Про датчик движения и подключение его к Arduino. Датчик движения ардуино Ir 08h датчик движения по линии ардуино

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

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

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

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

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

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

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

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.

Установка 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 = "[email protected]"
GMAIL_USER = "[email protected]"
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 == "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 без соединения с компьютером. В этом случае при срабатывании датчика можно включать предупреждающий звуковой сигнал, мигать светодиодом, или включать освещение в помещении (через высоковольтное реле).

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

Сенсор, в котором используется материал с такими свойствами, может реагировать на тепло, излучаемое телом человека. PIR-датчик (Pyroelectric InfraRed) имеет круговую диаграмму направленности (360°) с углом разворота 120°.

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

Зоны действия PIR-датчиков

В ассортименте изделий компании B.E.G. имеются датчики движения и присутствия различного исполнения и назначения:

  • для наружного применения;
  • для внутреннего применения;
  • для настенного монтажа;
  • для потолочного монтажа
  • датчики в дизайнерском исполнении.

Один из главных параметров ИК датчиков движения - зона действия. Потолочные датчики, обычно, имеют круговую зону охвата (360°). Настенные датчики движения PIR, в зависимости от модели, имеют зону действия от 120° до 280°.

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

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

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

У датчиков присутствия PIR компании B.E.G. высокая зона чувствительности, и они реагируют на самые незначительные движения. Чувствительность датчика регулируется.

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

Как правильно располагать PIR-датчики

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

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

Лестничные марши рассматриваются, как зоны повышенной опасности. Здесь должно быть исключено падение людей по причине недостаточной освещенности. На потолке или на стене лестничной площадки датчики движения ставят как настенные выключатели.

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

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

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

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

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

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

В подземном гараже необходимо обеспечить надежный контроль зон входа и основных проходов. Возможные «мертвые» зоны компенсируются временными задержками. Здесь используются только потолочные датчики.

Общие требования по установке PIR-датчиков

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

Зону действия датчиков не должны ограничивать деревья, мебель и перегородки (в том числе стеклянные). Оптимальная высота установки для потолочных датчиков - 2,5-3 метра, а настенных выключателей от 1,1 до 2,2 метров. Датчики для высоких потолков размещают на высоте до 16 метров.

Ассортимент PIR-датчиков широк. Они отличаются назначением, техническими параметрами и конструкцией. Чтобы применить их с максимальной эффективностью на конкретном объекте, лучше воспользоваться услугами профессионалов.

В компанию B.E.G. Наши специалисты дадут все необходимые консультации. И на наш блог, чтобы не пропускать полезные материалы о датчиках движения и присутствия.

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

Урок подойдет начинающим, но будет интересен и более опытным инженерам.

Шаг 1: Необходимые детали

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

1 x Плата Arduino (мы использовали Arduino Uno)
1 x Светодиод (LED, цвет не имеет значения)
1 x Резистор/сопротивление 220 Ом
1 x Макетная плата
1 x USB-кабель Arduino
1 x Батарейка 9 В с зажимом (опционально)
6 x Проводов

Шаг 2: Позиционирование деталей

Сначала подключите ультразвуковой датчик и светодиод на макетной плате. Подключите короткий кабель светодиода (катод) к контакту GND (земля) датчика. Затем установите резистор в том же ряду, что и более длинный провод светодиода (анод), чтобы они были соединены.

Шаг 3: Подключение частей

Теперь вам нужно подключить несколько проводов на задней панели датчика. Есть четыре контакта - VCC, TRIG, ECHO и GND. После вставки проводов вам необходимо выполнить следующие подключения:

Конец резистора на цифровой вывод по вашему выбору, просто не забудьте изменить его позже в коде.

Датчик -> Arduino
VCC -> 5V (питание)
TRIG -> 5*
ECHO -> 4*
GND -> GND (земля)

* - может быть подключен к любым двум цифровым выводам Arduino, просто убедитесь, что вы изменили их в коде позже.

Шаг 4: Загрузка кода

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

Const int ledPin = 6; // Цифровой выход светодиода const int trigPin = 5; // Цифровой выход для подключения TRIG const int echoPin = 4; // Цифровой выход для подключения ECHO const int ledOnTime = 1000; // Время, в течение которого светодиод остается включенным, после обнаружения движения (в миллисекундах, 1000 мс = 1 с) const int trigDistance = 20; // Расстояние (и меньшее значение) при котором срабатывает датчик (в сантиметрах) int duration; int distance; void setup() { pinMode(ledPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(trigPin, LOW); digitalWrite(trigPin, HIGH); delay(1); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; if (distance <= trigDistance) { digitalWrite(ledPin, HIGH); delay(ledOnTime); digitalWrite(ledPin, LOW); } delay(100); }

Шаг 5: Конечный результат (видео)

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

Всем хороших проектов!

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 вольт;

>Для заказа с 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; // переменная для чтения состояния пина

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

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

Serial.begin(9600);

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

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

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

if (pirState == LOW) {

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

Serial.println("Motion detected!");

pirState = HIGH;

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

if (pirState == HIGH){

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

Serial.println("Motion ended!");

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

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

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

Примерно такие:


Реагируют они на изменение излучения в инфракрасном диапазоне, а именно в средней его части - 5-15 мкм (тело среднего здорового человека излучает в диапазоне около 9 мкм). С точки зрения конечного потребителя штука очень простая - вход питания (чаще 12 вольт) и выход реле (обычно твердотельное и с нормально замкнутыми контактами). Прокрался кто-нибудь тепленький мимо - реле сработало. Скукота. Но внутри все не так просто.
Сегодня мы немного времени посвятим теории, а затем распотрошим один такой девайс и сделаем из него не просто датчик, реагирующий на факт движения, но регистрирующий направление движения.

Переходим к практическим упражнениям

Вооружившись теоретическими сведениями достанем паяльник. На фото показан разобранный датчик (снята передняя крышка с линзами Френеля и металлический экран).


Смотрим маркировку ближайшей к пироэлектрическому сенсору (круглый металлический с окошечком - это он и есть) микросхемы и (о, удача!) ею оказывается LM324 - счетверенный ОУ. Путем рассматривания окружающих элементов находим вывод ОУ, наиболее вероятно подходящий для наших целей (в моем случае это оказался вывод 1 микросхемы). Теперь неплохо бы проверить, а то ли мы нашли. Обычно для этого используют осциллограф. У меня под рукой его не оказалось. Зато оказался ардуино. Поскольку уровень сигнала после усиления составляет порядка единиц вольт, и особой точности замеров нам не нужно (достаточно качественной оценки), то входы АЦП ардуино вполне подойдут. К найденному выводу ОУ и минусу питания паяем проводки и выводим на макетку. Провода не должны быть длинными. В противном случае есть шанс померить не сигнал датчика, а что-нибудь совершенно другое.
Теперь подумаем насколько быстро нужно считывать сигнал, чтобы получить что-то вменяемое. Выше было сказано, что частотный диапазон полезного сигнала ограничен величиной примерно 10 Гц. Вспоминая теорему Котельникова (или Найквиста - кому что больше нравится), можно сделать вывод, что замерять сигнал с частотой выше 20 Гц смысла нет. Т.е. период дискретизации в 50 мс вполне подойдет. Пишем простой скетч, который каждые 50 мс читает порт А1 и вываливает его значение в сериал (строго говоря, измерения сигнала происходят реже, чем через 50 мс, поскольку на запись в порт тоже нужно время, однако для наших целей это не важно).

Unsigned long time; void setup() { Serial.begin(9600); pinMode(A1, INPUT); time=millis(); } void loop() { if ((millis()-time) >= 50) { Serial.println(analogRead(A1)); } time=millis(); }

Включаем и машем перед датчиком руками (можно побегать, даже полезнее). На стороне компьютера данные с порта вываливаем в файл.
stty -F /dev/ttyUSB0 raw ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo cat /dev/ttyUSB0 > output.txt
Строим график (в файл добавлен столбец с нумерацией отсчетов):
gnuplot> plot "output.txt" using 1:2 with lines


И видим то, что, собственно, и хотели - разнополярные всплески напряжения. Ура, теория работает и провод припаян куда надо. А простой анализ (проще говоря - рассматривание) графика позволяет сделать вывод, что более или менее надежной фиксацией факта наличия движения можно считать отклонение сигнала на 150 единиц от среднего значения.
Настало время сделать, наконец, датчик направления движения.
Модифицируем схему. Помимо аналогового сигнала сенсора подключим к ардуино пару светодиодов (порты 2 и 3, не забудьте токоограничительные резисторы) и напишем чуток более сложный скетч.

Развернуть

int a1; int state2=0; long average=0; int n=0; unsigned long time; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(A1, INPUT); digitalWrite(2, LOW); digitalWrite(3, LOW); delay (30000); //мой датчик после включения //до начала работы тупит 30 сек. time=millis(); //тысячу раз делаем замер сигнала для //вычисления его среднего значения //чтобы было от чего отсчитывать отклонения while (n <= 1000) { ++n; a1=analogRead(A1); average=average+a1; delay(50); } average=average/1000; //одновременным включением светодиодов //сигнализируем, что система готова digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(1000); digitalWrite(2, LOW); digitalWrite(3, LOW); time=millis(); } void loop() { //опрашиваем датчик каждые 50 мс if ((millis()-time) >= 50) { //этим простым выражением аналаговый сигнал //превращаем в дискретный со значениями -1/0/1 a1=(analogRead(A1)-average)/150; //если было изменение полярности сигнала, то //включаем нужный светодиод switch (a1) { case 1: if (state2=-1) {digitalWrite(2, HIGH);digitalWrite(3, LOW);} state2=a1; break; case -1: if (state2=1) {digitalWrite(2, LOW);digitalWrite(3, HIGH);} state2=a1; break; } //повторяем сначала time=millis(); } }


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


Наслаждаемся результатом.

Теги:

  • PIR
  • датчик движения
  • arduino
Добавить метки