在一些使用Arduino制作的项目中,我们会时常用到锂电池组,为了防止锂电池过放电导致电池损坏,监测电压是很有必要的。
锂电池
关于锂电池的知识可查阅:锂电池的相关知识 这篇文章。
Arduino监测电池电压
使用Arduino监测电池电压的方式有很多,比如声音提醒、灯光提醒、欠电停止等等。本文介绍相对简单的一种方式,灯光提醒。使用灯光监测电池电压的思路是,通过一个Arduino的模拟输入脚实时采集电池电压,当采集的电压低于某一阈值时,灯光点亮,提示电池电压低。
Arduino与电池的电路连接
上图中,我们设定Arduino采集电池电压的脚为A4,电路中使用两个电阻,组成分压电路,因为Arduino 只能测量0-5V的电压 。 A4的输入电压值采用以下公式计算:
Vout =(Vin×R2)/(R1 + R2) ,对应上图R2为1K,R1为2K,计算A4值为4V。
然后通过analogRead()函数采集 A4 的值,我们知道Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5V的电压输入信号映射到数值0-1023。换句话说,我们可以将5V信号等分成1024份,0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023。因此,当A4模拟输入引脚的输入电压为4V时,该引脚的数值为819。(计算:4V / 5V = 0.8, 1024 X 0.8=819.2,实际读取值应该在818~819之间)
要实现电压监测,光使用 analogRead()函数读取A4值还不够,我们需要将这个读取值转换为实际电压值,因此可以使用以下公式进行转换:
电池电压值 V = A4读取值 * (5.00 / 1023.00) * 乘数
这个乘数值可以使用上面提供的方法在理论上计算,或者如果有一组已知的电压值,您可以实际计算它。条件允许的情况下,最好采用遵循了后一种选择,因为它更准确。在本例中这个乘数的值是2.9。
Arduino监测电池电压代码
#define ledB 10 int sensorValue = analogRead(A3); float voltage = sensorValue * (5.00 / 1023.00) * 2.9; Serial.println(voltage); if (voltage < 11) { digitalWrite(ledB, HIGH); } else { digitalWrite(ledB, LOW); }
通过以上代码,当监测到的电池电压低于11V时,LED被点亮,否则LED常灭。以此实现简单的电池电量监测,达到避免电池的过放电的目的。