Продолжение. Предыдущая часть.
Заоконный датчик. Железо
Надо сразу признать, что первая версия заоконного (удаленного) датчика получилась не совсем удачной в плане электропитания и энергопотребления. Как я уже писал, у меня под рукой был только модуль 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 В
По мере того как наша аккумуляторная батарея будет разряжаться в тёмное время суток и заряжаться от солнечной батареи, график питающего напряжения будет выглядеть пилообразно, «проседая» в пасмурные дни:
График реальный, взят с веб-морды проекта.
Сборка
Для сборки блока в целом я опять использовал макетную плату под пайку.
Паял, соединял по наитию без предварительной разводки, поэтому никакой схемы у меня нет.
Вот что получилось.
Автор: tim4dev