Arduino:电池定义和信息输出到控制台

大概每个人都创建了自己的自主机器人,想要确定电池电量并将其显示在显示屏或控制台中。该功能主要是调试所需的功能,但在某些情况下,确定费用是机器人功能的重要组成部分。执行此任务的困难在于,模数转换器(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; // 1/3 
  }
  
  else if(chargeLevel_procents >= 33 && chargeLevel_procents < 66) {
    z = 2; // 2/3 
  }

  
  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中通常的“端口监视器”不同。

Source: https://habr.com/ru/post/zh-CN390967/


All Articles