×

将您的中央供暖连接到Arduino

消耗积分:2 | 格式:zip | 大小:0.11 MB | 2022-11-21

张生

分享资料个

描述

您有没有想过您的锅炉何时以及为什么要运行并为您的家供暖?你想用 Arduino 自动化你的加热系统吗?OpenTherm 防护罩专为您设计。它将允许您使用 Arduino 监控和控制您的 OpenTherm 锅炉。

 
pYYBAGN2_gGAGn4fAAMJrso1ogI164.png
可能的 OpenTherm 屏蔽设置

背景

去年,我想将我的燃气加热锅炉与壁炉调节器结合起来。我的 BAXI 锅炉和恒温器非常智能,所以我很自然地想扩展锅炉来控制壁炉。我厌倦了所有那些允许我这样做的昂贵的官方 BAXI 扩展。

因此,我为自己构建了一个OpenTherm 网关,它允许我拦截恒温器和锅炉之间的通信,并放置一个可以点燃锅炉或使用壁炉热量的算法——[关于调节器的更多信息]。

由于有很多人想要类似的东西,我决定创建一个模块——Arduino shield——这将使任何人都可以很容易地控制他们的房子供暖。

盾牌有什么用?

  • 使用现有的 OpenTherm 恒温器创建您自己的基于 Arduino 的锅炉。最不可能有人会这样做,但这是可能的。
  • 使用防护罩构建您自己的基于 Arduino 的恒温器,以完全接管您的锅炉和家庭供暖。非常适合家庭自动化。此应用只需要一个外部 5V 电源。
  • 在现有锅炉和恒温器之间的管道中放置一个 OpenTherm 防护罩,并创建一个监视器来观察锅炉何时以及如何为您的家供暖。您甚至可以拦截通信,例如无线控制加热。
  • OpenTherm 允许拥有一个与锅炉和恒温器通信的中间人(网关)设备。这就是我使用屏蔽创建OpenTherm 调节器的方式

可用数据和命令

  • 室内温度
  • 室温设定点
  • 加热水温度
  • 回水温度
  • 生活热水温度*
  • 生活热水压力*
  • 生活热水流量*
  • 室外温度*
  • 锅炉状态(运行/未运行/错误)
  • 调制电平
  • 排气温度*
  • 统计锅炉运行了多长时间

* 请注意,这些仅在您的锅炉配备了必要的附件时可用

建造盾牌

电子电路基于使用 PIC 微控制器的OpenTherm 网关项目。我已经为 Arduino 进行了调整,并创建了一个很好的 Arduino UNO 兼容布局。

 
pYYBAGN2_guAfFdBAADn4SHGSVo283.png
OpenTherm 屏蔽示意图
 

您可以使用上述原理图和Gerber 文件自行创建屏蔽。我正在通过PCBWay制造我的电路板- PCB Prototype the Easy Way。您可以让他们在一周内创建和运送这些漂亮的蓝色美女。蓝色阻焊层与基础绿色同价!我也喜欢他们的客户服务,没有什么问题。或者您可以订购预先包装好的DIY 套件

 
poYBAGN2_g6ABElAAAN1l8REBTc199.jpg
 

使用防护罩创建恒温器

第一个示例将向您展示如何使用防护罩创建您自己的自定义恒温器。你需要什么:

  • OpenTherm 锅炉
  • Arduino UNO、WeMos D1 或任何 Arduino UNO 兼容板。该板的唯一要求是支持引脚 2 和 3 上的引脚中断。
  • 5V电源。在此设置中不需要 24V 电源,因为只有在与恒温器通信时才需要它。
 
poYBAGN2_hKAFb06AAKPTYWxQJA797.png
OpenTherm 护罩作为恒温器
 

如上图所示将您的锅炉与 Arduino OpenTherm 屏蔽连接,将屏蔽连接到您的 Arduino 上,您就可以开始编程了。Arduino OpenTherm IO 库包含以下示例,向您展示如何与锅炉进行通信。

void loop() {
 if (OPENTHERM::isIdle()) {
   message.type = OT_MSGTYPE_READ_DATA;
   message.id = OT_MSGID_SLAVE_CONFIG;
   message.valueHB = 0;
   message.valueLB = 0;
   Serial.print("-> "); 
   OPENTHERM::printToSerial(message); 
   Serial.println();
   OPENTHERM::send(BOILER_OUT, message); // send message to boiler
 }
 else if (OPENTHERM::isSent()) {
   OPENTHERM::listen(BOILER_IN, 800); // wait for boiler to respond
 }
 else if (OPENTHERM::getMessage(message)) { // boiler responded
   OPENTHERM::stop();
   Serial.print("<- ");
   OPENTHERM::printToSerial(message);
   Serial.println();
   Serial.println();
   delay(100); // minimal delay before next communication
 }
 else if (OPENTHERM::isError()) {
   OPENTHERM::stop();
   Serial.println("<- Timeout");
   Serial.println();
 }
}

首先,使用OPENTHERM::isIdle检查是否没有挂起的命令如果没有,您可以发送下一个。在此示例中,您请求从属配置标志。如果命令成功发送,您必须开始使用OPENTHERM::listen调用监听来自锅炉的回复。方法OPENTHERM::getMessage只要有来自从站的待处理回复,并且如果出现问题或发生超时,方法OPENTHERM::isError 就会返回 true。该库包含 OpenTherm 消息结构,其中包含来自协议的解码数据,因此您根本不需要关心格式。签出源代码这是有据可查的。所有类型的消息都列在常量中,或者您可以查看OpenTherm 文档

struct OpenthermData {
 byte type;
 byte id;
 byte valueHB;
 byte valueLB;
  
 float f88();
 void f88(float value);
  
 uint16_t u16();
 void u16(uint16_t value);
  
 int16_t s16();
 void s16(int16_t value);
}

使用屏蔽创建监视器、网关或调节器

第二个示例将向您展示如何将中间人设备连接到 OpenTherm 总线以监控锅炉和恒温器或拦截它们的通信。你需要什么:

  • OpenTherm 恒温器
  • 24V 500mA 电源

 

 
pYYBAGN2_gGAGn4fAAMJrso1ogI164.png
OpenTherm shield 作为网关/调节器
 

如上图所示,将屏蔽连接到锅炉和恒温器之间的总线。您可以看到它中断了这两个设备之间的总线。现在您的通信中断了,除非您将网关软件上传到您的 Arduino 中,该软件会将命令和回复从恒温器转发到锅炉,反之亦然。在Arduino OpenTherm IO 库中再次有一个很好的例子

void loop() {
 if (mode == MODE_LISTEN_MASTER) {
   if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) {
     OPENTHERM::listen(THERMOSTAT_IN);
   }
   else if (OPENTHERM::getMessage(message)) {
     Serial.print("-> ");
     OPENTHERM::printToSerial(message);
     Serial.println();
     OPENTHERM::send(BOILER_OUT, message); // forward message to boiler
     mode = MODE_LISTEN_SLAVE;
   }
 }
 else if (mode == MODE_LISTEN_SLAVE) {
   if (OPENTHERM::isSent()) {
     OPENTHERM::listen(BOILER_IN, 800); // reply need to be send back in 800ms
   }
   else if (OPENTHERM::getMessage(message)) {
     Serial.print("<- ");
     OPENTHERM::printToSerial(message);
     Serial.println();
     Serial.println();
     OPENTHERM::send(THERMOSTAT_OUT, message); // send message back to thermostat
     mode = MODE_LISTEN_MASTER;
   }
   else if (OPENTHERM::isError()) {
     mode = MODE_LISTEN_MASTER;
     Serial.println("<- Timeout");
     Serial.println();
   }
 }
}

网关只是开始监听恒温器命令。如果检测到请求,它将对其进行解析并将其转发给锅炉。网关现在将开始监听锅炉回复。如果在 800 毫秒内收到回复,网关会将回复转发回恒温器。恒温器和锅炉都不会知道它们之间有什么额外的东西。正如您所看到的,有足够的空间来编写您自己的代码,这些代码可以捕获消息并从中读取有用的信息(状态、温度、压力、统计数据……)。您甚至可以覆盖或丢弃您不喜欢的请求或回复。

如您所见,与您的智能供暖系统进行通信并使其更加智能非常容易。在下一篇文章中,我将在我的OpenTherm 调节器中向您展示该硬件的更多实际用法


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !