英文原文出处:https://circuitdigest.com/microcontroller-projects/arduino-wattmeter-to-measure-voltage-current-power-consumption

感谢大神 风筝 https://www.yiboard.com/?266 ,如果不允许转载请告知,我即刻删除。

作为电子工程师,我们总会需要依靠仪器仪表来测量和分析电路的工作状况。从简单的万用表到复杂的电能质量分析仪或DSO,一切都有自己独特的应用。这些仪表中的大多数都是现成的,可以根据要测量的参数及其精度购买。但有时候我们可能会遇到需要制作属于自己的仪表的情况。比如说你正在研究一个太阳能光伏项目,你想计算负载的功耗,在这种情况下我们可以使用像Arduino这样的简单微控制器平台制作我们自己的功率计。

制作自己的仪表不仅降低了测试成本,还为我们提供了简化测试过程的空间。比如,使用Arduino构建的功率计可以轻松调整以监控串口监视器上的结果,并在串口绘图仪上绘制图形,或添加SD卡以预定义的时间间隔自动记录电压、电流和功率值。听起来很有趣!?让我们开始吧......

所需的材料

●    Arduino Nano开发板

●    LM358运算放大器

●    7805电压调节器

●    LCD显示屏1602

●    测试负载

●    面包板

●    焊接套件

电路原理图

Arduino功率计的完整电路图如下:

为便于理解,Arduino功率计电路分为两个单元。电路的上部是测量单元,电路的下部是计算和显示单元。对于那些不熟悉这种类型电路的人来说,请参考标签。如+ 5V标签意味着标签所连接的所有引脚都应该被视为它们连接在一起。标签通常用于使电路图看起来整洁。

该电路设计适用于工作电压范围为0-24V、电流范围为0-1A的系统,同时考虑到太阳能光伏发电的规格。但是一旦理解了电路的工作原理,就可以轻松扩展范围。电路背后的基本原理是测量负载两端的电压和通过它的电流,以计算功耗。所有测量值将在液晶显示屏1602上面显示。

接下来让我们将电路分成小段,以便我们可以清楚地了解电路如何工作。

测量单位

测量单元包括一个用于帮助我们测量电压的分压器、一个带有非反相运算放大器的关闭电阻用于帮助我们测量通过电路的电流。上述电路的分压器部分如下所示:

这里输入电压由Vcc表示,如前所述,我们正在设计电压范围为0V至24V的电路。但像Arduino这样的微控制器无法测量如此高的电压值;它只能测量0-5V的电压。因此我们必须将0-24V的电压范围映射为0-5V。这可以通过使用如下所示的分压电路轻松完成。电阻器10k和2.2k一起形成分压器电路。可以使用以下公式计算分压器的输出电压。同样用于决定电阻的值,如果重新设计电路,可以使用我们的在线计算器计算电阻值。

Vout =(Vin×R2)/(R1 + R2)

映射的0-5V可以从标记为Voltage的中间部分获得。然后可以将该映射电压反馈到Arduino模拟引脚。

接下来我们必须测量通过LOAD的电流。我们知道微控制器只能读取模拟电压,因此我们需要以某种方式将电流值转换为电压。可以通过简单地在路径中添加一个电阻器来完成,根据欧姆定律,该电阻器将降低其上的电压值,该电压值与流过它的电流成比例。此电压降的值将非常小,因此我们使用运算放大器来放大它。其电路如下所示

这里分流电阻(SR1)的值为0.22欧姆。如前所述,我们正在设计0-1A的电路,因此根据欧姆定律,我们可以计算出该电阻上的电压降,当最大1A电流通过负载时,电压降约为0.2V。这个电压非常小,微控制器可以读取,我们在非反相放大器模式下使用运算放大器将电压从0.2V增加到更高的电平,以便Arduino读取。

非反相模式下的运算放大器如上所示。放大器的增益设计为21,因此0.2 * 21 = 4.2V。下面给出了计算运算放大器增益的公式,如果您正在重新设计电路,也可以使用此在线增益计算器来获得电阻的值。

增益= Vout / Vin = 1 +(Rf / Rin)

在本例中,Rf的值为20k,Rin的值为1k,这样我们的增益值为21。然后将运算放大器的放大电压提供给RC滤波器,使用电阻为1k、电容为0.1uF的滤波器过滤任何耦合的噪音。最后,电压被反馈到Arduino模拟引脚。

测量单元中剩下的最后一部分是电压调节器部分。由于我们将提供可变的输入电压,我们需要一个稳定的+ 5V,以便Arduino和运算放大器工作。该稳压电压将由7805电压调节器提供。在输出端添加一个电容器以滤除噪声。

计算和显示单元

在测量单元中,我们设计了电路,将电压和电流参数转换为0-5V,可以反馈到Arduino模拟引脚。现在,在电路的这一部分,我们将这些电压信号连接到Arduino,并将液晶显示屏1602连接到Arduino,以便我们可以查看结果。其电路如下所示

如图所示,电压引脚连接到模拟引脚A3,电流引脚连接到模拟引脚A4。 LCD由7805的+ 5V供电,并连接到Arduino的数字引脚,工作在4位模式。我们还使用连接到Con引脚的电位器(10k)来改变LCD的对比度。

编程Arduino

现在我们已经很好地理解了硬件,让我们打开Arduino并开始编程。该代码的目的是读取引脚A3和A4上的模拟电压并计算电压、电流和功率值,最后将其显示在LCD屏幕上。在页面末尾给出了完整程序,该程序可以用于上面讨论的硬件。接下来,代码被分成小片段并进行解释。

正如我们开始的所有程序,定义我们使用的引脚。本篇文章中,A3和A4引脚分别用于测量电压和电流,数字引脚3、4、8、9、10和11用于连接LCD和Arduino。

int Read_Voltage  = A3;
int Read_Current  = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

我们还包括一个名为 liquid crystal的头文件,用于将液晶显示器与Arduino连接。然后在setup函数中,我们初始化LCD显示屏并显示一个介绍文本为“Arduino Wattmeter”并等待两秒钟后再清除它。代码如下所示。

void setup() {lcd.begin(16, 2); //Initialise 16*2 LCDlcd.print(" Arduino Wattmeter"); //Intro Message line 1lcd.setCursor(0, 1);lcd.print("-Circuitdigest"); //Intro Message line 2delay(2000);lcd.clear();
}

在主loop()函数中,我们使用模拟读取功能从引脚A3和A4读取电压值。我们知道Arduino ADC输出值为0-1203,因为它有一个10位ADC。然后必须将该值转换为0-5V,这可以通过乘以(5/1023)来完成。然后在前期的硬件中,我们已经将电压的实际值从0-24V映射到0-5V,电流的实际值从0-1A到0-5V。所以现在我们必须使用乘数将这些值恢复为实际值。这可以通过将其乘以乘数值来完成。乘数的值可以使用硬件部分中提供的公式在理论上计算,或者如果您有一组已知的电压和电流值,您可以实际计算它。我遵循了后一种选择,因为它实时更准确。所以这里乘数的值是6.46和0.239。因此代码如下所示

float Voltage_Value = analogRead(Read_Voltage);float Current_Value = analogRead(Read_Current);Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;Current_Value = Current_Value * (5.0/1023.0) * 0.239;

如何更准确地测量?

以上计算实际电压和电流值的方法可以正常工作。但是存在一个缺点,即测量的ADC电压和实际电压之间的关系不是线性的,因此单个乘法器不会给出非常精确的结果,同样适用于电流。

因此,为了提高精度,我们可以使用已知的一组值绘制测量的ADC值与实际值,然后使用该数据绘制图形并使用线性回归方法导出乘数方程。

最后,一旦我们计算出通过负载的实际电压和实际电流的值,我们就可以使用公式计算功率(P = V * I)。然后我们使用下面的代码在LCD显示屏上显示所有三个值。

lcd.setCursor(0, 0);lcd.print("V="); lcd.print(Voltage_Value);lcd.print("  ");lcd.print("I=");lcd.print(Current_Value);float Power_Value = Voltage_Value * Current_Value;lcd.setCursor(0, 1);lcd.print("Power="); lcd.print(Power_Value);

工作过程和测试

我使用了一个面包板来焊接所有组件,如电路中所示。我用螺丝端子连接负载和普通DC插座连接电源。 Arduino Nano开发板和LCD安装在面包板上,以便以后可以重复使用。

准备好硬件后,将Arduino代码上传到Nano开发板。调整微调电位器以控制LCD的对比度,直到您看到明确的介绍文本。要测试电路板,请将负载连接到螺钉端子连接器,将电源连接到插孔。该项目工作时,电源电压应大于6V,因为Arduino需要+ 5V才能工作。如果一切正常,您应该在LCD第一行看到负载上的电压值和显示的电流值,以及液晶显示屏第二行显示的计算功率,如下所示。

制作某些东西的有趣部分在于测试它以检查它将在多大程度上正常工作。要做到这一点,我已经使用12V汽车指示器气泡作为负载和RPS作为电源。由于RPS本身可以测量和显示电流和电压值,因此我们可以轻松地检查电路的精度和性能。是的,我还使用我的RPS来校准我的乘数值,以便接近准确的值。

这个基于Arduino的功率计项目有更多的升级功能可以添加,以提高自动数据记录的性能,如绘制图形、通知过电压或过电流情况等。所以保持好奇心,让我知道你会用它来做什么。

代码

本篇文章使用的完整代码如下所示:

/** Wattmeter for Solar PV using Arduino* Dated: 27-7-2018* * Power LCD and circuitry from the +5V pin of Arduino whcih is powered via 7805* LCD RS -> pin 2* LCD EN -> pin 3* LCD D4 -> pin 8* LCD D5 -> pin 9* LCD D6 -> pin 10* LCD D7 -> pin 11* Potetnital divider to measure voltage -> A3* Op-Amp output to measure current -> A4*/#include <LiquidCrystal.h>  //Default Arduino LCD Librarey is included int Read_Voltage  = A3;
int Read_Current  = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);void setup() {lcd.begin(16, 2); //Initialise 16*2 LCDlcd.print(" Arduino Wattmeter"); //Intro Message line 1lcd.setCursor(0, 1);lcd.print("  With Arduino  "); //Intro Message line 2delay(2000);lcd.clear();}void loop() {float Voltage_Value = analogRead(Read_Voltage);float Current_Value = analogRead(Read_Current);Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;Current_Value = Current_Value * (5.0/1023.0) * 0.239;lcd.setCursor(0, 0);lcd.print("V="); lcd.print(Voltage_Value); lcd.print("  "); lcd.print("I=");lcd.print(Current_Value); float Power_Value = Voltage_Value * Current_Value;lcd.setCursor(0, 1);lcd.print("Power="); lcd.print(Power_Value); delay(200);
}

Arduino功率计:测量电压、电流和功耗相关推荐

  1. 利用Arduino Uno进行电压电流和温度采集,请教程序问题。

    我使用的温度传感器是DS18B20,电表是一款可以进行RS485串口通信的过功能电表,可以读取电压.电流.功率等信息.编程时读取温度和读取电压电流:两部分都可以单独运行,但是将两个程序合到一起时编译会 ...

  2. 智能测量仪表在三相电路中的如何接入电路进行测量电压电流功率等数据

    1.仪表测量接口 2.使用三相四线接入仪表测量电压 第一个不加PT和加PT,仪表测量直接电压400-600 V,对于高压下就需要用户加入PT进行转换 使用三相三线接入仪表 3.使用三相四线3CT测量电 ...

  3. 宽量程电压电流 stm32_万用表你只会量电压电流?史上最全万用表手册,这么做你不会烧表...

    一,万用表使用前的准备. 二,万用表各个档位的含义. 三,万用表测量电压. 四,万用表测量电流. 五,万用表测量电阻. 六,万用表测量二极管. 七,万用表测量电容. 八,万用表一般的维护保养. 万用表 ...

  4. 基于Blinker ESP8266 远程电压电流、功率计、温湿度计、ADC接口测温、温控风扇、低电压保护、低压报警功能。用来监测我的太阳能充电。SSD1306可轮番显示电压信息和温度信息。APP图表

    ESP8266系列文章目录 目录 ESP8266系列文章目录 经过不断的努力,处女之作终于做出来了.用的Arduino 经过一段时间不断熟练了,做了一些更新:2022.10.30   可以直接主页下载 ...

  5. 钳形万用表使用方法,如何测量电压、电流、电阻?

    钳形电流表是由电流互感器和电流表组合而成.电流互感器的铁心在捏紧扳手时可以张开:被测电流所通过的导线可以不必切断就可穿过铁心张开的缺口,当放开扳手后铁心闭合. 钳形电流表是由电流互感器和电流表组合而成 ...

  6. 用万用表测量电压、电阻和电流

    唉,不知道是以前学过的东西忘了还是基础不扎实,今天测量阻都不会测. 在一般的开发板中,使用万用表测量电压很简单,直接调到电压档,把两个探针放到要测量的器件(比如电阻)两端就行了.但是测量电流就很少像我 ...

  7. arduino最大电压_Arduino Mega 2560测量电压与ADC精度

    Arduino Mega 2560能够读取0 ~ 5V的电压,并转换为10bit即0~1023级的数字信号.这怎么理解呢? 如上图,若分辨率为2bit(即2²) ,意味着将5V分为0~3级的数字信号, ...

  8. 单片机STM8S测量电压电路_单片机电路设计中的10个难点

    单片机是嵌入式系统的核心元件,使用单片机的电路要复杂得多,但在更改和添加新功能时,带有单片机的电路更加容易实现,这也正是电器设备使用单片机的原因.那么在单片机电路的设计中需要注意的难点有哪些? 嵌入式 ...

  9. 竣达技术四路交流电电压电流监测单元

    一.产品简介: 竣达四路交流电量管理单元是一款采用高速单片机作为控制核心,具有测量.计量.通讯.控制等功能,经济且实用的智能电量采集模块.可监测4路电压和4路电流,测量电量参数可通过RS485通讯接口 ...

  10. 欧姆定理验证,电阻的电压/电流/功率,电阻串联,电阻并联,电阻分压

    1.实验器材: 12V电源,0.1k电阻,2k电阻,导线若干. 2.实验电路 3.实验步骤 连接电路使用万用表测量电压,电流,计算功率,验证欧姆定律 以下是实验数据: 单电阻: 电阻 电压 电流 功率 ...

最新文章

  1. 必考题:子类继承父类,初始化以及方法调用顺序
  2. 32位汇编编程模板--使用masm6.15环境
  3. linux 档案类型s,Linux学习(四)档案与目录管理
  4. SpringCloud教程- 服务链路追踪(Spring Cloud Sleuth)(SpringCloud版本Greenwich.SR4)
  5. PHP——访问网站根目录解决方案
  6. redmine1.3.x 插件安装
  7. u-boot2013.10引导linux3.10.30记录
  8. 为什么你应该使用OpenGL而不是DirectX?
  9. 快讯:Oracle 18c 通用版本 18.3 正式发布
  10. openSUSE 11.2 安装QT(二) QtCreator
  11. c#实现简单学生信息管理系统
  12. idea导出配置和导入配置
  13. 神州数码DC交换机VSF配置命令
  14. API接口文档编写--易文档
  15. 知识传输革命即将到来
  16. C语言条件运算符详解
  17. matlab中acos得到的弧度范围,C语言acos()函数:求余弦值为 x 的弧度数
  18. 利用自带命令 手动杀毒
  19. MYSQL数据库的实验总结_MySQL数据库基础总结
  20. 顶级智囊支招 丰泽智慧城市建设

热门文章

  1. matlab 计算对数似然相似度
  2. LimeSDR DAB发射 RTL SDR DAB接收
  3. 阿里云服务器可以搭建游戏吗?
  4. Flutter HotRealod详解
  5. 子组件无法更新父组件请求的数据
  6. PHP 生成PDF文件并向PDF添加图片
  7. linux挂载移动硬盘 格式化_Linux下挂载移动硬盘(NTFS格式)
  8. 2.过滤函数-filter/filter-out
  9. 矩阵 向量 线性变换 基变换
  10. Git环境傻瓜式讲解