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的模拟引脚充当一个简单的电压表,可以检索电压值。然后,我们可以使用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

    文章

    256

    浏览量

    39168
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195990
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ‌基于ST EVLIOL4LSV1 IO-Link执行的工业物联网技术解析

    STMicroelectronics EVLIOL4LSV1 IO-Link执行设计用于工厂自动化和系统报警指示器应用中使用的传统塔式灯:它是一套完整的解决方案,可用作工业化的参考设计。通过IO-Link,EVLIOL4LSV1成为智能塔式灯的执行
    的头像 发表于 10-17 15:25 292次阅读
    ‌基于ST EVLIOL4LSV1 IO-Link执行<b class='flag-5'>器</b>的工业物联网技术解析

    TPS563212同步降压转换技术解析与应用指南

    的电源正常状态指示器或外部软启动。通过正确配置使能引脚、电源正常状态指示器或外部软启动可以实现电源时序控制。4.2V至18V的宽输入电压范围支持12V和15V等各种常见的输入电压轨。其
    的头像 发表于 09-26 10:22 392次阅读
    TPS563212同步降压转换<b class='flag-5'>器</b>技术解析与应用指南

    TPS562212同步降压转换技术解析与应用指南

    软启动。通过正确配置使能引脚、电源正常状态指示器或外部软启动可以实现电源时序控制。4.2V至18V的宽输入电压范围支持12V和15V等各种常见的输入电压轨。其输出电压为0.6V至7V,
    的头像 发表于 09-26 09:37 350次阅读
    TPS562212同步降压转换<b class='flag-5'>器</b>技术解析与应用指南

    德州仪器UCC256404技术方案 使用数字控制在次级侧实现LLC电流模式控制

    欢迎来到 德州仪器的 电源设计小贴士 Power Tips 系列文章   本期,我们将介绍 LLC 电流模式控制 的详细知识   电流模式控制 LLC 注意事项 如图 1 所示, 指示器 - 指示器
    的头像 发表于 08-14 10:50 3739次阅读
    德州仪器UCC256404技术方案  使用数字控制<b class='flag-5'>器</b>在次级侧实现LLC电流模式控制

    TPS60140 稳压5V电荷泵电压三倍,带低电量指示器数据手册

    TPS6014x 升压稳压电荷泵可±从 1.8V至3.6V输入电压范围。这些器件通常由两个碱性、镍镉或 镍氢电池,并从 2V 输入提供至少 100 mA 的输出电流。只有四个 需要外部电容器来构建
    的头像 发表于 08-04 15:33 722次阅读
    TPS60140 稳压5V电荷泵<b class='flag-5'>电压</b>三倍<b class='flag-5'>器</b>,带低电量<b class='flag-5'>指示器</b>数据手册

    TPS60124 稳压式 3.0V 高效电荷泵,带低电量指示器数据手册

    (TPS60122和 TPS60123 为 100 mA),所有这些都来自 2V 输入。需要四个外部电容器来构建一个完整的高效DC/DC电荷泵转换。为了在宽输入电压范围内实现高效率,电荷泵自动选择1.5倍或倍频转换模式。通过2
    的头像 发表于 08-04 11:10 842次阅读
    TPS60124 稳压式 3.0V 高效电荷泵,带低电量<b class='flag-5'>指示器</b>数据手册

    TPS60204 稳压 3.3V 低纹波电荷泵,带低电量指示器数据手册

    电流至少为 100 mA。只需四个外部电容器即可构建完整的低纹波DC/DC转换。两个单端电荷泵的推挽式工作模式确保了低输出电压纹波,因为电流连续传输到输出端。
    的头像 发表于 08-04 09:57 832次阅读
    TPS60204 稳压 3.3V 低纹波电荷泵,带低电量<b class='flag-5'>指示器</b>数据手册

    TPS563211 4.2V 至 18V、3A、同步降压转换,精度为 1%,PG/SS 和 PFM/强制 PWM数据手册

    引脚进行配置。通过正确配置 Enable、Power-Good 指示器或外部软启动,可以进行电源排序。4.2 V 至 18 V 的宽输入电压范围支持 12 V 和 15 V 等各种常见输入轨。它在 0.6V 至 7V 的输出电压
    的头像 发表于 06-09 17:30 638次阅读
    TPS563211 4.2V 至 18V、3A、同步降压转换<b class='flag-5'>器</b>,精度为 1%,PG/SS 和 PFM/强制 PWM数据手册

    TPS562211 4.2V 至 18V、2A、同步降压转换,精度为 1%,PG/SS 和 PFM/强制 PWM数据手册

    引脚进行配置。通过正确配置 Enable、Power-Good 指示器或外部软启动,可以进行电源排序。4.2 V 至 18 V 的宽输入电压范围支持 12 V 和 15 V 等各种常见输入轨。它在 0.6 V 至 7 V 的输出电压
    的头像 发表于 06-09 17:03 574次阅读
    TPS562211 4.2V 至 18V、2A、同步降压转换<b class='flag-5'>器</b>,精度为 1%,PG/SS 和 PFM/强制 PWM数据手册

    TPS563212 具有节能模式和可选 FCCM 的 4.2V 至 18V、3A、1.2MHz 同步降压转换数据手册

    正确配置 Enable pin、power-good 指示器或外部软启动,可以进行电源排序。4.2 V 至 18 V 的宽输入电压范围支持 12 V 和 15 V 等各种常见输入轨。该器件在 0.6V 至 7V 的输出电压下支持
    的头像 发表于 06-09 15:28 590次阅读
    TPS563212 具有节能模式和可选 FCCM 的 4.2V 至 18V、3A、1.2MHz 同步降压转换<b class='flag-5'>器</b>数据手册

    TPS562212 具有节能模式和可选 FCCM 的 4.2V 至 18V、2A、1.2MHz 同步降压转换数据手册

    正确配置 Enable pin、power-good 指示器或外部软启动,可以进行电源排序。4.2 V 至 18 V 的宽输入电压范围支持 12 V 和 15 V 等各种常见输入轨。它在 0.6 V 至 7 V 的输出电压下支持
    的头像 发表于 06-09 14:38 566次阅读
    TPS562212 具有节能模式和可选 FCCM 的 4.2V 至 18V、2A、1.2MHz 同步降压转换<b class='flag-5'>器</b>数据手册

    超级电容在故障指示器中的作用有哪些?

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

    通过Arduino Nano Matter开发板构建智能卷帘系统

    在本指南中,您将学习如何通过Arduino NanoMatter开发板和板上的Silicon Labs(芯科科技)MGM240S多协议无线模块来构建一个智能卷帘系统。该系统可通过 Amazon
    的头像 发表于 02-28 09:46 924次阅读
    通过<b class='flag-5'>Arduino</b> Nano Matter开发板<b class='flag-5'>构建</b>智能卷帘系统

    一摇、二遥型配网自动化终端原理和功能介绍

    一摇二遥型配网自动化终端是配套电缆型故障指示器使用的。通信终端能够与指示器通过光纤通信,接收指示器传输的遥信(故障信息)、遥测(负荷电流)信息进行分析、编译;可以实时监测24路开关节点状态,并生成相应的遥信变位信息及SOE信息;
    的头像 发表于 02-11 15:51 1106次阅读
    一摇、二遥型配网自动化终端原理和功能介绍

    不同类型熔断的优缺点 熔断在电路中的作用

    熔断 优点 :分断电流较大,可用于电压等级500V及其以下、电流等级200A以下的电路中,且带有熔断指示器,一旦熔体熔断,指示器会弹出,便于观察和判断。 缺点 :结构相对复杂,可能增
    的头像 发表于 12-10 10:49 3391次阅读