Погодный сенсор для умного дома Mysensors + Majordomo

201Погодная станция с NRF24L01 работает у меня уже несколько лет. Проблем с сенсором особо не было. Несколько раз в сильный дождь сенсор переставал передавать данные, но потом все восстанавливалось. В последнее время перестал показывать индикатор. Скорее всего окислились контакты. Или проводок где-то отпал. Все таки навесной монтаж — не самая надежная в мире штука. Основной недостаток существующего решения — отсутствие нормальной серверной части. Хотелось бы иметь возможность свеcти все данные в единую систему с возможностью отображения и использования этой информации для других  компонентов умного дома.

Заканчиваю длинную преамбулу. Далее будет статья про новый погодный сенсор на базе модуля с BME280, NRF24L01 и библиотекой Mysensors, подключенный к Majordomo серверу.

Технические характеристики:

  • Сенсор температуры/влажности/давления BME280 с интерфейсом I2C
  • Контроллер Atmega328 (подойдет Atmega168) 8МГц от внутреннего резонатора
  • Радиомодуль NRF24L01 2/4ГГц с протоколом Mysensors
  • Питание от двух элементов AA (Срок работы от одного комплекта не менее 2-х лет)
  • Периодичность отправки данных 5 минут
  • Ток потребления в режиме сна 11мкА
  • Ток потребления в режиме отправки 20мА (светодиод однако), длительность отправки 200мс

Принципиальная схема

%d1%81%d1%85%d0%b5%d0%bc%d0%b0

Список компонентов:

Итого около $7

Печатная плата

Плата спроектирована в программе Sprint Layers 6 для изготовления методом ЛЛТ (Лазерно-ламинаторной технологией) на одностороннем текстолите

Размер платы получился 20 x 55 мм

%d0%bf%d0%bb%d0%b0%d1%82%d0%b0-v1-0

200 201

Корпус

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

%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5

203 204 205

Программное обеспечение

Первоначально планировалось запитать NRF24 прямо от батареек, но почему то библиотечная функция sleep() не хотела отправлять NRF-ку в режим сна. Не помогли функции NRF24_PowerDown()/NRF24_PowerUP().

Потребление в режиме сна оставалось в районе 1.2-2мА. Видимо радиомодуль все же слушал эфир, не смотря на режим пассивной моды. Помогло переключение питания NRF-ки на отдельную ногу микроконтроллера. Благо их у меги в достатке. Но появилась друга беда.   После того как прописал в скетче:

#define MY_RF24_POWER_PIN 8

мой сенсор посылал первый пакет-презентацию и показания всех параметров, засыпал по функции sleep(), но вот после просыпания никак не хотел работать. Режим отладки показывал нормальную работу модуля, но пакеты на приемник не приходили. Видимо сбивались и не восстанавливались какие то настройки модуля.

Помог прямой хаккинг. Из библиотеки выдрал код инициализации NRF-ки, оформлен в виде отдельной функции, которая вызывалась после каждого пробуждения

После этого все заработало как часы. Модуль уходил в режим сна с потреблением 10-11 мкА (точнее мой прибор не мерит), затем выходил из него по таймеру, отрабатывал цикл чтения параметров и отправки длительностью 200 мс, моргая на это время светодиодом. Потребление BME280 было в рамках погрешности моего тестера, поэтому заводить его питание на вывод микроконтроллера не стал.

Итоговый скетч метеосенсора получился таким:

Работа до первого сна характеризуется горением светодиода и составляет со всеми представлениями Mysensors около 3 сек. На всякий случай оставил перезагрузку два раза в сутки (осталось от отладки, когда NRF-ка не выходила из сна)
Если будет все работать без этого в 39 строке изменить код, на

#define TM_RESET 0

Период опроса можно изменить в 37 строчке кода

#define TM_SLEEP 300000

Настройки GPIO для NRF-ки, номера ноды Mysensors и других параметров также задаются константами

Размер скетча получился 14080 байт, что вполне позволит использовать в проекте Atmega168 даже с загрузчиком.

arduino-ide

Подключение к Majordomo

Сервер Majordomo у меня работает на Orange PI PC под Armbian. К нему подключен такой вот NRF24L01 с внешней антенной.

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

Модуль Mysensors ставится из маркета приложений

md-market

После этого на закладке Оборудование->Mysensors автоматически появляются все устройства с этим интерфейсом

md-mysensors-scan

Заходим в сенсор с нашей нодой 60 и связываем все параметры с объектами MD (они создаются автоматически в Оборудование->Простые устройства

md-mysensors

После этого можно использовать эти объекты в панелях и сценах интерфейса Majordomo.

md-%d1%81%d1%86%d0%b5%d0%bd%d0%b0

Подводим итоги

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

В ближайшем будущем у меня запланирована разработка еще нескольких устройств с NRF24 и Mysensors. В батарейных девайсах планирую применить Atmega328/168 в корпусах TQFP, сенсоры NRF24L01 mini и питание от CR2032.

А данный сенсор отправляется на боевой дежурство за окно

206

Для тех кто захочет повторить, выкладываю чертежи печатной платы и корпуса и скетч проекта

 

 

 

 

 

 

 

 

Вы можете оставить отзыв или трекбек со своего сайта.

31 комментарий на «Погодный сенсор для умного дома Mysensors + Majordomo»

  1. Максим:

    А разве не хватает ресурсов самой EPS8266-01? ESP сама прекрасно умеет работать с сенсорами и отправлять данные по сети.

  2. Максим:

    а, там не есп стоит, а NRF, сбил с толку схожий внешний вид ))

  3. Александр:

    То есть питание беспроводного модуля осуществляется от цифрового пина контроллера?

    • Alexey Alexey:

      Да. Именно так. Без этого библиотека Mysensors никак не хотела отправлять NRF-ку в сон, хотя с другим библиотеками NRF24 нормально работало и с постоянным питанием. Может быть это проблема конкретных китайских NTF-ок

  4. udavst:

    У меня такая штука пару лет за окном работает, датчик такой же, вместо контроллера — ардуина pro mini, потребляет тоже какие-то микроамперы (светодиоды убраны, стабилизатор убран, фьюзы перешиты под 1.8v, дальше всё равно nrf-ка не передаёт), nrf’ка нормально уходит в сон (пользуюсь RF24). Всё это было первый год, потом (как раз совпало с попыткой замены батареек на аккумы с солнечной батареей) стало высаживать очень быстро, аккумы дохлые были, решил с ионистором попробовать — не,не может заярдиться, оказалось BME начал постоянно потреблять несколько мА. Пришлось его тоже на ногу контроллера повесить. Тепепь вот работает, правда садиться не медленно (за 3 месяца с 3.1v до 3.03v) хотя возможно, из-за самых дешёвых батареек космос, а может, потому, что пашет на 16Mhz с кварцом.

  5. Maksim:

    По этому лучше делать как у автора :
    Голый Контроллер Atmega328 (подойдет Atmega168) 8МГц от внутреннего резонатора

  6. Andrey:

    Добрый день!
    Два вопроса автору:
    1. А можно датчик BME-280 заменить на два датчика темп/влаж (напр. DHT-22 или HDC-1080) с сохранением столь же низкого энергопотребления?
    2. Если заменить простой NRF модуль на модуль с антенной и усилителем, тока с одной ноги микроконтроллера не хватит? Или может, можно 2-3 ноги в параллель соединить?

    • Alexey Alexey:

      1. DHT22 считают пережитком прошлого
      http://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_many.html
      Подключить можно. Если потребление возрастет, завести питание сенсоров на ногу ардуино и включать только по надобности, как и NRF24
      2. Не нужно. Даже с усилителем там всего десяток милливатт, а нога ардуино выдержит на порядок больше

  7. Andrey:

    И третий вопрос
    Можно ли добавить в передаваемые данные напряжение батареи?

  8. Andrey:

    Спасибо за ответ!
    Начинаю пробовать,
    если расстояния не хватит с обычным NRF , попробую подключить NRF с усилителем через мелкий MOSFET.

  9. Andrey:

    а какой загрузчик должен быть прошит в ардуине?

    • Alexey Alexey:

      Я обычно прошиваю Optiboot
      Он корректно со сторожевым таймером работает

      • Andrey:

        Добрый день! Попались три версии оптибута 6.2, 7.0 и 8.0. какую лучше использовать?

      • Никита:

        На MySensors есть бутлоадер позволяющий прошивать ардуинки по воздуху (через NRF) без дополнительной памяти итд итп.
        Но конечно не особо имеет смысл при батарейном питании в финальной версии.
        Зато во время разработки в труднодоступных местах — это божественно — прошивать не подключаясь проводом, всегда мечтал об этом! Прошивается из контроллера сети, поддерживающего функцию OTA или там есть специально сниффер-дебаггер-логгер сети с такой функцией (под Win) — MYSController
        А еще в последних версиях IDE Adruino уже есть новый бутлоадер, вроде как даже оптибутовский, в котором исправили проблему бесконечного watchdog. Правда вроде забыли поменять указание занимаемого места…

        • Никита:

          А да, из недостатков «воздушного» бутлоадера — он обязан при старте связаться с gateway для проверки наличия прошивки. Что сильно увеличивает время старта, особенно если никто не отвечает (контроллер без поддержки функционала, прошивка не назначена и MYSController закрыт) — он спрашивает несколько раз. В итоге время старта может быть 3-6 секунд…

          • Alexey Alexey:

            Там есть два разных бутлоадера. Dual Optiboot — который работает с внешней микросхемой и MysBootloader, который навешивается поверх обычного
            Оба решение не без недостатков. В первом случае — лишняя микросхема. Во втором, что прошивка возможна только по воздуху. При обычной прошивке загрузчик стирается. Ну и время начальной загрузки, как вы правильно заметили. Так как сенсоры работают стабильно, решил обойтись пока без прошивки по воздуху

  10. Александр:

    На даче подобный сенсор работает от ионистора и солнечной панельки.
    Вместо ВМЕ280 использую Si7021. АТМега запитана напрямую, а NFR через ХС6206.
    Параллельно ионистроу включена пара синих светодиодов, что бы лишнее сбрасывать.
    Светового дня, даже сейчас, вполне хватает для нормального подзаряда, что можно увидеть на 5ом графике.
    https://thingspeak.com/channels/120642

    • Andrey:

      а какая ёмкость ионистора?

    • Alexey Alexey:

      А можно поподробнее про схему зарядки ионистора от панели?

      • Александр:

        Схема совсем простая:
        Напряжение на солнечной панели, при прямом солнечном свете, доходит примерно до 6В.
        Для ионистроа на 5,5В — это плохо. Поэтому надо как то стравливать лишнюю напругу, я взял пару синих светодиодов, на которых падение напряжения составляет примерно 2,2 — 2,3В (сейчас точно не помню), включил их последовательно, после чего подключил параллельно панельке и ионистору.
        В результате, когда напряжение поднимется выше ~4,5В светодиоды открываются и стравливают лишнее, когда напряжение меньше — они закрыты.

        • Никита:

          а почему не захотели поставить стабилитрон близжайшим номиналом?

          • Alexey Alexey:

            Наверное еще с диодом, чтобы при пониженном напряжении солнечного элемента ионистор не разряжался

          • Александр:

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

  11. Александр:

    Емкость 4Ф, солнечная панелька 4х6 см выдает 40мА.

  12. Никита:

    У людей было огромное множество проблем и головной боли из-за неправильного и плохого питания NRF. Крайне настоятельно рекомендуется ставить конденсатор — часто паяют прямо на PLS гребенке сверху платы.

    Еще хочу предупредить других читателей, что использовать встроенную понижайку на 3.3в ардуины для питания nrf плохая идея. Особенно для pro mini если не ошибаюсь — вплоть до выхода из строя оной понижайки. При питании от 5 в ставьте отдельное питание для NRF и обязательно с конденсатором.

    По поводу не выхода из сна при питании от ноги — лично мне сразу приходит в голову проблема питания в момент старта, и (имхо) очень уж просится туда транзистор. Я не гуру электроники и не знаю сколько там будет утечки, но Вы не пробовали спросить и поискать на форуме MySensors касательно этой проблемы?
    Вот нашел еще статью про режимы и потребление, может будет интересно: http://blog.sci-smart.ru/2014/02/nrf24l01.html

    И кстати там есть функция для отправки напряжения батареи, и судя по https://github.com/Shagrat2/majordomo-mysensor/blob/master/modules/mysensor/phpMS.php#L127 она поддерживается Вашим контроллером сети Majordomo (точнее указанной частью)…

    Вы не тестировали под краном корпус? там случайно не будет по контуру затекать вода и оставаться тонким слоем по днищу? Оно конечно не достанет до электроники, но вот контакт батарейки близко, не знаю как он понравится китайскому железу… и батарейке…

    • Alexey Alexey:

      5В вообще зло для NRF-ки. Причем не только по питанию, но и по SPI
      Когда тестировал проект — подключал NRF24 к UNO. При этом NRF питал от 3.3, все как положено. Но вот логика на выходе UNO была 5В. И те радиомодули, которые поработали в такой схеме, отжирали 1мА в режиме сна. Причем даже с выключенным питанием. Я так понимаю, полетели ключи, которые входы NRF переводят в высокоимпедансное состояние в режиме сна. Причем на работоспособность это никак не сказывалось, только на энергопотребление. Так и запорол несколько модулей. Теперь они стоят в устройствах с сетевым питанием

      Решил что самое надежное — питать и контроллер и NRF 2.7 — 3.3В (на встроенном кварце вполне стабильно все работает)

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

      • Никита:

        Спасибо! про батарейки весьма интересная и полезная информация!
        На энерджайзеры это Вы очень сильно раскошелились!
        Не было ли смысла купить литий-ионный аккумулятор и потом подзаряжать?
        Какая средняя и самая низка минусовая температура у Вас?
        Накопал тест разных типов аккумуляторов, похоже можно использовать все, кроме аклайновых… Но энерджайзеры действительно круты, как и их цена…
        https://fcenter.ru/online/hardarticles/tower/25880-Batarejki_na_moroze

        • Alexey Alexey:

          Литий ионные аккумуляторы заряд теряют процентов на 90. Литий полимерные чуть лучше, но тоже теряют. Например фотик у меня на морозе садится моментально, если его на теле не держать. Никель-металгидридные чуть получше, но у них изначально напряжение низкой. Их нужно 3 штуки ставить
          Солевые батареи тоже теряют, как и щелочные, хотя чуть лучше. Все советуют именно литиевые батарейки. Энержайзер в ДНС оказался дешевле чем GP. Других в доступности не было.
          Самая низкая минусовая у нас -35С. Нынче в ноябре было где-то -15. Средняя тоже в районе -12 — -15

Ваш отзыв