·用户登录 ·设为主页 ·加入收藏
要闻 总局动态 通知公告 政策法规   财经 行业扫描 质量监督 检验检疫   论坛 政务问答 质检论文 观点PK台
质检 通关检验 漫画有话 质检生活 消费 抽查公告 热点评论 企业风采 视频 质检联播 在线访谈 质量播报
文化 质量管理 产品召回 风险预警 维权 投诉反馈 执法行动 贸易救济 微博 食品安全 质检百科 质量提升
您当前位置:霍林郭勒新闻网>>在线访谈

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

霍林郭勒新闻网  2020-02-10 13:08:53

为什么电量很重要

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

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

需要的材料

Uno

16 x 2 LCD

条形图/10个LED灯泡

Arduino IDE

4 x 1.2V电池

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

什么是LED条形图?

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

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

该项目如何电池电量?

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

Arduino的模拟引脚充当一个简单的电压表,可以检索电压值。然后,我们可以使用转换公式将模拟值转换为数字电压值。

我们转换的值将显示在LED条形图上,它可以投射强度。因此,如果所有十个LED都点亮,则电池处于全强度状态。如果只有五个LED亮,则电池的强度为一半。

Arduino Uno ADC的分辨率为10位。 ADC转换器将0到5伏之间的输入电压映射到0到1023之间的整数值。因此,如果我们将输入analogValue乘以(5/1024),那么我们得到输入电压的数字值。

项目示意图

下面是构建的原理图。

电池电量监控代码演练

首先,我们需要定义LCD库并指定我们将与Arduino一起使用的引脚。我们将模拟引脚A4分配为用于检查电池电压的模拟引脚。这些值在float中设置,因此我们可以得到最多两位小数的电压值。

#include

const int = 12, en = 13, d0 = A0, d1 = A1, d2 = A2, d3 = A3;

const int analogPin = A4;

Liqurystal lcd(rs, en, d0, d1, d2, d3);

float analogValue;

float input_voltage;

然后,我们创建一个数组,用于将引脚分配给LED条形图。连接LED的引脚编号数组。

int ledns[] = { 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 ra 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。

(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);

}

}

现在您不必担心电池意外运行不足。希望这有助于您的下一个电池供电项目!


相关阅读:
牙科疾病 https://www.haoya120.com/
  • ·如何构建基于Arduino的电压指示器
  • ·12月最暖 1月也最暖 2月的浙江天气又会闹哪样?
  • ·足月后会随时生吗
  • ·拔牙后几天可以刷牙,正确刷牙避免干槽症
  • ·深入浅出Docker(六):像谷歌一样部署你的应用
  • ·买个茶厂花8亿港元 中国矿业收购案遭质疑
  • ·2018年索尼世界摄影大赛参赛作品展!
  • ·难忘的学生毕业感言
  • ·《神医喜来乐传奇》开机 李保田自称是戏霸
  • ·暖暖哒黑糖
  • 拔牙后几天可以刷牙,正确刷牙避免干槽症
    拔牙后几天可以刷牙,正确刷牙避免干槽症
    河北赞皇县龙门乡女党委书记秦建英被举报
    河北赞皇县龙门乡女党委书记秦建英被举报
    推荐新闻
  • 如何构建基于Arduino的电压指示器
  • 亢痿振阳汤治疗功能性勃起功能障碍机理分析
  • 胖女人如何快速怀孕呢
  • 郝蕾挺大肚现身机场 小老公体贴搬运行李
  • 记事作文300字
  • 县委宣传部部长个人述职述廉报告
  • 离婚财产如何分割房子
  • 本站介绍  ·  联系我们  ·  友情链接  ·