亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

通过 Modbus、MKR WiFi 1010 和 RS485 监控您的能源账单

组件和用品

Arduino MKR WiFi 1010
× 1
Arduino MKR 485 扩展板
× 1
USB-A 转 Micro-USB 线缆
× 1
USB 电源
任何电源兼容。 MKR485 屏蔽罩内置 7-24V 降压转换器。
× 1
双绞屏蔽线
× 1

必要的工具和机器

Digilent Mastech MS8217 自动量程数字万用表
电工剪刀
小一字螺丝刀
对于 MKR485 终端
中号飞利浦螺丝刀

应用和在线服务

家庭助理
Arduino 网页编辑器
MQTT

关于这个项目

如果您真的想让您的家更智能,您可能需要从每月的账单(即能源、天然气等)开始。正如某些人所说,对地球、钱包和底线都有好处 .开源硬件是我们在家庭环境中实现可持续性的方式!这个想法让我们构建了一个简单而安全的解决方案,易于与任何家庭自动化软件集成,因为它通过 MQTT 公开数据(在我们的例子中,我们将向您展示如何将其集成到家庭助理中)。

概览

为了测量电能消耗,我们选择使用 Finder Energy Meter,因为它专为 DIN 导轨使用而设计,并且非常适合我们房屋的主柜。这个产品很酷的一点是它有一个RS485 Modbus 接口,一种工业标准通信协议,它使与 Arduino 通信变得非常容易。事实上,Arduino 已经发布了一个官方盾牌,MKR485 和两个用于解码协议的库。作为主板,我们选择了Arduino MKR WiFi 1010, 因为它共享 MKR 外形并具有 WiFi 连接。

设置

警告! 检查您所在国家/地区有关处理房屋电气系统的法规,并要格外小心,因为它可能是致命的!如果你不知道 如何,请致电电工。 第一步是将仪表安装在您的电气柜中。为确保您在安全的环境中工作,关闭系统前电气端子的电源 用万用表仔细检查端子之间没有电压 .

然后将电表放在机柜内,并将主断路器的火线和零线连接到电表的输入端,记住使用颜色约定(蓝色代表零线,棕色/黑色/灰色代表欧盟带电)。输出必须连接到系统的其余部分。

完毕?是时候拧入 RS485 连接了!我们将使用双绞线接地,通常用于电话线。使用此电缆,您可以远距离传输(1.2 公里)。然而,我们只是使用一根足够长的电缆从机柜中取出并将 arduino 放在一个容易接近的地方。

RS485 接口将其端子命名为 A、B 和 COM。

由于 MKR 屏蔽也支持全双工,您会看到另外两个端子 Y 和 Z。在这里我们将拧紧电缆的另一端,因为我们从数据表中知道半双工通信仅发生在 Y 和 Z 上终端。 COM 端子必须连接到 ISOGND。由于我们使用半双工连接并且由于布线是对等的,我们必须在 MKR485 屏蔽上设置开关以匹配我们的设置:我们设置 HALF(2 为 OFF)并在 YZ 上终止(3开);第一个无关紧要。 终端是连接两个数据终端的电阻,用于抑制干扰。

就是这个。现在你可以关上柜子,专注于软件方面!

软件

启动您的计算机并打开您的 IDE。您可以使用 Arduino IDE 或 Arduino Create Editor。代码满足以下要求:

  • Modbus 通讯,
  • 无线网络管理
  • MQTT 协议

Modbus 是工业传感器和机器的开源协议。为了让 Arduino 使用 Modbus,我们将使用 Arduino Modbus 库。这个库包含了所有的处理程序,并且可以非常快速地连接任何 Modbus 设备。由于我们要读取寄存器,按照电表的数据表,我们可以找到所有需要的信息,如功能代码、寄存器地址和寄存器大小(以字为单位)。但为了更清楚,让我们解释一下 Modbus 的工作原理:

Modbus 消息遵循一个简单的结构:

01 03 04 00 16 00 02 25 C7

0x01 设备地址

0x03 功能代码 告诉设备我们是要读取还是写入数据 *在这种情况下读取保持寄存器

0x04 对于 Byte Count00 16 - 我们发送 4 个字节的寄存器地址 (00 16) 告诉设备我们想读什么

00 02 - t那么寄存器的大小 (00 02) 文字 (每个字长2个字节)

最后 4 个字节是 CRC 码 .这段代码是由一个数学函数在前面的字节上生成的,这确保了消息被正确接收。

在 Arduino 中,所有这些东西都在 if 中处理 条件:

// Created by Alberto Perro - Officine Innesto//// 从保存寄存器的 modbus 设备读取整数float readCurrent(){ float ampere =0.; //next 命令格式化请求并通过 RS485 发送 if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { //Error Handling Serial.print("failed to read voltage!"); Serial.println(ModbusRTUClient.lastError()); } else { uint16_t word1 =ModbusRTUClient.read(); //从缓冲区读取MSW uint16_t word2 =ModbusRTUClient.read(); //从缓冲区读取LSW int32_t milliamp =word1 <<16 |字2; //加入单词来检索 int ampere =milliamp/1000.0; //转换为安培}返回安培;} 

else 部分我们有响应处理程序。

由于这个寄存器是两个字长,我们必须用二进制数学将它们连接起来。我们从缓冲区读取字并将它们存储在一个 16 位长(2 个字节或一个字)的无符号整数中,然后我们将它们连接到一个 32 位长的有符号整数中,将第一个字向左移动并应用 过了第二个字。通过这种方式,我们以 mA 为单位检索电流测量值,将其除以 1000,我们得到了以安培为单位的电流。

同样的过程适用于我们想要阅读的所有内容。

其余代码专门用于处理 MQTT 和 WiFi 网络。

家庭助理集成

将仪表添加到 Home Assistant 非常简单。假设您配置了一个 MQTT 代理(这是指南),您需要做的就是在 configuration.yaml 文件下添加新定义。

sensor:- platform:mqtt name:"Main Voltage" state_topic:"energy/main/voltage" unit_of_measurement:"V" 

在这里,您必须输入度量的名称、要读取的 MQTT 主题和数量的度量单位。保存文件,检查配置并重新加载 Home Assistant,现在测量值将出现在主页上。

Home Assistant 将负责创建图表并自动化由您的读数触发的过程。本教程已完成,现在由您来添加功能并根据自己的目的进行自定义!

代码

Finder 的 Modbus RTU 到 MQTT 桥
此草图提供了 finder 能量计和 mqtt 之间的完整桥梁。开发用于监控 Casa Jasmina 的电力成本和使用情况。

制造工艺

  1. 使用 Arduino 和 Raspberry Pi 构建您的 Internet 控制的视频流机器人
  2. 使用 Arduino 制作流光溢彩监视器
  3. 如何构建 Arduino 能源监视器和数据记录器
  4. LCD 动画和游戏
  5. 使用 Arduino 和智能手机的 DIY 电压表
  6. 使用物联网的心率监测器
  7. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  8. WebServerBlink 使用 Arduino Uno WiFi
  9. Arduino - 通过串口向 Web 发送温度
  10. Python3 和 Arduino 通信
  11. 使用 Alexa 和 Arduino IoT Cloud 完全控制您的电视
  12. 能量形式:动能和势能