company_banner

Мультисенсорный беспроводной датчик с E-Ink дисплеем

    Приветствую всех читателей Хабра и особенно читателей раздела «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?)

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

    RUVDS.com
    VDS/VPS-хостинг. Скидка 10% по коду HABR

    Комментарии 19

      0
      Возможно, глупый вопрос, но все же. А есть ли возможность купить такой датчик полностью в сборе?
      0
      И всё таки почему BME280 так подорожали?
        0
        Самого интересного и не нашёл: принципиальная схема доступна?
          0
          На гитхабе то посмотрите.
            0
            Да что-то не могу найти там… Герберы вижу, а схему — нет. То ли лыжи не едут… то ли я слепой… Директория SCHEME пустая.
            0

            Я ее выложу, пока нет времени. Кстати схему можно посмотреть в статье про девайс с e-ink 2,9 или на гите того проекта, устройства одинаковые, обвязка экранов одинаковая.

              0
              Спасибо за комментарий. Мне было бы интересно посмотреть как Вы в итоге организовали питание и почитать более подробно про логику поиска решения. Я в своих датчиках остановился на питании от пары ААА и step-up до 3.3В. «Пальцы» вместо «пуговиц», т.к. самый ширпотребный и дешёвый вариант, а имеющийся корпус позволяет свободно их разместить. Step-up, т.к. были замечены косяки с работой датчика влажности в HTU21D на низких напряжениях — раз, и с конвертером получается высосать батарейки до 0.9В суммарного напряжения — два. У меня датчики живут уже почти 1.5 года без замены батареек. Но, вообще говоря, тут уже лимитирует сколько и как часто датчик будет передавать в эфир.

              Ещё вопрос. Вы содержимое einkimgdata.cpp генерировали какой-то своей приспособой или можете порекомендовать универсальный конвертер?
            0
            А в чем была проблема использовать MS88SF2 с боковыми пинами?
              0

              Всё таки 17,5 на 22,3 мне показался немного громоздким для этого проекта, да и интерес просто был попробовать сделать на таком.

              0
              На efektalab.com протух https сертификат примерно четыре месяца назад.
                0

                Это пока домен на будующее :) времени нет :(

                  0
                  Тогда надо Letsencrypt ставить через certbot, он тогда сам обновлять будет.
                  Удачи с проектом. Жаль, что мне уже не надо, но выглядит классно.
                  Я бы добавил API, что бы можно было встроить в существующие системы умных домов.
                0
                Ну ведь эти e-ink дисплеи — не дешёвое удовольствие.
                  0

                  О да

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

                Самое читаемое