使用ESP32和Blynk的无线能源监控系统

背景知识视频教程

  • 高级ESP32
  • 适用于Arduino创客的ESP32
  • 无需编码的Arduino编程和仿真

不断上升的能源成本和全球变暖迫使我们时刻关注能源消耗。 能源管理系统可以帮助监控,控制和减少能源消耗。 最重要的是,能够通过电话对其进行监视使其更加方便。 统计数据表明,能源监控系统可以将能源成本从8%降低到20%,这是一个大买卖。

硬件

软件

ESP32 DevKitC开发板

ESP32 DevKitC开发板是乐鑫创建的用于评估ESP-WROOM-32模块的开发板之一。 它基于ESP32微控制器,具有集成的WiFi和蓝牙功能,以及一系列内置天线开关和超低功耗。

ESP32 DevKitC开发板的工作原理类似于Arduino Uno,但功能更多,功能更强大。 ESP32内置了WiFi和蓝牙功能,而Arduino Uno则没有。 它还具有更大的内存和更快的时钟速度。 您仍然可以通过在IDE的板管理器中安装ESP32板来使用Arduino IDE对其进行编程。

首先,从Arduino IDE打开首选项窗口,然后转到文件>首选项。 之后,将https://dl.espressif.com/dl/package_esp32_index.json输入到``其他板管理器URL’'字段中,如下图所示。 然后,单击“确定”按钮。

完成后,请转到Tools> Boards> Boards Manager并为ESP32进行服务打开板管理器,然后按Espressif Systems的ESP32安装按钮。

ZMPT101B交流电压传感器模块

ZMPT101B是用于测量交流电压的理想电压互感器。 它具有很高的精度,并且在电压和功率测量中具有良好的一致性。 该模块易于使用,并带有一个多匝微调电位器,用于调节和校准ADC输出。

SCT-013-030无损交流电流传感器

无创交流电流传感器是一种电流互感器,可以将其夹在电负载的电源线上以测量电流。 它通过充当电感器并响应载流导体周围的磁场来做到这一点。 通过读取线圈产生的电流量,可以计算出流经导体的电流。 它们对于测量整个建筑的电力消耗或发电量特别有用。

硬件设置

电压传感器模块连接

非侵入式交流电流传感器连接

该传感器的连接要比电压传感器复杂一些,因为它需要外部组件。但是,在继续操作之前,请仔细阅读这些警告,否则可能会造成危险。

计算合适的负载电阻值

现在,我们必须计算要使用的负载电阻的值。由于我们使用的SCT-013-030的极限电流为30A,因此我们的最大峰值电流为:

利用初级峰值电流,将其除以电流互感器的匝数即可得出次级线圈中的峰值电流。线圈数及其其他特性可在其数据表中找到。

为了最大程度地提高测量分辨率,负载电阻两端的峰值电流电压应等于模拟参考电压的一半。在这种情况下,我们使用5V,因此负载电阻两端的电压为2.5V。

由于106.6667Ω不是常见的电阻值,因此我们选择最接近的较小值100Ω,以便最大负载电流不会产生高于5V的电压。

Blynk应用程序设置

为项目命名,并确保选择ESP32开发板作为设备,并选择WiFi作为连接类型,因为这是我们要使用的。

单击右上角的“ +”图标添加组件或小部件。为了在该项目中获得最佳的视觉显示效果,我们将使用仪表小部件。

设置其中四个。 两个用于交流电压和电流,另外两个用于功率和千瓦时。 您可以单击它们以更改其标签,颜色并设置虚拟图钉。 更重要的是,确保将AC电压表引脚设置为V0,AC电流表引脚设置为V1,功率表引脚设置为V2,千瓦时表针设置为V3。 稍后在代码中这将变得有意义。

代码

EnergyMonitoring.ino代码


代码分解

预初始化

首先,我们为调试目的定义Blynk打印序列。 接下来,必须包含程序所需的库。 EmonLib处理来自两个传感器的数据检索以及RMS和功率值的计算。 需要BlynkSimpleEsp32才能将我们的程序集成到Blynk Mobile应用程序。


然后创建EnergyMonitor对象emon并定义校准值。 根据设置,必须通过反复试验获得这些值,因此每个人的值可能都不相同。 还创建了Blynk计时器对象,以处理向Blynk移动应用程序发送数据的过程。


在这里,您可以输入Blynk移动应用的身份验证令牌,WiFi SSID及其密码。 您可以通过转到项目设置(螺母图标)从您的应用程序获取身份验证令牌。 您可以选择从那里复制或让他们通过电子邮件发送给您。

float kWh = 0;
unsigned long lastmillis = millis();

这些值必须进行初始化,以便稍后在计算中使用。 kWh从0开始,随着时间的流逝将逐渐增加。

计时器事件函数

代码的这一部分是从传感器中检索值的地方以及正在计算它们的地方。 在emon.calcVI(20,2000)中,正在计算有功功率,视在功率,功率因数,Vrms和Irms。 在我们的例子中,我们只需要Vrms,Irms和视在功率,因此我们分别使用emon.Vrms,emon.Irms和emon.apparentPower来获得它们,然后在串行监视器中打印它们以进行调试。 然后,我们使用Blynk.virtualWrite根据虚拟引脚集将数据发送到Blynk。

对于千瓦时,我们会随着时间的推移逐渐将其累加。公式为power * timePassed / 3600 * 1000 * 1000。 3600可以将毫秒转换为秒,1000可以将秒转换为小时,另外1000可以将瓦转换为千瓦。

Void Setup()

在setup()函数中,我们将串行波特率设置为9600 bps,这是串行通信的默认值。 然后,设置电压和电流传感器引脚及其校准值。 Blynk和计时器都必须在这里初始化。 最后,我们将其设置为5000L,更新时间为5秒。 这样做的原因是因为我们不能将数据发送到Blynk服务器的速度太快,否则它们将强行切断我们的连接。

Void Loop()

在loop()函数内部,我们只需要运行Blynk和计时器-别无其他。

值的准确性

这些值是从3W灯泡获得的。、

参阅http://viadean.com/esp32_blynk_power.html

你可能感兴趣的:(Arduino,ESP32,Blynk)