本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
该系统是基于Raspberry Pi 2 和 Windows 10 IoT Core 的家庭自动化系统。该系统包含适用于 iOS、Android、Windows、Mac OSX 的 Web 应用程序,可用于控制虚拟执行器。
所需元件:
1、输入
2、输出
硬件:
1、I2C总线
这种优化的 I2C 总线用于连接电源分配器内的每个板。
2、继电器板(输出)
为继电器和 IC 添加了支架,因此如果其中一个损坏,可以轻松地更换它们。另一点是可以使用PCA9555D代替MAX7311,
HSRel5 中继板:
继电器需要 12V 才能工作,而端口扩展器(只能驱动 LED)无法提供。因此,需要一个中继驱动程序。继电器与继电器驱动器相连,而继电器驱动器又与逆变器相连。这个逆变器是必需的,因为在 IC 上电后,端口扩展器上的所有端口的状态都是高电平,将关闭所有继电器。
如果第一个继电器要关闭,则需要使用I2C总线向端口扩展器发送00011110(MSB)。这会将第一个端口设置为LOW (其他端口也被更新)。端口扩展器的第一个端口连接到逆变器的第一个输入端。逆变器的第一个输出连接到继电器驱动器 (ULN2803) 的第一个输入。作为链的最后一部分,继电器连接到继电器驱动器的第一个输出端。
继电器板 HSRel8(+8) :
该板不需要硬件逆变器,这意味着HSRel5 上继电器的高电平状态是关闭,而HSRel8(+8) 上的高电平状态是开启。 这种不同的行为由这些设备的驱动程序处理。
每个灯、插座等都连接到这些继电器。
3、端口扩展器(输入)
按钮、运动检测器和簧片开关(用于窗户)连接到 来自CCTools 的名为I2C-Port16 HS的电路板 。该板包含一个端口扩展器(MAX7311 )、每个端口的上拉电阻(5V、10K)和陶瓷电容器(100NF )。该板可使用 12V 或 5V 电源。陶瓷电容器用于滤除噪声(毛刺滤波器)。
每个输入设备(按钮、运动检测器、簧片开关)都有自己的电缆连接到电源分配器。甲CAT7电缆用于每个输入装置,因为它需要具有屏蔽,其与PE(保护接地)相连接。具有多个按钮(如卷帘按钮)的点只需使用一根CAT7电缆即可连接。
在电源分配器处,每个输入设备都连接到端口扩展器的一个端口和GND 。由于上拉电阻,端口状态默认为高电平。按下按钮会将端口连接到GND ,从而导致端口处于低电平状态。运动探测器和簧片触点也以这种方式工作。
共享中断电缆连接到所有输入板。默认情况下,此电缆是上拉的。如果任何端口扩展器的状态发生变化,相应的端口扩展器会将中断状态设置为低电平。此行为可防止使用 I2C 总线对所有端口扩展器进行连续轮询。Pi2 上的软件仅轮询相应的GPIO。 如果中断 GPIO 处的状态已更改,则会相应地轮询每个输入板的当前状态,并在需要时触发事件。
4、树莓派 2
Raspberry Pi 2 运行 Windows 10 IoT,并通过定制外壳安装到配电器上。它还具有带状态 LED 的原型屏蔽罩、带上拉电阻 ( 10K )、保护电阻 ( 1K )的中断端口和用于毛刺过滤的陶瓷电容器 ( 100NF ),所有电缆都可以使用螺钉端子接线。
5、温湿度传感器
使用DHT22 (AOSONG)测量每个房间/地点(当前为 10)的当前温度和湿度。该传感器使用不支持寻址的专有协议提供当前温度和湿度。这要求每个传感器都连接到微控制器。添加一个Arduino Nano V3.0作为I2C总线的从设备,Arduino 从所有连接的传感器每2.5秒,并且高速缓存至本地读取值。发送端口 id (0-10) 后,可以从Arduino Nano读取这些值。使用 I2C 总线从寄存器读取数据时的行为是相同的。
温度和湿度使用两种不同的视图显示在 Web 应用程序中。
(WEB应用程序的温度和湿度)
湿度(“Luftfeuchtigkeit” )条目右侧的图标表示墙壁上霉菌生长的风险是否增加。小于 60% 的值是绿色,小于 70% 是黄色,高于 70% 是红色。
Web 应用程序还提供所有传感器的概览。
硬件设置:
下图说明了使用输入和输出板的配电器上的硬件设置,未显示 12V/5V 电源和 N/PE 连接。
433Mhz远程中继
此功能使继电器板成为可选的,负责DHT22 (温度和湿度)传感器的Arduino Nano也发送 433Mhz 信号。发送器(FS1000A )与温度和湿度传感器一起安装在房屋中央房间的箱子内。为了进一步增加发射器的范围,它额外使用 12V 供电(也适用于 3.3 但范围较短)。
远程中继的主要问题之一是它们不发送任何状态信息。因此,用户有可能通过使用原始遥控器将状态更改引入系统。为了强制同步,软件解决方案每 5 秒自动更新一次状态。这使 Web 应用程序上显示的状态尽可能可靠(但使原始遥控器的使用无用)。
远程继电器可用于每个自动化系统,并提供与继电器板继电器相同的功能。
433Mhz 遥控器的代码目前只能通过原型板上的电路进行手动配置。然后将这些代码复制到配置中。下面引用了所需电路板的Fritzing草图,Arduino草图位于文件夹中的存储库中 CK.HomeAutomation.SensorsBridge\RemoteCodeFinder。
软件:
下面引用的存储库包含 Visual Studio 2015 解决方案和所有相关项目。只需将 Raspberry Pi 2 用作家庭自动化控制器,同时通过为其他继电器板或传感器编写自定义驱动程序来进行扩展。
软件解决方案的项目分为:
CK.HomeAutomation.TraceViewer
该项目包含一个控制台应用程序,用于显示控制器(Pi2 实例)发送的跟踪消息。当前,所有通知都使用 UDP 套接字连续发送到广播地址。因此需要在防火墙上打开一个端口(例如 19227),使用 TraceViewer 来查找错误和/或错误配置。
发送通知所需的所有类都位于项目中CK.HomeAutomation.Notifications。
CK.Home自动化.网络:
该项目包含基本 HTTP 服务器的实现。Web 应用程序需要 HTTP 服务器,它以 JSON 格式提供状态信息并接受状态更改的请求。
HTTP 服务器还能够托管 Web 应用程序。由于包名称不同,必须使用管理 SMB 共享将 Web 应用程序的内容手动上传到目标文件夹。
目标文件夹: \\[IP]\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\app
CK.HomeAutomation.Controller.*
Controllers 文件夹中的每个项目都是一个实施IoT 后台任务的启动项目。
在测试解决方案之前,您应该熟悉以下任务:
从头开始设置带有 Windows 10 IoT 的 Raspberry Pi2 ( https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm )
使用 Microsoft PowerShell 远程会话 ( https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm )连接 Raspberry Pi2
将通用 Windows 应用程序部署到 Raspberry Pi2。
解决方案目录还包括一个小的PowerShell脚本SetupRaspberryPi.ps1,该脚本被调用以执行用于设置 Raspberry Pi2 的通用命令链。
CK.HomeAutomation.Actuators:
该项目提供了最高级别的抽象。家庭、房间末端每个执行器如按钮、灯、插座等都在这个项目中实现,并根据每个执行器的特性提供特殊的事件和方法。
可以使用 fluent API 创建房间,这使得配置易于阅读和理解。
MotionDetector - 执行器:
该执行器用于检测房间内的人和运动。
运动检测器执行器的实现提供了两个事件。两者中的第一个MotionDetected是检测到运动时触发的事件。物理运动检测器将输出保持在高电平,直到没有检测到进一步的运动,此时 会触发第二个事件DetectionCompleted。
下图显示了 Web 应用程序中运动检测器的条目。可以使用 Web 应用程序停用每个运动检测器(仅在软件中)。红点表示当前检测到运动。
按钮 - 执行器:
这个执行器代表一个物理按钮。该按钮有两个事件,表示它被按下。事件PressedShort ,如果按钮被按下一个短的持续时间(<1.5秒),而事件被触发PressedLong是否已按下了更长的持续时间的按钮仅触发(> 1.5秒)。如果超过持续时间(1.5 秒)并且没有释放按钮,第二个事件也会自动触发。这两个事件允许按钮具有多种功能。
例:
该解决方案还包含一个. 此按钮实现相同的界面 ( ),只能使用 Web 应用程序“按下”。VirtualButtonIButton
插座、灯、BinaryStateOutput - 执行器:
该类BinaryStateOutput仅用于支持二进制状态(ON和OFF )的每个执行器。这些执行器的示例是Socket和Lamp。基本实现提供了更新(ON和OFF )或切换状态的方法。Buttons 可以与实现 的对象交互IBinaryStateOutputActuator,这允许添加多个自定义执行器。
下图显示了每个二进制状态输出的模板。左侧的图标对于插座和灯是不同的。可以使用Web 应用程序的配置文件 ( )定义自定义图标,例如“ Mückenstecker ”条目中的毒瓶Configuration.js。
组合二元状态执行器:
每个类型的物理执行器 BinaryStateOutput 都可用于创建逻辑二进制状态执行器。如果状态应该被切换,则必须将一个执行器设置为“主”,这是确定新状态所必需的。执行器有自己的 ID,可以像任何其他二进制状态输出执行器一样使用(实现了所需的接口)。
这种实现的一个重要优点是处理状态更新的方式。通常一个二进制状态输出的新状态直接通过I2C总线一个一个地提交给每个设备。这种行为会在每个执行器状态更新之间产生短暂但可见的延迟。所述 CombinedBinaryStateActuator 防止使用内部变动跟踪这种延迟。
例子:
状态机 - 执行器:
该执行器允许端口(继电器)或其他二进制输出执行器具有多种状态。
带风扇的示例:
状态机提供了关闭它或移动到下一个状态的方法。如果已达到状态机的最后一个状态并且接下来应应用初始状态,则状态将重置为OFF 。
状态机的另一个用例是为其他几个执行器创建模板或“情绪”。
示例心情:
该方法WithTurnOffIfStateIsAppliedTwice确保状态机的状态将在第二次激活特定触发器时更改为OFF ,因为配置的状态仍然处于活动状态(例如:按下“ DeskOnly ”按钮将激活“ DeskOnly ”情绪。如果在“ DeskOnly ”情绪仍处于活动状态时再次按下按钮,则执行器将应用关闭状态。不需要用于关闭状态的专用按钮。)。
下图显示了状态机的模板。可以使用 Web 应用程序的配置文件更改每个状态的标题和图像。
温度传感器/湿度传感器:
使用 I2C 传感器桥读取温度和湿度值。这两个值都是从单个物理设备读取的,但分为温度执行器和湿度执行器。这些值每 10 秒自动轮询一次。
该解决方案提供了多种自动化:
1、自动开启和关闭自动化
此自动化将连接的二进制状态输出设置为ON。按钮或运动检测器可用作触发器。需要指定所需的ON状态持续时间。如果超出该范围,则状态设置为OFF 。如果超出指定范围,状态将自动设置为OFF 。可以提供启用自动化规则的可选时间范围。“仅白天”或“仅夜间”的预定义范围可用(需要气象站对象)。
例子:
2、AutomaticRollerShutterAutomation:
这种自动化用于根据多种条件自动移动多个卷帘。这些条件之一是日出和日落,这意味着卷帘在日出时自动向上移动,在日落时自动向下移动(需要气象站对象)。也可以为日出和日落添加差异。根据日出和日落功能,可以指定“之前不打开”的时间,以确保在到达该时间点之前不会打开卷帘。另一个条件是室外温度(也需要气象站对象),如果室外温度超过特定值(例如 28°C),卷帘门会自动关闭。此功能适用于屋顶窗。
卷帘的位置也通过时间测量进行跟踪。必须配置启动和完全关闭之间所需的持续时间。
例子:
以下屏幕截图显示了 Web 应用程序中卷帘的条目。按钮上方的进度条显示当前位置。
3、自动有条件的自动化:
此自动化用于在条件匹配时将多个二进制状态输出的状态设置为ON 。此自动化用于花园中仅在夜间亮起的灯。它可以指定一个时间范围为ON的状态,并且多个时间范围OFF状态。也可以将日出和日落用于ON状态(需要气象站对象)。
例子:
4、通用自动化和复杂条件:
新实现的最新功能是通用自动化和条件框架。通用自动化旨在在满足配置条件时执行自定义操作。每次通过按钮、运动检测器、间隔或任何其他代码调用触发器时都会检查这一点。
气象站:
许多自动化和条件取决于环境条件,例如当前天气、日出和日落时间、室外温度或湿度。所有这些信息目前由OpenWeatherMap的 WebApi 支持的虚拟气象站每 60 秒提供一次。虚拟气象站是使用界面实现的IWeatherStation,这使得无缝集成位于花园中的物理站变得容易。
CK.Home自动化.硬件:
该项目包含所有当前支持的输入和输出设备的驱动程序。特别是继电器板、CCTools 的输入板和 433Mhz 远程开关。还包括Arduino Nano (传感器桥和 433Mhz 发送器)的驱动程序和源代码。所有更高级别的对象(如执行器和自动化)都是针对接口实现的,以向金属硬件类的具体裸机添加抽象层。这使得以后可以轻松地为其他板和传感器添加更多驱动程序。
CK.Home自动化.遥测:
该项目包含两个组件。第一个是 CSV 写入器,它将每个更改的状态写入包的“LocalState”目录。可以使用管理 SMB 共享从 Pi2 下载此文件: \\192.168.1.15\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\BinaryStateOutputActuatorChanges.csv.
CSV 文件的示例内容:
第二个组件是AzureEventHubPublisher. 此组件将任何状态发生更改的事件以及任何传感器更改的值发送到Microsoft Azure EventHub 。如果按下按钮或检测到运动,也会生成事件。该解决方案包含用于创建所需SQL数据库表的SQL脚本和StreamAnalytics作业所需的查询(在文件夹 #Azure 中)。
每个更改的执行器状态都会生成到Azure SQL数据库中的条目。第一个条目包含 START事件和新状态。第二个条目包含END 事件以及该状态的总持续时间(以秒为单位)。
网络应用程序:
软件解决方案包含该项目 CK.HomeAutomation.App。这个项目是一个建立在AngularJS 、jQuery和Bootstrap之上的网络应用程序。从控制器 (Pi2) 读取房间配置,并根据现有房间生成 UI。
可以使用 文件直接从文件系统打开 Web 应用程序,也可以将其 上传到 Web 服务器。该文件 用于配置和翻译 Web 应用程序。必须在配置文件中设置控制器(Pi2 实例)的 IP 地址:index.htmlConfiguration.js
仅当 Web 应用程序托管在 Web 服务器上时,它才可以添加到iOS的主屏幕(我个人使用带有 nginx 的 BananaPi)。将 Web 应用程序添加到主屏幕的描述如下:http : //www.tech-recipes.com/rx/44908/ios-add-website-shortcut-to-home-screen/
在 Raspberry Pi2 上托管 Web 应用程序已经在进行中,但目前不完全受支持。
终端
该网络应用程序也在客厅运行,旧的 iPad 3 用作终端。
史上最暴力的拆解——基于ZigBee技术的幻腾智能照明套装拆解
2014-07-21
E拆解:智能摄像机--360、小蚁拆解对比
2015-06-22
智能家居新伙伴——iMagic智能LED灯评测拆解
2014-06-09
华为荣耀体脂秤拆解——颜值尚可,内部做工一般,国产主控,利润可期
2017-06-22
科技美好生活,小米温湿度传感器,解决生活难题
2017-07-17
基于树莓派和Arduino打造的PLC EtherCAT电路设计
2020-02-25
最简单的智能家居构建-ESP32-CAM实现PIR运动侦测
2019-08-14
智能家居我来也:ESP32-S2横空出世
2019-07-19
讨论