TP4056 Type-C с защитой: зарядка 18650, подключение, распиновка B+ B− OUT
Маленькая синяя плата заряжает одну литиевую банку 3,7 В — 18650, плоский LiPo — от любого USB на 5 вольт и сразу же питает от неё устройство. Контроллер TP4056 сам ведёт заряд: держит ток 1 А, потом напряжение 4,2 В и останавливается, когда аккумулятор полон. Красный светодиод — идёт заряд, синий — готово.
Вторая половина платы — защита на DW01A и сдвоенном транзисторе 8205A. Она стоит между аккумулятором и нагрузкой и отключает выход, если банка разрядилась ниже 2,5 вольта, ток превысил 3 ампера или случилось короткое замыкание. Поэтому у модуля шесть контактов: вход, аккумулятор и выход для нагрузки.
Распиновка
| Провод | Куда и зачем |
|---|---|
| + и − (верхние) | Вход 5 В — дублируют разъём Type-C. Можно подать 4,5–5,5 В проводами, например от солнечной панели через стабилизатор. |
| B+ | Плюс аккумулятора. |
| B− | Минус аккумулятора. |
| OUT+ | Плюс нагрузки — на плате соединён с B+. |
| OUT− | Минус нагрузки — через защиту. Нагрузку подключают только сюда, иначе защита не работает. |
Характеристики
- Контроллер заряда
- TP4056 (линейный, CC/CV)
- Защита
- DW01A + 8205A
- Вход
- 5 В: Type-C или контакты + и −, допустимо 4,5–5,5 В
- Ток заряда
- 1 А (резистор R3 1,2 кОм)
- Напряжение окончания заряда
- 4,2 В ± 1 %
- Отключение при переразряде
- около 2,5 В
- Защита по току
- около 3 А и короткое замыкание
- Индикация
- красный — заряжается, синий — заряжен
- Размер платы
- 17 × 28,5 мм
Схема: фонарик на 18650

Библиотека
не нужна— Модулю код не нужен — он заряжает сам. Скетч фонарика обходится без библиотек: analogWrite для яркости и регистры АЦП, чтобы измерить своё питание.
Скетч: фонарик с режимами и предупреждением о разряде
// Фонарик на 18650: Pro Mini питается от аккумулятора через TP4056 (OUT+ → VCC).
// Кнопка на выводе 2 листает режимы, светодиоды на выводах 9 и 10 (ШИМ).
// Когда аккумулятор садится, фонарик сам уходит в слабый свет и мигает.
const int BUTTON = 2;
const int LED_A = 9;
const int LED_B = 10;
const int MODES = 5; // выкл, слабый, средний, яркий, стробоскоп
const int LEVELS[] = {0, 20, 90, 255};
const char* NAMES[] = {"off", "low", "mid", "high", "strobe"};
const long LOW_BATTERY_MV = 3400; // около 10 % заряда: дальше литий быстро проседает
int mode = 0;
bool lastButton = HIGH;
bool lowBattery = false;
unsigned long lastCheck = 0;
// Напряжение аккумулятора, мВ: он подключён прямо к VCC, а АЦП меряет внутренние
// 1,1 В относительно VCC — ни делителя, ни свободного вывода не нужно.
long readVcc() {
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2);
ADCSRA |= _BV(ADSC);
while (bit_is_set(ADCSRA, ADSC));
return 1125300L / ADC;
}
void setBrightness(int value) {
analogWrite(LED_A, value);
analogWrite(LED_B, value);
}
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool button = digitalRead(BUTTON);
if (lastButton == HIGH && button == LOW) { // нажали
mode = (mode + 1) % MODES;
Serial.print("Mode: ");
Serial.println(NAMES[mode]);
delay(30); // дребезг
}
lastButton = button;
if (millis() - lastCheck > 2000) { // заряд — раз в две секунды
lastCheck = millis();
long vcc = readVcc();
lowBattery = vcc < LOW_BATTERY_MV;
Serial.print("VCC: ");
Serial.print(vcc);
Serial.println(lowBattery ? " mV - low battery" : " mV");
}
if (mode == 4) {
setBrightness((millis() / 80) % 2 ? 255 : 0); // стробоскоп
} else if (lowBattery && mode > 0) {
setBrightness(millis() % 3000 < 100 ? 0 : LEVELS[1]); // сел: слабо и короткая вспышка
} else {
setBrightness(LEVELS[mode]);
}
}
Скетч собирается arduino-cli под Arduino UNO
Свободный вывод под замер аккумулятора не нужен: аккумулятор подключён прямо к VCC, а readVcc() меряет внутренние 1,1 В относительно питания и пересчитывает в милливольты. Для настоящего фонарика берите Pro Mini на 3,3 В / 8 МГц: на 16 МГц ATmega по паспорту нужно от 4,5 В, хотя от лития обычно работает.
Частые ошибки
От зарядки телефона с Type-C не заряжает
На плате нет резисторов на линиях CC, по которым зарядка с разъёмом Type-C на обоих концах понимает, что подключено устройство, — и не подаёт 5 вольт. Нужен обычный USB-A блок на 5 В и кабель USB-A → Type-C.
Нагрузка подключена к B+ и B−
Так защита оказывается в стороне: переразряд и короткое замыкание никто не остановит. Аккумулятор — на B, всё остальное — только на OUT.
Синий светодиод не загорается при включённой нагрузке
TP4056 считает зарядом весь ток, который уходит в B+, а нагрузка берёт часть на себя. Ток не падает до 100 мА, и контроллер не видит конца заряда. Заряжайте с отключённой нагрузкой или ставьте модуль с разделением питания.
Модуль сильно греется
Это нормально: TP4056 линейный, лишние вольты он превращает в тепло — при 5 В на входе и 3,7 В на банке это больше ватта. Не кладите плату под корпус вплотную, а для маленького LiPo на 300–500 мА·ч уменьшите ток, поменяв R3 на 2,4–5,1 кОм.
Две банки последовательно
TP4056 заряжает только одну банку — 4,2 В. Две последовательно (8,4 В) им не зарядить, нужен контроллер для 2S. Параллельно — можно, это просто банка большей ёмкости.
Что понадобится
- Модуль заряда TP4056 Type-C с защитой
- Аккумулятор 18650 и держатель с проводами
- Arduino Pro Mini (лучше 3,3 В / 8 МГц)
- Два белых светодиода, резисторы 47 Ом, кнопка
- Блок питания USB-A 5 В и кабель USB-A → Type-C — заряжать