Привет, Хабр!
Вот и добралась моя безумная 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-канале ↩
Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.
ссылка на оригинал статьи https://habr.com/ru/articles/881854/
Добавить комментарий