Просто включатель с радаром 24 ГГц для «Умного дома» или автономного использования

от автора

3D рендер устройства

3D рендер устройства

Привет, Хабр!

Вот и добралась моя безумная DIY автоматизация до ванной комнаты, а причина тому — датчик присутствия HLK-LD2402. Этот датчик был куплен на распродаже в одном оранжевом маркетплейсе с целью поиграться и забыть, но он настолько мне понравился, что я решил дать ему возможность поработать в составе моего DIY устройства. А что из этого вышло — читайте далее.

❯ Включаем и выключаем [без использования рук]

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

Модуль радарного датчика HLK-LD2402

Модуль радарного датчика HLK-LD2402

▢ В чем преимущество данного модуля?

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

В отличии от PIR датчиков, радарные датчики типа HLK-LD2402 имеют радиолокационный принцип обнаружения, поэтому даже статические объекты с легкостью фиксируются данным датчиком.

▢ Коммуникация / интерфейс

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

distance:102 distance:115 distance:143 distance:167

Как несложно догадаться, это дистанция до объекта, которую фиксирует датчик. Данные посылаются с периодичностью 500 мс.

❯ Аппаратная часть блока управления

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

▢ Принципиальная схема модуля

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

Принципиальная схема

Принципиальная схема

Чтобы реализовать устройство в компактном виде, в схеме применен блок питания на базе экономичного импульсного преобразователя напряжения LNK306DN в корпусе SO-8C. Для управления осветительной нагрузкой применяется связка силового симистора BT136-600 и оптопары MOC3052M. В качестве «мозга» устройства применён esp8266.

▢ Печатная плата

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

Рендер печатной платы. На шелкографии опечатка: не +5 V, а +3.3 V

Рендер печатной платы. На шелкографии опечатка: не +5 V, а +3.3 V

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

Трассировка и габариты

Трассировка и габариты

Разработка печатный платы выполнялась в KiCAD.

❯ Изготовление прототипа печатной платы

Чтобы сократить временные затраты, первый прототип печатной платы изготовляется в «домашних условиях», а помогает мне в этом деле мой портативный лазерный гравер:

Лазерный гравер

Лазерный гравер

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

Ниже на изображении представлены этапы изготовления платы:

Этапы изготовления платы

Этапы изготовления платы

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

Засветка фоторезиста лазером. [YouTube]

И так как плата работает с высоким напряжением, для улучшения диэлектрической прочности будем использовать паяльную маску. Ниже представлен процесс нанесения паяльной маски с помощью сетки для шелкографии и пластиковой визитной карточки Hi-Link, которая поставлялась вместе с радарным модулем.

Нанесение паяльной маски

Нанесение паяльной маски

И далее с помощью лазерного станка активируем фотополимерную маску.

Активация маски с помощью лазера. [YouTube]

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

Этапы сборки

Этапы сборки

Важное замечание!

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

❯ Корпус модуля управления

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

Рендер корпуса

Рендер корпуса

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

После сверки всех размеров в виртуальный среде, перенесем данный корпус в реальный мир с помощью 3D печати. Корпус печатался с применением HIPS пластика.

▢ Собираем всё в кучу

Теперь мы собрать устройство и увидеть финальный результат.

Этапы сборки устройства в корпусе

Этапы сборки устройства в корпусе

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

❯ Микро ПО модуля

Уже по классике в своих проектах использую собственную базовую прошивку для DIY IoT устройств. В данной прошивке реализован удобный веб интерфейс и все необходимые сервисы для работы как в автономном режиме, так и в составе систем «Умного дома». Для первичной конфигурации устройство использует встроенный сервис Captive Portal — в этом режиме устройством создается Wi-Fi точка доступа, при подключении к которой пользователя автоматически переносит на страницу конфигурации устройства. Для конфигурации устройства используется доступ по паролю. По умолчанию пароль «admin», который можно будет изменить после входа в соответствующем разделе меню.

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

Скриншоты конфигурации

Скриншоты конфигурации

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

  • Страница входа;

  • Основная информационная страница с элементами управления;

  • Конфигурация подключения с помощью MQTT протокола (интеграция в системы «Умный дом»;

  • Конфигурация диапазона обнаружения для активации освещения.

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

▢ Чуть чуть кода

Как я писал ранее, обмен с радарным датчиком выполняется по UART, то нам необходимо извлекать данные с помощью последовательного интерфейса. Для этого мы будем использовать методы Serial.Read() или Serial.available(). Ниже представлен фрагмент кода отвечающий за процесс получения данных:

void radar_process(){                                                   // Чтение и обработка данных с радара       if(Serial.available() > 0) {           char inChar = Serial.read();           if (inChar == '\n') {             processString(inputString);             inputString = "";            }else{           inputString += inChar;          }        } }

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

if (inChar == '\n') {             processString(inputString);             inputString = "";            }else{           inputString += inChar;          }

И так как нам нужно получить числовое значение дистанции, которое в строке разделяется с помощью символа «:», то для отделения числового значения воспользуемся следующей функцией:

void processString(String str) {   int startIndex = str.indexOf(':') + 1;                                // Находим позицию после ':'   if (startIndex > 0 && startIndex < str.length()) {     String numberString = str.substring(startIndex);                    // Берем подстроку после ':'     float get_data = numberString.toFloat();                            // Преобразуем строку в число      if(get_data != 105.00){                                            // Исключаем кривые данные         hum = get_data;       }                                           } }

Данная функция извлекает из полученной строки числовое значение дистанции до объекта и преобразует в формат Float с последующей записью в глобальную переменную hum.

❯ Интеграция в систему «Умный дом»

Так как я использую Home Assistant, то ниже будет описан процесс интеграции для данной системы. На самом деле здесь ничего сложного, интеграция выполняется с помощью протокола MQTT, а так как устройство имеет функцию автоматической интеграции «Mqtt Auto Discovery», то процесс интеграции займет не более пары минут. После активации MQTT подключения, в Home Assistant автоматически появятся объекты, которые относятся к нашему устройству, вам лишь нужно будет добавить на главный экран «карточку объектов» устройства. Для упрощения, ниже приведен кода данной карточки:

type: entities entities:   - entity: sensor.dist     name: Датчик присутствия   - entity: switch.auto     name: Автоматический режим     icon: mdi:home-sound-out-outline   - entity: sensor.sd_up     name: Диапазон обнаружения верхний   - entity: sensor.d_down     name: Диапазон обнаружения нижний   - entity: switch.onf     name: Освещение     icon: mdi:coach-lamp title: Освещение в ванной

После сохранения карточки объектов мы увидим следующий результат:

Карточка объектов Home Assistant

Карточка объектов Home Assistant

Ну и для разнообразия, приведу график зависимости дистанции от активации освещения:

График

График

❯ Итоги

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

Благодарю всех за ваше внимание! Всем здоровья и интересных проектов! Если у вас остались вопросы, пожелания и предложения, то добро пожаловать в комментарии!

Ссылки к статье:


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале 

Перейти ↩

Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.


ссылка на оригинал статьи https://habr.com/ru/articles/881854/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *