Оптимизированные решения питания для проектов на Arduino
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Adafruit PowerBoost Charger Shield | 1 | |
| LiPo-аккумулятор (3.7–4.2 В) | 1 | Заряжаемый |
| Arduino UNO | 1 |
О проекте
Обычные проекты на Arduino не требуют сложного управления питанием: подали питание — работает, убрали — выключилось. Но для автономных устройств (логирование данных, удаленный мониторинг) полезно контролировать заряд батареи, корректно завершать работу и логировать причину остановки.
Проект представляет модульную систему управления питанием: от простого кнопки вкл/выкл до логирования напряжения батареи на SD-карту с таймстемпами. База — Adafruit PowerBoost Shield + LiPo. Можно включать только нужные подсистемы.
Обзор функций
- Включение/выключение кратковременной кнопкой (как в телефоне)
- Мониторинг напряжения батареи через АЦП Arduino
- Автоматическое выключение при критически низком напряжении
- Запись напряжения и сообщения о выключении на SD-карту
- Индикация заряда RGB-светодиодом (зеленый >50%, желтый 20–50%, красный <20%)
Все функции реализуются через две пользовательские функции: arduinoPowerSetup() в setup() и arduinoPowerMonitor() в loop().
Adafruit PowerBoost Shield
Заряжает LiPo и повышает напряжение до 5В. Есть три версии: два breakout и Shield для Arduino. Здесь используется Shield. Подготовка:
- Припаять stacking headers
- Не припаивать встроенный переключатель
- Припаять провод (4 дюйма, 22 AWG) к пину Enable
- Замкнуть пады для аналогового пина A0 на нижней стороне шилда (подключает Vbat к A0)
Схема вкл/выкл кнопкой
Нажатие на выключенном устройстве включает PowerBoost → Arduino загружается. Повторное нажатие (и отпускание) — Arduino подает LOW на Enable → PowerBoost отключается → Arduino гаснет. Это позволяет записать лог перед выключением.

Можно использовать и встроенный переключатель PowerBoost, но тогда нет программного контроля и логирования.
Мониторинг напряжения батареи
LiPo: 4.25 В (заряжен) – 3.7 В (разряжен). АЦП Arduino (0–5 В → 0–1023). Vbat подключен к A0 через замкнутые пады на шилде.
float maxVoltage = 4.25;
float minVoltage = 3.75;
float arduinoPowerVoltage = float(analogRead(A0)) / 1024.0 * 5.0;
float fractionalVoltage = (arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage);
Разряд нелинеен, но для оценки достаточно. Индикация RGB LED (общий анод) через два резистора 1кОм на красный и зеленый каналы (синий не используется). Питание LED от 3.3В. Для устранения дребезга измерений — конденсатор 0.1 мкФ между A0 и GND.


Скетч arduino_2_voltage_led реализует вкл/выкл и индикацию. Для отладки раскомментируйте Serial.print.
Логирование напряжения на SD-карту
Используется Adafruit Data Logging Shield (RTC + SD). Данные в CSV с таймстемпами. Важно: логировать сообщение о выключении (нормальное или по низкому заряду). Скетч arduino_3_voltage_logging включает утилиты форматирования времени и мигание красным LED, если нет SD-карты.

Данные напряжения
График разряда за ~20 часов. Падение почти линейное. Конденсатор 0.1 мкФ на A0 сильно сглаживает шум (фиолетовая линия vs синяя).


Логирование окружения (температура, влажность)
Добавляем датчик DHT22 (пин 5, так как пин 2 занят кнопкой). Код в arduino_4_voltage_temp_humidity_logging. Собран на Adafruit Proto Shield.
Энергосбережение
Следующий этап — снижение потребления для увеличения автономности. База — руководство Adafruit «Low Power Datalogging» от Tony DiCola.
Ссылки на код и связанные проекты
- Репозиторий проекта: github.com/craic/arduino_power
- LiPoPi (аналогичное для Raspberry Pi): github.com/NeonHorizon/lipopi
- Pi Power: github.com/craic/pi_power
Производственный процесс
- Измерение рассеивания мощности в резисторах: практический эксперимент с законом Джоуля
- Источники питания: переменный и постоянный ток
- Технология бульдозеров: дизайн, производство и будущие инновации
- Батареи: от вольтовой стопки к современным литийным элементам
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Ветровая энергетика: превращение движения воздуха в чистую электроэнергию
- Влияние сокращения субсидий на промышленность силовых батарей Китая