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

Они не только удобные помощники, но и средства экономии электроэнергии: датчики включают свет при входе в помещение и выключают при выходе.


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


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


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


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


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


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

Устройство датчика движения

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

В разобранном виде датчик движения LX-02 выглядит вот так:

Вид плат со стороны деталей

Вид с обратной стороны (со стороны пайки деталей):

Вид плат датчика движения со стороны пайки

В устройстве применяются основные детали:

  • микросхема – LM324, это четыре операционных усилителя в одном корпусе. Даташит можно скачать здесь: • LM324,224,2902 Operational Amplifiers.pdf / , pdf, 134.11 kB, скачан: 3855 раз./
  • датчик движения – PIR D203S или 1VY7015
  • транзистор типа S9013 – биполярный средней мощности. Даташит можно скачать здесь: • S9013 / , pdf, 62.29 kB, скачан: 2024 раз./
  • реле SHD-24VDC-F-A.

Со стороны ключа микросхемы – регулировка освещенности, рядом – регулировка времени включения.

Сделай сам

Сегодня предлагается масса готовых PIR-блоков промышленного производства. Но почему бы не попробовать его собрать самостоятельно? Дееспособный модуль для включения света можно сделать своими руками, главное обладать базовыми навыками чтения электросхем и пайки. Хоть обычно используемые мастерами схемы и не предполагают присутствия большого количества дорогостоящих деталей, однако времени на сборку придётся потратить немало.

Сборка датчика

Итака, для приведённой выше схемы вам понадобятся: В1 — сам PIR-сенсор, VТ 1 — полевой транзистор, VD 1 – фотодиод, VD 2,VD 3- диоды, VD 4, VD 6 – диодные мосты, VD 5– стабилитрон, Т 1 – трансформатор, DA1- таймер параллельного стабилизатора, DA2 – таймер аналоговый, DA3- линейный регулятор, VU1 – оптопара, FU1 – предохранитель, R1 — R11 — резисторы, C1 — C4 – конденсаторы, HL1 – светодиод.

Конечный результат должен выглядеть следующим образом. Прибор получается достаточно компактным – 15,0× 6,0× 9,0 см. При условии настройки — он может улавливать передвижения теплокровных объектов на расстоянии 1-12 метров от сенсора. И потребляет при этом ничтожные 5 ватт.

Конечный результат

К такой системе можно подсоединять как лампы накаливания, так и энергосберегающие. Однако не следует превышать максимальный порог нагрузок мощности, равный 1000 Вт. К счастью, вовсе необязательно корпеть над платами, ведь купить такие модули – не проблема. На сайтах продукции (производства КНР) вы найдёте массу предложений готовых PIR-схем, стартующих от 70 рублей. Их можно подключать напрямую к имеющейся системе освещения.

Схемы датчиков движения

Схема датчика выглядит примерно так.

Схема датчика движения LX-02 и аналогов

Вот ещё подобная схема, но более простая. Это схема охранного датчика. Выражаю благодарность источнику – www.guarda.ru.

Датчик движения. Схема 2

В различных моделях датчика схема может незначительно изменяться, но принцип работы один. Коротко его можно описать так.

Сигнал с пиродатчика (чаще всего применяется 1vy7015) поступает на усилитель, далее работает компаратор, с выхода которого сигнал через транзистор идет на катушку реле. Реле своими контактами включает-выключает нагрузку.

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

Третья схема приведена в конце статьи.

Датчик дви-я для включения света своими руками: 3 элемента

Самодельный ДД проще сделать с инфракрасным или ультразвуковым сенсором. Такое устройство состоит из передатчика, приемника и блока питания. Блок питания берется любой на 12 В. Передатчик собирается по микросхеме NE 555, а передающий элемент — это диод LD 274 с углом обзора 10°.

В роли чувствительного элемента приемника выступает фототранзистор BPW40 и управляет всем реле BS-115C. При монтаже нужно учесть, что угол обзора фототранзистора составляет 20°. При такой сборке расстояние между передатчиком и приемником составит 5 метров.

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

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

У меня такое было, когда в инструкции были указаны одни цвета проводов, а реально – другие.

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

Выводы для подключения датчика движения и датчика освещения

Схема подключения датчика движения и освещенности.

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

Как подключить датчик движения, показано также на схеме в инструкции (ниже).

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

Цвет выводов для подключения датчика LX:

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

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

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

Как подключить ДД через выключатель: 3 разновидности устройств

Разновидность 1 — обычный выключатель

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

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

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

Еще важно знать 3 рекомендации по монтажу

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

Разновидность 2 — ДД с плавным включением и выключением освещения

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

Разновидность 3 — автоматический выключатель света с ДД

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

Инструкция к датчику движения

Поскольку в данной статье рассмотрена модель LX-02 (SEN15), инструкция на этот датчик приведена ниже.

Инструкция к датчику движения LX-02

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

Кстати, у меня есть ещё несколько статей касательно этой темы:

  • Описание, применение и параметры
  • Установка уличных датчиков на больших площадях
  • Различные расширенные схемы включения
  • Светодиодный светильник

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

Комплексное применение

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

  • Улавливающие оптические волны (изменение освещения).
  • Звуковые — во время перемещения все объекты производят слышимые ухом колебания воздуха.
  • Эхолоцирующие — это когда оборудование создает направленный волновой импульс (невидимый глазами людей) и принимает отраженный от объектов сигнал на сенсоры. По его изменению и делается вывод о перемещениях чего-либо в контролируемом поле.

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

Ещё одна схема датчика

Читатель Александр из г. Королев в декабре 2014 г. прислал ещё одну схему датчика движения, которую срисовал с платы собственноручно. Фото также прилагается.

Схема датчика движения 3

А вот осциллограммы, поясняющие работу схемы:

Осциллограмма 1 работы схемы датчика

Осциллограмма 2 работы датчика движения

Плата датчика движения. Модель платы – 94vo-d

Александр, спасибо! Успехов в работе!

Код передатчика ИК сигнала

Будем использовать таймеры для формирования пачек импульсов с выводом сигнала на конкретный пин. Таким образом, ядро МК только инициализирует эти таймеры, а дальше может заниматься какой-нибудь другой работой.

Выбор пина должен быть обоснован. Необходимо выбирать такой пин, к которому может быть подключен какой-либо канал (кроме четвертого) любого General-purpose таймера. В нашем случае выбран пин PB6, к нему подключается первый канал TIM4. Приемник же будет подключен к пину PB7, второй канал TIM4.

Будем использовать два таймера: TIM4 будет генерировать меандр с частотой 56 кГц, TIM2 будет управлять таймером TIM4, т.е. создавать пачки из меандра. TIM2 будет работать в режиме Master, TIM4 – Slave. Почему именно таймер TIM2? Он выбран исходя из таблицы даташита подключений таймеров друг к другу.

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

#include «main.h» void Timer_Init_Transmitter(void); int main(void) { RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6; // MSI 4.194 MHz enable Timer_Init_Transmitter(); while(1) { } } void Timer_Init_Transmitter(void) { }

RCC->ICSCR |= RCCICSCRMSIRANGE_6 — эта строчка просто устанавливает частоту 4.194 МГц МК. У вас может быть любая другая частота.

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

Подробнее про включение тактирования

В даташите находим регистр RCC_AHBENR. Нужно прописать «1» в поле GPIOBEN.

Для этого выбираем в библиотеке CMSIS строчку RCC_AHBENR_GPIOBEN, которая ставит данный бит в единицу.

И изменяем регистр AHBENR следующим образом:

RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //GPIO port B clock enable

Подробнее про включение альтернативной функции

В даташите находим регистр GPIOx_MODER. Нужно прописать «10» в поле MODER6 (для пина PB6).

Для этого выбираем в библиотеке CMSIS строчку GPIO_MODER_MODER6_1, которая ставит второй бит в единицу.

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

И изменяем регистр MODER следующим образом:

GPIOB->MODER |= GPIO_MODER_MODER6_1; //Alternative function mode enable

Включение высокой скорости для пина делается аналогично включению альтернативной функции.

Подробнее про выбор альтернативной функции

Обозначение альтернативных функций представлено на картинке ниже.

Нам нужна альтернативная функция для TIM4 – это AF2.

Стоит отметить, что существует два регистра для выбора альтернативных функций: нижний GPIOx_AFRL для пинов с номерами от 0 до 7 и верхний GPIOx_AFRH для пинов с номерами от 8 до 15. Однако, в библиотеке CMSIS определен сдвоенный регистр AFR[2], прописав в скобки «0», мы выбираем нижний регистр, прописав «1», выбираем верхний регистр.

В даташите находим регистр GPIOx_AFRL.

Нам нужно прописать «0010» в поле AFRL6, для этого нам нужно число в шестнадцатеричной форме 0x2000000, «2» седьмая справа для пина PB6, потому что первые шесть цифр для пинов с номерами от 0 до 5.

И изменяем регистр AFRL следующим образом:

GPIOB->AFR[0] |= 0x2000000; //Pin PB6 TIM4 alternative function AF2 enable

Получили следующий код для настройки пина внутри нашей функции:

void Timer_Init_Transmitter (void) { //Settings for GPIO PB6 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER6_1; //Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1; //High speed GPIOB->AFR[0] |= 0x2000000; //Pin PB6 TIM4 alternative function AF2 enable }

Теперь перейдем к настройке TIM4.

Нам нужно выбрать прескейлер PSC (делитель частоты), рассчитать значения для регистров CCR1 (длительность импульса) и ARR (период импульсов), выбрать режим работы таймера ШИМ, выбрать входной управляющий сигнал от таймера TIM2, выбрать режим для Slave и подать выходной сигнал таймера на пин PB6.

Включение тактирования осуществляется аналогично включению тактирования GPIO.

Подробнее про выбор прескейлера PSC и расчет CCR1 и ARR

Выберем значение преселлектора входной частоты равное 0, в этом случае частота тактирования таймера будет равна частоте МК.

И изменяем регистр PSC следующим образом:

TIM4->PSC = 0; //Prescaler value

Перейдем к расчету ARR.

Для расчета ARR нам нужно поделить тактовую частоту таймера 4.194 МГц (у вас своя) на 56 кГц. Получаем 74,89, округляем до целого. Я округлил до 75. И вписываем в регистр ARR:

TIM4->ARR = 75 //Auto-reload value

Осталось рассчитать CCR1.

Так как у нас простой меандр, то в регистр CCR1 при режиме ШИМ нужно указать половину от значения ARR:

TIM4->CCR1 = 37; //Capture/Compare 1 value

Подробнее про выбор режима работы ШИМ таймера

Так как у нас первый канал, то используем регистр CCMR1. Нас интересует в этом регистре поле OC1M. Режим ШИМ позволяет настраивать длительность импульса при фиксированном периоде.

Выберем PMW mode 1, вписав две единицы во второй и третий биты, т.е. «110»:

TIM4->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1

Подробнее про настройку подачи выходного сигнала на пин PB6

В регистр CCER в поле CC1E нужно вписать «1», включив подачу выходного сигнала на пин.

Вписываем следующую строчку:

TIM4->CCER |= TIM_CCER_CC1E; //OC3 signal is output on the corresponding pin

Подробнее про выбор управляющего сигнала и режима Slave

Для управления TIM4 таймером TIM2 нужно выбрать входной сигнал ITR1. Для этого нужно вписать в поле TS регистра TIMx_SMCR «001». Также выберем режим для Slave, вписав «101» в поле SMS. В этом режиме пока входной сигнал ITR1 будет высоким, то TIM4 будет работать и выдавать меандр на пин, как только ITR1 станет низким, TIM4 выключается.

Для этого вписываем:

TIM4->SMCR |= TIM_SMCR_TS_0; //choosing ITR1

TIM4->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2; //Gated Mode

Добавим к уже существующему коду, и получим:

void Timer_Init_Transmitter (void) { //Settings for GPIO PB6 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER6_1; //Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1; //High speed GPIOB->AFR[0] |= 0x2000000; //Pin PB6 TIM4 alternative function AF2 enable //Settings for TIM4 — Slave RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; //TIM4 clock enable TIM4->PSC = 0; //Prescaler value TIM4->ARR = 75; //Auto-reload value TIM4->CCR1 = 37; //Capture/Compare 1 value TIM4->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable TIM4->CCER |= TIM_CCER_CC1E; //OC3 signal is output on the corresponding output pin TIM4->SMCR |= TIM_SMCR_TS_0; //choosing ITR1 TIM4->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2; //Gated Mode TIM4->CR1 |= TIM_CR1_CEN; //TIM4 enable }

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

Теперь перейдем к настройке TIM2.

Необходимо подать тактирование на таймер, рассчитать PSC, CCR1 и ARR, выбрать режим работы таймера ШИМ, выбрать какой сигнал будет выходным (входным управляющим для TIM4) и включить таймер.

Включение тактирования аналогично, как и для таймера TIM4.

RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2 clock enable

Подробнее про расчет PSC, CCR1 и ARR для TIM2

Так как по даташиту на диод в пачке следует использовать не менее 10 импульсов (на самом деле можно и меньше, но качество работы может быть не очень хорошим), то выберем тактирование таймера TIM2 в десять раз меньше, чем TIM4.

Как видим в формуле для расчета частоты тактирования таймера в знаменателе уже есть «+1», т.е. нам нужно записать в регистр PSC «9», чтобы получить частоту в 10 раз меньшую, чем частоту МК.

TIM2->PSC = 9; //Prescaler value

Теперь рассчитаем значение для CCR1: отправлять будем 10 импульсов, следовательно, нам нужно взять значение ARR для TIM4 (период одного импульса, это 75) и умножить на 10, т.е. получаем 750, однако, у нас есть прескейлер, который делит частоту на 10, т.е. нам нужно поделить 750 на 10, в итоге получаем снова 75 (как и в TIM4, но уже с другим прескейлером). Запишем это значение в регистр CCR1 таймера TIM2.

TIM2->CCR1 = 75; //Capture/Compare 1 value

Перейдём к расчету ARR: тут всё просто, допустим, хотим «стрелять» пачками со скважностью 11.2, при этом период излучения пачек будет около 2 мс (из расчета, что 1 мс это 4194000/1000 = 4194 тика, и умножаем на 2, получаем округлённо 8400, а с прескейлером 10, получаем 840 тиков), умножаем длительность пачки 75 на 11.2 и получаем 840, как видите, значения совпадают. Запишем это в регистр ARR.

TIM2->ARR = 840; //Auto-reload value

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

Режим работы таймера TIM2 точно такой же, как и у TIM4 — ШИМ.

TIM2->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable

Подробнее про выбор выходного сигнала TIM2 (управляющего для TIM4)

Найдем регистр TIMx_CR2.

Нам нужно подать сигнал с первого канала (мы же используем CCR1), на выход с таймера TIM2. Этим сигналом является OC1REF. Ниже на картинке можно найти комбинацию битов для этого сигнала – «100».

В поле MMS необходимо вписать «1» в третий бит.

TIM2->CR2 |= TIM_CR2_MMS_2; //OC1REF signal is used as trigger output (TRGO)

Теперь осталось включить TIM2, записав следующую строчку:

TIM2->CR1 |= TIM_CR1_CEN; //TIM2 enable

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

Добавим эти строчки к предыдущим и получим:

void Timer_Init_Transmitter (void) { //Settings for GPIO PB6 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER6_1; //Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1; //High speed GPIOB->AFR[0] |= 0x2000000; //Pin PB6 TIM4 alternative function AF2 enable //Settings for TIM4 — Slave RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; //TIM4 clock enable TIM4->PSC = 0; //Prescaler value TIM4->ARR = 75; //Auto-reload value TIM4->CCR1 = 37; //Capture/Compare 1 value TIM4->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable TIM4->CCER |= TIM_CCER_CC1E; //OC3 signal is output on the corresponding output pin TIM4->SMCR &= ~TIM_SMCR_TS; //clear bits TIM4->SMCR |= TIM_SMCR_TS_0; //choosing ITR1 TIM4->SMCR &= ~TIM_SMCR_SMS; //clear bits TIM4->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2; //Gated Mode TIM4->CR1 |= TIM_CR1_CEN; //TIM4 enable //Settings for TIM2 — Master RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2 clock enable TIM2->PSC = 9; //Prescaler value TIM2->ARR = 840; //Auto-reload value TIM2->CCR1 = 75; //Capture/Compare 1 value TIM2->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable TIM2->CR2 |= TIM_CR2_MMS_2; //OC1REF signal is used as trigger output (TRGO) TIM2->CR1 |= TIM_CR1_CEN; //TIM2 enable }

Теперь у нас ИК диод будет излучать пачки по 10 импульсов, у которых частота 56 кГц, со скважностью 11.2, т.е. с периодом следования пачек в 2 мс. Заметим, что момент пересечения каким-либо объектом внутри периода пачек не определен, т.е. мы можем судить о пересечении ИК луча только по отсутствию следующей пачки. Таким образом, погрешность измерения момента времени пересечения луча составляем 2 мс.

Внешний вид датчика движения

Ещё пара фото, как может выглядеть плата датчика движения в разобранном виде.

Плата датчика движения. Сторона пайки

Плата датчика движения. Вид со стороны деталей

Если что не понятно или есть что добавить – спрашивайте и пишите в комментариях. Если интересно, что я буду публиковать на моём блоге СамЭлектрик.ру дальше – подписывайтесь на получение новых статей.

Как избежать 3 ошибок при установке

  1. Место монтажа. Устанавливать устройство нужно в то место, наиболее подходящее по техническим условиям. Встречаются случаи, когда потолочный детектор монтируют на стену, что приводит к некорректной работе.
  2. Установка линз-масок. Эти шторки входят в комплект ДД и предназначаются для настройки зоны действия. Если их не снять после регулировки, то прибор не будет фиксировать движения.
  3. Неправильное положение выключателя. Если установить выключатель до датчика, то питание отключится и работа устройства станет невозможной.

Дополнительно

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

Нужно добавить глобальную переменную, например, написав между «инклюдами» и мэйном такую строчку:

int StatusDiode = 0; // 0 — diode is off, 1 — diode is on

Эта переменная необходима для запоминания статуса светодиода: выключен или включен.

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

TIM4->DIER |= TIM_DIER_TIE; // Trigger interrupt enable

И последнее: изменим обработчик прерываний.

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

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

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

Получим такой обработчик прерываний:

void TIM4_IRQHandler(void) { if (StatusDiode == 0) { TIM4->SR &= ~TIM_SR_TIF; GPIOB->ODR |= GPIO_ODR_ODR_15; // Led red on TIM4->DIER &= ~TIM_DIER_TIE; // Trigger interrupt disable TIM4->DIER |= TIM_DIER_CC2IE; // Capture/Compare 2 interrupt enable TIM4->CNT = 0; StatusDiode = 1; } else { TIM4->SR &= ~TIM_SR_CC2IF; GPIOB->ODR &= ~GPIO_ODR_ODR_15; // Led red off TIM4->DIER &= ~TIM_DIER_CC2IE; // Capture/Compare 2 interrupt disable TIM4->DIER |= TIM_DIER_TIE; // Trigger interrupt enable StatusDiode = 0; } } Полный код для приемника ИК сигнала

#include “main.h” void Timer_Init_Receiver(void); int main(void) { RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6; // MSI 4.194 MHz enable GPIOB->MODER |= GPIO_MODER_MODER15_0; // PB15 output mode Timer_Init_Receiver(); while(1) { } } void Timer_Init_Receiver(void) { //Settings for GPIO PB7 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER7_1; // Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7_1; // High speed GPIOB->PUPDR |= GPIO_PUPDR_PUPDR7_0; // pull-up PB7 GPIOB->AFR[0] |= 0x20000000; // Pin PB7 TIM4 alternative function AF2 enable //Settings for TIM4 RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // TIM4 clock enable TIM4->PSC = 9; // Prescaler value TIM4->ARR = 4200; // Auto-reload value TIM4->CCR2 = 4200; // Capture/Compare 2 value TIM4->CCMR1 &= ~TIM_CCMR1_OC2M; // Frozen mode enable TIM4->CCMR1 &= ~TIM_CCMR1_CC2S; // Output mode TIM4->CCER &= ~TIM_CCER_CC2NP; // This bit is used in conjunction with CC2P. TIM4->CCER |= TIM_CCER_CC2P; // Inverted/falling edge TIM4->SMCR |= TIM_SMCR_TS_1 | TIM_SMCR_TS_2; // Choosing TI2FP2 TIM4->SMCR |= TIM_SMCR_SMS_2; // Reset mode TIM4->DIER |= TIM_DIER_TIE; // Trigger interrupt enable TIM4->CR1 |= TIM_CR1_CEN; // TIM4 enable NVIC_EnableIRQ(TIM4_IRQn); // TIM4 global Interrupt enable } void TIM4_IRQHandler(void) { if (StatusDiode == 0) { TIM4->SR &= ~TIM_SR_TIF; GPIOB->ODR |= GPIO_ODR_ODR_15; // Led red on TIM4->DIER &= ~TIM_DIER_TIE; // Trigger interrupt disable TIM4->DIER |= TIM_DIER_CC2IE; // Capture/Compare 2 interrupt enable TIM4->CNT = 0; StatusDiode = 1; } else { TIM4->SR &= ~TIM_SR_CC2IF; GPIOB->ODR &= ~GPIO_ODR_ODR_15; // Led red off TIM4->DIER &= ~TIM_DIER_CC2IE; // Capture/Compare 2 interrupt disable TIM4->DIER |= TIM_DIER_TIE; // Trigger interrupt enable StatusDiode = 0; } }

Полный код

Код передатчика ИК сигнала
void Timer_Init_Transmitter(void); int main(void) { RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6; // MSI 4.194 MHz enable Timer_Init_Transmitter(); while(1) { } } void Timer_Init_Transmitter(void) { //Settings for GPIO PB6 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER6_1; //Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1; //High speed GPIOB->AFR[0] |= 0x2000000; //Pin PB6 TIM4 alternative function AF2 enable //Settings for TIM4 — Slave RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; //TIM4 clock enable TIM4->PSC = 0; //Prescaler value TIM4->ARR = 75; //Auto-reload value TIM4->CCR1 = 37; //Capture/Compare 1 value TIM4->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable TIM4->CCER |= TIM_CCER_CC1E; //OC3 signal is output on the corresponding output pin TIM4->SMCR &= ~TIM_SMCR_TS; //clear bits TIM4->SMCR |= TIM_SMCR_TS_0; //choosing ITR1 TIM4->SMCR &= ~TIM_SMCR_SMS; //clear bits TIM4->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2; //Gated Mode TIM4->CR1 |= TIM_CR1_CEN; //TIM4 enable //Settings for TIM2 — Master RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2 clock enable TIM2->PSC = 9; //Prescaler value TIM2->ARR = 840; //Auto-reload value TIM2->CCR1 = 75; //Capture/Compare 1 value TIM2->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; //Output compare PMW mode 1 enable TIM2->CR2 |= TIM_CR2_MMS_2; //OC1REF signal is used as trigger output (TRGO) TIM2->CR1 |= TIM_CR1_CEN; //TIM2 enable }

Код приемника ИК сигнала

#include “main.h” void Timer_Init_Receiver(void); int main(void) { RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6; // MSI 4.194 MHz enable GPIOB->MODER |= GPIO_MODER_MODER15_0; // PB15 output mode Timer_Init_Receiver(); while(1) { } } void Timer_Init_Receiver(void) { //Settings for GPIO PB7 RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // GPIO port B clock enable GPIOB->MODER |= GPIO_MODER_MODER7_1; // Alternative function mode enable GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7_1; // High speed GPIOB->PUPDR |= GPIO_PUPDR_PUPDR7_0; // pull-up PB7 GPIOB->AFR[0] |= 0x20000000; // Pin PB7 TIM4 alternative function AF2 enable //Settings for TIM4 RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // TIM4 clock enable TIM4->PSC = 9; // Prescaler value TIM4->ARR = 4200; // Auto-reload value TIM4->CCR2 = 4200; // Capture/Compare 2 value TIM4->CCMR1 &= ~TIM_CCMR1_OC2M; // Frozen mode enable TIM4->CCMR1 &= ~TIM_CCMR1_CC2S; // Output mode TIM4->CCER &= ~TIM_CCER_CC2NP; // This bit is used in conjunction with CC2P. TIM4->CCER |= TIM_CCER_CC2P; // Inverted/falling edge TIM4->SMCR |= TIM_SMCR_TS_1 | TIM_SMCR_TS_2; // Choosing TI2FP2 TIM4->SMCR |= TIM_SMCR_SMS_2; // Reset mode TIM4->DIER |= TIM_DIER_CC2IE; // Capture/Compare 2 interrupt enable TIM4->CR1 |= TIM_CR1_CEN; // TIM4 enable NVIC_EnableIRQ(TIM4_IRQn); // TIM4 global Interrupt enable } void TIM4_IRQHandler(void) { TIM4->SR &= ~TIM_SR_CC2IF; GPIOB->ODR |= GPIO_ODR_ODR_15; // Led red on }

Рейтинг
( 2 оценки, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]