Продолжение. Предыдущая часть.
Оглавление:



Заоконный датчик. Железо


Надо сразу признать, что первая версия заоконного (удаленного) датчика получилась не совсем удачной в плане электропитания и энергопотребления. Как я уже писал, у меня под рукой был только модуль Arduino Pro Mini на 5 В. И я использовал Ni-MH аккумуляторы.


При том, что я подсоединил ещё и солнечную батарею вся конструкция у меня проработала автономно около 25 дней. Очень отрицательно на ёмкость аккумуляторов повлияли низкие, часто отрицательные температуры на улице конца зимы.


Чтобы у вас всё работало гораздо дольше, произведите следующие замены:


  • Купите Arduino Pro Mini на 3,3В
  • Используйте Li-ion аккумулятор типа Panasonic NCR18650A на 3,7 В, 2 шт. примерно за $14 на 3100mAh. Можете попробовать CR123, CR123A батареи. И помните о том, что 9В батарея (типа "Крона") плохой источник питания.

Главное, что надо помнить, это то, что ваши аккумуляторы будут работать на улице, т.е. при отрицательных температурах, которые замедляют химические процессы происходящие внутри них и, тем самым, сильно снижают их ёмкость.


Датчик DHT22 сможет работать и от 3,3 В, так что тут всё путём.


Вышеописанные перестановки не повлекут переделки или замены других компонент.


Питание


Первоначально я использовал 4 шт. Ni-MH аккумулятора соединённых последовательно с отводом от 3-его, так что получилось два питающих напряжения: на 4,8 В для датчика DHT22 и 3,6 В для всего остального. Я не применял понижающие (точнее уничтожающие энергию) или повышающие электронные схемы, только экологически чистые напряжение и ток.


Питание


Солнечная панель подключена как показано на рисунке. Solar панель 1.6W 5.5V 266mA покупалась за $6,64.


В схеме использован диод Шоттки типа 1N914 и электролитический конденсатор 50—100мкФ.



Распиновка и соединение


Приступим к сборке.


Датчик температуры и влажности DHT22


DHT22


Распиновка для подключения датчика температуры и влажности DHT22:


DHT22 лицевая сторона слева направо Arduino Pro Mini Примечание
VCC 3,3 — 5В Рекомендуется 5В, лучше внешнее питание
SDA D2 В скетче это DHTPIN
NC Не подсоединен
GND GND

Опционально можно подключить (подтянуть) SDA через 10K резистор к VCC.


Инициализация:


#define DHTPIN 2 // цифровой пин D2
DHT dht(DHTPIN, DHTTYPE);

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


nRF24L01+


nRF24L01+


Распиновка модуля радио nRF24L01+ (смотреть сверху платы где чип, при этом штырьки пинов окажутся снизу):


(2) 3,3V (4) CSN (6) MOSI (8) IRQ
(1) GND (3) CE (5) SCK (7) MISO

Подключение nRF24L01+


Arduino Pro Mini nRF24L01+ Примечание
3,3V VCC (2) Лучше внешнее питание
pin D8 CE (3) chip enable in
SS pin D10 CSN (4) chip select in
SCK pin D13 SCK (5) SPI clock in
MOSI pin D11 SDI (6) SPI Data in
MISO pin D12 SDO (7) SPI data out
IRQ 8 Interrupt output, не подсоединен
GND GND (1)

Инициализация:


NRF24 nrf24(8, 10);

Как советуют на форумах, к выводам питания nRF24L01+ сразу припаял электролитический конденсатор небольшой ёмкости (10мкФ).


Радио-модуль у меня с внешней дополнительной антенной, две стены «пробивает» надёжно.


Вольтметр


Заоконный датчик имеет вольтметр для измерения питающего напряжения батареи. Технология измерения описана Scott Daniels «Secret Arduino Voltmeter – Measure Battery Voltage», 2012.


Данные считываются с аналогового пина A1.



У меня резисторы делителя напряжения на 100 КОм и 10 КОм (у вас могут быть немного отличающиеся номиналы, их необходимо точно измерить омметром).


const float r1 = 100400; // 100KOm
const float r2 = 9960;   // 10KOm

Следующую константу необходимо откалибровать индивидуально как описано у Scott Daniels. Используя отдельную схемку и скетч.


Измерим два значения Vcc: реальный Vcc с помощью вольтметра (на пине AREF или 5V) и Vcc с помощью нашей функции. Затем заменим константу (1.1 * 1023.0 * 1000) на новую:


scale_constant = internal1.1Ref * 1023 * 1000

где internal1.1Ref = 1.1 * Vcc1 (с вольтметром) / Vcc2 (с нашей функцией)


где


  • Vcc1 — значение Vcc измеренное вручную с вольтметром
  • Vcc2 — значение Vcc определенное с помощью нашей функции

Это эталонное значение будет индивидуальным для конкретного AVR чипа и будет зависеть от колебаний температуры.


В итоге у меня получилось такое значение:


const float typVbg = 1.082; // обычно в пределах 1.0 — 1.2 В

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


График


График реальный, взят с веб-морды проекта.


Сборка


Для сборки блока в целом я опять использовал макетную плату под пайку.
Паял, соединял по наитию без предварительной разводки, поэтому никакой схемы у меня нет.


Вот что получилось.


Сборка

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


  1. Serge78rus
    10.10.2018 17:26
    +2

    Судя по графику напряжения, Ваше изделие жрет, как не в себе. Примерно на той же элементной базе (вместо Ардуины голый atmega328) у меня:(Красный график — напряжение солнечной батареи, синий — буферный литиевый аккумулятор ~700 мА*час)


    1. iig
      10.10.2018 23:24

      "изделие жрет, как не в себе"


      Зато экологически чистое напряжение.;)


    1. ivaneska
      11.10.2018 09:04

      Добрый день, а не покажете схемку того, как вы это реализовали? Точнее как вы подключили свою солнечную панель. — у меня питание проца напрямую от liion аккумулятора берется. Солнечная панель на 5.5В в прыжке даёт 30мА. Обычно это около 1мА которые нужно как то грамотно запихнуть в аккумулятор. Само устрйство в среднем ест 0,1мА поэтому и такого зарядного тока хватит. Но как лучше это сделать?


      1. Serge78rus
        11.10.2018 12:43

        За простотой реализации схемы как таковой не рисовал. В качестве контроллера заряда используется TP4056, точнее китайская платка на его основе (та, которая без дополнительных цепей защиты на DW01A и ES8205A (для снижения потерь)). На плате выдраны 2 светодиода индикации (для экономии) и заменен резистор, управляющий током заряда с 1.2 кОм на 10 кОм (максимальное значение по документации). Уменьшить ток заряда необходимо для корректной отработки алгоритма определения конца заряда. Солнечная панель подключена ко входу питания TP4056, а к выходу — аккумулятор и, параллельно ему, через стабилизатор 3.3 В, вся электроника. В качестве стабилизатора используется XC6206 с собственным током потребления порядка 1 мкА. Все блокировки по питанию — керамика, никаких электролитов. Вот, собственно, и все.


        1. ivaneska
          11.10.2018 13:10

          Спасибо за ответ. Пара вопросов:
          1. Зачем ставить стабилитрон, если у вас аккумулятор заряжается только от TP4056 который не даст аккумулятору перезарядиться: Вам противопоказано более 3.3В?
          2. Будет ли плата заряжать АКБ при условии низкой освещенности, когда от батареи можно снять 4-5В и 1-2мА как часто бывает?


          1. Serge78rus
            11.10.2018 14:50

            1. Трансивер требует 3.3 В, остальная электроника запитана от того-же напряжения, чтобы не заниматься согласованием уровней. (Только не стабилитрон, а стабилизатор.)
            2. При 4 В — полного заряда не будет, а при 5 — это нормальное входное напряжение для контроллера заряда. Ток заряда уже не помню, но несколько выше, чем Вы указали — по моему 10...20 мА. У меня станция стоит в тени, прямое солнце на нее почти не попадает (иначе температура получается завышенной, несмотря на прикрытый козырьком датчик). Используется солнечная панель размером примерно 100х70 мм, купленная у китайцев (заявленное напряжение 5.5 В, ток — не помню, но на уровне больше сотни мА). Работает все с осени 2015 без какого-либо вмешательства. В середине зимы бывают периоды, когда батарея целую неделю не может получить полного заряда, но поскольку ее хватает на несколько месяцев без подзарядки, это не критично. Пример такого «тяжелого периода» на графике нижеЭто напряжение панели. Видно, что только 07.01.2018 аккумулятор полностью зарядился (зарядка — горизонтальная полочка на уровне чуть выше 4 В) и зарядка отключилась — резко увеличилось напряжение панели без нагрузки.


            1. ivaneska
              11.10.2018 15:06

              Спасибо большое за ответ!
              В общем буду экспериментировать.
              Всё упирается в то, что моя панельна 30*50мм выдаёт всего 30мА при 5.5В и отличном освещении.
              Я собираю показания температуры из 10-и помещений — датчики валяются везде не на солнце, они компактные и также работают по полгода от заряда 350мА аккума, но всё таки заряжать их надоело и хочется автономности. Буду тестить.

              Кстати nre24l01, если Вы ими пользуетесь, отлично работают при 4.2В в определенный момент я перешел с 3.3 на напряжение аккумулятора.


              1. Serge78rus
                11.10.2018 15:35

                У меня используются nrf24l01, а для них в спецификации «английским по белому» написано: 1.9 to 3.6V supply range


    1. tim4dev Автор
      11.10.2018 13:08

      изделие жрет, как не в себе

      Не то слово.


    1. AnthonyDS
      11.10.2018 16:03

      А почему atmega328, может взять, что попроще? ATMega48/88/16, в рабочем режиме потребляет 250 мкА?


      1. Alexeyslav
        11.10.2018 16:35

        250мкА это скорей от встроенного низкочастотного RC-генератора, там тактовая частота в районе сотни килогерц. На попроще контроллеры прошивка ардуиновская может «не влезть».


      1. Serge78rus
        11.10.2018 20:25

        Потому, что было, т.к. использовал их по работе.


  1. Ivanii
    10.10.2018 21:36
    +1

    Схема соединения Ni-MH элементов у вас интересная, кто-то может повторить.


    1. esaulenka
      10.10.2018 23:50
      +1

      Да вроде б не страшно — всего лишь работать не будет, без всяких бабахов.


    1. tim4dev Автор
      11.10.2018 12:31

      Тоже поржал.
      Спс, поправил.
      И да, я так вижу мир, художника каждый обидеть может.


  1. gleb_l
    10.10.2018 23:25
    +1

    Чтобы внешние датчики с автономным питанием работали долго — они должны преимущественно находиться в режиме сна (те, для которых интегрирование показаний по времени не нужно — например, температура, влажность итд), или по крайней мере собирать и интегрировать данные в оффлайне (скорость/направление ветра), и просыпаться, скажем раз в 15 минут строго на время, необходимое для измерения параметра и обмена данными. Тогда даже на простых пальчиковых батареях датчик проживет год.

    Далее, схема контроля напряжения питания, судя по номиналам резисторов, сама жрет 50 микроампер (5В / 100кОм) — в то время, как микроконтроллер вместе c NRF в стендбае может потреблять наверное не более десятка микроампер — имхо, это слишком большая жертва за эту функцию. И зачем такой злой делитель 1:11, если напряжение на аккумуляторах даже при зарядке вряд ли превысит 6-7 вольт? Это приводит к снижению фактической точности измерения из-за недоиспользования динамического диапазона АЦП.

    И кстати, солнечная панель подключена в лучших традициях Поднебесной — без токоограничения, защиты от перезаряда, и перенапряжения при случайном отключении аккумулятора при солнечном свете. Летом ваши аккумуляторы могут перезарядиться от избытка энергии Солнца и вспухнуть, а в случае нарушения контакта между аккумуляторами по какой-либо причине напряжение от панели сильно превысит 5 вольт (подозреваю, что там появится все 15), и выбьет 5-вольтовую и 3-вольтовую электронику. Первую задачу можно решить программно (раз уж есть средства измерения напряжения на аккумуляторах) — просто поставив ключ на n-канальном полевике, который отключает панель по земле при перезаряде, а вторую — банально поставив, скажем, стабилитрон вольт на 6 параллельно выводам солнечной панели до отсекающего обратный ток диода


    1. MEG123
      10.10.2018 23:51

      Скажем прямо, куда не глянь всё в конструкции «в лучших традициях китая».
      И да, поясняющий рисунок про акки — прекрасен.


      1. sim2q
        11.10.2018 02:10

        Там Ni-MH, они перезаряда (если успевают рассеять тепло) не боятся совсем, во многих простых девайсах с ними тупо стоит диод и резистор, вот и вся зарядка. Да я себе на плеер так делал. Но в целом тут конечно всё в «лучших» традициях Ардуино:)


        1. MEG123
          11.10.2018 03:01

          да дело даже не в том что перезаряд, вряд ли панель часто выдаст даже минимум для полноценного заряда.
          Там основное потребление идёт с трёх банок, четвёртая в разы меньше работает, дальше можно прикидывать что будет при такой «экологически чистой» схеме подключения например в пасмурную неделю учитывая что четвёртая банка будет всегда хорошо заряжена. Раз уж хотелось побаловаться с вольтметром, баловаться им надо было на 3,3 вольтовом отводе, вот там поди чудеса в течении дня творятся, особенно зимой!
          Неудивительно что через 25 дней оно загнулось и дело не в погоде, за те же копейки применив голову вполне можно сделать девайс который будет год работать и без подзарядки и без солнечной батареи.


          1. Alexeyslav
            11.10.2018 09:56

            Режим постоянного подзаряда аккумуляторов как раз сведёт на нет эффект несимметричной нагрузки на аккумуляторы, они всегда будут дозаряжаться до упора. Перезаряда не боятся да, но у них начинает проявляться неприятный эффект — эффект памяти. При постоянном перезаряде их реальная емкость начинает со временем сильно падать и восстанавливается только при раскачке. Что в принципе в данном «неэкономичном» девайсе и происходит. Так что в целом всё как бы экологично… Исправь хотябы одну из проблем — начнут вылазить другие косяки, очень такая себе органичная система костылей и подпорок!


    1. Alexeyslav
      11.10.2018 09:51

      Не думаю что там что-то выбъет слабой солнечной батареей которая всего 50мА может отдать в самый солнечный день.


    1. Alexeyslav
      11.10.2018 09:59

      Схема контроля напряжения — фигня, ток через неё по сравнению с другими утечками мизерный. Диод шоттки тот что отделяет солнечную батарею от схемы НАДО ЗАМЕНИТЬ на обычный диод. Одна из неприятностей диода шотки — слишком низкое ОБРАТНОЕ сопротивление порядка 10кОм — через него батареи будут разряжаться на тёмную панель быстрее чем через измерительную цепь в 100 кОм.


    1. tim4dev Автор
      11.10.2018 12:39

      Это уже для версии 2.0 (кто-нибудь другой).
      Для начала хотелось посмотреть заработает ли всё это в принципе.


  1. Dr_Faksov
    11.10.2018 05:14

    image

    Не пытайтесь повторить это дома!


    1. tim4dev Автор
      11.10.2018 12:34
      -1

      Тест на внимательность )


  1. avs24rus
    11.10.2018 07:07

    На даче датчик температуры и влажности (Si7021) подключен к Atmega328.
    Питается от солнечной панельки (40х60 мм) + ионистр (4Ф) + 2 синих светодиода.
    Atmega запитана напрямую от данного источника, а NRF24 через XC6202.
    Устройство спит по 90сек, затем замер, отправка данных (через NRF24) и снова в сон.

    Графики


    1. Serge78rus
      11.10.2018 09:13

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


      1. avs24rus
        11.10.2018 09:48

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


  1. Alexeyslav
    11.10.2018 10:32

    Измерять номиналы резисторов и прописывать их в прошивку — сомнительно. Какова точность вашего прибора? Сомневаюсь что он проходил поверку и имеет класс точности 0.1. Обычный мультиметр на измерении сопротивлений имеет погрешность 1-2% на диапазон, измерить резистор в 100кОм на диапазоне 200К можно с точностью НЕ ЛУЧШЕ 2%, итоговая погрешность делителя будет ещё хуже — измеряем погоду на марсе и ничем не лучше прописывания номинальных значений. Проще свести значение делителя небольшим подстроечным резистором в 4.7кОм(для данной схемы) это позволит компенсировать погрешность делителя примерно до 4%. А если не нужны столь точные абсолютные значения напряжения батареи(и правда, зачем напряжение знать точно до десятков милливольт?) то все эти пляски с обеспечением точности — ЛИШНИЕ. Более того часто даже и арифметика с плавающей запятой не нужна — всё можно проделать в целых числах, подобрав делитель так чтобы он сразу дал код с АЦП в десятых долях вольта. Останется только при выводе значения вставить запятую в нужную позицию.


  1. Satyricon
    11.10.2018 11:01

    Покупал китайскую метеостанцию. На борту анемометр, флюгер, датчики давления, влажности, температуры, дождя. Питается от двух пальчиковых батареек и отдаёт данные по воздуху в приёмный блок. Батареек хватало на два года при морозах до — 45, обычные дюраселл. Через 5 лет заржавел флюгер с анемометром, ещё позже сгнила электроника. Вот это вещь была :)


    1. Alexeyslav
      11.10.2018 11:31

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


      1. iig
        11.10.2018 11:33

        Силикон в аэрозоле?


        1. Alexeyslav
          11.10.2018 11:56

          Или так, или просто в виде мази. Главное перекрыть доступ вредным факторам к защищаемой поверхности. Один минус у вазелина — при +50 начинает плавиться и стекать.


  1. vyacheslavteplyakov
    11.10.2018 12:51

    Чето перемудрёно. Мой опыт.
    Имею на баклконе ESP8266 + ds18b20 запитано от одной банки 18650.
    Просыпается раз в полчаса, замеряет, отправляет данные на narodmon и mqtt. Это сейчас.
    А сначала был модуль зарядки, солнечная панелька, батарейка от мобилки и вот это вот всё.
    Все выбросил, раз в месяц подкидываю свежезаряженный 18650, настроено оповещение о падении напряжения питания ниже 2,7v и всё. Собрано за 3 минуты в импровизированный корпус в виде распаячной коробки, работает второй год. Все пишет в облачко, виджет на мобилку, свистелки и пукалки…


    1. iig
      11.10.2018 13:07

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

      уже измеренной профессионалами
      openweathermap например.


      1. vyacheslavteplyakov
        11.10.2018 13:20

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


        1. iig
          11.10.2018 13:31

          А как же история за год


          Профессионалы обещают хранить исторические данные за 5 лет…


  1. ntfs1984
    11.10.2018 13:04

    Почему бы не взять ESP8266, которая:

    1. По цене такая же;
    2. По функционалу навороченнее;
    3. Имеет WiFi на борту;
    4. Умеет в sleep, чем экономит ресурс аккумулятора в несколько раз;
    5. Занимает меньше размеров;
    6. Благодаря пункту 2, может работать как независимое устройство, т.е. считать, запоминать, а потом скажем раз в час отдавать в пакетном режиме центральному серверу.


    1. iig
      11.10.2018 13:13

      Зачем забивать шурупы ломом, если молотком их забивать удобнее? ;)


  1. ZhenyaRUS39
    11.10.2018 18:40

    Объясните чайнику, так как в итоге во fritzing должна выглядеть схема подключения батареи через такой счетчик напряжения?
    Большое спасибо.


    1. tim4dev Автор
      11.10.2018 18:40

      Сделаю отдельный пост чуть позже.


  1. serafims
    12.10.2018 10:45
    +2

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