电池具有一定的电压限制,如果在充电或放电时电压超过规定的限制,电池的使用寿命会受到影响或缩短。每当我们使用电池供电的项目时,有时我们需要检查电池电压水平,是否需要充电或更换。该电路将帮助您监控电池的电压。此arduino 电池电压指示器根据电池电压,通过在10 段 led 条形图上发光 led 来指示电池状态。它还在连接到arduino的lcd上显示您的电池电压。
所需材料
arduino uno
10 段 led 条形图
液晶屏 (16*2)
电位器-10k
电阻器 (100欧姆-10;330欧姆)
电池(待测试)
连接线
适用于 arduino 的 12v 适配器
电路图
led 条形图
led 条形图采用工业标准尺寸,功耗低。条形按发光强度分类。产品本身仍符合 rohs 标准。它具有高达 2.6v 的正向电压。每段功耗为65mw。led 条形图的工作温度为 -40°c 至 80°c。led条形图有许多应用,如音频设备,仪表板和数字读数显示。
引脚图
pin configuration
用于电池电压监控的 arduino 程序:
在这里,我们正在定义lcd库并指定要与arduino一起使用的lcd引脚。模拟输入取自引脚a4,用于检查电池电压。我们将值设置为 float,以使电压达到两位小数。
#include
const int rs = 12, en = 13, d4 = a0, d5 = a1, d6 = a2, d7 = a3;
liquidcrystal lcd(rs, en, d0, d1, d2, d3);
const int analogpin = a4;
float analogvalue;
float input_voltage;
该阵列用于将引脚分配给 led 条形图。
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)
将液晶屏和模拟针脚(a0、a1、a2、a3)设置为输出针脚。
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 条形图的函数,您甚至可以通过一个接一个地编程来发光 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);
}
}
在这一部分中,我们使用模拟引脚读取电压值。然后,我们使用模数转换公式将模拟值转换为数字电压值,并将其进一步显示在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条形图led。您可以在代码中检查以下条件:
if (input_voltage = 0.00 )
{
digitalwrite(2, high);
delay (30);
digitalwrite(2, low);
delay (30); // when the voltage is zero or low the 1st led will indicate by blinking
}
else if (input_voltage = 0.50)
{
led_function(2);
}
else if (input_voltage = 1.00)
{
led_function(3);
}
else if (input_voltage = 1.50)
{
led_function(4);
}
else if (input_voltage = 2.00)
{
led_function(5);
}
else if (input_voltage = 2.50)
{
led_function(6);
}
else if (input_voltage = 3.00)
{
led_function(7);
}
else if (input_voltage = 3.50)
{
led_function(8);
}
else if (input_voltage = 4.00)
{
led_function(9);
}
else if (input_voltage = 4.50)
{
led_function(10);
}
}
电池电压指示器的工作原理
电池电压指示器只需从arduino模拟引脚读取值,并使用模数转换(adc)公式将其转换为数字值。arduino uno adc具有 10 位分辨率(因此整数值从 0 - 2^10 = 1024 个值)。这意味着它将 0 到 5 伏之间的输入电压映射到 0 到 1023 之间的整数值。因此,如果我们将输入 anlogvalue 乘以 (5/1024),则得到输入电压的数字值。
#include
const int rs = 12, en = 13, d0 = a0, d1 = a1, d2 = a2, d3 = a3;
liquidcrystal lcd(rs, en, d0, d1, d2, d3);
const int analogpin = a4;
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.00 )
{
digitalwrite(2, high);
delay (30);
digitalwrite(2, low);
delay (30);
}
else if (input_voltage = 0.50)
{
led_function(2);
}
else if (input_voltage = 1.00)
{
led_function(3);
}
else if (input_voltage = 1.50)
{
led_function(4);
}
else if (input_voltage = 2.00)
{
led_function(5);
}
else if (input_voltage = 2.50)
{
led_function(6);
}
else if (input_voltage = 3.00)
{
led_function(7);
}
else if (input_voltage = 3.50)
{
led_function(8);
}
else if (input_voltage = 4.00)
{
led_function(9);
}
else if (input_voltage = 4.50)
{
led_function(10);
}
}
承德科胜大米称重包装机,颗粒包装机|河北包装机
Nexperia推出650V的功率器件GAN063-650WSA
台湾“芯片大王”张忠谋这样评价大陆芯片产业
五一礼物榜耳机品牌推荐 真无线主动降噪蓝牙耳机推荐
高效解决口腔清洁问题,水牙线好用吗?
基于Arduino和LED条形图的电池电压指示器
博物馆怎样实现数字化升级?智慧导览系统功能详解与实施效益
备赛的时候芯片越来越难买应该怎么办?
升压变压器线圈绕法介绍与计算
欧莱雅推出可随时检测皮肤质量的pH传感器
人工智能技术如何更加方便的养猪
那些年,我们一起期待的汽车新技术
微软利用其网络收购在Azure云上开发基于5G的边缘区域
5G毫米波对健康有影响是真是假
百度发布AI财报 AI的商业化是一件内生的事
讲讲广义相对论的建立过程
车联网近在眼前,移动互联下的汽车设计该如何迎合?
抢夺物联网先机芯片厂扎堆LPWAN 准5G部署即将起飞
电子电器设备IP防护等级怎么表示?
如何才能熟悉的使用PADS进行PCB设计呢?