电子说
为什么电池电量监控很重要
您是否经历过建设电池供电项目,然后突然无法工作,因为需要收费?
我们都知道电池有一定的电压限制。超过或完全失去电池电压可能导致很多挫折,元件损坏或数据丢失。因此,能够监控电池电量以便您决定是否需要充电或更换电池不是很好吗?这就是本读者将为您做的事情!
需要的材料
Arduino Uno
16 x 2 LCD显示器
LED条形图/10个LED灯泡
Arduino IDE
4 x 1.2V电池
电池座
什么是LED条形图?
LED条形图是一个由10个独立LED组成的LED阵列,带有10个输出引脚。它有各种应用,包括音频设备和工业控制面板。
在我们的项目中,我们将其用作电池电量指示器。与任何其他LED一样,当将LED条连接到微控制器时,必须使用端到地的电阻将阳极引脚连接到正极和阴极引脚。
该项目如何测量电池电量?
很高兴理解电池具有我们称之为电量的电池。它可以理解为电池中包含的电压量。
Arduino的模拟引脚充当一个简单的电压表,可以检索电压值。然后,我们可以使用ADC转换公式将模拟值转换为数字电压值。
我们转换的值将显示在LED条形图上,它可以投射强度。因此,如果所有十个LED都点亮,则电池处于全强度状态。如果只有五个LED亮,则电池的强度为一半。
Arduino Uno ADC的分辨率为10位。 ADC转换器将0到5伏之间的输入电压映射到0到1023之间的整数值。因此,如果我们将输入analogValue乘以(5/1024),那么我们得到输入电压的数字值。
项目示意图
下面是构建的原理图。
电池电量监控代码演练
首先,我们需要定义LCD库并指定我们将与Arduino一起使用的引脚。我们将模拟引脚A4分配为用于检查电池电压的模拟引脚。这些值在float中设置,因此我们可以得到最多两位小数的电压值。
#include
const int rs = 12, en = 13, d0 = A0, d1 = A1, d2 = A2, d3 = A3;
const int analogPin = A4;
LiquidCrystal lcd(rs, en, d0, d1, d2, d3);
float analogValue;
float input_voltage;
然后,我们创建一个数组,用于将引脚分配给LED条形图。连接LED的引脚编号数组。
int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; // The LEDs attach to this array of pin numbers
int pinCount = 10; // the number of pins
我们将LCD和模拟引脚设置为OUTPUT引脚。
void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
lcd.begin(16, 2); //// set up the LCD‘s number of columns and rows:
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,INPUT);
lcd.print(“Voltage Level”);
}
接下来,我们创建一个函数, LED_function ,用于使用LED条形图。
void LED_function(int stage)
{
for (int j=2; j《=11; j++)
{
digitalWrite(j,LOW);
}
for (int i=1, l=2; i《=stage; i++,l++)
{
digitalWrite(l,HIGH); //delay(30);
}
}
一旦我们有了这个功能,我们需要一种方法将模拟值转换成数字电压值。通过使用Arduino的内置模数转换器和ADC转换公式,我们将能够轻松转换这些值。我们还希望在LCD显示屏上显示这些转换值。
// Conversion formula for voltage
analogValue = analogRead (A4);
Serial.println(analogValue);
delay (1000);
input_voltage = (analogValue * 5.0) / 1024.0;
lcd.setCursor(0, 1);
lcd.print(“Voltage= ”);
lcd.print(input_voltage);
Serial.println(input_voltage);
delay(100);
然后我们创建一些条件来控制LED条形图,相对于我们从模拟引脚读取的输入电压值A4。
if (input_voltage 《 0.50 && input_voltage 》= 0.00 )
{
digitalWrite(2, HIGH);
delay (30);
digitalWrite(2, LOW);
delay (30);
}
else if (input_voltage 《 1.00 && input_voltage 》= 0.50)
{
LED_function(2);
}
else if (input_voltage 《 1.50 && input_voltage 》= 1.00)
{
LED_function(3);
}
else if (input_voltage 《 2.00 && input_voltage 》= 1.50)
{
LED_function(4);
}
else if (input_voltage 《 2.50 && input_voltage 》= 2.00)
{
LED_function(5);
}
else if (input_voltage 《 3.00 && input_voltage 》= 2.50)
{
LED_function(6);
}
else if (input_voltage 《 3.50 && input_voltage 》= 3.00)
{
LED_function(7);
}
else if (input_voltage 《 4.00 && input_voltage 》= 3.50)
{
LED_function(8);
}
else if (input_voltage 《 4.50 && input_voltage 》= 4.00)
{
LED_function(9);
}
else if (input_voltage 《 5.00 && input_voltage 》= 4.50)
{
LED_function(10);
}
在上图中,您可以看到我们得到一个几乎完全充电的电池读数,相当于大约3.84V。
完整项目代码
#include
const int rs = 12, en = 13, d0 = A0, d1 = A1, d2 = A2, d3 = A3;
const int analogPin = A4;
LiquidCrystal lcd(rs, en, d0, d1, d2, d3);
float analogValue;
float input_voltage;
int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; // an array of pin numbers to which LEDs are attached
int pinCount = 10; // the number of pins (i.e. the length of the array)
void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
lcd.begin(16, 2); //// set up the LCD’s number of columns and rows:
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,INPUT);
lcd.print(“Voltage Level”);
}
void LED_function(int stage)
{
for (int j=2; j《=11; j++)
{
digitalWrite(j,LOW);
}
for (int i=1, l=2; i《=stage; i++,l++)
{
digitalWrite(l,HIGH); //delay(30);
}
}
void loop()
{
// Conversion formula for voltage
analogValue = analogRead (A4);
Serial.println(analogValue);
delay (1000);
input_voltage = (analogValue * 5.0) / 1024.0;
lcd.setCursor(0, 1);
lcd.print(“Voltage= ”);
lcd.print(input_voltage);
Serial.println(input_voltage);
delay(100);
if (input_voltage 《 0.50 && input_voltage 》= 0.00 )
{
digitalWrite(2, HIGH);
delay (30);
digitalWrite(2, LOW);
delay (30);
}
else if (input_voltage 《 1.00 && input_voltage 》= 0.50)
{
LED_function(2);
}
else if (input_voltage 《 1.50 && input_voltage 》= 1.00)
{
LED_function(3);
}
else if (input_voltage 《 2.00 && input_voltage 》= 1.50)
{
LED_function(4);
}
else if (input_voltage 《 2.50 && input_voltage 》= 2.00)
{
LED_function(5);
}
else if (input_voltage 《 3.00 && input_voltage 》= 2.50)
{
LED_function(6);
}
else if (input_voltage 《 3.50 && input_voltage 》= 3.00)
{
LED_function(7);
}
else if (input_voltage 《 4.00 && input_voltage 》= 3.50)
{
LED_function(8);
}
else if (input_voltage 《 4.50 && input_voltage 》= 4.00)
{
LED_function(9);
}
else if (input_voltage 《 5.00 && input_voltage 》= 4.50)
{
LED_function(10);
}
}
现在您不必担心电池意外运行不足。希望这有助于您的下一个电池供电项目!
全部0条评论
快来发表一下你的评论吧 !