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

Узнайте, как измерять потребление энергии на плате Arduino.

Автор: Karl Söderby

Последняя ревизия: 05.02.2024

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

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

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

Примечание

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

Необходимое оборудование и ПО

Для тестов потребления в этой статье мы использовали следующее оборудование и ПО. Заметьте, что на рынке существует множество альтернатив.

Измерение потребления энергии

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

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

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

Пример потребления энергии

Для практического примера возьмём плату Nano ESP32 и запустим простой скетч, в котором непрерывно вызывается функция

analogRead()

Запуск теста на 60 секунд с записью 100 000 отсчётов даёт среднее потребление 31,05 мА.

Если мы хотим запитать это приложение от аккумулятора 300 мАч, то время работы рассчитываем по формуле:

Формула.

Формула.

С этой информацией можно сделать обоснованный выбор типа аккумулятора. Например, аккумулятор большей ёмкости, скажем 600 мАч, теоретически проработает в два раза дольше.

Примечание

Существуют и другие факторы — скорость разряда аккумулятора, общее качество. Приведённые формулы и измерения следует считать ориентиром.

Настройка ПО

Настройка ПО состоит из двух шагов: загрузка скетча и установка 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 и питания платы согласно иллюстрации ниже:

Подключение профилировщика к плате.

Подключение профилировщика к плате.

Предупреждение

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

Тест потребления энергии

Когда оборудование и ПО настроены, посмотрим, как зарегистрировать потребление вашего устройства.

  1. Откройте nRF Desktop App.

  2. Включите выход питания, нажав опцию «Enable Power Output».

Включение выхода питания.

Включение выхода питания.

  1. Выберите период выборки (60 секунд) и количество отсчётов (100 тыс.).

  2. Нажмите «Begin Sampling», чтобы начать тест.

Запуск выборки.

Запуск выборки.

  1. Во время теста вы видите потребление в реальном времени. Через 60 секунд (или по окончании заданного периода) у вас будут данные, включающие максимальное и среднее потребление. Можно также увеличить участок графика для просмотра данных.

Данные потребления энергии.

Данные потребления энергии.

Вы записали потребление вашего устройства. Можно зафиксировать результаты, экспортировать их как

.csv

или сделать скриншот для будущей справки.

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

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

Простое аналоговое чтение

Скетч простого аналогового чтения непрерывно читает аналоговый пин.

void setup() {}

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

В таблице ниже приведены результаты для каждой платы:

Плата

Min

Max

Среднее

UNO R4 WiFi

82.86 мА

124.04 мА

92.63 мА

GIGA R1 WiFi

51.02 мА

94.08 мА

58.05 мА

Nano ESP32

29.18 мА

46.58 мА

31.05 мА

Arduino Cloud Basic

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

#include "thingProperties.h"

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

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

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

/*
  Since Led is READ_WRITE variable, onLedChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onLedChange()  {
  Serial.print("Led status changed:");
  Serial.println(led);
}

В таблице ниже приведены результаты для каждой платы:

Плата

Min

Max

Среднее

UNO R4 WiFi

94.07 мА

513.70 мА

140.19 мА

GIGA R1 WiFi

121.00 мА

477.44 мА

139.83 мА

Nano ESP32

36.70 мА

274.19 мА

58.81 мА

Заключение

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