下面我将从核心原理、供电方案、安全须知、代码示例等多个方面,为你详细讲解 Arduino 如何使用锂电池。

核心原理:锂电池 vs. Arduino
-
锂电池电压 (3.7V - 4.2V):
- 一节标准的锂离子或锂聚合物电池,充满电时电压约为 2V。
- 放电截止电压约为 0V (或 3.2V/3.3V,具体看电池规格)。
- 在整个放电过程中,电压会从 4.2V 逐渐下降到 3.0V。
-
Arduino 工作电压 (5V 或 3.3V):
- Arduino Uno/Nano/Mega (使用 ATmega328P/2560):核心芯片在 5V 下工作最稳定,其工作电压范围通常是 4.5V - 5.5V。
- Arduino Pro Mini / ESP32 / ESP8266:可以选择 3.3V 或 5V 版本,这些板子在 3.3V 下也能良好工作。
关键矛盾:锂电池的电压范围 (3.0V - 4.2V) 无法稳定地为需要 5V 的 Arduino 供电,当电池电压低于 4.5V 时,Arduino 可能会工作不稳定或直接复位。
三种主流供电方案
根据你的需求和 Arduino 型号,有三种主流方案,从简单到复杂排列。

直接供电 (仅适用于 3.3V Arduino)
如果你的 Arduino 是 3V 版本(例如某些 ESP32 开发板、3.3V 的 Pro Mini),并且你不需要驱动 5V 的外设(如某些舵机、传感器),那么这是最简单的方法。
- 接线:将锂电池的正极连接到 Arduino 的
3V引脚,负极连接到GND引脚。 - 优点:电路最简单,成本最低。
- 缺点:
- 无法为 5V 外设供电。
- 没有充电管理,电池电量耗尽后需要单独充电。
- 没有低压保护,过度放电会永久性损坏锂电池。
使用升压模块 (Boost Converter) - 最通用方案
这是为 5V Arduino (如 Uno, Nano) 供电最常用、最经济实惠的方法。
- 原理:升压模块可以将不稳定的锂电池电压 (3.0V-4.2V) "升压"并稳定在 5V,为 Arduino 供电。
- 所需元件:
- 锂电池
- 升压模块 (例如基于
MT3608或XL6009芯片的模块,淘宝/京东上很便宜) - (可选) 开关
- 接线:
- 锂电池正极 -> 升压模块
IN+或Vin - 锂电池负极 -> 升压模块
IN-或GND - 升压模块
OUT+-> Arduino5V引脚 - 升压模块
OUT--> ArduinoGND引脚
- 锂电池正极 -> 升压模块
- 优点:
- 成本低,模块易于获取。
- 效率较高,能充分利用电池电量。
- 为 Arduino 提供稳定的 5V 电源。
- 缺点:
- 仍然没有充电和低压保护功能,你需要额外注意电量,或者搭配一个电量计。
使用电源管理模块 / 专用充电板 - 最佳实践方案
这是最安全、最方便、功能最全的方案,尤其适合制作便携式项目。
- 原理:这类模块集成了 锂电池充电管理、升压/降压稳压 和 低压保护 电路于一身。
- 常见模块:
- TP4056 + 升压模块:最基础的组合,TP4056 负责充电,你需要自己再搭配一个升压模块。
- 基于
IP5306的模块:非常流行,集成了充电、升压、输出、电量显示等功能,通常带有一个小屏幕和按钮。 - Adafruit PowerBoost 1000C:功能强大且稳定,但价格较高。
- 接线 (以 IP5306 模块为例):
- 锂电池 -> 模块上的
BAT+和BAT-接线端子。 - 模块的
OUT+和OUT--> Arduino 的5V和GND。 - (可选) 通过 USB 端口为模块充电。
- 锂电池 -> 模块上的
- 优点:
- 安全第一:内置过充、过放、过流、短路保护。
- 功能集成:充电、供电、电量检测一体化。
- 使用方便:通常带有电量指示,可以直观地看到剩余电量。
- 缺点:
- 成本相对较高。
- 体积比单纯的升压模块大一些。
锂电池安全须知 (极其重要!)
锂电池的能量密度高,但化学性质活泼,错误操作可能导致严重的安全事故!

- 绝对禁止过充:充电电压不能超过 4.2V,使用专门的充电芯片(如 TP4056)进行充电,切勿用普通电源随意充电。
- 绝对禁止过放:放电电压不能低于 3.0V,过放会永久性损坏电池,甚至导致内部结构短路,再次充电时可能起火。方案三的模块自带保护,方案二则需要你格外小心。
- 禁止短路:电池正负极绝对不能直接接触,会产生巨大电流,瞬间发热起火,焊接时注意不要焊锡连锡。
- 禁止刺穿或损坏:不要让电池掉落、被重物挤压或被尖锐物体刺穿。
- 使用保护板:强烈建议为锂电池组配备一个 PCM (Protection Circuit Module) 保护板,它能实现基本的过充、过放、过流保护。
- 选择正规产品:购买质量可靠、有品牌的锂电池和充电模块,劣质产品是最大的安全隐患。
代码示例:如何检测电量?
如果你使用了像 IP5306 这样带电量检测引脚的模块,你可以在 Arduino 代码中读取电池电量。
这些模块通常使用 模拟电压分压 的方式来估算电量,它们会输出一个模拟电压(0V - 3.3V),这个电压与电池电量成正比。
假设你的模块:
- 输出满电量 (4.2V) 时,引脚电压为 2.0V。
- 输出空电量 (3.0V) 时,引脚电压为 1.4V。
你可以将这个模拟引脚连接到 Arduino 的 A0 引脚。
// 定义连接到电量检测引脚的 Arduino 引脚
const int BATTERY_PIN = A0;
// 定义模拟输入的分辨率 (Arduino Uno 是 1023)
const int ANALOG_MAX = 1023;
// 定义参考电压 (通常是 5.0V)
const float VOLTAGE_REF = 5.0;
void setup() {
// 初始化串口通信,波特率设为 9600
Serial.begin(9600);
Serial.println("Battery Level Monitor");
}
void loop() {
// 读取 A0 引脚的模拟值 (0-1023)
int analogValue = analogRead(BATTERY_PIN);
// 将模拟值转换为电压 (0-5V)
float voltage = (analogValue / (float)ANALOG_MAX) * VOLTAGE_REF;
// --- 计算电量百分比 (这是一个估算值) ---
// 假设我们测量的电压范围是 1.4V (0%) 到 2.0V (100%)
float minVoltage = 1.4; // 对应 0%
float maxVoltage = 2.0; // 对应 100%
// 计算百分比,并限制在 0-100 之间
int batteryPercentage = map(voltage * 1000, minVoltage * 1000, maxVoltage * 1000, 0, 100);
batteryPercentage = constrain(batteryPercentage, 0, 100);
// 打印结果到串口监视器
Serial.print("Analog Value: ");
Serial.print(analogValue);
Serial.print("\t Voltage: ");
Serial.print(voltage, 2); // 保留两位小数
Serial.print("V\t Battery Level: ");
Serial.print(batteryPercentage);
Serial.println("%");
// 每隔2秒读取一次
delay(2000);
}
注意:map() 和 constrain() 函数的参数必须是整数,所以这里先把电压乘以 1000 转换为整数,这个百分比是估算值,因为电池放电曲线不是完全线性的,但对于显示大概电量非常有用。
总结与建议
| 方案 | 适用场景 | 优点 | 缺点 | 安全性 |
|---|---|---|---|---|
| 直接供电 | 3V Arduino,无5V外设 | 最简单、最便宜 | 功能单一,无保护 | 低 (需自行管理) |
| 升压模块 | 5V Arduino (Uno/Nano),成本敏感 | 性价比高,供电稳定 | 无充电、无低压保护 | 中 (需自行管理电量) |
| 电源管理模块 | 便携式项目,对安全要求高 | 集成度高,安全方便 | 成本较高,体积稍大 | 高 (推荐) |
给初学者的建议:
如果你刚开始做项目,强烈推荐从方案三开始,购买一个带电量显示的 IP5306 模块,虽然初期投入稍高,但它能让你免于处理锂电池的复杂和安全风险,让你更专注于项目本身的逻辑和功能。
高级玩法:如果你希望实现更精确的电量管理和更长的续航,可以考虑使用 MAX17048 这类专用的电量计芯片,它能通过 I2C 接口提供更准确的电量百分比和状态信息。
