0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何构建基于Arduino的电压指示器

454398 来源:工程师吴畏 2019-07-30 11:44 次阅读

为什么电池电量监控很重要

您是否经历过建设电池供电项目,然后突然无法工作,因为需要收费?

我们都知道电池有一定的电压限制。超过或完全失去电池电压可能导致很多挫折,元件损坏或数据丢失。因此,能够监控电池电量以便您决定是否需要充电或更换电池不是很好吗?这就是本读者将为您做的事情!

需要的材料

Arduino Uno

16 x 2 LCD显示器

LED条形图/10个LED灯泡

Arduino IDE

4 x 1.2V电池

电池座

什么是LED条形图?

LED条形图是一个由10个独立LED组成的LED阵列,带有10个输出引脚。它有各种应用,包括音频设备和工业控制面板。

在我们的项目中,我们将其用作电池电量指示器。与任何其他LED一样,当将LED条连接到微控制器时,必须使用端到地的电阻将阳极引脚连接到正极和阴极引脚。

该项目如何测量电池电量?

很高兴理解电池具有我们称之为电量的电池。它可以理解为电池中包含的电压量。

Arduino的interwetten与威廉的赔率体系 引脚充当一个简单的电压表,可以检索电压值。然后,我们可以使用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

    文章

    251

    浏览量

    38282
  • Arduino
    +关注

    关注

    188

    文章

    6469

    浏览量

    187033
收藏 人收藏

    评论

    相关推荐

    浅谈架空暂态特征型远传故障指示器

    新品—架空暂态特征型远传故障指示器—深圳鼎信生产厂家 型号:JY -DX 一、背景 随着电力系统的不断发展,对架空线路的安全运行和故障快速定位的要求越来越高。传统的故障指示器大多只能提供就地指示
    的头像 发表于 12-04 16:35 116次阅读

    线路故障指示器为什么变成红色

    线路故障指示器变成红色,通常是因为检测到了线路中的特定电气量变化,这些变化与线路故障紧密相关。具体来说,以下是一些导致线路故障指示器变红的主要原因: 1. 短路或接地故障 短路故障 :当线路中发
    的头像 发表于 09-24 11:04 434次阅读

    线路故障指示器如何复位

    是关于线路故障指示器复位的指南: 1. 了解线路故障指示器 线路故障指示器通常包括电流互感电压互感器、故障检测电路、
    的头像 发表于 09-24 11:01 349次阅读

    线路故障指示器工作原理是什么

    线路故障指示器是一种用于检测和定位电力系统中故障的设备,它能够帮助电力维护人员快速准确地找到故障点,从而提高电力系统的可靠性和安全性。 线路故障指示器的工作原理概述 1. 基本概念 线路故障指示器
    的头像 发表于 09-24 10:54 775次阅读

    线路故障指示器怎么判断故障点

    线路故障指示器在判断故障点时,主要通过检测线路中的电气量变化来实现。以下是一些具体的判断方法和步骤: 一、工作原理 线路故障指示器一般具备电流采集、电场测量和无线通信功能。当线路出现短路或接地故障
    的头像 发表于 09-24 10:52 664次阅读

    利用Arduino的数字水位指示器电路设计

    随着科技的不断发展,数字化威廉希尔官方网站 在各个领域的应用越来越广泛。在液位监测领域,数字水位指示器作为一种先进的监测设备,因其高精度、高可靠性和智能化等特点,受到了广泛的关注和应用。
    的头像 发表于 06-22 17:48 1009次阅读
    利用<b class='flag-5'>Arduino</b>的数字水位<b class='flag-5'>指示器</b>电路设计

    内置超级电容模块的故障指示器有哪些特性?

    内置超级电容模块的故障指示器有哪些特性?安装在输配电线路、电力电缆及开关柜进出线上的故障指示器在电流流通的线路中起着非常重要的作用,一旦线路发生故障,巡线人员可以利用指示灯的报警显示快速的确定故障
    的头像 发表于 06-04 09:39 456次阅读
    内置超级电容模块的故障<b class='flag-5'>指示器</b>有哪些特性?

    电力电缆故障指示器|误差探讨|行波故障定位的选项

    以往电力电缆故障指示器误差过大的原因可能有以下几点:  1. 设备自身问题:故障指示器设备本身可能存在制造或设计上的缺陷,导致其指示精度不够。 2. 安装环境影响:故障指示器可能受到安
    的头像 发表于 03-28 10:49 921次阅读

    汽车制动失效指示器电路分享

    几乎 40%的事故是由于制动故障问题而发生的。通过及早发现这种情况,我们可以降低事故率。“汽车制动失效指示器”项目是解决这一全球性问题的方法。
    的头像 发表于 02-25 16:02 1091次阅读
    汽车制动失效<b class='flag-5'>指示器</b>电路分享

    水位指示器电路图分享

    水位指示器是一种用于测量和显示容器内水位高度的装置。它广泛应用于各种场合,如工业生产、电力系统、水处理工程、农业灌溉等领域。
    的头像 发表于 02-20 15:25 4761次阅读
    水位<b class='flag-5'>指示器</b>电路图分享

    典型指示器电路图分享

    指示器是一种用于提供信息或指示的设备或组件。它的工作原理和作用取决于其应用领域和设计,但通常都是通过视觉、听觉或触觉等方式向用户传递信息。
    的头像 发表于 02-12 12:24 1405次阅读
    典型<b class='flag-5'>指示器</b>电路图分享

    水位指示器电路图分享

    水位指示器是一种用于检测和指示水位的设备。它通常采用简单的机制来工作,如利用静压力原理将水位信号转换为电信号输出到控制仪表,以对被测介质的液位、密度等进行自动检测并报警。
    的头像 发表于 02-12 09:29 3898次阅读
    水位<b class='flag-5'>指示器</b>电路图分享

    水位指示器电路图分享

    水位指示器是一种用于检测和指示水位的设备。它通常采用简单的机制来工作,如利用静压力原理将水位信号转换为电信号输出到控制仪表,以对被测介质的液位、密度等进行自动检测并报警。
    的头像 发表于 02-12 09:20 1557次阅读
    水位<b class='flag-5'>指示器</b>电路图分享

    电池电量指示器电路图分享

    电池电量指示器是一种装置,也被称为电眼,用于指示蓄电池的电量或充电程度。当电量指示器显示绿色时,表示电瓶电量充足,电瓶是完好的;当电量指示器显示黑色时,表示电瓶电量不足需要充电了;当电
    的头像 发表于 02-07 18:18 9051次阅读
    电池电量<b class='flag-5'>指示器</b>电路图分享

    故障指示器的作用

    故障指示器在电力系统中扮演着非常重要的角色,通过监测电力设备的状态变化,及时反馈故障信息,以帮助运维人员快速定位和解决问题,从而提升电力系统的安全性和可靠性。 首先,故障指示器可以用来监测电力设备
    的头像 发表于 12-27 11:06 1342次阅读