实体智能家居交互界面:基于 Arduino Yun 与 MQTT 的物理模型房屋
设计理念
主流智能家居依赖手机 App“虚拟界面”,查看状态需解锁、打开应用、解读图标,认知负荷高。本项目构建一座实体模型房屋放置于茶几/办公桌,通过舵机驱动门窗开合、舵机指针指示用电功率、LED 指示灯光状态,实现零认知负荷的环境感知。同时保留手机远程控制能力,物理与虚拟双界面并存。
系统架构
| 层级 | 组件 | 协议/接口 |
|---|---|---|
| 实体界面 | Arduino Yun / Uno+Ethernet Shield + 3×SG90 舵机 + 2×LED + 2×按钮 | MQTT 订阅/发布 |
| 消息总线 | Raspberry Pi 上 Mosquitto Broker | MQTT over TCP |
| 自动化引擎 | OpenHAB 2(运行于同一 Pi) | MQTT Binding + Rules + REST API |
| 传感器节点 | DIY 无线节点 / Wink Hub + Tripper 门磁 / 光敏模块 | MQTT / HTTP 轮询 |
| 执行器 | ZigBee 灯泡 / 改装车库门开启器(Arduino+继电器+遥控器) | MQTT / OpenHAB 控制 |
模型房屋制作
材料清单
- 纸箱 1 个(按自家户型比例剪裁)
- SG90 舵机 ×3(前门、车库门、用电指针)
- 微型合页 ×2(门铰链)
- 双面泡沫胶(3M 挂钩胶条)
- 红色 LED(灯光指示)、状态 LED(MQTT 连接指示)
- 自锁按钮 ×2(灯光开关、车库门控制)
- 电流互感器 SCT-013-000 100A ×1(用电监测)
关键结构
- 屋顶:箱盖折叠成斜顶,乐高积木加固直角
- 门窗:剪孔粘合页,车库门靠重力关闭,前门需绳索配合舵机拉开
- 用电表:舵机臂粘贴指针,背景绘制 0-6kW 刻度,舵机反装使 0° 对应 0W
- 按钮面板:箱侧开孔安装,螺母锁紧,引线焊接至 Arduino
Arduino 端代码逻辑
引脚映射
| 功能 | 引脚 |
|---|---|
| 状态 LED (MQTT) | D7 |
| 灯光指示 LED | D4 |
| 前门舵机 | D3 |
| 车库门舵机 | D5 |
| 用电指针舵机 | D6 |
| 按钮 1 (灯光) | D8 (INPUT_PULLUP) |
| 按钮 2 (车库) | D9 (INPUT_PULLUP) |
MQTT 主题设计
| 主题 | 方向 | 载荷 | 含义 |
|---|---|---|---|
| 2822 | Sub | 0/1 | 灯光指示 LED |
| 2832 | Sub | 0/1 | 前门状态(1=开) |
| 2842 | Sub | 0/1 | 车库门状态(1=开) |
| 2852 | Sub | 功率(W) | 用电功率→舵机角度 |
| 2862 | Pub | "button1" | 按钮 1 触发翻转灯光 |
| 2872 | Pub | "button2" | 按钮 2 触发车库门 |
核心逻辑(Yun 版)
Bridge.begin()启用 Linux 侧网络,YunClient桥接PubSubClient- 非阻塞舵机缓动:每 20ms 向目标角度步进 1°,避免
delay()阻塞 MQTT 心跳 - 按钮软件去抖 3 秒,发布对应主题
- 每 60 秒检查 MQTT 连接,断线自动重连
传感器接入方案
方案 A:DIY 无线节点(nRF24L01 + 网关)
早期版本,成本约 $5,丑陋但功能完整,含磁簧管门磁、光敏电阻。网关桥接至 MQTT。
方案 B:Wink Hub + Tripper 门磁(推荐)
外观精美、电池寿命长、Z-Wave 协议。通过Root Wink Hub + PHP exploit 实现本地轮询,避免依赖云端:
- 树莓派定时运行
polling.php调用aprontest获取门磁状态 - 通过 OpenHAB REST API 更新 Contact Item
- OpenHAB 规则映射至 MQTT 主题 2832/2842
附件含 items.txt、sitemap.txt、rules.txt、polling.php。
用电监测(OpenEnergyMonitor 库)
- 互感器夹在主进线一相,分压电路:33Ω 取样电阻、10kΩ 分压、10μF 滤波
- Arduino Yun 计算有效电流
Irms,每 10 秒发布安培(2853)与瓦特(2852) - OpenHAB 持久化策略
everyUpdate绘制实时功率图表
执行器控制
ZigBee 灯泡(Cree/GE Link)
Wink Hub 本地控制 → OpenHAB Switch Item → 规则映射至 MQTT 2822 → 模型房屋 LED 同步;模型房屋按钮 1 → MQTT 2862 → OpenHAB 规则 → Wink Hub → 灯泡翻转。
车库门开启器
- Arduino 克隆版 + 以太网盾 + 簧片继电器 + 备用遥控器
- 继电器并联遥控器按键,MQTT 订阅 2872,收到指令通电 500ms 模拟按键
- OpenHAB 规则联动:物理门磁状态 ↔ 模型车库门 ↔ 真实车库门
OpenHAB 关键配置
// Items
Number itm_smarthome_energy_amps "Energy (amps) [%.1f]" {mqtt="<[mymosquitto:2853:state:default]"}
Number itm_smarthome_energy_watts "Energy (Watts) [%.1f]" {mqtt="<[mymosquitto:2852:state:default]"}
// Sitemap
Frame label="Energy Usage" {
Text item=itm_smarthome_energy_amps
Text item=itm_smarthome_energy_watts
Chart item=itm_smarthome_energy_watts period=h refresh=5000
}
// Persistence (rrd4j)
itm_smarthome_energy_watts : strategy = everyUpdate
扩展与替代方案
- 控制器可替换为 ESP8266/ESP32、Raspberry Pi GPIO、Particle Photon 等
- 传感器可改用 Z-Wave USB Stick + OpenHAB 直连,省去 Wink Hub
- 若不 Root Wink Hub,可用官方 Wink API + 云端轮询(需联网)
- 模型房屋可扩展:温湿度微型屏、窗帘舵机、烟雾报警蜂鸣器等
项目文件
smarthome_yun.ino/smarthome_ethernet.ino模型房屋固件energy_monitor_yun.ino用电监测固件- OpenHAB 配置文件与 Wink 轮询脚本见附件
- 原理图 3 张(接线、互感器电路、整体拓扑)
制造工艺