大概每个人都创建了自己的自主机器人,想要确定电池电量并将其显示在显示屏或控制台中。该功能主要是调试所需的功能,但在某些情况下,确定费用是机器人功能的重要组成部分。执行此任务的困难在于,模数转换器(5V)的最大输入电压受到限制,并且获得的值出现了巨大的跳跃。在本文中,我想展示一下我从电池读取电压并确定电荷的方式。首先,有必要将两个1kΩ的电阻焊接到该分压器电路的电源插头:
因此,如果充满电的电池的输出电压不超过10V,则分压器后的电压将小于5V,这意味着它将被模数转换器充分识别。现在,您需要将分频器的输出连接到Arduino上的任何模拟输入。就我而言,这是A5腿。然后尝试读取电池的电压:void setup() {
Serial.begin(9600);
pinMode(A5, INPUT);
}
void loop() {
float k = 2;
float voltage = k*analogRead(A5);
}
事实证明还不清楚,因为我们忘记了将值转换为十进制数字系统。为此,将所有内容除以1024:void loop() {
float k = 2/1024;
float voltage = k*analogRead(A5);
}
现在,我们借助电压表选择一个系数,该系数处的电压将近似等于实际电压: float k = 2*1.12;
float voltage = k*4.5f/1024*analogRead(A5);
我们得到了很强的上升和下降电压,通常与要求的电压不同。要解决此错误,请为您的项目添加具有最合适的平滑因子的低通滤波:
void loop() {
float k = 2*1.12;
float voltage = k*4.5f/1024*analogRead(A5);
float chargeLevel_procents;
float chargeLevel;
float y;
int z;
float A_v = voltage;
float A_K = 0.3;
static float A_y;
A_y = A_y - A_K * (A_y - A_v);
}
现在剩下的工作是测量充满电并完全放电的电池上的电压。在我的情况下,差异恰好是1V。之后,您需要找到百分比的电池电量: y = A_y / 8.4 * 100;
chargeLevel_procents = y;
chargeLevel = z;
我们只需要将其转换为电池图标(或像我的正方形),然后将其输出到控制台即可:
if(chargeLevel_procents >= 0 && chargeLevel_procents < 33) {
z = 1;
}
else if(chargeLevel_procents >= 33 && chargeLevel_procents < 66) {
z = 2;
}
else if(chargeLevel_procents >= 66 && chargeLevel_procents <= 100) {
z = 3;
}
Serial.print("\t Voltage: ");
Serial.print(A_y);
Serial.print(" V ");
Serial.print("\t Charge: ");
if(z == 1) {
Serial.print("■");
}
else if(z == 2) {
Serial.print("■■");
}
else if(z == 3) {
Serial.print("■■■");
}
else {
Serial.print("ERROR");
}
Serial.print("\r\n");
要查看结果,我建议使用PuTTY,因为它支持任何编码,这与Arduino IDE中通常的“端口监视器”不同。