Пользователь
0,0
рейтинг
26 января 2013 в 18:34

Теория и практика пассивных пироэлектрических датчиков или как сделать индикатор направления движения


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

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



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


Немного теории


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

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

О линзах подробнее чуть позже.
Прямо рядом с кристаллами внутри корпуса (дабы не растерять в «дальней дороге» измеряемую величину) размещают полевой транзистор, сток и исток которого уже выведены наружу. Транзистор полевой неспроста. Этот прибор, как известно, управляется электрическим зарядом, изменение которого на кристалле мы, собственно, и измеряем. Биполярный транзистор здесь совершенно бы не подошел, как прибор управляемый током, которого пироэлектрик выдать не в состоянии. Резистор нужен для стекания паразитных статических зарядов, хотя несколько ухудшает чувствительность прибора.
Теперь о линзах. Без линз датчик имеет очень широкую диаграмму направленности — 100-120° по вертикали и горизонтали. При этом (условно) одну половину пространства «видит» один кристалл, вторую — другой. Т.е. получается этакий конус, рассеченный плоскостью, направление которой зависит от взаимного расположения кристаллов. Обычно эта плоскость вертикальна. При помощи линзы из двух получившихся полуконусов формируется два относительно узких «луча» диаграммы направленности. Это повышает чувствительность датчика по расстоянию и снижает паразитные шумы. Однако узость диаграммы приводит к возможности нарушителю легко обойти чувствительные зоны. Чтобы этого не случилось линз делают несколько (это как раз видно на фото выше) и, соответственно, формируют несколько пар лучей. Их вид и число зависят от области применения датчика. Скажем для коридоров нужно «видеть» узко, но далеко. Для квадратного помещения — близко и широко. Где-то нужно защитить зону под датчиком, где-то над ним и т. п. Но это все не принципиально, поэтому сосредоточимся на одной паре лучей, которую пересекает движущийся теплый объект.

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

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

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

Слабый сигнал сенсора усиливается и подается на пару компараторов, один из которых фиксирует превышение заданной амплитуды положительным импульсом, второй — отрицательным. Уже дискретный сигнал с компараторов отправляется на исполнительное устройство. В качестве последнего обычно выступает ждущий мультивибратор, который на некоторое фиксированное время включает реле, а то уже размыкает/замыкает охранный шлейф. В более продвинутых датчиках вместо компараторов могут быть более сложные схемы, обеспечивающие защиту от ложных срабатываний, резких колебаний параметров окружающей среды, срабатываний от движения мелких животных, дополнительную реакцию на пожар и т. п. В самых современных датчиках все это делается не аналоговыми схемами, а DSP.
Однако для достижения поставленной цели нас будет интересовать только то, что до компаратора. Т.е. усилительная часть, а конкретнее — выход уже усиленного сигнала пироэлектрического сенсора. Для того, чтобы можно было найти это место в разбираемом датчике, посмотрим что именно нужно искать. А искать нужно в первую очередь микросхемы операционных усилителей (ОУ), расположенных недалеко от сенсора.
Типовая схема усилителя выглядит приблизительно так (нарисовано приблизительно, поскольку вариаций конкретных исполнений не счесть):

В данном случае первый каскад представляет собой неинвертирующий усилитель, второй инвертирующий. Коэффициенты усиления каждого из них порядка десятков тысяч, а обоих порядка сотен тысяч. Но главный «секрет» в том, что обратные связи ОУ содержат элементы (а именно конденсаторы), делающие эти связи зависимыми от частоты. Номиналы элементов таковы, что вблизи нулевой частоты (постоянный ток) общий коэффициент усиления стремится к нулю, около частоты 5 герц находится максимум усиления, а при частотах более 10 герц снова стремится к нулю. Такая частотная характеристика не случайна. Размер области, которую захватывает наша пара лучей, порядка 0,5-1 метра. Скорость движения человека порядка 1-3 м/с. Соответственно частота пересечения чувствительных зон составит как раз единицы герц. А сигналы лежащие вне этого диапазона можно считать паразитными. В том числе и дрейф постоянной составляющей сигнала. Т.е. в потрохах датчика нужно искать нечто подобное выходу второго каскада усиления.

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


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

Смотрим маркировку ближайшей к пироэлектрическому сенсору (круглый металлический с окошечком — это он и есть) микросхемы и (о, удача!) ею оказывается 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();
 
}
}


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

Наслаждаемся результатом.
@murzin
карма
27,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (32)

  • 0
    Вы наверянка делали всё это не из праздного любопытства, а наверное хотите использовать в каком-то устройстве?
    Очень интересно где именно вы будете это применять.
    • +1
      Да, конечно, началось не с пустого места. Есть задумка использовать датчик в этом проекте.
      Оконный менеджер (dwm в том случае) имеет несколько рабочих столов и захотелось перелистывать их движением руки. Первоначально думал использовать два датчика, но изучение принципов их работы позволило обойтись одним.
      Но это не единственное применение. Можно, например, подсчитывать число входящих/выходящих, интеллектуально управлять освещением и пр.
      • 0
        подсчитывать число входящих/выходящих

        Уже давно существует такое оборудование. У них есть общая беда, если проходит 2-3 человека вместе, то считаются как 1.
        Поэтому при больших потоках подсчет ведется с большой погрешностью. Я видел такие системы с погрешностью до 60%.
        • +1
          Все намного проще, чем кажется… У нас погрешность для транспорта заявленная не больше 10%, но на практике крутится около 1-2%. (http://npp-alion.ru/products/passenger-sensor/) Сейчас налаживаем массовое производство — затем кое-какие секреты, думаю, раскроем на хабре. У нас решены такие проблемы как:
          1) Одновременный проход нескольких пассажиров
          2) Возврат пассажира непосредственно под датчиком (тогда он не учитывается)
          3) Без разницы как именно проходит человек: полностью стоя, согнувшись, в шляпе или с пышной прической и т.д. и т.п.
          Интересно наблюдать как мысли потихоньку добираются и добираются к сути нашего патента:))
          • +1
            Будем ждать с нетерпением ваших секретов :)
            А если "… все намного проще, чем кажется...", это доставит ещё большее удовольствие. Когда задача в начале кажется нетривиальной (я не про свою тему, я вообще) и через разные тернии, громоздкие и глючные решения приходишь к ясному, простому и надежному, то не это ли триумф инженерной мысли и всё такое :)
          • 0
            В качестве поддержания дискуссии мысли в слух.
            Как уже говорилось, характерные частоты сигнала PIR-а порядка единиц герц. Но это лишь часть всего спектра (основная по энергии, но все же часть). Форма сигнала в мелких деталях (и соотв. часть спектра сигнала в более высоких частотах), по всей видимости, существенно зависят от характеристик обнаруживаемого объекта и параметров его движения. Если несколько расширить полосу усиления и применить методы цифровой обработки сигнала, то, вероятно, можно сделать какие-то выводы. Правда на этом пути мне видится немало сложностей. В частности на частотах заметно более 10 Гц пироэлектрик с точки зрения электрической цепи становится скорее источником тока, чем напряжения. Т.е. усилитель надо менять на усилитель тока. Кроме того к спектру сигнала примешиваются всякие шумы. Я уж не говорю про разнообразие шляп и причесок.
  • 0
    Супер, очень полезно! У самого лежат два парадоксовских датчика — все руки не доходили распотрошить, но задумка такая была. Пойду посмотрю на свои датчики.
    • 0
      Вскрыл свой (беспроводной модуль Paradox):
      Внутренности

      Сразу смог идентифицировать выходы с соответствующих ОУ (в моем случае это оказалось еще проще — под белой наклейкой находится явно микроконтроллер, скорее всего, какой-то PIC… и два выхода ОУ как раз заведены на него).

      Вопрос, для чего в моем датчике два PIR? Не подскажете?
      • +1
        Первое, что приходит в голову — для создания очень широкой зоны охраны.
        • 0
          Да, возможно. Линзы для каждого датчика имеют свою конфигурацию, что поддерживает догадку.

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

          Еще обнаружен регулировочный винт (на фото он виден под левым PIR), я рядом с ним — крайние отметки в 1.1м и 3.1м, видимо, для какой-то более точной регулировки.

          Правда, при установке такую регулировку не проводили: просто выбрали удобное место в углу у потолка и направили датчик «по диагонали» через всю комнату.
      • 0
        avstepanov предположил, что от ложных срабатываний.
        То же самое однажды консультант на выставке говорил.
        Подлетает, скажем воробей и попадает в поле действия только одного элемента.
    • 0
      Топик отлично промотивировал все-таки глянуть, что внутри датчика.

      Внутри моего уживается два PIR (зачем — пока непонятно, но или кто-нибудь подскажет, или сам разберусь), с соответствующих выходов ОУ сигналы идут на входы МК, а с выходов МК идут на светодиод индикации и RF2516 — передатчик (со всей уже готовой обвязкой!!!). Дополнительно еще есть джампер, сигнализирующий о вскрытии.

      Передатчик работает с OOK, о чем я писал у себя в статье.

      Реально бесполезный (ранее) датчик (остался от достаточно экзотического охранного комплекса), похоже, обретает новую жизнь — достаточно удалить с платы штатный МК, воткнуть вместо него какую-нибудь младшую атмегу с минимальным обвесом и готово!!!

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

      Еще раз спасибо за то, что заставили думать и «двигаться»! (жаль, не могу проголосовать)
      • 0
        Вам спасибо. Пожалуй это самая большая награда за текст, когда он дает еще кому-то импульс для творчества.
  • 0
    при закрытии шаблоном остальных линз, сильно ли уменьшилась чувствительность? на каком максимальном расстоянии срабатывает?
    • 0
      Чувствительность не уменьшается. Изменяется геометрия зоны, которую датчик «видит». Изначально он чувствует объект в довольно широком секторе, а с одной линзой только перед собой. Дальность должна сохранятся такой, какой была изначально. Для этого датчика по паспорту — 10 м. Правда так далеко я не проверял, но на 5 м работает точно. Вообще без линзы уже дальше 1 м срабатывает нечетко.
      В эксперименте экран был сделан для того, чтобы получить только одну пару разнополярных импульсов и упростить алгоритм. Когда линз много, то и пар импульсов много и такой простой программой уже бы не удалось обойтись.
  • +1
    «Пиро» — это если что-то горит или взрывается. PIR (пассивный инфракрасный сенсор) к пиро (pyro) технике отношения не имеет. Разница примерно такая же, как между «атакой клонов» и «атакой клоунов». Не надо вводить людей в заблуждние такими заголовками.
    • +5
      В датчике используется в качестве чувствительного элемента пироэлектрик, поэтому датчик пироэлектрический, а название действительно происходит от греческого — пиро (огонь). И он пассивный (ничего не излучает). Поэтому название в заголовке на мой взгляд вполне корректно. Аббревиатура PIR действительно обычно означает passive infrared, хотя в англоязычной литературе я встречал и pyroelectric infrared.
  • 0
    Классный сенсор. Провел рукой в одну сторону — свет включился, в другую — выключился. А на руку он активнее реагирует, чем на человека вдалеке?
    • +1
      В данном случае примерно одинаково, с той лишь разницей, что рядом с датчиком достаточно чуть махнуть рукой, а на удалении нужно сделать шаг в сторону. Т.е. чем дальше, тем больше должно быть линейное перемещение объекта.
      Вообще в плане формирования нужной чувствительности и диаграммы направленности тут большое поле для эксперимента. Линзы можно открывать и закрывать, применять частично поглощающие экраны (типа полиэтиленовой пленки), менять алгоритм обработки.
      • 0
        И сила импульса на выходе одинакова? Приглушить бы его так, чтобы на человека не действовал.
        • 0
          С удалением объекта амплитуда выходного сигнала падает, но выбранные параметры детектирования все равно позволяют его зафиксировать. Приглушить несложно — либо путем установки экранов из разных полупрозрачных (для IR-диапазона) материалов (тут сложно предсказать эффект, надо экспериментировать), либо изменением усиления. Или применять более сложные алгоритмы анализа.
  • 0
    Присоединяюсь к тем кто уже полазил по закромам. Автор, заразный топик у Вас. В хорошем смысле этих слов 8)
    Достал старенькие объемные датчики из бывшей ахтубы. На них гравировка «АОЗТ РИЭЛТА. Извещатель охранный ФОТОН-СК», снял плату, но с другой ее стороны металлический экран, закрывающий все микросхемы. Кто-нибудь в курсе что у них внутри? Не хочется распаивать зазря. Спасибо.
    • 0
      «Зазря» — это когда он будет продолжать лежать в закромах и пылиться.
  • 0
    Я так понимаю, на рис. 7 указана схема по сути такого же устройства, выдающего импульсы в зависимости от отклонения сигнала, только на операциоониках без контроллера? один ОУ выдает импульс при одном направлении движения, другой — при обратном?
    • 0
      На рис. 6 изображена структурная схема типового датчика, где большим треугольником показан аналоговый усилитель. Вот этот усилитель и «расшифрован» на рис. 7. Усиливает он весь сигнал целиком (и положительный и отрицательный выброс). Первый ОУ в 10 тыс. раз (ориентировочно), второй еще в 10 тыс. раз. Эта аналоговая часть присутствует всегда (возможно со схемотехническими вариациями), а уже после нее может быть или простой компаратор или продвинутый DSP…
  • 0
    А как определится направление движения если человек будет холоднее фона?
    Например зашел в одежде с улицы.
    • 0
      На практике не проверял, достоверно сказать не могу. Но размышления о физике процесса меня приводят к выводу, что направление передвижения холодного предмета будет казаться обратным. Надо будет достать что-нибудь из холодильника и помахать перед датчиком.
      Хм, а ведь это еще один способ применения — сортировать теплые и холодные предметы, движущиеся в одном направлении :)
      • 0
        Еще может возникнуть ситуация равного излучения от фона и предмета, которым махают.
        • 0
          Да, безусловно. Но тут, как и в любой системе, всё работает нормально только в рамках определенных условий. Любой способ измерения чего-либо не универсален. Кстати именно про возможность «слиться с фоном» (теоретически по крайней мере) я встречал упоминания в литературе. Как меру против этого указывали использование комбинированных датчиков (PIR+микроволновый, например).
  • +1
    Интересно, а если слегка изменить схему усилителя и прикрутить механическую развертку, не получится сделать что-то типа простенького тепловизора?
    • +1
      Мысль интересная. Хотя, на мой взгляд, тут есть как минимум две немалые сложности.
      Пироэлектрик совершенно не пригоден для измерения абсолютного значения температуры. Он реагирует на изменение (изменяется напряженность поля) и довольно быстро приходит в состояние равновесия (налипают заряженные частицы, находящиеся вокруг). Соответственно сканируя пространство получать мы будем некий сигнал, зависящий от изменения температуры вдоль поверхности объекта, от предыдущего состояния сенсора, от состояния окружающей среды. Потом придется делать какую-то математическую реконструкцию. Причем знать при этом физические характеристики пироэлектрика (какое-нибудь время прихода в равновесие или еще чего). Хотя возможно, что эти характеристики можно и вычислить путем замеров на какой-нибудь образцовой мишени, например.
      Вторая сложность — оптическая система. Родная очень грубая. Пятно сканирования должно быть хотя бы на порядок меньше объекта. А у обычных датчиков оно сравнимо с размерами объекта.
      Но все-таки мне кажется, что в теории нечто подобное возможно.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.