Главная chevron_right Уроки chevron_right Электроника chevron_right Потребление энергии на платах Arduino

Потребление энергии на платах Arduino

Разбираемся, как измерить потребление тока платой Arduino с помощью профилировщика мощности и рассчитать время работы от батареи.

Любое электронное устройство, включая платы Arduino, потребляет энергию. Потребление измеряется в ампер-часах (Ah), а для маломощных устройств — в mAh.

Если вы делаете проект на батарейном питании или с жёсткими ограничениями по энергопотреблению, без этих измерений не обойтись: они помогут выбрать подходящий источник питания и заранее оценить, как долго устройство проработает автономно.

В этой статье мы покажем, как провести тест потребления тока с помощью профилировщика мощности. Профилировщик записывает тысячи замеров за определённый промежуток времени и даёт точную картину потребления. Мы разберём аппаратную часть, настройку программного обеспечения и сам процесс тестирования.

_Note что в этой статье используются продукты сторонних производителей._

Необходимые компоненты и программы

Для тестов потребления тока мы использовали следующее оборудование и ПО. Обратите внимание: на рынке существуют и другие аналогичные инструменты.

Как измеряется потребление тока

Профилировщик мощности подключается между платой Arduino и компьютером: к компьютеру — через USB, к плате — через соединительные провода. Для измерения достаточно двух проводов: питание и земля. Провод питания идёт на соответствующий пин платы, а провод земли — на один из пинов GND.

После подключения профилировщик с высокой точностью фиксирует всё, что потребляет плата. С помощью специального приложения (например, nRF Connect for Desktop) можно записывать данные о потреблении в течение любого нужного времени.

Что именно мы измеряем? Если говорить просто: любое электронное устройство потребляет ток — больший или меньший. Светодиод, например, потребляет около 10 mA (0,01 А), а серводвигатель — до 1000 mA (1 А). Если светодиод горит час и потребляет 10 mA, это можно записать как mAhмиллиампер-часы.

Практический пример расчёта

Возьмём Nano ESP32 и загрузим на неё простой скетч, который непрерывно вызывает функцию analogRead(). Тест длился 60 секунд при частоте 100 000 замеров в секунду. Среднее потребление составило 31,05 mA.

Теперь посчитаем, сколько проработает устройство от батареи ёмкостью 300 mAh:

Formular

Формула расчёта времени работы от батареи: Battery Life (h) = Battery Capacity (mAh) / Load Current (mA). Пример: 300 mAh / 31,05 mA ≈ 9,7 h.

Зная это, можно осознанно выбирать батарею. Например, батарея ёмкостью 600 mAh теоретически обеспечит вдвое большее время работы.

_Note что на реальное время работы влияют и другие факторы: скорость разряда батареи, её качество и условия эксплуатации. Приведённые расчёты следует воспринимать как ориентировочные._

Настройка программного обеспечения

Программная подготовка состоит из двух шагов: загрузка скетча и установка nRF Connect for Desktop.

Загрузка скетча

Здесь всё просто: загрузите на плату тот скетч, потребление которого хотите измерить. Ниже приведён минимальный пример — непрерывное чтение аналогового пина.

void setup() {}

void loop() {
  int analog_value = analogRead(A0);
  delay(1);
}

Установка приложения

Для измерений мы будем использовать инструмент nRF Connect for Desktop. Установите его на компьютер.

Аппаратная часть

Мы использовали профилировщик Power Profiler Kit II.

  1. Сначала отключите кабель USB от платы. Питание теперь будет поступать от профилировщика, поэтому кабель USB на этом этапе не нужен.
  2. С помощью кабеля из комплекта подключите профилировщик к пинам GND и питания платы согласно схеме ниже:

Connect the power profiler to the board.

Подключение профилировщика мощности к плате Arduino: VOUT профилировщика — к пину питания платы, GND — к пину GND.

Важно! При настройке программы вы включите «Power Output» профилировщика. Убедитесь, что выбранное напряжение (3,3 В или 5 В) соответствует напряжению на пине питания платы. Подача 5 В на пин 3,3 В повредит плату.

Проведение теста потребления

Когда аппаратная и программная части настроены, можно записывать данные.

  1. Откройте nRF Desktop App.
  2. Включите выход питания, нажав «Enable Power Output».

Enable power output.

Включение выхода питания в приложении nRF Power Profiler Kit 2.

  1. Задайте период сэмплирования (60 секунд) и количество замеров (100k).
  2. Нажмите «Begin Sampling», чтобы начать тест.

Start sampling.

Запуск сэмплирования в приложении nRF Power Profiler Kit 2.

  1. Во время теста потребление отображается в реальном времени. По истечении 60 секунд (или заданного периода) вы получите данные с показателями max и avg. Любой участок графика можно увеличить для детального анализа.

Power consumption data.

Данные о потреблении тока платой Arduino в приложении nRF Power Profiler Kit 2.

Тест завершён. Результаты можно записать вручную, экспортировать в файл .csv или сохранить скриншот.

Как проверить результат

Если значения выглядят подозрительно высокими, проверьте несколько вещей:

  • не подключены ли к плате лишние периферийные устройства;
  • не открыт ли Serial Monitor в Arduino IDE (он удерживает соединение и может влиять на потребление);
  • правильно ли выбрано напряжение питания в приложении профилировщика.

Примеры результатов

Ниже приведены результаты тестов нескольких плат Arduino в разных условиях.

Простое чтение аналогового пина (Simple Analog Read)

Скетч непрерывно вызывает analogRead() на аналоговом пине.

void setup() {}

void loop() {
  int analog_value = analogRead(A0);
  delay(1);
}

Результаты для каждой платы:

BoardMinMaxAverage
UNO R4 WiFi82.86 mA124.04 mA92.63 mA
GIGA R1 WiFi51.02 mA94.08 mA58.05 mA
Nano ESP3229.18 mA46.58 mA31.05 mA

Arduino Cloud Basic

Скетч Arduino Cloud Basic отправляет данные датчика в Arduino Cloud и включает встроенный светодиод по команде с панели управления.

#include "thingProperties.h"

void setup() {
  // Инициализация serial и ожидание открытия порта:
  Serial.begin(9600);
  // Задержка даёт возможность подключить Serial Monitor, не блокируя выполнение, если он не найден
  delay(1500);

  // Определено в thingProperties.h
  initProperties();

  // Подключение к Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  ArduinoCloud.update();
  digitalWrite(LED_BUILTIN, led);
}

/*
  Поскольку Led — переменная READ_WRITE, onLedChange() вызывается
каждый раз при получении нового значения из IoT Cloud.
*/
void onLedChange()  {
  Serial.print("Led status changed:");
  Serial.println(led);
}

Результаты для каждой платы:

BoardMinMaxAverage
UNO R4 WiFi94.07 mA513.70 mA140.19 mA
GIGA R1 WiFi121.00 mA477.44 mA139.83 mA
Nano ESP3236.70 mA274.19 mA58.81 mA

Итог

Мы разобрали, как с помощью профилировщика мощности записать данные о потреблении тока платой Arduino. Это полезный инструмент: он помогает понять реальные энергетические потребности вашего проекта и принять взвешенное решение при выборе источника питания — будь то батарея, аккумулятор или внешний блок питания.