Самодельный PIR (ПИК) извещатель из Arduino

в 20:57, , рубрики: arduino, DIY, diy или сделай сам, PIR, Железо, Программинг микроконтроллеров, метки: , ,
Немного теории

Для начала предлагаю вам совершить небольшой экскурс по теории. Что же такое ПИК? Расшифровывается как «Пассивный инфракрасный извещатель». Он же — датчик движения. Наверно, самым первым вопросом будет: «почему пассивный?». Никакого отношения к лени или сексуальной ориентации этот термин не имеет. «Пассивными» называются датчики, которые сами ничего не излучают, то есть работают исключительно с окружающей их средой. Кстати, понятие «датчик» в случае, если речь идет о всем приборе — не верно. Прибор именуется извещателем, а датчик это — одна из его составных частей, чувствительный элемент.
Сердцевиной чувствительного элемента является пироэлектрик. Данное кристаллическое вещество обладает замечательным свойством — при повышении температуры он поляризуется и появляется электрическое поле. Сигнал монотонно зависит от величины ИК излучения. Итак, думаю пока что с теорией закончим. Пора перейти к делу.

Собираем извещатель

Для работы нам понадобится любая отладочная плата с микроконтроллером. Конкретно я использовал Arduino. Теперь, остается только раздобыть сам чувствительный элемент. В мои руки попал вот такой:

image

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

Конкретно мой прибор обладает следующими характеристиками:
Угол обзора: 100 градусов
Дальность: 7 метров
Напряжение питания: 4.5 — 20В

На плате расположен трехконтактный разъем ( PLS вилка ):
"+" — питание. В нашем случае 5В от платы Arduino
«OUT» — выходной сигнал( 3В — Тревога, 0 — Все спокойно). Подключаем к разъему A0
"-" — общий провод (GND)

Для проверки сенсора я придумал простенький алгоритм. Как-только он «сработает» — загорится светодиод, а из динамика прозвучит сигнал тревоги. Тут я совсем забыл упомянуть, что вам понадобится какой-нибудь динамик, желательно высокоомный, так как большого тока от микроконтроллера не получить. Конкретно я использовал динамик от старого советского телефона. Впрочем, можно обойтись и одним светодиодом. В данном случае это повлияет лишь на зрелищность.

Программирование

Настало время написать простенький скетч:

#define PIR 14
#define LED 13
#define PING 2
#define GND 3

void setup()
{
Serial.begin(9600);
pinMode(PIR,INPUT);
pinMode(LED,OUTPUT);
pinMode(PING,OUTPUT);
pinMode(GND,OUTPUT);
digitalWrite(GND,LOW);
}

void loop()
{
if(analogRead(PIR)>=500)
{
digitalWrite(LED,HIGH);
ping(500);
}
else
digitalWrite(LED,LOW);
}

void ping(unsigned int freq)
{
long t = 500000/freq;
digitalWrite(PING,HIGH);
delayMicroseconds(t);
digitalWrite(PING,LOW);
delayMicroseconds(t);
}

Немного пробежимся по коду, что бы понять суть происходящего:
PIR — сюда подключаем контакт «OUT» сенсора
LED — светодиод на плате Arduino. Его мы и будем включать во время тревоги
PING — порт для динамика.
GND — второй провод динамика. Можно было бы просто «посадить» на землю. Я так поступил чисто из соображений удобства, что бы оба провода были рядом.

Далее, как вы уже, наверно, поняли — выходной сигнал с сенсора поступаем на аналоговый порт Arduino. Там он оцифровывается и если сигнал превышает значение 500 (~ 2.5В), это сигнализирует о факте тревоги. На самом деле можно подключить сенсор к любому цифровому порту и ждать логической единицы. Этот шаг был сделан что бы повысить надежность ( если уровень сигнала с сенсора меньше 3 вольт, нестабильный, или еще что). 3 вольта — достаточно близко к границе между нулем и единицей TTL — логики, потому и перестраховался.
Итак, если сенсор сообщает о тревоге, то включаем светодиод и сигналим динамиком. Функция ping() генерирует прямоугольные колебания на динамике. Частота выбирается по вкусу.

А теперь видео с результатом:

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

Автор: .

Поделиться

* - обязательные к заполнению поля