简介:Arduino的DIY电源测量模块
大家好,我希望你做得很好!在这种指导中,我将向您展示如何使用Arduino板使用这种功率计/瓦特计模块。该功率计可以计算和直流负载消耗的功率。随着电源,该模块还可以为我们提供准确的电压和电流读数。它可以容易地测量低电压(约2V)和低电流,低至50 mA,错误不超过20mA。准确性取决于根据您的要求选择组件。
补给品:
- IC LM358双运算放大器
- 8针IC基地
- 分流电阻(我的情况下8.6毫米)
- 电阻器:100K,10K,2.2K,1K(1/2WATT)
- 电容器:3 * 0.1UF陶瓷电容器
- veroboard或零板
- 螺钉终端
- 烙铁和焊料
- Arduino Uno或任何其他兼容的董事会
- OLED显示
- 连接毯子电线
第1步:收集所需的组件
该项目使用非常简单且易于获取组件:它们包括电阻器,陶瓷电容器,运算放大器和用于原型设计的Veroboard。
组件的选择和值取决于应用类型和您要测量的电源范围。
第2步:工作原理。
电源模块的工作基于电路理论的两个概念和基本电力:用于测量输入电压和欧姆定律的分压器概念计算流过电路的电流。我们正在使用分流电阻,在其上产生非常小的电压降。该电压降与流过分流器的电流量成比例。当由运算放大器放大时的这种小电压可以用作微控制器的输入,这可以被编程为给出电流值。操作放大器用作非反相放大器,其中增益由反馈的值确定。通过反馈的值确定增益电阻R2和R1。使用非反相配置允许我们具有作为测量参考的共同接地。为此,电流正在电路的低侧测量。对于我的应用程序,我通过使用100K和2.2K电阻作为反馈网络,选择了46的增益。通过使用分压器电路来完成电压测量,该分压器电路将输入电压分成与所使用的电阻网络成比例地。
OP-AMP的当前值和分频器网络的电压值都可以馈入Arduino的两个模拟输入,以便我们可以计算负载消耗的功率。
第3步:将零件带在一起..
让我们通过决定输入和输出连接的螺钉端子的位置来开始构造我们的电源模块。在标记适当的位置后,我们将螺钉端子和分流电阻焊接到位。
步骤4:为电压感网络添加零件
对于输入电压检测,我正在使用10k和1k的分压器网络。我还在1K电阻上添加了0.1 UF电容以平滑电压。电压感应网络在输入端子附近焊接
步骤5:添加当前感测网络的零件
通过使用电阻网络设置的预定增益来计算和放大分流电阻的电压降来测量电流。使用非反相放大模式。希望保持焊料迹线小,以避免不需要的电压降。
第6步:完成剩余的连接并完成构建..
通过连接和焊接电压和电流检测网络,其时间焊接公头引脚并进行电源和信号输出的必要连接。该模块将由5伏的标准工作电压供电,我们可以轻松从Arduino板上获得。两个电压检测输出将连接到Arduino的模拟输入。
第7步:将模块与Arduino连接
使用该模块完成,它现在最后一次将其与Arduino连接并获得运行。要查看值,我使用了OLED显示,该OLED显示器使用I2C协议与Arduino通信。屏幕上显示的参数是电压,电流和电源。
第8步:项目代码和电路图
我在此步骤中附加了电源模块的电路图和代码(之前我已附加的.ino和.txt文件包含代码,但有些服务器错误导致用户无法访问或无法读取的用户,所以我写了整个在这个步骤中的代码。我知道这不是一个共享代码的好方法:()。随意根据您的要求修改此代码。我希望这个项目对您有所帮助。请在评论中分享您的反馈。欢呼!欢呼!
#include
#include
#include
#include
#define OLED_RESET 4 ADAFRUIT_SSD1306显示(OLED_RESET);
浮动val = 0;
浮动电流= 0;
浮动电压= 0;
浮动功率= 0;
void setup(){
PinMode(A0,输入);
PinMode(A1,输入);
display.begin(ssd1306_switchcopvcc,0x3c);//与I2C addr 0x3c初始化(对于128x32)display.display();
延迟(2000);
//清除缓冲区。
display.cleardisplay();
display.settextsize(1);
display.setcursor(0,0);
display.settextcolor(白色);
Serial.Begin(9600);//查看串行监视器上的值
}
void loop(){
//以稳定读数的平均值
for(int i = 0; i <20; i ++){
Current = Current + Analogread(A0);
电压=电压+ analogread(A1);}
电流=(当前/ 20);电流=电流* 0.0123 * 5.0;//校准值,根据所使用的组件改变
电压=(电压/ 20);电压=电压* 0.0508 * 5.0;//校准值,根据所使用的组件改变
电源=电压*电流;
//打印串行监视器上的值
Serial.print(电压);
serial.print(“”);
serial.print(当前);
serial.print(“”);
serial.println(power);
//打印OLED显示屏上的值
display.setcursor(0,0);
display.print(“电压:”);
display.print(电压);
display.println(“v”);
display.setCursor(0,10);
display.print(“当前:”);
display.print(当前);
display.println(“a”);
display.setcursor(0,20);
display.print(“Power:”);
display.print(power);
display.println(“w”);
display.display();
延迟(500);//延迟设定的刷新率
display.cleardisplay();
}
第9步:教程视频

参加了这一点
机器人比赛
12讨论
问题17天前
嗨,谢谢你的教程。我有个问题。Proteus的SV1和X1-1,X1-2的名称是什么。
答案13天前
您好,SV1是一个4针男性标题。X1-1和X1-2是一个连接电源的2针螺钉端子。
7周前
嗨,这是一个伟大的教程。谢谢你的分享。我有个问题。该模块是否可以用于测量传感器节点的功耗?
1年以前
伟大的教程,谢谢。让这读这份读取24-28 v和大量放大器需要什么?
回复1年前
要读取高电流,可以通过改变用于非反相放大器的电阻网络来降低电流传感放大器的增益。对于我的电路,我使用100k和2.2k电阻使用了46的增益,但是您可以使用其他组合来降低增益,以降低增益,使得Opamp的输出不饱和。(我也假设您不需要准确性毫安范围如果测量如此高潮)
回复1年前
非常感谢你的UTsav。这对我的工作非常方便。另外,你这么快回来了。我今天要订阅你的YouTube频道。
回复1年前
很高兴对你的工作有帮助。谢谢您的订阅!
1年以前
谢谢你的帖子,我会尝试同样的
回复1年前
欢迎。很高兴这很有帮助
1年以前
嗨Utsay_25.
您可以查看您上传的“Arduino Power Meters.txt”。它似乎没有包含任何代码。
干杯。
回复1年前
我在我的指示灯的最后一步中更新了代码,不幸的是,TXT或.ino文件未正确上传(它显示一些服务器错误),所以我必须在最后一步中输入它。希望这将是有用的:)
回复1年前
谢谢