Приветствую всех читателей Хабра и особенно читателей раздела «DIY или Сделай сам»! В сегодняшней статье я расскажу о своем очередном DIY проекте из серии устройств с дисплеями на электронных чернилах(e-ink). Устройство о котором пойдет речь это беспроводной мультисенсорный датчик с e-paper дисплеем 2.13 дюймов. На датчик можно установить сенсор температуры и влажности SHT21, HTU21D, SI7021, сенсор температуры влажности и давления BME280, сенсор атмосферного давления BMP280, сенсор освещенности MAX44009. Датчик работает от одной батарейки CR2450. Но ничего не мешает напаять на датчик держатель под батарейки CR2430 или CR2477.



Проект датчика с e-ink дисплеем размером 2.13 дюймов начинался достаточно давно. Первый прототип был сделан более года назад. Та первая версия работала на двух батарейках cr2450, имела стабилизированное питание. Со временем проект изменялся и оптимизировался, уменьшались размеры, менялись радио модули и сенсоры.



Плата окончательной версии датчика имеет размеры 72 mm * 31 mm, толщина текстолита 1.2mm. Размеры датчика в корпусе 76mm * 35mm * 12mm.

Устройство работает на микроконтроллере nRF52840, используется радио модуль MS88SF3 от компании MINEW. Модуль не имеет боковых падов для пайки, они расположены снизу радио модуля. Эта особенность немного «напрягала», но глаза боятся, а руки делают. В итоге модуль достаточно просто напаивается феном (плату устройства, на которую устанавливался радио модуль я грел снизу).



Устройство имеет две модификации платы. В модификации «А» на датчике установлен сенсор BME280, светодиод, в модификации «B» добавлен датчик освещенности, датчики температуры и влажности SHT21, HTU21D, SI7021, добавлена возможность установки сенсора BMP280, добавлена защита от переполюсовки на транзисторе.





В модификации «B» место под пайку сенсоров BME280 и BMP280 сделал универсальным, BMP280 отлично устанавливается на место BME280. Это изменение я сделал уже в крайней ревизии второй версии датчика. Причиной стало резкое удорожание сенсоров BME (в среднем на 70% на последние два месяца). Теперь появилась возможность заменить функционал BME280 установив на плату BMP280 + SHT21 (серия BMP пока не поднимается в цене). Если кому-то известна причина такого роста цен на сенсоры BME, расскажите об этом в комментариях.



Корпус датчика был напечатан на FDM 3D принтере. После печати корпус дополнительно шлифовался и полировался. Для светодиода в модификации «А» и сенсора освещенности в модификации «B» в верхней части корпуса на внутренней стороне имеются углубления для последующего сверления отверстий. Просверленные отверстия я заливал полимерной смолой для SLA принтера.



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







Есть возможность по нажатию кнопки инвертировать экран. На кнопку добавлен функционал простого меню с пунктами: инвертирование цвета, конфигурация устройства, презентация устройства, сброс датчика. В режиме конфигурации датчик в течение 20 секунд слушает эфир, в это время можно с контроллера УД отправить на датчик конфигурационные команды: изменение интервала отправки данных с сенсоров(от 1 минуты до 1 часа с шагом в 1 минуту), изменение интервала отправки данных о состояния батареи и уровне сигнала(от 1 часа до 24 часов). В режиме презентации устройство отправляет на контроллер УД данные о себе(название, версия прошивки) и о сенсорах, делает запрос о том в какой системе(метрическая или имперская) работает сеть. Так же отправляет свои конфигурационные настройки.

При работе в радиосети датчик передает данные:

  • Температура,
  • Влажность,
  • Атмосферное давление,
  • Уровень освещенности,
  • Прогноз погоды,
  • Уровень сигнала,
  • Уровень заряда батарейки,
  • Причина перезагрузки

Если сеть работает в метрической системе, то данные о температуре отправляются и выводятся на экран в Цельсиях, а данные об атмосферном давлении в миллиметрах ртутного столба(только при компиляции RU версии), иначе температура выводится в Фарингейтах, а атмосферное давление в Паскалях.

Перед компиляцией программы необходимо внести изменения в конфигурационный файл aConfig.h.

Какая языковая версия будет скомпилирована (RU или ENG):

#define LANG_RU

Вывод дебага в сериал:

#define MY_DEBUG

Мощность радиопередатчика:

#define MY_NRF5_ESB_PA_LEVEL (0x8UL)

Скорость передачи данных:

#define MY_NRF5_ESB_MODE (NRF5_1MBPS)

Потребление устройства в режиме сна — 5 мкА, в режиме чтения сенсоров и обновления экрана 2-3 мА. В режиме передачи данных 8 мА, в режиме прослушивания 5мА. Время обновления экрана 300мс, время передачи одного сообщения с данными сенсоров 10мс, время передачи сообщения о заряде батареи с ожиданием эхо 100-300мс. Срок работы на одной батарейке CR2450 год и более(с конфигурацией опроса сенсоров раз в минуту и отправкой данных при изменении, опросе напряжения батарейки один раз в 6 часов и обязательной отправкой без сравнения).

Видео с демонстрацией работы датчика:

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

Фото датчика:














GitHub проекта — github.com/smartboxchannel/

В файле readme находится инструкция по установке и настройке среды для редактирования и компиляции ПО для датчика.

Если вам интересно все что связано с DIY, вы являетесь DIY разработчиком или хотите только начать, вам интересно использование DIY девайсов, а так же хотите узнавать первыми о моих проектах, то приглашаю всех заинтересованных в телеграм чат — DIYDEV.

Всем, кто хочет делать устройства, начать строить автоматизацию своего дома, я предлагаю познакомиться с простым в освоении протоколом Mysensors — телеграм-чат MySensors

А тем кто ищет достаточно взрослые решения для домашней автоматизации приглашаю в телеграм-чат Open Thread. (что такое Thread?)

Спасибо за внимание, всем добра!