WARAN - 家庭自动化
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 4 | ||||
| × | 2 | ||||
| × | 3 |
必要的工具和机器
| ||||
| ||||
| ||||
|
应用和在线服务
| ||||
| ||||
|
关于这个项目
我正计划建立一个廉价的家庭自动化系统。我希望这是一个模块化系统,这样我就可以在不做太多更改的情况下继续向其中添加传感器和设备。警告 (W indows 物联网,A 当然,R 树莓派,A rduino,N RF24L01+) 是一个模块化的家庭自动化系统,由一个集线器和多个模块组成。该模块将结合微控制器和传感器,从房屋的不同位置收集数据,并通过射频将数据传输到集线器。 Hub 和模块之间的所有通信都通过 RF 进行。 Hub 也将有一个配套的 Windows Phone 应用程序。这是一个解释设置的简单流程图。
为什么选择 Windows IoT?
我是一名软件开发人员,目前正在涉足 IoT。凭借我之前使用 XAML/C# 和 Visual Studio(我认为它是有史以来最好的 IDE)的经验,快速实现这些对我非常有帮助。
为什么是 NRF24L01+?
当我研究无线选项时,NRF24L01+ 是一种廉价且低功耗的解决方案。提供了一些非常强大的库,它为我们提供了最好的解决方案。
为什么选择 Windows Azure
Windows Azure 非常容易学习和适应。只需很少的配置即可启动服务,我们可以将更多精力放在开发上,而不是配置和部署上。我之前使用 Azure 的经验帮助我快速集成。
枢纽
Hub 是 WARAN 的中控中心。它由 RPI2、Arduino Uno 和 nRF24L01+ 组成。 RPI2 运行 Windows IoT 核心。它运行一个通用应用程序,作为控制中心。集线器将连接到大型显示器(通常是电视或监视器),通过它我们可以看到来自模块的数据并控制模块。连接到 RPI2 的键盘和鼠标将有助于从控制中心添加和移除模块。这是它的电路图(参考项目中的 WARAN.Hub.fzz. 文件)
它是如何运作的?
每个模块都有一个唯一的地址,集线器使用该地址与其进行通信。我们将使用此地址向控制中心添加一个模块,并为该模块命名。添加后,控制中心(通用应用程序)将通过 I2C 向 Arduino Uno 发送数据。 Arduino Uno 将通过 nRF24L01+ 向模块发送数据,模块从传感器读取数据或根据接收到的数据启动/停止设备并将数据发送回 Arduino Uno。 Arduino Uno 将通过 I2C 将数据发送到控制中心。这些数据将显示在电视/显示器中,并发送到云端。 Arduino Uno 将仅充当 RPI2 的接口,以从其他模块获取传感器数据。以上过程会在三种情况下发生
- 在特定的时间间隔取决于模块
- 当用户与控制中心交互时(通过鼠标/键盘)
- 从云端发送触发器时(针对 PubNub)
这是一个典型的流程
这就是集线器中的组件和模块之间的交互方式。
控制中心
控制中心是在 RPI2 中运行的通用应用程序。控制中心是用户与之交互的界面。它与模块以及云进行通信。 WARAN 控制中心使用 Azure 移动服务和 PubNub 作为其云后端。我们添加的每个模块信息都将本地存储在 sqlite db 中,并且还会发送到 azure 移动服务。这将依次向移动应用程序发送 PubNub 消息或推送通知。我不想在这里解释编码部分而把这篇文章弄得一团糟。 可以在 https://bitbucket.org/arjunganesan/waran 中找到项目源代码、文档和部署详细信息(我正在全面更新文档,很快就会完成)。 这就是控制中心的工作原理
移动应用
移动应用程序是一个 Windows 手机应用程序(稍后将针对其他平台进行开发),它将作为集线器的配套应用程序。我们可以在世界任何地方的移动设备中查看所有传感器相关数据。如果从模块获得任何重要信息(例如来自气体泄漏监控模块的气体泄漏警报),我们也会收到推送通知。我们还可以从移动设备本身触发模块上的某些操作(例如在 Plant Waterer 模块上启动泵)。由于所有这些都是通过云发生的,因此不需要在集线器附近的任何地方放置移动设备来执行所有这些操作。
这是移动应用程序的外观
模块
该模块是协同工作的组件的组合,它们通过射频从集线器接收和发送数据。它可以是带有传感器的 Arduino Pro Mini 或带有传感器的 RPI2 等的组合。它需要做的就是通过 RF 从集线器接收数据/命令并做出适当的响应。这给了模块无限的可能性。首先,我要添加 2 个模块
- 植物浇水器
- 温度监测器
植物浇水器
植物饮水器将监测植物中的水位以及植物周围环境的温度。如果没有足够的水,则会向移动应用程序发送警报。我们可以从任何地方通过移动应用程序启动泵。我们还可以将其配置为在水位低于阈值时自动启动泵。它由 Arduino Pro Mini、DHT11、土壤湿度计和 nRF24L01+ 组成。这是电路图(参考项目中的 PlantWaterer.fzz)
来自 9V 电池的电源进入 Arduino Pro Mini 的 RAW 引脚。 arduino 中的内置稳压器将在 Vcc 中提供 5V 输出。我们将使用它来驱动 DHT11。我们还提供 9V 电源作为 3.3V 稳压器的输入,我们将使用它为 nRF24L01+ 供电。湿度计的水位将在模拟引脚 A3 上读取。来自 DHT11 的温度读数将在数字引脚 6 中读取。在数字引脚 5 中,我们将向晶体管或继电器发送信号,使用它们启动停止泵。出于演示目的,我将使用直流泵并使用晶体管作为开关。这是它的工作流程
我不想让电路留在面包板上,所以我把它转移到了穿孔板上。我想保持紧凑,所以我这样做了。您可以参考电路图并提出自己的布局。
下面是有关其工作原理的视频。
温度监测器
温度监控器将监控房间(例如卧室)的温度,并随时发布温度和湿度水平。我们还可以从集线器或移动设备打开/关闭或调整设备(恒温器、交流电等)。为了演示,我将关闭/打开连接到 arduino 的 LED。该电路由 Arduino Pro Mini、DHT11 和 nRF24L01+ 组成。下面是电路图(参考工程中的TemperatureMonitor.fzz文件)
来自 9V 电池的电源进入 Arduino Pro Mini 的 RAW 引脚。 arduino 中的内置稳压器将在 Vcc 中提供 5V 输出。我们将使用它来驱动 DHT11。我们还提供 9V 电源作为 3.3V 稳压器的输入,我们将使用它为 nRF24L01+ 供电。来自 DHT11 的温度和湿度读数将在数字引脚 5 中读取。在引脚 6 中,我们将向晶体管或继电器发送信号,我们使用它来启动停止设备(例如恒温器、交流电等)。出于演示目的,我将使用 LED 灯来显示设备的关闭/打开。这是它的工作流程
这是我将它放在穿孔板上的方法。您可以根据电路图提出自己的布局。
这是它的工作原理
已知问题
- 电源 - 两个模块的电池都在几小时内耗尽。需要找到一种高效且便携的电源。我计划在任何可能的模块中使用 attiny 处理器代替 pro mini。用电效率会更高。我以前关于 attiny 的文章可以在这里找到。
- I2C 并发 - 如果 RPI2 一次向 Arduino uno 发送 2 线请求,则其中一个失败。我正在努力避免这种情况,并尝试实施重试机制。
- 单向通信 - 现在集线器发起一个请求,模块响应它。尽管这在许多情况下都非常有效,但某些新模块可能需要将数据发送到集线器,而无需集线器发送请求。
- Range - 我将模块放在隔壁房间并且能够正确接收数据。但是,如果您想增加范围,请将集线器中的 nRF24L01 替换为带有外部天线的 NRF24L01+PA+LNA。
- 安全性 - 由于这是基于由开发人员拥有的假设开发的,因此我没有添加任何身份验证机制。如果您愿意,您可以利用 Azure 移动服务的身份服务将 Microsoft、FB、Twitter、Google 身份验证集成到移动应用和中心。
未来计划
我想把它作为一个开放的平台,让人们实现他们自己的家庭自动化系统。我将稳定集线器和移动应用程序。我想为这个项目添加更多的模块。基于语音的命令和响应也在路线图中。现在我正在研究以下模块
- 气体泄漏传感器
- 入侵检测器
- 设备控制器(例如咖啡机控制器、灯控制器等)
- 车库门开启器
- 一些可穿戴模块
- 没有硬件的互联网服务(天气、Azure 逻辑应用、股票报告等)
- 在 Hub 范围之外工作并通过互联网与其通信的模块(例如汽车追踪器、宠物追踪器、计步器等)
所有这些模块组合在一起并通过集线器作为一个单元工作,将为我提供我一直想要的家庭自动化系统。我将继续添加新模块作为 hackster 中的单独项目。欢迎大家添加新模块和扩展。将更新有关如何向项目添加新模块的 wiki 页面。
代码
比特桶
示意图
WARAN.Hub.fzz PlantWaterer.fzz 温度监视器.fzz制造工艺