По просьбам заинтересовавшихся темой самодельных zigbee устройств, продолжаю цикл постов на Хабре про самостоятельную сборку таких устройств из подручных средств. В предыдущих постах я рассказал как сделать из оригинального модуля управления умным домом Триколор GS SMH-ZW-I1 координатор или zigbee роутер, как прошить чип CC2531 прошивкой PTVO, и сделать простое конечное устройство, которое умеет мигать светодиодом из интерфейса управления Умным домом по протоколу zigbee и MQTT.

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

Тяжелыми шагами американского Санта Клауса наступает Новый год, поэтому каждый уважающий себя гик уже закупается на Алиэкспрессе наборами "Светодиодная новогодняя елка, DIY Kit, 3 цвета, красный/зеленый/желтый, светодиодная вспышка, электронная схема, набор праздничного декора", чтобы подарить всем своим знакомым негикам. И, конечно, несколько елочек обязательно надо собрать себе для создания праздничной атмосферы.

Елка - сделай сам
Елка - сделай сам

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

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

И как вы уже догадались, в этом посте мы будем скрещивать ежа и ужа модуль управления Триколор с китайской елкой-конструктором! Совместив эти два артефакта и еще кое-что, мы получим возможность управлять новогодней мини-елочкой из умного дома, мониторить температуру в комнате, узнавать атмосферное давление, а также использовать новогоднее украшение в качестве zigbee роутера / WiFi и Bluetooth модуля для ПК (но это по желанию).

Для чего это нужно?

В этом посте мы разберем подробнее работу с конфигуратором прошивок PTVO, научимся использовать всю мощь транзисторных ключей, и в заключении создадим свой внешний конвертер для Zigbee2MQTT, чтобы избавиться от "лишних" элементов в его интерфейсе.

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

Что для этого нужно?

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

Подразумевается что в вашей системе умного дома используется шлюз для Zigbee устройств на основе Zigbee2MQTT, а тем, кто использует ZHA предлагается изучить тему по добавлению неподдерживаемых Zigbee устройств самостоятельно. Не потому что я вредный, а потому что у меня нет HomeAssistant. Все примеры автоматизации я буду приводить для системы OpenHAB.

Как собирать саму елочку-конструктор тоже придется изучить самостоятельно. Не только изучить, но и собрать по приложенной китайцами инструкции. Сборка китайских наборов достойна отдельного поста на Хабре, ну или как минимум пары нецензурных слов. Впрочем, вместо елочки можно использовать любое другое электронное устройство, напряжение работы которого составляет 5в, и ток потребления которого желательно не должен превышать 500ма (максимальный ток портов USB 2.0). Это могут быть реле, настольные USB вентиляторы, USB светильники, USB увлажнители воздуха, в общем все то, питается по USB или от 5в, и чем вы хотели бы управлять из умного дома по протоколу zigbee.

Кроме кучки резисторов, транзистора структуры NPN (для управления нагрузкой посредством транзисторного ключа), в данном проекте понадобится датчик атмосферного давления BMP280, подключаемый к чипу CC2531 посредством аппаратного интерфейса I²C. А для удобства переспаривания роутера с координатором и обеспечения возможности включать елочку вручную, необходимо распаять кнопку на соответствующем посадочном месте печатной платы.

Итак, начинаем творить!

Шаг первый. Знакомство с пудингом.

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

Распаянные на плате пины
Распаянные на плате пины

Не густо, но сойдет. Всего доступно 5 пинов, которые можно заюзать в своем проекте. Пин P0_4 подключен к имеющемуся на плате светодиоду VDS через транзистор, поэтому использовать его как вход просто так не получится. Зато можно использовать этот пин как выход, да еще и с большим током нагрузки благодаря транзистору. Напоминаю, что пины чипа CC2531 (кроме P1_0 и P1_1) могут обеспечить выходной ток не более 4ма, чего недостаточно даже для зажигания светодиода.

Пин P0_5 используется в схеме для управления светодиодом VD8, но ни сам светодиод, ни его обвязка не распаяна.

Пины P0_6 и P0_3 разведены на обратной стороне платы, и подключены к посадочным местам кнопок SA1 и SA2 соответственно, сами кнопки и токоограничительные резисторы для них также не распаяны.

Пин P1_0 через резистор R36 подклбчен к USB-хабу (контакт DP1). Этот пин хорош тем, что может выдавать ток 20ма, чего уже достаточно для зажигания некоторых светодиодов без всяких транзисторов. Но забывать про токоограничительные резисторы все равно не стоит.

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

Шаг второй. Поиск деталек в ящике стола.

Для реализации всей этой авантюры нам потребуется немного радиодеталей:

  • Транзистор NPN структуры с током коллектор-эммитер не менее 500ма, например 2N2222

  • SMD резисторы и обычные резисторы

  • Кнопка четырехконткная, нормальноразмомкнутые контакты, smd исполнение

  • Датчик давления BMP280

  • Собранная новогодняя ёлочка

  • Немного проводов

Транзистор 2N2222
Транзистор 2N2222
Датчик температуры и давления BMP280
Датчик температуры и давления BMP280

Как все уже догадались, транзистор необходим для управления нагрузкой в режиме ключа. Можно было бы конечно запаять smd транзистор 1AM на свободное место, но для питания ёлочки необходимо 5в, а транзистор в имеющейся на плате цепи коммутирует 3.3в, поэтому нам не подходит. Для измерения давления и температуры необходим модуль GY-BMP280-3.3 на базе микро-чипа BMP280 от фирмы BOSH. Его малые размеры, низкое энергопотребление и высокая измерительная способность позволили завоевать популярность среди множества разработчиков Arduino-проектов. Модуль GY-BMP280-3.3 предоставляет пользователю целых 2 последовательных интерфейса обмена данными - SPI и I²C, использоваться в нашем проекте будет именно последний интерфейс. Экономить на проводах - мое любимое занятие, и для подключения датчика BMP280 по этому протоколу их как раз нужно минимум, в отличие от шины SPI.

Шаг третий. Теория транзисторных ключей.

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

Транзистор управляет нагрузкой
Транзистор управляет нагрузкой

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

Начнем с последнего. Открываем даташит на микросхему CC2531 и пытаемся найти то, что нас интересует.

Характеристики цифровых выходов
Характеристики цифровых выходов

Видим, что существуют два вида цифровых пинов - с током до 4ма, и с током до 20ма. Смотрим дальше.

Таблица с описанием пинов
Таблица с описанием пинов

Отлично, с этим разобрались. Все пины для которых явно не указано, что они могут обеспечить ток до 20ма, максимально могут обеспечить только ток до 4ма. Это нужно иметь ввиду, чтобы не вывести из строя микросхему CC2531. Рабочее напряжение на этих пинах (логическая единица) может составлять от 2.4в до напряжения питания микросхемы.

Теперь посмотрим на характеристики транзистора 2N2222, который внезапно нашелся в ящике стола, и поэтому волею судьбы будет использован в качестве управляющего элемента. Нас интересует не все характеристики, а минимальный коэффициент усиления по току (hfe), напряжение падения переходов коллектор-эммитер и база-эмиттер, а также максимальное рабочее напряжение и рабочий ток коллектора транзистора.

Таблица значений характеристик транзистора 2N2222
Таблица значений характеристик транзистора 2N2222
Таблица значений характеристик транзистора 2N2222
Таблица значений характеристик транзистора 2N2222

Минимальный коэффициент усиления = 30

Минимальное падение напряжения (база-эмиттер) VBE= 0.6в

Максимальное падение напряжения (коллектор-эмиттер) VCE = 1.6в

Максимальный ток коллектора iC = 600ma

Работать транзистор 2N2222 будет в цепи с напряжением питания 5в, что меньше предельно допустимого напряжения VCEO = 30в, а упрявляющее напряжение VEBO будет составлять величину напряжения на пинах чипа CC2531, составляющее от 2.4 до 3.3в, что тоже в пределах максимального значения VEBO = 5в.

Максимальный ток перехода коллектор-эммитер у транзистора 2N2222 составляет 600ма, а наша елочка потребляет менее 300ма (реальное потребление без рассчетов можно узнать с помощью мультиметра в режиме измерения тока, подключив его последовательно в цепь питания елочки). Все значения из даташита на транзистор 2N2222 укладываются в реальные значения, возникающие в процессе его эксплуатации в цепи, поэтому можно считать что данный транзистор подходит для наших целей.

Единственное что теоретически может не уложиться в нужный диапазон - это напряжение питания елочки, включенной в цепь между коллектором транзистора и плюсом источника питания. Это обусловлено тем, что на переходе коллектор-эммитер максимальное значение падения напряжения может составлять до 1.6в. Елочка работает как от напряжения питания 5в, так и от трех батареек типа АА, напряжением 1.5в каждая, что дает нам диапазон питающего напряжения 4.5 - 5в, и при снижении питающего напряжения на 1.6в (это в самом худшем случае) елочка все равно продолжит работать, возможно чуть тусклее чем хотелось бы. Но на практике скорее всего напряжение падения VCE будет гораздо меньше 1.6в, и какой либо заметной разницы вы не увидите. В цепи между елочкой и коллектором транзистора нет токоограничивающего резистора, что казалось бы не правильно. Однако на резисторе так же будет падать некоторое напряжение, что в связи с вышеизложенным еще больше снизит напряжение питания елочки, поэтому я решил не использовать его.

Теперь давайте рассчитаем токоограничительный резистор в цепи базы транзистора. Но сначала необходимо определить ток базы Ib. Он зависит от тока коллектора Ic и коэффициента усиления hfe.

Ib = Iс /hfe

Ток коллектора мы знаем, так как измерили его мультиметром, и он составляет примерно 300ма. Минимальный коэффициент усиления по току транзистора 2N2222 составляет 30.

Ib = 300ма / 30 = 10ma

Как видим, ток базы слишком большой для большинства пинов чипа CC2531, и приведет к выходу их из строя. Как же быть? Можно использовать пины с максимальным током до 20ма, а можно выбрать транзистор с коэффициентом усиления более 30. Для этого существуют транзистор-тестеры, которые могут показать коэффициент усиления по току hfe для конкретного взятого транзистора. Нас интересуют те транзисторы, hfe которых больше 75.

Ib = 300ма / 75 = 4ma

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

Rb = ΔUb/Ib

где ΔUb это разность между напряжением, приложенным к базе транзистора (примем его за 3,3в) и падением напряжение на переходе база-эмиттер (VBE), которое в нашем случае равно 0.6в.

Отсюда вычислим сопротивление резистора для тока базы 4ма (0,004 ампер).

ΔUb=3,3в-0,6в = 2,7вRb= 2,7в/0,004А = 675 Ом

Получается, что для транзисторов с hfe более 100 можно использовать токоограничительный резистор в цепи базы номиналом 650 Ом - 1кОм.

Осталось подобрать с помощью транзистор-тестера необходимый транзистор и можно переходить к практической части. Конкретный экземпляр транзистора 2N2222, который я буду использовать в самоделке имеет hfe (его еще называют бета коэффициент) равный 212, чего будет более чем достаточно.

Шаг четвертый. Практика.

Начнем пожалуй с самого простого - с осмотра нашего подопытного и припаивания недостающих деталей на место. Открываем корпус модуля управления умным домом Триколор, и смотрим где же находятся выведенные на плату пины чипа CC2531.

Пин P0_6, как я уже говорил, соединен с контактными площадками нераспаянной кнопки SA1, и его мы будем использовать в прошивке нашего устройства как раз для кнопки. Эта кнопка будет выполнять роль выключателя елочки в ручном режиме, а также для инициализации спаривания устройства с zigbee координатором. Для корректной работы кнопки необходимо припаять (помимо самой кнопки) еще и резистор под обозначением R49, через который (при нажатии кнопки SA1) пин P0_6 будет притянут к земле. Номинал можно взять в пределах 1-10кОм.

Пин P0_3 мы будем использовать для шины I²C (SDA), поэтому давайте припаяем тонкий проводок к контактной площадке кнопки SA2. Тут никаких резисторов паять не нужно.

Пин P1_0 подключен к резистору R36 и уходит куда то дальше. Можно выпаять этот резистор, а можно найти пин к которому удобнее паяться. Пойдем вторым путем.

Пин P0_4 занят светодиодом, ну вы помните по предыдущему посту, кода мы учились мигать лампочкой. Его не трогаем, пусть живет.

Остался всего один пин P0_5, к которому достаточно удобно припаяться использовав контактные площадки резистора R51 и прокинуть тонкий провод через отвертие на обратную сторону платы. Этот пин мы тоже будем использовать для шины I²C (SCL).

И все, пины кончились! Как же так, мы же еще не подключили елочку!!!

Но ничего страшного, помните что у нас пин P0_4 уже занят светодиодом? Его и будем использовать в качестве выхода для управляющего сигнала нашего транзисторного ключа от елочки. Припаиваем провод к резистору R54 и соединяем с базой ключевого транзистора через резистор на 1кОм (мы же его уже рассчитали, правда?).

Подключение ключевого транзистора
Подключение ключевого транзистора

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

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

Теперь подсоединим модуль датчика атмосферного давления GY-BMP280-3.3 с обратной стороны платы. Тут все просто - припаиваем провода шины I²C (SCL и SDA) к соотетсвующим площадкам модуля, и находим удобные точки для запитывания этого самого датчика от напряжения 3.3в.

Подключение модуля BMP280
Подключение модуля BMP280

Самый удобный вариант снять напряжение 3.3в - это припаять провод на место резистора R55, который располагается рядом с контактными площадками XP2. Землю я взял поблизости, припаявшись к контактной площадке посадочного места разьема антенны XS4. Плату датчика атмосферного давления после монтажа я приклеил двухсторонним скотчем к плате модуля управления Триколор. Опять таки для надежности.

Как вы видите, я припаял кнопку на законное место. Она будет нужна для того чтобы включать и выключать елочку вручную, а также инициировать процесс сброса / спаривания устройства. Кроме самой кнопки необходимо установить smd резистор R49 номиналом 1кОм.

В итоге должно получится что-то похожее.

Верхняя сторона платы со следами вмешательства
Верхняя сторона платы со следами вмешательства
Нижняя сторона платы
Нижняя сторона платы

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

Стрелкой указано где необходимо поставить перемычку
Стрелкой указано где необходимо поставить перемычку

Разьем питания тоже выпаиваем (не впаиваем при сборке). Ставим еще одну перемычку.

Перемычка на месте разьема питания J1
Перемычка на месте разьема питания J1

Таким образом мы переключили питание елочки от батарейного отсека. Осталось припаять провода к площадкам BAT4.5V соблюдая полярность и можно приступать к следующему шагу.

Закрепить елочку на корпусе модуля управления Триколор можно с помощью винтов с гайками или небольших саморезов. Провода питания к площадкам BAT4.5V подведены изнутри корпуса, для чего нужно проделать небольшое технологическое отверстие (говоря языком специалистов - надо проделать дырку).

Шаг пятый. Прошивка PTVO и внешний конвертер для Zigbee2MQTT.

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

Запускаем FirmwareConfig.exe, (FirmwareConfigLED.exe предназначен для создания прошивок контроллеров светодиодных лент, он нас не интересует), и выбираем тип устройства - Конечное устройство без функции роутера. Как вы уже догадались, zigbee-роутер из елочки мы делать не будем. Настраиваем в соответсвии со скриншотом.

Настройка прошивки
Настройка прошивки

Переходим на вкладку Эксперт и там вносим соответствующие изменения.

Вкладка Эксперт
Вкладка Эксперт

Немного поясню значения некоторых параметров в конфигураторе PTVO. На главной вкладке конфигуратора все вроде понятно. Указываем пины к которым подключены транзистор, кнопка и шина I2C с датчиком давления. У датчика давления есть адрес, по умолчанию он равен 76 в шестнадцатиричной системе счисления. В десятеричной, как вы уже догадались, это значение равно 118.

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

Что касается вкладки Эксперт, то тут немного интереснее.

По умолчанию любое устройство с прошивкой PTVO определяется в Zigbee2MQTT как ptvo.switch, и содержит все возможные эндпоинты, даже те, которых на самом деле нет.

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

Изменение интервала отправки отчетов необходимо если вам хочется чтобы данные прилетали чаще чем по дефолту. В моем случае я установил интервал равный 5 сек.

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

Шаг шестой. Шьем прошивку.

Дело близится к своему логическому завершению, осталось совсем немного - прошить полученную прошивку в чип CC2531 и добавить кастомный конвертер в Zigbee2MQTT.

Для прошивки чипа на этот раз я буду использовать CC Debugger. Если у вас его нет, почитайте предудыщие посты (раз, два) посвященные модулю управления Триколор, где описываются альтернативные способы прошивки zigbee-чипа без специализированного программатора.

Подключаем программатор CC Debugger к соответсвующим контактам технологических площадок на нижней стороны платы. Для этого нам потребуется всего четыре провода. Контакт питания 3.3в с разьема программатора НЕ подключаем. Будем запитывать плату Триколор от USB.

Распиновка
Распиновка
И пример подключения
И пример подключения

Если все сделано правильно, в программе SmartRF Flash Programmer (идущей в комплекте к программатору) появится наш чип, и можно будет залить прошивку.

Процесс прошивки
Процесс прошивки

После прошивки отключаем елочку от USB порта компьютера, отпаиваем провода, и вспоминаем, где у нас лежит файл с внешним конвертером Zigbee2MQTT. Процесс спаривания устройства можно начинать только после установки соответсвующего конвертера, иначе устройство определится как неподдерживаемое.

Для этого достаточно просто скопировать внешний конвертер в каталог data в папке с установленным Zigbee2MQTT и прописать его в файле конфигурации.

Копируем конвертер в папку data
Копируем конвертер в папку data
Указываем конвертер в конфиге
Указываем конвертер в конфиге

Перезапускаем Zigbee2MQTT и приступаем к добавлению устройства. Если вдруг наша елочка не определилась автоматически после подачи на нее питания от USB, необходимо подержать нашу единственную кнопку около пяти секунд для инициализации процесса спаривания.

В итоге мы должны получить нечто похожее на скриншот. Проверяем все ли на месте.

Отлично! Необходимые эндпоинты определились как положено, лишних нет. Единственное что смущает - это отсутствие показателя влажности и температура выше 30 градусов. К сожалению, датчик влажности есть только в модуле с чипом BME280, чип BMP280 влажность не измеряет, но эта характеристика присутствует в интерфейсе Zigbee2MQTT. А температура выше 30 градусов обусловлена тем, что датчик измеряет ее внутри корпуса устройства, котороее греется. Для того, чтобы показания соответствовали комнатной температуре, необходимо вынести его за пределы корпуса. Я не стал этого делать, так как мне нужны только показания давления.

На этом все. Внешний вид готового устройства и видео с демонстрацией работы приведу ниже.

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