Skip to main content

Мониторинг питания (INA219/Делители)

Как робот понимает, что батарея садится? Как узнать, какой мотор “жрет” больше всего энергии? Ответ — мониторинг питания. Это система, которая постоянно измеряет напряжение, ток и вычисляет потребляемую мощность.

Зачем это нужно в 2026?

  1. Предсказание времени работы: “Батарея на 40%, осталось 2 часа работы”
  2. Защита от аварий: “Ток превысил 5А → экстренное отключение”
  3. Оптимизация: “В режиме ожидания потребление 10мА, можно спать дольше”
  4. Диагностика: “Мотор 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] → [Моторы]

Что измерять и как использовать данные

Критические параметры:

  1. Напряжение батареи:

    • Li-Ion: 4.2V (полная) → 3.0V (пустая)
    • Оповещение при <3.3V
  2. Ток потребления:

    • Норма: 100-500мА (электроника)
    • Пик: 1-5А (старт моторов)
    • Тревога при >3А дольше 10 секунд
  3. Мощность:

    • Расчет: 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

Шаги:

  1. Подключите: Power Bank → INA219 → телефон
  2. Измерьте ток при:
    • Выключенном экране
    • Просмотре видео
    • Игре
    • Зарядке

Результат: Вы увидите, как меняется потребление в разных режимах!

Что дальше?

Освоили мониторинг? Теперь можно:

Совет: Начните с простого — измерьте потребление одного светодиода. Потом добавьте мотор. Потом весь робот. Так вы поймете, как складывается энергопотребление.