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

▢ В чем преимущество данного модуля?
Наверное вы уже сталкивались с классическими датчиками обнаружения на базе PIR сенсора, которые повсеместно устанавливаются в коммунальной сфере для автоматического включения и выключения света. Хуже всего, когда данные датчики установлены в туалетах: чтобы не остаться в темноте, ты должен быть постоянно в движении.
В отличии от PIR датчиков, радарные датчики типа HLK-LD2402 имеют радиолокационный принцип обнаружения, поэтому даже статические объекты с легкостью фиксируются данным датчиком.
▢ Коммуникация / интерфейс
Здесь всё просто, в данном датчике используется UART интерфейс для обмена данными. Если мы подключимся в терминале с помощью UART к датчику, то в консоли увидим что-то подобное:
distance:102
distance:115
distance:143
distance:167
Как несложно догадаться, это дистанция до объекта, которую фиксирует датчик. Данные посылаются с периодичностью 500 мс.
❯ Аппаратная часть блока управления
В своих проектах я часто использую микроконтроллер esp8266, он достаточно дёшев и успешно справится с нашими задачами, поэтому и в этот раз применим его в реализации нашего устройства.
▢ Принципиальная схема модуля
Чтобы не ходить вокруг да около и чтобы было яснее, сразу представлю принципиальную схему блока управления:

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

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

Разработка печатный платы выполнялась в 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: Освещение в ванной
После сохранения карточки объектов мы увидим следующий результат:

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

❯ Итоги
В итоге у нас получилось компактное и лишённое недостатков PIR датчиков устройство для автоматизации освещения. Теперь мне предстоит долгий и мучительный процесс по избавлению от выработанного долгими годами рефлекса включения и выключения выключателя на входе и выходе из ванной комнаты. В данном устройстве я сознательно не предусматривал датчик освещения, так как моя ванная комната не имеет естественного освещения, но при необходимости, данной функция может быть легко реализована в прошивке. Само собой, при реализации устройства я внес изменения в конструкцию платы, которые были доработаны в процессе тестовой эксплуатации, поэтому в статье вы можете заметить различия в схеме и трассировки платы.
Благодарю всех за ваше внимание! Всем здоровья и интересных проектов! Если у вас остались вопросы, пожелания и предложения, то добро пожаловать в комментарии!
Ссылки к статье:
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩

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