Продолжение. Предыдущая часть.
Оглавление:
- Часть 1. Требования. Выбор железа. Общая схема
- Часть 2. Софт. Центральный блок, железо
- Часть 3. Центральный блок, софт
- Часть 4. Заоконный датчик
- Часть 5. MySQL, PHP, WWW, Android
Заоконный датчик. Железо
Надо сразу признать, что первая версия заоконного (удаленного) датчика получилась не совсем удачной в плане электропитания и энергопотребления. Как я уже писал, у меня под рукой был только модуль 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 лицевая сторона слева направо | 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+ (смотреть сверху платы где чип, при этом штырьки пинов окажутся снизу):
(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)
Ivanii
10.10.2018 21:36+1Схема соединения Ni-MH элементов у вас интересная, кто-то может повторить.
esaulenka
10.10.2018 23:50+1Да вроде б не страшно — всего лишь работать не будет, без всяких бабахов.
tim4dev Автор
11.10.2018 12:31Тоже поржал.
Спс, поправил.
И да, я так вижу мир, художника каждый обидеть может.
gleb_l
10.10.2018 23:25+1Чтобы внешние датчики с автономным питанием работали долго — они должны преимущественно находиться в режиме сна (те, для которых интегрирование показаний по времени не нужно — например, температура, влажность итд), или по крайней мере собирать и интегрировать данные в оффлайне (скорость/направление ветра), и просыпаться, скажем раз в 15 минут строго на время, необходимое для измерения параметра и обмена данными. Тогда даже на простых пальчиковых батареях датчик проживет год.
Далее, схема контроля напряжения питания, судя по номиналам резисторов, сама жрет 50 микроампер (5В / 100кОм) — в то время, как микроконтроллер вместе c NRF в стендбае может потреблять наверное не более десятка микроампер — имхо, это слишком большая жертва за эту функцию. И зачем такой злой делитель 1:11, если напряжение на аккумуляторах даже при зарядке вряд ли превысит 6-7 вольт? Это приводит к снижению фактической точности измерения из-за недоиспользования динамического диапазона АЦП.
И кстати, солнечная панель подключена в лучших традициях Поднебесной — без токоограничения, защиты от перезаряда, и перенапряжения при случайном отключении аккумулятора при солнечном свете. Летом ваши аккумуляторы могут перезарядиться от избытка энергии Солнца и вспухнуть, а в случае нарушения контакта между аккумуляторами по какой-либо причине напряжение от панели сильно превысит 5 вольт (подозреваю, что там появится все 15), и выбьет 5-вольтовую и 3-вольтовую электронику. Первую задачу можно решить программно (раз уж есть средства измерения напряжения на аккумуляторах) — просто поставив ключ на n-канальном полевике, который отключает панель по земле при перезаряде, а вторую — банально поставив, скажем, стабилитрон вольт на 6 параллельно выводам солнечной панели до отсекающего обратный ток диодаMEG123
10.10.2018 23:51Скажем прямо, куда не глянь всё в конструкции «в лучших традициях китая».
И да, поясняющий рисунок про акки — прекрасен.sim2q
11.10.2018 02:10Там Ni-MH, они перезаряда (если успевают рассеять тепло) не боятся совсем, во многих простых девайсах с ними тупо стоит диод и резистор, вот и вся зарядка. Да я себе на плеер так делал. Но в целом тут конечно всё в «лучших» традициях Ардуино:)
MEG123
11.10.2018 03:01да дело даже не в том что перезаряд, вряд ли панель часто выдаст даже минимум для полноценного заряда.
Там основное потребление идёт с трёх банок, четвёртая в разы меньше работает, дальше можно прикидывать что будет при такой «экологически чистой» схеме подключения например в пасмурную неделю учитывая что четвёртая банка будет всегда хорошо заряжена. Раз уж хотелось побаловаться с вольтметром, баловаться им надо было на 3,3 вольтовом отводе, вот там поди чудеса в течении дня творятся, особенно зимой!
Неудивительно что через 25 дней оно загнулось и дело не в погоде, за те же копейки применив голову вполне можно сделать девайс который будет год работать и без подзарядки и без солнечной батареи.Alexeyslav
11.10.2018 09:56Режим постоянного подзаряда аккумуляторов как раз сведёт на нет эффект несимметричной нагрузки на аккумуляторы, они всегда будут дозаряжаться до упора. Перезаряда не боятся да, но у них начинает проявляться неприятный эффект — эффект памяти. При постоянном перезаряде их реальная емкость начинает со временем сильно падать и восстанавливается только при раскачке. Что в принципе в данном «неэкономичном» девайсе и происходит. Так что в целом всё как бы экологично… Исправь хотябы одну из проблем — начнут вылазить другие косяки, очень такая себе органичная система костылей и подпорок!
Alexeyslav
11.10.2018 09:51Не думаю что там что-то выбъет слабой солнечной батареей которая всего 50мА может отдать в самый солнечный день.
Alexeyslav
11.10.2018 09:59Схема контроля напряжения — фигня, ток через неё по сравнению с другими утечками мизерный. Диод шоттки тот что отделяет солнечную батарею от схемы НАДО ЗАМЕНИТЬ на обычный диод. Одна из неприятностей диода шотки — слишком низкое ОБРАТНОЕ сопротивление порядка 10кОм — через него батареи будут разряжаться на тёмную панель быстрее чем через измерительную цепь в 100 кОм.
tim4dev Автор
11.10.2018 12:39Это уже для версии 2.0 (кто-нибудь другой).
Для начала хотелось посмотреть заработает ли всё это в принципе.
avs24rus
11.10.2018 07:07На даче датчик температуры и влажности (Si7021) подключен к Atmega328.
Питается от солнечной панельки (40х60 мм) + ионистр (4Ф) + 2 синих светодиода.
Atmega запитана напрямую от данного источника, а NRF24 через XC6202.
Устройство спит по 90сек, затем замер, отправка данных (через NRF24) и снова в сон.
Графики
Serge78rus
11.10.2018 09:13Кварц не нужен, для экономии энергии нужно тактироваться от внутреннего RC генератора. Иначе, при каждом выходе из режима спячки, запуск кварцевого генератора (довольно длительный процесс) приводит к бесполезной трате энергии из за лишнего времени, проведенного процессором в активном состоянии.
avs24rus
11.10.2018 09:48Тут конечно стабильность генератора не критична, но все же температура воздуха зимой бывает ниже 40, а летом выше 30.
Даже с кварцем заряженного ионистора хватает часов на 40 с хвостиком.
Alexeyslav
11.10.2018 10:32Измерять номиналы резисторов и прописывать их в прошивку — сомнительно. Какова точность вашего прибора? Сомневаюсь что он проходил поверку и имеет класс точности 0.1. Обычный мультиметр на измерении сопротивлений имеет погрешность 1-2% на диапазон, измерить резистор в 100кОм на диапазоне 200К можно с точностью НЕ ЛУЧШЕ 2%, итоговая погрешность делителя будет ещё хуже — измеряем погоду на марсе и ничем не лучше прописывания номинальных значений. Проще свести значение делителя небольшим подстроечным резистором в 4.7кОм(для данной схемы) это позволит компенсировать погрешность делителя примерно до 4%. А если не нужны столь точные абсолютные значения напряжения батареи(и правда, зачем напряжение знать точно до десятков милливольт?) то все эти пляски с обеспечением точности — ЛИШНИЕ. Более того часто даже и арифметика с плавающей запятой не нужна — всё можно проделать в целых числах, подобрав делитель так чтобы он сразу дал код с АЦП в десятых долях вольта. Останется только при выводе значения вставить запятую в нужную позицию.
Satyricon
11.10.2018 11:01Покупал китайскую метеостанцию. На борту анемометр, флюгер, датчики давления, влажности, температуры, дождя. Питается от двух пальчиковых батареек и отдаёт данные по воздуху в приёмный блок. Батареек хватало на два года при морозах до — 45, обычные дюраселл. Через 5 лет заржавел флюгер с анемометром, ещё позже сгнила электроника. Вот это вещь была :)
Alexeyslav
11.10.2018 11:31Надо было периодически это всё смазывать вазелином… ржавеют даже китайские ножи из нержавеющей стали. А вазелин — отличный консервант для таких вещей, с резиной только не дружит.
iig
11.10.2018 11:33Силикон в аэрозоле?
Alexeyslav
11.10.2018 11:56Или так, или просто в виде мази. Главное перекрыть доступ вредным факторам к защищаемой поверхности. Один минус у вазелина — при +50 начинает плавиться и стекать.
vyacheslavteplyakov
11.10.2018 12:51Чето перемудрёно. Мой опыт.
Имею на баклконе ESP8266 + ds18b20 запитано от одной банки 18650.
Просыпается раз в полчаса, замеряет, отправляет данные на narodmon и mqtt. Это сейчас.
А сначала был модуль зарядки, солнечная панелька, батарейка от мобилки и вот это вот всё.
Все выбросил, раз в месяц подкидываю свежезаряженный 18650, настроено оповещение о падении напряжения питания ниже 2,7v и всё. Собрано за 3 минуты в импровизированный корпус в виде распаячной коробки, работает второй год. Все пишет в облачко, виджет на мобилку, свистелки и пукалки…iig
11.10.2018 13:07На балкон можно кинуть 3 метра провода из квартиры и не думать о зарядке аккумулятора никогда. Или воспользоваться информацией о температуре в вашей местности,
уже измеренной профессионаламиopenweathermap например.vyacheslavteplyakov
11.10.2018 13:20Да можно и метеокамень на веревку повесить, но это же не так интересно…
А как же история за год, минимум, максимум, а сколько градусов было утром, а в августе? А был ли ноль за окном конкретно в твоем районе и т.п. не жизненно важные, но утоляющие любопытство вещи.iig
11.10.2018 13:31А как же история за год
Профессионалы обещают хранить исторические данные за 5 лет…
ntfs1984
11.10.2018 13:04Почему бы не взять ESP8266, которая:
1. По цене такая же;
2. По функционалу навороченнее;
3. Имеет WiFi на борту;
4. Умеет в sleep, чем экономит ресурс аккумулятора в несколько раз;
5. Занимает меньше размеров;
6. Благодаря пункту 2, может работать как независимое устройство, т.е. считать, запоминать, а потом скажем раз в час отдавать в пакетном режиме центральному серверу.
ZhenyaRUS39
11.10.2018 18:40Объясните чайнику, так как в итоге во fritzing должна выглядеть схема подключения батареи через такой счетчик напряжения?
Большое спасибо.
serafims
12.10.2018 10:45+2" Я не применял понижающие (точнее уничтожающие энергию) или повышающие электронные схемы, только экологически чистые напряжение и ток."
Понижающие преобразователи бывают импульсные, а не линейные стабилизаторы, они горааздо меньше энергии в тепло преобразуют.
Serge78rus
Судя по графику напряжения, Ваше изделие жрет, как не в себе. Примерно на той же элементной базе (вместо Ардуины голый atmega328) у меня:
(Красный график — напряжение солнечной батареи, синий — буферный литиевый аккумулятор ~700 мА*час)
iig
"изделие жрет, как не в себе"
Зато экологически чистое напряжение.;)
ivaneska
Добрый день, а не покажете схемку того, как вы это реализовали? Точнее как вы подключили свою солнечную панель. — у меня питание проца напрямую от liion аккумулятора берется. Солнечная панель на 5.5В в прыжке даёт 30мА. Обычно это около 1мА которые нужно как то грамотно запихнуть в аккумулятор. Само устрйство в среднем ест 0,1мА поэтому и такого зарядного тока хватит. Но как лучше это сделать?
Serge78rus
За простотой реализации схемы как таковой не рисовал. В качестве контроллера заряда используется TP4056, точнее китайская платка на его основе (та, которая без дополнительных цепей защиты на DW01A и ES8205A (для снижения потерь)). На плате выдраны 2 светодиода индикации (для экономии) и заменен резистор, управляющий током заряда с 1.2 кОм на 10 кОм (максимальное значение по документации). Уменьшить ток заряда необходимо для корректной отработки алгоритма определения конца заряда. Солнечная панель подключена ко входу питания TP4056, а к выходу — аккумулятор и, параллельно ему, через стабилизатор 3.3 В, вся электроника. В качестве стабилизатора используется XC6206 с собственным током потребления порядка 1 мкА. Все блокировки по питанию — керамика, никаких электролитов. Вот, собственно, и все.
ivaneska
Спасибо за ответ. Пара вопросов:
1. Зачем ставить стабилитрон, если у вас аккумулятор заряжается только от TP4056 который не даст аккумулятору перезарядиться: Вам противопоказано более 3.3В?
2. Будет ли плата заряжать АКБ при условии низкой освещенности, когда от батареи можно снять 4-5В и 1-2мА как часто бывает?
Serge78rus
1. Трансивер требует 3.3 В, остальная электроника запитана от того-же напряжения, чтобы не заниматься согласованием уровней. (Только не стабилитрон, а стабилизатор.)
Это напряжение панели. Видно, что только 07.01.2018 аккумулятор полностью зарядился (зарядка — горизонтальная полочка на уровне чуть выше 4 В) и зарядка отключилась — резко увеличилось напряжение панели без нагрузки.
2. При 4 В — полного заряда не будет, а при 5 — это нормальное входное напряжение для контроллера заряда. Ток заряда уже не помню, но несколько выше, чем Вы указали — по моему 10...20 мА. У меня станция стоит в тени, прямое солнце на нее почти не попадает (иначе температура получается завышенной, несмотря на прикрытый козырьком датчик). Используется солнечная панель размером примерно 100х70 мм, купленная у китайцев (заявленное напряжение 5.5 В, ток — не помню, но на уровне больше сотни мА). Работает все с осени 2015 без какого-либо вмешательства. В середине зимы бывают периоды, когда батарея целую неделю не может получить полного заряда, но поскольку ее хватает на несколько месяцев без подзарядки, это не критично. Пример такого «тяжелого периода» на графике ниже
ivaneska
Спасибо большое за ответ!
В общем буду экспериментировать.
Всё упирается в то, что моя панельна 30*50мм выдаёт всего 30мА при 5.5В и отличном освещении.
Я собираю показания температуры из 10-и помещений — датчики валяются везде не на солнце, они компактные и также работают по полгода от заряда 350мА аккума, но всё таки заряжать их надоело и хочется автономности. Буду тестить.
Кстати nre24l01, если Вы ими пользуетесь, отлично работают при 4.2В в определенный момент я перешел с 3.3 на напряжение аккумулятора.
Serge78rus
У меня используются nrf24l01, а для них в спецификации «английским по белому» написано: 1.9 to 3.6V supply range
tim4dev Автор
изделие жрет, как не в себе
Не то слово.
AnthonyDS
А почему atmega328, может взять, что попроще? ATMega48/88/16, в рабочем режиме потребляет 250 мкА?
Alexeyslav
250мкА это скорей от встроенного низкочастотного RC-генератора, там тактовая частота в районе сотни килогерц. На попроще контроллеры прошивка ардуиновская может «не влезть».
Serge78rus
Потому, что было, т.к. использовал их по работе.