风筝
发表于: 2018-3-6 21:38:27 | 显示全部楼层

电池有一定的电压限制,如果电压在充电或放电时超出规定的限制,电池的使用寿命就会受到影响或降低。每当我们在项目中使用电池供电时,有时我们需要检查电池的电压电量,确定是否需要充电或更换。本篇文章将帮助您如何使用Arduino开发板监测电池电压。该电池电压指示器可以指示电池状态,并且能够根据电池的不同电压在10段LED光柱上点亮LED。它还将一个LCD连接到Arduino开发板,并在LCD上显示电池电压。


所需的材料

●    Arduino UNO开发板

●    10段LED光柱显示器件

●    LCD液晶显示模块(16 * 2)

●    10K的电位器

●    电阻(10个100ohm; 330ohm)

●    电池(将要被测试)

●    连接导线

●    适用于Arduino的12v适配器


电路原理图

Battery-Voltage-Indicator-Circuit-diagram-using-Arduino-and-LED-Bar-Graph.png

使用Arduino和LED光柱显示器件的电池电压指示器电路图

LED光柱显示

LED光柱显示器件采用工业标准尺寸,并且功耗低。光柱根据发光强度进行分类。该产品本身仍然符合RoHS标准。它具有高达2.6V的正向电压。每段功耗为65mW。 LED光柱显示的工作温度为-40℃至80℃。LED光柱显示器件有很多的应用,如音频设备、仪表板和数字读出显示器等。

以下是LED光柱显示器件的引脚图:

LED-Bar-Graph-Pin-Diagram.png

以下是LED光柱显示器件的引脚配置:

LED Bar Graph-Pin-Configuration.png


Arduino电池电压监测程序

在本文的末尾处给出了完整的Arduino代码。这里我们简单解释代码的一些重要部分。

在这里,我们定义LCD库并指定用于Arduino的LCD引脚。模拟输入取自A4引脚,用于检查电池电压。我们将该值设置为Float,以使电压达到两位小数。

  1. #include <LiquidCrystal.h>
  2. const int rs = 12, en = 13, d4 = A0, d5 = A1, d6 = A2, d7 = A3;
  3. LiquidCrystal lcd(rs, en, d0, d1, d2, d3);
  4. const int analogPin = A4;
  5. float analogValue;
  6. float input_voltage;
复制代码

以下数组用于将引脚分配给LED光柱显示器件。

  1. int ledPins[] = {
  2. 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
  3. };       // an array of pin numbers to which LEDs are attached
  4. int pinCount = 10;           // the number of pins (i.e. the length of the array)
复制代码

将LCD和模拟引脚(A0、A1、A2、A3)设置为OUTPUT引脚。

  1. void setup()
  2. {
  3.    Serial.begin(9600);     //  opens serial port, sets data rate to 9600 bps
  4.    lcd.begin(16, 2);       //// set up the LCD's number of columns and rows:
  5.    pinMode(A0,OUTPUT);
  6.    pinMode(A1,OUTPUT);
  7.    pinMode(A2,OUTPUT);
  8.    pinMode(A3,OUTPUT);
  9.    pinMode(A4,INPUT);
  10.    lcd.print("Voltage Level");
  11. }
复制代码

这里,我们编写一个函数,以一种简单的方式使用LED光柱显示器件,您甚至也可以通过逐一编程来点亮LED,但代码会变得冗长。

  1. void LED_function(int stage)
  2. {
  3.      for (int j=2; j<=11; j++)
  4.    {
  5.     digitalWrite(j,LOW);
  6.    }
  7.    for (int i=1, l=2; i<=stage; i++,l++)
  8.    {
  9.     digitalWrite(l,HIGH);
  10.     //delay(30);
  11.    }
  12. }
复制代码

在这一部分中,我们使用模拟引脚读取电压值。然后,我们使用模数转换公式将模拟值转换为数字电压值,并在LCD上进一步显示。

  1. //  Conversion formula for voltage
  2.    analogValue = analogRead (A4);
  3.    Serial.println(analogValue);
  4.    delay (1000);
  5.    input_voltage = (analogValue * 5.0) / 1024.0;
  6.    lcd.setCursor(0, 1);
  7.    lcd.print("Voltage= ");
  8.    lcd.print(input_voltage);
  9.    Serial.println(input_voltage);
  10.    delay(100);
复制代码

根据输入电压的值,我们给出了一些条件来控制LED光柱显示器件。您可以在代码中查看以下条件:

  1. if (input_voltage < 0.50 && input_voltage >= 0.00 )
  2. {
  3. digitalWrite(2, HIGH);
  4. delay (30);
  5. digitalWrite(2, LOW);
  6. delay (30);       // when the voltage is zero or low the 1st LED will indicate by blinking
  7. }
  8. else if (input_voltage < 1.00 && input_voltage >= 0.50)
  9. {
  10. LED_function(2);
  11. }
  12. else if (input_voltage < 1.50 && input_voltage >= 1.00)
  13. {
  14. LED_function(3);
  15. }
  16. else if (input_voltage < 2.00 && input_voltage >= 1.50)
  17. {
  18. LED_function(4);
  19. }
  20. else if (input_voltage < 2.50 && input_voltage >= 2.00)
  21. {
  22. LED_function(5);
  23. }
  24. else if (input_voltage < 3.00 && input_voltage >= 2.50)
  25. {
  26. LED_function(6);
  27. }
  28. else if (input_voltage < 3.50 && input_voltage >= 3.00)
  29. {
  30. LED_function(7);
  31. }
  32. else if (input_voltage < 4.00 && input_voltage >= 3.50)
  33. {
  34. LED_function(8);
  35. }
  36. else if (input_voltage < 4.50 && input_voltage >= 4.00)
  37. {
  38. LED_function(9);
  39. }
  40. else if (input_voltage < 5.00 && input_voltage >= 4.50)
  41. {
  42. LED_function(10);
  43. }
  44. }
复制代码

电池电压指示器的工作

Battery-Voltage-Indicator-in-action-using-Arduino-and-LED-Bar-Graph.jpg

电池电压指示器只需读取Arduino的模拟引脚的值,并使用模数转换(ADC)公式将其转换为数字值即可。 Arduino Uno的ADC具有10位分辨率(所以整数值从0 - 2 ^ 10 = 1024)。 这意味着它将0到5伏的输入电压映射到0到1023之间的整数值。所以如果我们将输入模拟电压anlogValue乘以(5/1024),那么我们就可以得到输入电压的数字值。 在这里,我们学习了如何在Arduino中使用ADC输入。 然后使用该数字值相应地点亮LED光柱显示器件。


代码

使用Arduino和LED光柱显示器件的电池电压指示器的整个代码如下: main.rar (837 Bytes, 下载次数: 49)

。如果遇到什么问题,欢迎在下面跟帖,我会及时回复。

跳转到指定楼层
CNFDM
发表于: 2019-12-30 17:10:44 | 显示全部楼层

验证程序时第三行程序显示d0、d1……没有定义是怎么回事
回复

使用道具 举报

风筝
发表于: 2019-12-30 19:06:36 | 显示全部楼层

CNFDM 发表于 2019-12-30 17:10
验证程序时第三行程序显示d0、d1……没有定义是怎么回事

需要包含头文件所在的库
回复

使用道具 举报

CNFDM
发表于: 2019-12-31 17:37:03 | 显示全部楼层

那您能把那个库发给我一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-23 19:06 , Processed in 0.058229 second(s), 11 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表