Метеостанция на Arduino от А до Я. Часть 4

в 13:50, , рубрики: arduino, diy или сделай сам, метеостанция, Разработка под Arduino

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

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

Надо сразу признать, что первая версия заоконного (удаленного) датчика получилась не совсем удачной в плане электропитания и энергопотребления. Как я уже писал, у меня под рукой был только модуль 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мкФ.

Метеостанция на Arduino от А до Я. Часть 4 - 2

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

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

Датчик температуры и влажности 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.

Метеостанция на Arduino от А до Я. Часть 4 - 5

У меня резисторы делителя напряжения на 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 В

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

График

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

Сборка

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

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

Сборка

Автор: tim4dev

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js