Что такое mAh? Ёмкость батареи, Wh и время работы
Что такое mAh и чем он отличается от Wh? Измерь ток проекта на Arduino, рассчитай время работы от батареи и сравни AA, 9V, 18650 и LiPo.
Что такое mAh? Если коротко, mAh (миллиампер-час) — единица ёмкости, которая показывает, сколько электрического заряда хранит батарея. 1 mAh — это ток 1 миллиампер в течение 1 часа, поэтому батарея на 2000 mAh теоретически может питать схему, потребляющую 20 mA, 100 часов, а схему на 200 mA — 10 часов. Но одного этого числа мало: напряжение батареи, потребляемый ток, температура и стабилизатор между батареей и схемой сильно меняют реальное время работы.
Когда делаешь проект с питанием от батареи на Arduino, ESP32 или Raspberry Pi Pico, первый вопрос всегда один: сколько часов или дней продержится эта батарея? В этом руководстве разберём, что значат mAh и Wh, какова реальная ёмкость батареек AA, 9V, 18650 и LiPo, как измерить ток проекта мультиметром и INA219, как рассчитать время работы по формуле, как соединять батареи последовательно и параллельно, что такое C-рейтинг и почему «крона» на 9 V — плохой выбор. И всё это с реальными цифрами.

Что такое mAh? Ёмкость батареи простыми словами
Ток измеряется в амперах (A), а ёмкость — в ампер-часах (Ah). Для небольших батарей используют миллиампер-час, тысячную часть ампер-часа: 1 Ah = 1000 mAh. С точки зрения физики это электрический заряд; 1 mAh равен 3,6 кулона. Производители измеряют ёмкость при определённом токе разряда до определённого напряжения отсечки. С ростом тока на внутреннем сопротивлении батареи теряется больше напряжения, химическая реакция не успевает, и напряжение отсечки наступает раньше, поэтому при большом токе та же батарея отдаёт меньше mAh. Ёмкость снижает и холод: щелочные батарейки заметно слабеют ниже 0 °C. Таблица ниже по данным Energizer (до 0,8 V, при 21 °C) показывает, как потребляемый ток меняет ёмкость щелочной батарейки AA.
| Постоянный ток | Ёмкость, примерно | Время работы, примерно |
|---|---|---|
| 25 mA | 3000 mAh | 120 ч |
| 100 mA | 2500 mAh | 25 ч |
| 250 mA | 2000 mAh | 8 ч |
| 500 mA | 1500 mAh | 3 ч |
Разница поразительная: если увеличить ток в 20 раз, время работы падает не в 20, а в 40 раз. Поэтому mAh на этикетке стоит считать лучшим случаем. В реальных проектах есть ещё одна потеря: схема перестаёт работать раньше, чем батарея разрядится полностью. Стабилизатор Arduino Uno уже не может держать 5 V, когда входное напряжение падает ниже 7 V, а одну литиевую ячейку стоит отключать примерно при 3,0–3,3 V, чтобы не сокращать срок её службы. Энергия, оставшаяся в батарее в этот момент, так и не используется.
Что такое Wh? mAh и Wh
mAh говорит только о количестве заряда; чтобы узнать энергию батареи, нужно умножить на напряжение. Единица энергии — ватт-час (Wh), формула: Wh = mAh × V / 1000. Например, ячейка 18650 на 3,7 V и 3000 mAh хранит 3,7 × 3 = 11,1 Wh. Батарейка AA на 2500 mAh на бумаге даёт 1,5 × 2,5 = 3,75 Wh, но так как среднее напряжение щелочного элемента при разряде падает до 1,2–1,3 V, реальная цифра около 3 Wh. Поэтому сравнивать батареи с разным напряжением только по mAh обманчиво: «крона» 9V на 550 mAh выглядит намного меньше, чем AA на 2500 mAh, но с её примерно 4 Wh энергии в ней даже чуть больше. Что продержится дольше в твоём проекте, зависит от типа стабилизатора между ними; это будет видно в разделе про время работы. Чтобы быстро посчитать связь мощности и тока (P = V × I), можно воспользоваться калькулятором закона Ома.
Сравнение батарей AA, 9V, 18650 и LiPo
| Батарея | Номинальное напряжение | Типичная ёмкость | Энергия | Комфортный ток | Перезаряжаемая? |
|---|---|---|---|---|---|
| Щелочная AAA | 1,5 V | 1000–1200 mAh | ≈1,3 Wh | Низкий (≈100 mA) | Нет |
| Щелочная AA | 1,5 V | 2000–3000 mAh (зависит от тока) | ≈3 Wh | Средний (эффективна до ≈250 mA) | Нет |
| NiMH AA | 1,2 V | 1900–2500 mAh | ≈2,5 Wh | Высокий (несколько A) | Да |
| Щелочная «крона» 9V | 9 V | 400–600 mAh | ≈4 Wh | Низкий (≈50 mA) | Нет |
| Батарейка-таблетка CR2032 | 3 V | ≈235 mAh | ≈0,7 Wh | Очень низкий (от µA до нескольких mA) | Нет |
| Li-ion 18650 | 3,6–3,7 V | 2000–3500 mAh | 7–13 Wh | Высокий (5–30 A в зависимости от ячейки) | Да |
| LiPo 1S (например, 1000 mAh) | 3,7 V | Модели от 100 до 5000 mAh | ≈3,7 Wh | По C-рейтингу на этикетке | Да |
| Пауэрбанк на 10 000 mAh | 5 V (USB) | ≈6000 mAh (при 5 V) | ≈37 Wh | 1–3 A | Да |
Читая таблицу, помни: литиевые ячейки вроде 18650 и LiPo хранят больше всего энергии на единицу веса; одна 18650 содержит почти столько же энергии, сколько четыре щелочные AA вместе, при вдвое меньшем весе. Щелочные батарейки хороши для маломощных устройств, которые долго лежат на полке, потому что теряют всего несколько процентов ёмкости в год; но под большой нагрузкой, например от моторов или сервоприводов, их напряжение быстро проседает. Аккумуляторы NiMH легко отдают большой ток, несмотря на низкие 1,2 V, а тип с низким саморазрядом (LSD) месяцами держит заряд. Батарейка-таблетка CR2032 годится только для модулей часов и спящих датчиков, работающих на уровне микроампер; запитать ESP32, подключающуюся к Wi-Fi, она не сможет никогда.

Почему «крона» на 9 V — плохой выбор?
Прямоугольная «крона» на 9 V часто встречается в стартовых наборах, потому что её разъём с защёлкой сразу подключается к гнезду питания (DC) Arduino, но для проекта на Arduino с питанием от батареи это один из худших вариантов. Внутри шесть маленьких элементов, соединённых последовательно, поэтому ёмкость всего 400–600 mAh. По данным Energizer, щелочная «крона», разряженная до 4,8 V, отдаёт около 600 mAh при 10 mA, 570 mAh при 25 mA и всего 450 mAh при 50 mA. А стабилизатору Arduino Uno нужно не меньше 7 V на гнезде питания; под нагрузкой напряжение батареи опускается ниже этого уже за несколько часов, и оставшуюся энергию использовать нельзя. Поэтому Uno, потребляющая около 50 mA, от «кроны» обычно работает всего несколько часов, чаще 4–8 часов.
- Низкая ёмкость: всего 400–600 mAh против 2000–2500 mAh у сборки 6×AA, то есть при тех же 9 V время работы меньше более чем в четыре раза.
- Высокое внутреннее сопротивление: когда сервопривод начинает движение или срабатывает реле, напряжение мгновенно проседает, и Arduino перезагружается.
- Потери на стабилизаторе: линейный стабилизатор Uno превращает в тепло разницу 4 V между 9 V и 5 V; при 50 mA из 0,45 W, взятых от батареи, впустую уходит около 0,2 W.
- Дорогая энергия: цена за Wh заметно выше, чем у батареек AA, а аккумуляторные «кроны» NiMH на 9 V дают всего 170–300 mAh.
- Где она хороша: «крона» на 9 V отлично подходит для дымовых извещателей, мультиметров и устройств, которые потребляют несколько mA и подолгу простаивают. Для Arduino выбирай сборку 6×AA, сборку 2S из 18650 или пауэрбанк; подробности — в статье «Как питать Arduino от батареи».
Как измерить ток проекта на Arduino
Чтобы рассчитать время работы от батареи, сначала нужно знать, какой ток потребляет проект. Измерить лучше, чем угадывать, потому что собственное потребление платы, светодиоды питания и стабилизаторы часто берут больше тока, чем датчики. Проще всего включить мультиметр последовательно между батареей и схемой. Для проектов с циклом сна и пробуждения лучше подходит датчик тока вроде INA219: он ловит короткие пики тока и показывает настоящее среднее значение. Подробнее о диапазонах и гнёздах мультиметра — в статье «Как пользоваться мультиметром».
- Выключи схему; вставь красный щуп в гнездо mA мультиметра, а чёрный — в COM. Если ток может превысить 200 mA, начни с гнезда 10A.
- Поверни переключатель на постоянный ток (A⎓), а если у прибора нет автовыбора диапазона — на диапазон 200 mA.
- Отсоедини плюсовой провод батареи от схемы; прикоснись красным щупом к плюсовому выводу батареи, а чёрным — к плюсовому входу схемы. Так весь ток проходит через мультиметр.
- Запусти схему и сними показание. Отдельно измерь ток, пока движется сервопривод, пока идёт подключение к Wi-Fi или пока включено реле, и запиши ток для каждого состояния.
- Если ток во сне — порядка микроампер, переключись на диапазон µA. В этом диапазоне плате может не хватить тока для запуска; на время старта замкни щупы перемычкой и убери её, когда плата уйдёт в сон.
- Подставь измеренные токи вместе со временем в каждом состоянии в формулу среднего тока ниже.
| Плата или модуль | Типичный ток | Примечание |
|---|---|---|
| Arduino Uno R3 | 45–50 mA | Около 30 mA даже в режиме сна (USB-микросхема, стабилизатор, светодиод) |
| Arduino Nano (CH340) | ≈20 mA | Светодиод питания берёт несколько mA |
| Arduino Pro Mini 3.3 V / 8 MHz | Несколько mA | Уровень µA во сне, если убрать светодиод и стабилизатор |
| ESP32 DevKit, Wi-Fi выключен | 40–70 mA | Зависит от частоты процессора |
| ESP32 DevKit, Wi-Fi подключён | 80–130 mA в среднем | Пики 240 mA и больше во время передачи |
| ESP32 в глубоком сне (голый модуль) | ≈10 µA | На отладочной плате часто несколько mA |
| Raspberry Pi Pico (MicroPython) | 20–25 mA | У Pico W с включённым Wi-Fi заметно больше |
| Светодиод (220 Ω, 5 V) | 10–15 mA | Зависит от яркости |
| LCD 16x2 с I2C | 20–30 mA | В основном подсветка |
| OLED 0,96″ (SSD1306) | 10–25 mA | Зависит от числа горящих пикселей |
| Сервопривод SG90 | 5–10 mA в покое, 100–250 mA в движении | 0,5 A и больше при заторможенном валу |
| Датчик расстояния HC-SR04 | ≈15 mA | Во время измерения |
| Модуль реле 5 V (включён) | 70–80 mA | Пока на катушку подано питание |
| GPS NEO-6M | 40–50 mA | Во время поиска спутников |
Измерение тока и израсходованных mAh с INA219
INA219 — небольшой модуль датчика тока и напряжения с интерфейсом I2C. Он измеряет напряжение на шунтирующем резисторе 0,1 Ω на плате с разрешением 12 бит и читает токи примерно до ±3,2 A в цепях до 26 V с разрешением около 0,1 mA. I2C-адрес по умолчанию — 0x40. Модуль включается последовательно в плюсовую линию измеряемой схемы: плюс батареи идёт на Vin+, а Vin− — на плюсовой вход схемы. Измеряющая Arduino питается от USB, а её GND соединяется с GND проверяемой схемы. Нужна только библиотека Adafruit INA219 из «Менеджера библиотек» (Library Manager) в Arduino IDE. Токи сна на уровне микроампер INA219 не различает; их измеряй на диапазоне µA мультиметра.
| Пин INA219 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| VCC | 5V | 3V3 | 3V3(OUT) |
| GND | GND | GND | GND |
| SDA | A4 | GPIO 21 | GP4 |
| SCL | A5 | GPIO 22 | GP5 |
| Vin+ | Плюс батареи (+) | Плюс батареи (+) | Плюс батареи (+) |
| Vin− | Плюсовой вход проверяемой схемы | Плюсовой вход проверяемой схемы | Плюсовой вход проверяемой схемы |
| Минус батареи (−) | GND (общий) | GND (общий) | GND (общий) |
1// INA219 ile akım, harcanan mAh ve pil ömrü / current, used mAh and battery life with INA219
2#include <Wire.h>
3#include <Adafruit_INA219.h>
4
5Adafruit_INA219 ina219; // varsayılan adres 0x40 / default address 0x40
6
7const float CAPACITY_MAH = 2500.0; // pilin etiket kapasitesi / rated battery capacity
8const float USABLE = 0.85; // kullanılabilir oran / usable share
9
10float usedMah = 0; // toplam harcanan yük / total charge used
11float secMaMs = 0; // son saniyenin mA x ms toplamı / mA x ms of the last second
12unsigned long startMs, lastSample, lastPrint;
13
14void setup() {
15 Serial.begin(9600);
16 if (!ina219.begin()) {
17 Serial.println(F("INA219 bulunamadi / INA219 not found"));
18 while (true) {}
19 }
20 ina219.setCalibration_32V_1A(); // 1 A'e kadar ince ölçüm / finer steps up to 1 A
21 startMs = lastSample = lastPrint = millis();
22}
23
24void loop() {
25 unsigned long now = millis();
26
27 if (now - lastSample >= 10) { // 10 ms'de bir örnek / one sample every 10 ms
28 float mA = ina219.getCurrent_mA();
29 secMaMs += mA * (now - lastSample); // akım x süre / current x time
30 lastSample = now;
31 }
32
33 if (now - lastPrint >= 1000) { // saniyede bir rapor / report once a second
34 lastPrint = now;
35 usedMah += secMaMs / 3600000.0; // mA x ms -> mAh
36 secMaMs = 0;
37 float avgMa = usedMah / ((now - startMs) / 3600000.0); // ortalama akım / average current
38 float volts = ina219.getBusVoltage_V() + ina219.getShuntVoltage_mV() / 1000.0; // pil gerilimi / battery voltage
39
40 Serial.print(F("Pil / Battery: "));
41 Serial.print(volts, 2);
42 Serial.print(F(" V | Ort / Avg: "));
43 Serial.print(avgMa, 1);
44 Serial.print(F(" mA | Harcanan / Used: "));
45 Serial.print(usedMah, 2);
46 Serial.print(F(" mAh"));
47 if (avgMa > 0.5) {
48 Serial.print(F(" | Sure / Runtime: "));
49 Serial.print(CAPACITY_MAH * USABLE / avgMa, 1); // saat / hours
50 Serial.print(F(" h"));
51 }
52 Serial.println();
53 }
54}Код читает ток каждые 10 миллисекунд и складывает произведения ток × время, чтобы получить израсходованные mAh; так в среднее попадают и короткие импульсы тока вроде передачи по Wi-Fi или движения сервопривода. Раз в секунду в монитор порта выводятся напряжение батареи, средний ток на данный момент, израсходованная ёмкость и расчётное время работы исходя из 85% номинальной ёмкости. Оставь код работать хотя бы на один полный рабочий цикл, например на время полного цикла сна и пробуждения. Для нагрузок больше 1 A используй setCalibration_32V_2A(). Тот же код без изменений работает на ESP32 с GPIO 21 и 22; помощь с монитором порта — в статье «Монитор порта Arduino».
Расчёт времени работы: ёмкость / ток × КПД
Когда средний ток известен, основная формула проста: Время работы (ч) = Ёмкость (mAh) / Средний ток (mA) × КПД. Коэффициент 0,85 — хорошая отправная точка: он учитывает ёмкость, теряемую при большом токе и на холоде, то, что схема останавливается до полного разряда батареи, и старение батареи. Эта формула подходит, когда между батареей и схемой нет стабилизатора или стоит линейный (стабилизатор 5 V на Uno, AMS1117, 7805), потому что у линейного стабилизатора входной ток равен выходному, а разница напряжений уходит в тепло. Если стоит импульсный преобразователь, например повышающий или понижающий модуль, считай через энергию: Время работы (ч) = Энергия батареи (Wh) × КПД / Мощность нагрузки (W). Здесь КПД — это КПД преобразователя 85–90%, умноженный на используемую долю батареи; реалистично 0,75–0,8.
| Сценарий | Средний ток или мощность | Батарея | Расчёт | Время работы, примерно |
|---|---|---|---|---|
| Uno + датчик, сборка 6×AA на гнездо питания (DC) | 55 mA | Щелочные AA, 2500 mAh | 2500 / 55 × 0,85 | ≈39 ч |
| Та же Uno от щелочной «кроны» 9V | 55 mA | 9V, ≈450 mAh | 450 / 55 × 0,85 | ≈7 ч (на практике меньше) |
| Nano + DHT11 + OLED, 3×AA на пин 5V | 35 mA | Щелочные AA, 2500 mAh | 2500 / 35 × 0,85 | ≈61 ч |
| ESP32 DevKit постоянно на Wi-Fi, 18650 + повышающий до 5 V | 5 V × 110 mA = 0,55 W | 18650, 3000 mAh (11,1 Wh) | 11,1 × 0,8 / 0,55 | ≈16 ч |
| Pico на VSYS от 3×AA NiMH | ≈0,1 W | 3 × 1,2 V × 2000 mAh = 7,2 Wh | 7,2 × 0,8 / 0,1 | ≈58 ч |
Для проектов, которые засыпают и просыпаются, сначала нужен средний ток: Средний ток = (Ток в активном режиме × Время активности + Ток во сне × Время сна) / Общее время. Например, голый модуль ESP32 просыпается каждые 10 минут на 5 секунд с током 120 mA, а остальные 595 секунд спит с током 10 µA (0,01 mA); в среднем получается (120 × 5 + 0,01 × 595) / 600 ≈ 1,01 mA. С ячейкой 18650 на 3000 mAh это 3000 / 1,01 × 0,85 ≈ 2520 часов, то есть около 3,5 месяца. Если тот же код работает на отладочной плате, которая во сне берёт 5 mA, средний ток вырастает до 5,96 mA, а время работы падает примерно до 18 дней. Вместо ручного расчёта можно воспользоваться калькулятором времени работы от батареи: достаточно ввести ёмкость, токи в активном режиме и во сне и интервал пробуждения. Когда средний ток опускается ниже 0,1 mA, решающим становится и саморазряд батареи: литий-ионная ячейка теряет около 2–3% ёмкости в месяц.
ESP32: измеряем время активности, чтобы оценить срок работы от батареи
Потребление ESP32 меняется в тысячи раз в зависимости от режима работы. По даташиту Espressif микросхема берёт до 240 mA при передаче по Wi-Fi, около 100 mA при приёме, 20–68 mA с выключенным Wi-Fi (modem sleep), около 0,8 mA в лёгком сне и всего 10 µA в глубоком сне. Поэтому срок работы от батареи на самом деле определяет время бодрствования: подключение к Wi-Fi часто занимает 1–3 секунды, и за эти несколько секунд тратится больше энергии, чем за часы сна. Код ниже при каждом пробуждении сохраняет в памяти RTC, сколько плата бодрствовала, и по измеренным токам рассчитывает средний ток и ожидаемый срок работы от батареи.
1// ESP32 derin uyku ve pil ömrü tahmini / ESP32 deep sleep and battery life estimate
2RTC_DATA_ATTR int bootCount = 0; // derin uykuda silinmez / survives deep sleep
3RTC_DATA_ATTR unsigned long lastAwakeMs = 0; // önceki uyanık süre / previous awake time
4
5const float ACTIVE_MA = 120.0; // ölçtüğün uyanık akım / measured awake current
6const float SLEEP_MA = 0.01; // ölçtüğün uyku akımı (10 µA) / measured sleep current (10 µA)
7const int SLEEP_S = 600; // 10 dakika uyku / 10 minutes of sleep
8const float CAPACITY_MAH = 3000.0; // 18650 kapasitesi / 18650 capacity
9const float USABLE = 0.85; // kullanılabilir oran / usable share
10
11void setup() {
12 Serial.begin(115200);
13 bootCount++;
14
15 // Burada sensörü oku ve veriyi gönder / read the sensor and send the data here
16 delay(500); // örnek iş yükü / sample workload
17
18 if (lastAwakeMs > 0) {
19 float awakeS = lastAwakeMs / 1000.0;
20 float avgMa = (ACTIVE_MA * awakeS + SLEEP_MA * SLEEP_S) / (awakeS + SLEEP_S);
21 float days = CAPACITY_MAH * USABLE / avgMa / 24.0;
22 Serial.printf("Uyanis / Wake #%d, uyanik / awake: %.2f s\n", bootCount, awakeS);
23 Serial.printf("Ortalama / Average: %.3f mA, pil omru / battery life: %.0f gun / days\n", avgMa, days);
24 }
25
26 lastAwakeMs = millis(); // bu uyanışın süresi / duration of this wake
27 Serial.flush();
28 esp_sleep_enable_timer_wakeup((uint64_t)SLEEP_S * 1000000ULL); // mikrosaniye / microseconds
29 esp_deep_sleep_start(); // loop() hiç çalışmaz / loop() never runs
30}
31
32void loop() {
33}При первом пробуждении код только сохраняет время; при каждом следующем он по предыдущему времени активности рассчитывает и выводит средний ток и срок работы от батареи в днях. Измерь ACTIVE_MA и SLEEP_MA на своей плате мультиметром и впиши их. millis() не учитывает время загрузчика при старте, поэтому если добавить ко времени активности запас 0,1–0,3 секунды, результат будет реалистичнее. Подробнее о режимах сна и источниках пробуждения — в статье «Глубокий сон ESP32», а о перезагрузках, которые могут случаться при питании от батареи, — в статье «Ошибка brownout на ESP32».
Последовательное и параллельное соединение батарей
При последовательном соединении батарей (плюс одной к минусу следующей) напряжения складываются, а ёмкость (mAh) остаётся прежней: четыре батарейки AA на 1,5 V и 2500 mAh последовательно дают 6 V и 2500 mAh. При параллельном соединении (плюсы вместе, минусы вместе) напряжение остаётся прежним, а ёмкости складываются: две ячейки 18650 на 3000 mAh параллельно дают 3,7 V и 6000 mAh. В обоих случаях общая энергия (Wh) растёт с числом ячеек. Для литиевых сборок схему соединения обозначают буквами S (последовательно) и P (параллельно); например, 2S2P — сборка из четырёх ячеек: две параллельные пары, соединённые последовательно.
| Конфигурация (18650 на 3000 mAh) | Напряжение (номинальное / полный заряд) | Ёмкость | Энергия | Типичное применение |
|---|---|---|---|---|
| 1S1P | 3,7 V / 4,2 V | 3000 mAh | 11,1 Wh | ESP32, Pico, Arduino через повышающий преобразователь |
| 1S2P | 3,7 V / 4,2 V | 6000 mAh | 22,2 Wh | Долго работающая станция датчиков на ESP32 |
| 2S1P | 7,4 V / 8,4 V | 3000 mAh | 22,2 Wh | Гнездо питания (DC) Arduino, робот-машинка |
| 2S2P | 7,4 V / 8,4 V | 6000 mAh | 44,4 Wh | Роботы с моторами |
| 3S1P | 11,1 V / 12,6 V | 3000 mAh | 33,3 Wh | Светодиодная лента 12 V, 5 V через понижающий преобразователь |
- Используй одинаковые ячейки: в последовательной или параллельной сборке батареи должны быть одной марки, ёмкости, возраста и уровня заряда; более слабая ячейка разряжается раньше остальных и работает с перегрузкой.
- Выравнивай напряжения перед параллельным соединением: перед тем как соединить литий-ионные ячейки параллельно, разница напряжений между ними не должна превышать 0,1 V; иначе заряженная ячейка погонит в разряженную большой неконтролируемый ток.
- Последовательным литиевым сборкам нужна защита: для сборок 2S и больше используй плату BMS с балансировкой, которая следит за каждой ячейкой. Последовательную сборку нельзя заряжать одноячеечным модулем TP4056.
- Не смешивай аккумуляторы и батарейки: не ставь щелочные и NiMH-элементы в одну сборку; у них разные напряжения и внутреннее сопротивление.
- Параллельное соединение делит нагрузку: в сборке 1S2P каждая ячейка отдаёт половину тока, поэтому параллельная сборка и работает дольше, и меньше греется при большом токе.
Что такое C-рейтинг?
C-рейтинг показывает, насколько быстро батарея разряжается или заряжается относительно своей ёмкости. 1C — это ток, который разряжает батарею за 1 час; численно он равен ёмкости: для батареи на 2000 mAh 1C = 2 A, 0,5C = 1 A, а 20C = 40 A. Время тоже считается легко: при 2C батарея садится примерно за 30 минут, при 0,2C — за 5 часов. Значения вроде 25C или 50C на LiPo для дронов и RC-моделей показывают максимальный постоянный ток разряда; LiPo на 1000 mAh с 25C может отдать 25 A. У ячеек 18650 это обычно указывают прямо в амперах: ёмкие ячейки на 3500 mAh отдают 8–10 A, а высокотоковые на 2500–3000 mAh — 15–30 A постоянно. Для заряда правило строже: стандартный ток заряда литиевых ячеек около 0,5C, максимум 1C. Модуль TP4056 с током заряда 1 A подходит для 18650 на 2000 mAh, но маленький LiPo на 300 mAh он заряжает примерно при 3C; в этом случае нужно заменить резистор Rprog на модуле, чтобы уменьшить ток заряда.
| C-рейтинг | LiPo на 1000 mAh | 18650 на 3000 mAh | Время, примерно |
|---|---|---|---|
| 0,2C | 200 mA | 600 mA | 5 ч |
| 0,5C | 500 mA | 1,5 A | 2 ч |
| 1C | 1 A | 3 A | 1 ч |
| 2C | 2 A | 6 A | 30 мин |
| 10C | 10 A | 30 A (только высокотоковые ячейки) | 6 мин |
Измерение ёмкости батареи с Raspberry Pi Pico (MicroPython)
Ячейки 18650 с надписью 9900 mAh почти всегда подделка; самые ёмкие настоящие 18650 на рынке — около 3500–3600 mAh. Единственный способ узнать реальную ёмкость батареи — разрядить её через известную нагрузку и сложить ток за всё время. Из Raspberry Pi Pico, нагрузочного резистора и MOSFET получается простой тестер ёмкости, который делает именно это: Pico подключает нагрузку через MOSFET, измеряет напряжение батареи через делитель напряжения, рассчитывает ток по формуле I = V / R и отключает нагрузку, когда напряжение доходит до напряжения отсечки. Номиналы делителя можно проверить в утилите делителя напряжения, а подробности подключения MOSFET — в статье «Как использовать MOSFET».
| Деталь | Подключение | Назначение |
|---|---|---|
| Плюс батареи (+) | К одному концу нагрузочного резистора и к верхнему резистору делителя | Проверяемая батарея |
| Нагрузочный резистор 10 Ω, 5 W | Другой конец — к стоку MOSFET | Потребляет около 420 mA при 4,2 V |
| N-канальный MOSFET с логическим уровнем управления (например, IRLZ44N) | Исток → GND, затвор → 220 Ω → GP15, 100 kΩ между затвором и GND | Включает и выключает нагрузку |
| Делитель напряжения 100 kΩ + 100 kΩ | Плюс батареи → 100 kΩ → GP26 → 100 kΩ → GND | Понижает 4,2 V до 2,1 V для АЦП |
| Минус батареи (−) | GND Pico | Общая земля |
| Raspberry Pi Pico | К компьютеру по USB | Измерение, запись и вывод в Thonny |
1from machine import ADC, Pin
2import time
3
4adc = ADC(26) # GP26: bölücünün orta noktası / divider midpoint
5load = Pin(15, Pin.OUT, value=0) # GP15: MOSFET kapısı / MOSFET gate
6R_LOAD = 10.0 # yük direnci, ohm (ölçüp yaz) / load resistor in ohms (measure it)
7DIV = 2.0 # 100k + 100k bölücü / 100k + 100k divider
8CUTOFF = 3.0 # Li-ion bitiş gerilimi / Li-ion end voltage
9CONV = 3.3 / 65535 # ham değeri volta çevir / raw value to volts
10
11def battery_v():
12 total = 0
13 for _ in range(32): # 32 ölçümün ortalaması / average of 32 readings
14 total += adc.read_u16()
15 return total / 32 * CONV * DIV
16
17mah = 0.0
18mwh = 0.0
19log = open("desarj.csv", "w") # Pico'nun belleğine kaydedilir / saved to the Pico's flash
20log.write("dakika,volt,mA,mAh\n")
21load.value(1) # deşarjı başlat / start the discharge
22start = last = time.ticks_ms()
23
24while True:
25 time.sleep(30)
26 now = time.ticks_ms()
27 hours = time.ticks_diff(now, last) / 3600000
28 last = now
29 v = battery_v() # yük altındaki gerilim / voltage under load
30 ma = v / R_LOAD * 1000 # I = V / R
31 mah += ma * hours
32 mwh += v * ma * hours
33 minutes = time.ticks_diff(now, start) / 60000
34 print("{:.0f} dk/min {:.3f} V {:.0f} mA {:.0f} mAh {:.2f} Wh".format(minutes, v, ma, mah, mwh / 1000))
35 log.write("{:.1f},{:.3f},{:.0f},{:.1f}\n".format(minutes, v, ma, mah))
36 log.flush()
37 if v <= CUTOFF:
38 load.value(0) # yükü ayır, pili koru / disconnect the load, protect the cell
39 log.close()
40 print("Kapasite / Capacity: {:.0f} mAh, {:.2f} Wh".format(mah, mwh / 1000))
41 breakКаждые 30 секунд код измеряет напряжение батареи под нагрузкой, рассчитывает ток и суммирует израсходованные mAh и Wh; результаты выводятся в консоль Thonny и заодно сохраняются в файл desarj.csv во флеш-памяти Pico. Потом этот файл можно открыть в Excel и построить кривую разряда («Передача данных Arduino в Excel»). С нагрузкой 10 Ω проверка 18650 на 3000 mAh занимает около 8–9 часов. Для точных результатов измерь нагрузочный резистор мультиметром и впиши значение в R_LOAD, затем сравни напряжение батареи с показанием мультиметра и подправь коэффициент DIV. Для проверки NiMH AA уменьши CUTOFF до 1.0 V, а нагрузочный резистор — до 4,7 Ω. При 4,2 V на нагрузочном резисторе рассеивается около 1,8 W; бери резистор мощностью не меньше 5 W, держи его подальше от горючих поверхностей и не оставляй тест без присмотра. Если MicroPython на Pico ещё не установлен, начни со статьи «Что такое Raspberry Pi Pico?».
Идеи проектов с расчётом батареи
- Садовый датчик, который работает месяцами: держи ESP32 в глубоком сне, измеряй влажность почвы раз в час и опусти средний ток ниже 1 mA.
- Вольтметр с индикатором заряда: измеряй напряжение батареи и показывай его в процентах на LCD («Вольтметр на Arduino своими руками»).
- Правильная сборка для робота-машинки: измерь ток моторов и рассчитай, на сколько минут хватит сборки 2S из 18650 («Робот-машинка на Arduino своими руками»).
- Регистратор энергопотребления: записывай показания INA219 на SD-карту, чтобы получить суточный энергетический профиль устройства («Модуль SD-карты»).
- Стенд для проверки ёмкости 18650: добавь к тестеру на Pico OLED-дисплей и показывай mAh в реальном времени.
- Метеостанция с питанием от батареи: пусть ESP32, которая каждые 10 минут отправляет данные DHT11, месяцами работает от одной 18650.
Частые ошибки и как их исправить
| Ошибка | Последствие | Исправление |
|---|---|---|
| Сравнивать батареи с разным напряжением только по mAh | Неверный выбор батареи | Переводить в Wh: mAh × V / 1000 |
| Рассчитывать на полную номинальную ёмкость | Время работы на 15–40% меньше ожидаемого | Использовать коэффициент 0,85, а при большом токе — ещё меньше |
| Забывать о собственном потреблении платы | Uno даже во сне берёт около 30 mA; батареи хватает на часы, а не на дни | Взять Pro Mini или голый модуль, убрать светодиод питания |
| Не измерять пики тока | Перезагрузка (brownout) при подключении к Wi-Fi или движении сервопривода | Измерить с INA219, добавить конденсатор 470 µF на питание |
| Применять формулу через mAh с импульсным преобразователем | Оценка ошибается на 30–50% | Считать через энергию (Wh) и мощность (W) |
| Питать Arduino от «кроны» на 9 V | Батарея садится за несколько часов, плюс перезагрузки | Использовать 6×AA, сборку 2S из 18650 или пауэрбанк |
| Разряжать литий-ионную ячейку ниже 3,0 V | Необратимая потеря ёмкости и риск вздутия | Защищённая ячейка или BMS, напряжение отсечки в программе |
| Покупать 18650 с нереальными mAh на этикетке | Около трети заявленной ёмкости | Проверить ёмкость тестом, выбирать известные марки |
Теперь понятно, чем mAh отличается от Wh, как измерить ток проекта и как рассчитать, сколько часов или дней проработает батарея. Следующим шагом загляни в статьи «Питание Arduino от батареи» и «Зарядка 18650 с TP4056». В приложении BlueGrays есть проекты с питанием от батареи, например «Глубокий сон ESP32: экономия батареи», «Цифровой вольтметр с LCD-дисплеем», «Машинка на L298N с управлением по Bluetooth» и «Робот, объезжающий препятствия», — у каждого пошаговая схема подключения и код.
Частые вопросы
Что означает mAh на батарее?
mAh (миллиампер-час) — единица ёмкости, которая показывает, сколько электрического заряда хранит батарея. Батарея на 1000 mAh теоретически может отдавать 1000 mA в течение 1 часа или 100 mA в течение 10 часов. Реальное время работы зависит от потребляемого тока, температуры и напряжения, при котором схема перестаёт работать.
Чем mAh отличается от Wh?
mAh измеряет заряд, а Wh — энергию. Wh считается как mAh × V / 1000, поэтому батарея на 3,7 V и 3000 mAh хранит 11,1 Wh. При сравнении батарей с разным напряжением Wh даёт гораздо более точную картину.
Чем больше mAh, тем лучше?
Среди батарей одного напряжения и типа больше mAh означает более долгую работу. Но для устройств с большим током важны ещё внутреннее сопротивление и C-рейтинг. Ячейки 18650 с нереальными цифрами вроде 9900 mAh почти всегда подделка.
Как рассчитать, сколько проработает батарея?
Используй формулу: Время работы (ч) = Ёмкость (mAh) / Средний ток (mA) × 0,85. Например, батарея на 2500 mAh питает схему, потребляющую 50 mA, около 42 часов. Если между ними стоит повышающий или понижающий преобразователь, считай через Wh и W.
Можно ли питать Arduino от «кроны» на 9 V?
Для коротких тестов подойдёт, но для постоянных проектов не рекомендуется. Щелочная «крона» на 9 V хранит всего 400–600 mAh и обычно питает Arduino Uno лишь несколько часов; с нагрузками вроде сервоприводов напряжение проседает, и плата перезагружается. Сборка 6×AA, сборка 2S из 18650 или пауэрбанк работают намного дольше.
Что означает C-рейтинг батареи?
C-рейтинг выражает ток разряда или заряда относительно ёмкости батареи; 1C — это ток, который разряжает батарею за 1 час. Для батареи на 2000 mAh 1C = 2 A, а 0,5C = 1 A. Значения вроде 25C на LiPo-аккумуляторах указывают максимальный постоянный ток разряда.
Что собрать после прочтения
Все проекты
Температура и влажность с DHT11
Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

Глубокий сон ESP32: экономия батареи (OLED + счётчик в RTC RAM)
Режим глубокого сна (Deep Sleep) у ESP32 снижает потребление до ~10 µA, выключая процессор и большую часть периферии, — это важно для IoT-устройств на батарейках. В этом проекте используются три источника пробуждения: таймер (15 секунд), внешний пин (EXT0 — кнопка GPIO 33) и касание (T0/GPIO 4). Переменные с RTC_DATA_ATTR сохраняются во время глубокого сна — счётчики загрузок, пробуждений по таймеру и по кнопке ведутся непрерывно.

Цифровой вольтметр с LCD-дисплеем
Узнай, какое напряжение даёт батарейка или блок питания, с помощью измерителя, собранного своими руками. Делитель из двух резисторов понижает высокое напряжение до уровня, который может прочитать плат

Машинка на L298N с управлением по Bluetooth
Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд

Робот, объезжающий препятствия
Как насчёт того, чтобы собрать умную машину, которая сама находит дорогу? Робот, объезжающий препятствия, постоянно осматривает всё вокруг благодаря ультразвуковому датчику спереди. Встретив препятств

Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
Собери на ESP32 регистратор температуры с отметками времени! Каждую минуту читай температуру и влажность с DHT22, бери реальное время из DS1307 RTC и записывай всё на карту microSD в формате CSV. OLED показывает текущую температуру (крупным шрифтом), влажность в процентах, время и счётчик записей. Файл /temp_log.csv на SD-карте открывается в Excel, Google Sheets или Python pandas — идеально для теплиц, комнат, лабораторий и хранения продуктов.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

