Мониторинг питания (INA219/Делители)
Как робот понимает, что батарея садится? Как узнать, какой мотор “жрет” больше всего энергии? Ответ — мониторинг питания. Это система, которая постоянно измеряет напряжение, ток и вычисляет потребляемую мощность.
Зачем это нужно в 2026?
- Предсказание времени работы: “Батарея на 40%, осталось 2 часа работы”
- Защита от аварий: “Ток превысил 5А → экстренное отключение”
- Оптимизация: “В режиме ожидания потребление 10мА, можно спать дольше”
- Диагностика: “Мотор 2 потребляет в 2 раза больше тока → проверь подшипники”
Основные методы измерения
1. INA219 — профессиональное решение
Что это: Готовый модуль с точным измерителем напряжения и тока.
Что измеряет:
- Напряжение: 0-26V (с точностью 0.1%)
- Ток: до 3.2A (можно масштабировать шунтом)
- Мощность: автоматический расчет
- Энергию: накопленную за время работы
Схема подключения:
[Батарея +] ─── INA219 IN+ ─── INA219 OUT+ ─── [Нагрузка +]
│ │
[Батарея -] ───────────┴────────────────┴────── [Нагрузка -]
(измеряет ток через шунт)
Код для Arduino:
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
void setup() {
Serial.begin(9600);
ina219.begin();
}
void loop() {
float voltage = ina219.getBusVoltage_V(); // Напряжение
float current = ina219.getCurrent_mA(); // Ток (мА)
float power = voltage * (current/1000); // Мощность (Вт)
Serial.print("V: "); Serial.print(voltage);
Serial.print("V, I: "); Serial.print(current);
Serial.print("mA, P: "); Serial.print(power);
Serial.println("W");
// Проверка низкого напряжения
if (voltage < 3.3) {
Serial.println("ВНИМАНИЕ! Батарея разряжена!");
goToCharger();
}
}
2. Делитель напряжения — просто и дешево
Что это: 2 резистора для измерения высоких напряжений.
Принцип работы:
[Бат. 12V] ─── R1 (10к) ────[ADC pin]─── R2 (2к) ─── GND
↓
V_adc = 12V × (R2/(R1+R2)) = 2V
Расчет напряжения:
float readVoltage() {
int adcValue = analogRead(A0);
float adcVoltage = adcValue * (5.0 / 1023.0); // Для Arduino 5V
float realVoltage = adcVoltage * ((R1 + R2) / R2);
return realVoltage;
}
3. ACS712/ACS723 — датчики тока
Что это: Датчики на эффекте Холла, измеряют ток без разрыва цепи.
Типы:
- ACS712-05B: ±5A (для электроники)
- ACS712-20A: ±20A (для моторов)
- ACS712-30A: ±30A (для мощных систем)
Подключение:
[Источник +] ────┬───[Нагрузка +]
↓
ACS712
↓
[Источник -] ────┴───[Нагрузка -]
Практические схемы для школьных проектов
Схема 1: Мониторинг всего робота
[Батарея] → [INA219] → [Преобразователь] → [Arduino + Датчики]
↓
[Моторы через драйвер]
Схема 2: Измерение отдельных компонентов
┌──[INA219#1]──[Мотор Левый]
[Батарея]─────┼──[INA219#2]──[Мотор Правый]
└──[INA219#3]──[Электроника]
Схема 3: Бюджетный вариант
[Батарея] → [Делитель на A0] → [Arduino]
↓
[ACS712 на A1] → [Моторы]
Что измерять и как использовать данные
Критические параметры:
Напряжение батареи:
- Li-Ion: 4.2V (полная) → 3.0V (пустая)
- Оповещение при <3.3V
Ток потребления:
- Норма: 100-500мА (электроника)
- Пик: 1-5А (старт моторов)
- Тревога при >3А дольше 10 секунд
Мощность:
- Расчет: P = U × I
- Для оптимизации энергопотребления
Пример логики робота:
void powerManagement() {
float voltage = readBatteryVoltage();
float current = readTotalCurrent();
// Уровень заряда
if (voltage > 4.0) batLevel = 100;
else if (voltage > 3.7) batLevel = 50;
else if (voltage > 3.3) batLevel = 20;
else if (voltage > 3.0) batLevel = 5;
else emergencyShutdown();
// Перегрузка по току
if (current > MAX_CURRENT) {
reduceMotorPower();
logError("Overcurrent detected");
}
// Передача телеметрии
sendTelemetry(voltage, current, batLevel);
}
Проекты для школы
Проект 1: “Умная” зарядка робота
Робот сам подъезжает к зарядке, когда:
• Напряжение < 3.5V
• Или осталось <15% заряда
• Или прошло >2 часа работы
Проект 2: Энергетическая карта движения
Робот записывает:
• Сколько энергии потратил на каждом участке
• Где были самые большие затраты
• Как оптимизировать маршрут
Проект 3: Система оповещения
При проблемах:
• Батарея <10% → мигает красный светодиод
• Перегрузка → пищит зуммер
• Норма → зеленый светодиод
Ошибки и решения
Проблема 1: “INA219 показывает неправильный ток”
Решение:
1. Проверить подключение IN-/OUT-
2. Калибровать через setCalibration_32V_1A()
3. Проверить шунт (обычно 0.1 Ом)
Проблема 2: “Делитель напряжения неточный”
Решение:
1. Использовать прецизионные резисторы (1%)
2. Добавить конденсатор для фильтрации
3. Калибровать с эталонным вольтметром
Проблема 3: “ACS712 шумит при выключенном токе”
Решение:
1. Добавить фильтр по скользящему среднему
2. Игнорировать значения <0.1A
3. Использовать ACS723 (меньше шума)
Эксперимент: Измерь потребление своего телефона
Что нужно: INA219, Power Bank, кабель USB
Шаги:
- Подключите: Power Bank → INA219 → телефон
- Измерьте ток при:
- Выключенном экране
- Просмотре видео
- Игре
- Зарядке
Результат: Вы увидите, как меняется потребление в разных режимах!
Что дальше?
Освоили мониторинг? Теперь можно:
- Энергосбережение — как использовать данные для экономии энергии
- Телеметрия — как передавать данные на компьютер
- Анализ данных — как находить закономерности в потреблении
Совет: Начните с простого — измерьте потребление одного светодиода. Потом добавьте мотор. Потом весь робот. Так вы поймете, как складывается энергопотребление.
