
本帖最后由 点点&木木 于 2019-4-12 09:10 编辑 Azure Stream Analytics自动监视传感器,可在发生危险时发送推文和警报。也可通过智能手机控制。 7 n# X( y7 M$ ^' @![]() / [6 W* k. {7 X! Q; R+ V5 L; a 这个项目中使用的东西 硬件组件 Arduino MKR1000 × 1 SparkFun Graphic LCD 84x48 - 诺基亚5110 × 1 Texas Instruments LM2596 DC-DC 4.5-40V可调节降压电源模块 × 1 DHT11温湿度传感器(4针) × 1 ElecFreaks MQ-5气体传感器 × 1 KEYES火焰传感器模块 × 1 恩智浦74LS00 TTL四路2输入正与非门 × 1 ST STM32L4,STM32F7STB75NF75 N沟道功率MOSFET × 3 气流电磁阀常闭 × 1 2线点火线圈 × 1 电阻10k欧姆 × 2 电阻4.75k欧姆 × 1 面包板(通用) × 1 33欧姆10W电阻绕线 × 1 跳线(通用) × 1 SparkFun DC桶式千斤顶适配器 × 1 用于电压调节器或MOSFET的散热器散热器 × 3 1N4007 - 高电压,高电流额定二极管 × 1 6 R/ K0 {$ L- X, ?* O 手动工具和制造机器 烙铁(通用) 3D打印机(通用) 绳钻 在我国,天然气压力在需求高峰时段内全天波动。每年有无人看管的加热器有很多人丧生,一氧化碳中毒。 这个项目的灵感来自一个冬天的夜晚,当我女儿的房间太冷,但我不能在她睡觉时让加热器保持开启状态。 4 [4 i1 w4 S, i. p8 E- W- }' K当我开始设计这个项目的时候,我想,如果我把一个支持WiFi的控制器如MKR1000放在那里,那么除了安全之外我还可以做很多很酷的事情。这就是智能手机连接,使用摩托车零件自动点火的情况。 框图 2 H F; y2 d2 D![]() 加热器通过物联网中心向Azure发送遥测数据。Stream Analytics正在对设备数据进行近乎实时的分析,并将根据配置的SQL请求发布警报。Worker角色将获取Stream Analytics生成的警报,并通过IoT Hub将警报转发给设备。 0 J0 s Q% C# o) s! i- \6 d3 j如果您有足够的气体和电子工作经验,可尝试此项目。 为避免火灾危险,在将纸板和电子设备连接到燃气设备时要小心。 硬件设置 在构建此项目时,MKR1000未发布且文档未公开。我担心的是MQ5气体传感器使用加热器,如果连接到MKR1000电源,可能无法满足电流需求。为安全起见,我使用降压转换器为模块提供5v工作电压。然后在板载稳压器上使用MKR1000提供3.3V工作电压。 如果您有来自Sparkfun的符合3V标准的MOSFET,如FQP30N06L,那么您不需要Quad NAND芯片,但您需要将MOSFET的电压拉低的10k电阻。 我强烈建议使用可测量电流的台式电源。这将非常有用的,当您在软件或布线中出错并且意外地让MOSFET导通或处于浮动状态时。桌面电源电流消耗会将在您闻到燃烧的硅的味道之前提醒您 ![]() & A" W! w! r+ z0 U" Z ?8 E0 J ![]() DHT11安装 + M2 f W/ L5 q- n![]() 温度传感器安装 9 b9 V( B4 K v1 j8 P5 U1 ~/ y9 Z# @9 U ![]() 3 @1 b5 R/ v% |" ?+ l ![]() 液晶显示 9 h, l# k" W- J, b( i; w$ U& _0 n( v- J5 f% N7 n9 }* H ![]() 火焰传感器 * r; y8 d8 j0 M* @( x3 Q+ B; b X! y8 H2 ? : Q7 ~$ Q5 u4 X. W. v ![]() 带盖的火焰传感器 3 h2 g9 w( {# ? n$ q5 B8 w D! l4 I9 C1 v2 o+ q8 X ![]() 9 ] h5 B5 F; j0 E ![]() 添加气体传感器 8 y( k9 ^& m/ Q$ ~ `% l制作盒子 $ F# Q& d6 R7 i0 v+ F* b. {- \- K8 ]+ s![]() - p" `( ]% N" M2 a- t ![]() 1 X( _ @; {, S: ~) L7 E( v0 w( Y ![]() 3 G3 Q6 F9 h& ?- Q- W5 c5 i * h6 t$ {; E# f& U' u1 m3 y 我只是用了一个旧鞋盒,然后把它切成我的规格。激光切割亚克力板是我的第一选择。 ' @# i5 i. p. O8 x# }$ Q1 ?: R/ a3 ^( j , |' R6 R9 h6 T/ D 钻孔 ![]() 需要一个好的钻头来钻孔 . [$ K/ k5 r/ } 2 R0 g& x& b7 a7 [ ![]() 点火线圈需要连接到金属体上 " S* M F" p7 a3 a( V4 J* E$ m9 x, q6 K2 o+ w5 q/ ? 电磁阀故障排除 , L* L0 w: H* m r: q装配后我意识到我的螺线管漏气了。我打开它,在它的磁盘上发现了洞。用一点点超级胶水固定它。 8 Q0 R- O1 V) k4 D) b6 m! Y; X![]() # d! d, Z1 e" V 2 e* u& w: }0 ?- x% G; B ![]() 4 O; H3 V k' H+ A( p 使用聚四氟乙烯胶带棉线密封 * I6 j, V; ?8 E9 u6 Z: ~/ w% g9 F1 e( J5 j- T: R2 v# y ![]() % `$ X8 u6 b' ] e; |5 z! v& r ![]() ( y2 u; t, x j, [' _' H8 h & V, v: B2 n% V+ x: x X/ Q- e ![]() 这是我检验泄露的方法 * V" S; S8 b! T9 u* s' l7 m+ u # w( ?. D2 g, G& I ![]() 请注意,反激式二极管直接焊接在端子上 K- I. J, ?+ L7 \- Z ![]() ! r5 d. J4 ]7 R4 y ![]() ( A1 }* |8 V+ n) [ 3D打印 # k5 n9 v" T4 A: A0 a' P( k2 O我需要一个用于火焰传感器的支架,这样我就可以调节它以获得最佳的火焰视野而不会产生大量的热量。3D打印解决了这个问题。此外,需要保护火焰传感器免受周围阳光的照射。我为此目的3D打印了一个封面。 需要使用LCD支架将其抬高至靠近盖板以便于读取。 ![]() 要打印的型号 ![]() ![]() 1 M( h% R; r& ?: k( f# z d ![]() ![]() 安装火焰传感器 ![]() 安装支架 ' v' Z4 V( M& T1 B4 b/ [" c" ~ & Q3 v3 m. s2 c( E ![]() ![]() , d! O, J+ D6 u3 @ ![]() 3 L' u9 P3 K+ a ![]() 安装火焰传感器盖 2 \1 \) G1 V. O/ [: c6 A![]() LCD支架 ^2 ]; \; x2 F$ ]+ k ![]() LCD安装 # G% J7 m+ D/ p1 I( gLCD正在运行屏幕保护程序。代码是我的Sketch的一部分,但在最终版本中未启用。 U$ \8 G% B3 g Azure云安装 要运行应用程序,您需要执行以下操作: $ L0 I: {6 ^( U0 O# s' }创建一个IoT集线器,它将从设备接收数据并将命令发送回设备 创建一对Event hub和StreamAnalytics作业,该作业将从IoT中心读取数据并将警报发布到事件中心 为桥接控制器和设备创建另一对Stream Analytics作业和事件中心。 创建将由工作者角色使用的存储帐户。 部署工作者角色,这些角色将从事件中心读取警报,并通过IoT中心将警报转发给设备并发送推文。 + l% B* `" T! o Y创建物联网中心 登录Azure门户。 在跳转栏中,单击“新建”,然后单击“物联网”,再单击“IoT Hub”。 在New IoT Hub中,为IoT Hub指定所需的配置。 在“名称”框中,输入名称以标识您的IoT中心。验证名称后,“名称”框中会出现绿色复选标记。 根据需要更改定价和比例等级。此应用程序需要允许多个设备的付费层。 在“资源”组框中,创建新资源组,或选择现有资源组。有关更多信息,请参阅使用资源组管理Azure资源。 使用位置指定托管IoT中心的地理位置。 配置新的IoT中心选项后,单击“创建”。可能需要几分钟才能创建IoT中心。要检查状态,您可以监控Startboard上的进度。或者,您可以从“通知”部分监控进度。 成功创建IoT集线器后,打开新IoT集线器的刀片,记下主机名,然后选择顶部的密钥图标。 选择名为iothubowner的共享访问策略,然后复制并记下右刀片上的连接字符串。另请注意主键 您的IoT中心现已创建,您需要在软件中更新主机名和连接字符串。 要创建Stream Analytics作业输入,您需要从IoT Hub中检索一些信息: 从Messaging刀片(在设置刀片中找到)中,记下与Event Hub兼容的名称 查看与Event-hub兼容的端点,并记下这部分:sb://thispart.servicebus.windows.net/让我们称之为IoTHub与EventHub兼容的命名空间 对于密钥,您将需要在步骤#6中读取主键 创建两个事件中心 登录Azure管理门户。 在页面的左下角,单击+ NEW按钮。 选择应用服务,服务总线,事件中心,快速创建 为Event Hub输入以下设置(使用您为事件中心和命名空间选择的名称): 事件中心名称:“myeventhubname” 地区:您的选择 订阅:您的选择 命名空间名称:“mynamespacename-ns” 单击“创建事件中心” 选择mynamespacename-ns并进入Event Hub选项卡 选择myeventhubname事件中心,然后进入Configure选项卡 在“共享访问策略”部分中,添加新策略: Name =“readwrite” 权限=发送,收听 单击“保存”,然后转到evnet hub Dashboard选项卡,并单击底部的“连接信息” 记下读写策略名称的连接字符串。 创建两个Stream Analytics作业 登录Azure门户。 在跳转栏中,单击“新建”,然后单击“物联网”,再单击“流分析作业”。 输入作业名称,选择订阅,选择创建IoT Hub时创建的同一资源组,选择位置,然后单击“创建”。 创建作业后,单击作业拓扑部分中的“输入”磁贴。在“输入”边栏选项卡中,单击“添加” ' a" j& N% G% \# `0 ~( O输入以下设置: 输入别名=“gassense” Type =“数据流” 来源=“IoT Hub” IoT Hub =“myiothubname”(使用您之前创建的IoT Hub的名称) 共享访问策略名称=“iothubowner” 共享访问策略密钥=“iothubowner主密钥”(这是您在创建IoT中心时记下的密钥) IoT Hub Consumer Group =“”(将其保留为默认空值) 事件序列化格式=“JSON” 编码=“UTF-8” 返回Stream Analytics作业刀片,单击“查询”磁贴。 $ A* [; u! S. A$ k1 v7 w7 g气体传感器检查和推文工作的查询将是: SELECT * INTO gassense4phone FROM gassense WHERE gassense.gassense > 1500 返回Stream Analytics作业刀片,单击“输出”磁贴,然后在“输出”中单击“添加” 输入以下设置,然后单击“创建”: 输出别名=“gassense4phone” 来源=“事件中心” Service Bus Namespace =“mynamespacename-ns 事件中心名称=“myeventhubname” 事件中心策略名称=“readwrite” 事件中心策略密钥=“读写策略名称的主键”(这是您在创建事件中心后记下的那个) 分区键列=“4” 事件序列化格式=“JSON” 编码=“UTF-8” 格式=“行分隔” 返回Stream Analytics刀片,单击顶部的“开始”按钮启动作业 * C1 d! y% ]: y; }9 \* Z桥接作业的查询将只是: SELECT * INTO gassense4phone FROM gassense 我还尝试使用流分析工作来监控火焰传感器并使用以下查询: SELECT * INTO gassense4phone FROM gassense WHERE gassense.flamesense < 500 但最终没有使用它。 " |) [8 K7 Y/ j+ t; i+ Y请注意火焰传感器值在看到火焰时会下降,而气体传感器值在闻到气体时会上升。 创建存储帐户 登录Azure门户。 在跳转栏中,单击“新建”,然后选择“数据+存储”,“存储帐户” 为部署模型选择Classic,然后单击create 输入您选择的名称(即帐户名称的“mystorageaccountname”,然后选择您的资源组,订阅,...然后单击“创建” 创建帐户后,在资源刀片中找到它并记下主连接字符串以配置工作者角色 部署辅助角色 Azure Worker角色将通过IoT Hub触发警报。要在此处构建和部署工作者角色,请执行以下步骤: 在Visual Studio 2015中打开解决方案events_to_device_service.sln 打开文件app.config并将以下字段替换为事件中心,存储帐户和Iot Hub中的连接字符串 <add key="Microsoft.ServiceBus.ConnectionString"value="[EventHub Connection String]" /> <add key="Microsoft.ServiceBus.EventHubName"value="[Event Hub Name]" /> <add key="AzureStorage.AccountName"value="[Storage Account Name]" /> <add key="AzureStorage.Key" value="[StorageAccount Key]" /> <add key="AzureIoTHub.ConnectionString"value="[IoT Hub Connection String]" /> 编译项目并发布到Azure / ^; Z" ]& O; r2 ]$ b在IoT Hub中创建新的设备标识 # v& Q6 F/ |) f要将设备连接到IoT Hub实例,您需要生成唯一的标识和连接字符串。物联网中心为您做到了这一点。要创建新的设备标识,您可以使用设备资源管理器工具(目前仅在Windows上运行) 4 W0 _- {) G; w) N( [# E" M# z软件 您需要安装以下功能才能构建和运行应用程序和Azure Web角色项目。 ![]() / E+ |* w3 P4 ]+ T , r- K: M% C, R$ }5 l ![]() . v( g1 E3 }6 {/ F 最新版本的Arduino SAMD电路板定义不适用于MRK1000。我必须安装较早版本1.6.3才能使其正常运行。 构建Arduino Sketch需要以下库 ![]() 2 q# E, t* j) D# E Arduino的Azure Iot Arduino的WiFi 101 Adafruit统一传感器库(适用于DHT) Adafruit Gfx图书馆 Adafruit的-PCD8544 - 诺基亚5110-LCD库 WiFi固件 请务必遵循以下说明: http://github.com/arduino-libraries/WiFi101-FirmwareUpdater 让您的设备与Azure HTTPS通信。您需要使用IoT中心的主机名。 & ^* H0 b ^! ~0 v" C$ t- P; ~Adafruit LCD库上存在编译器错误,只能在ARM工具链中发生。这是我的解决方案: ---/home/asad/Arduino/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.cpp 2016-03-31 04:29:58.000000000 +++/media/asad/AC78E1AF78E1788A/Users/Asad/Documents/Arduino/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.cpp 1979-11-30 00:00:00.000000000 @@ -181,15 +181,15 @@ // Set software SPI specific pin outputs. pinMode(_din, OUTPUT); pinMode(_sclk, OUTPUT); // Set software SPI ports and masks. - clkport = (PortReg*)portOutputRegister(digitalPinToPort(_sclk)); + clkport = portOutputRegister(digitalPinToPort(_sclk)); clkpinmask = digitalPinToBitMask(_sclk); - mosiport = (PortReg*)portOutputRegister(digitalPinToPort(_din)); + mosiport = portOutputRegister(digitalPinToPort(_din)); mosipinmask = digitalPinToBitMask(_din); } // Set common pin outputs. pinMode(_dc, OUTPUT); if (_rst > 0) 取消MKR1000 在提交前两天,我遭遇了令人不快的事情,我的MKR1000停止出现在USB串口上,我无法再编程了。这确实是一个反复无常的事情。没有关于MKR1000的文档可以帮助我找出问题所在。 ; P4 C$ u8 `. }8 e" i我注意到了JTAG调试端口。我环顾四周,发现Adafruit 对Arduino Zero的优秀 写作。它没有开箱即用,但我仍然需要解决一些编译器问题。我能够恢复引导程序,我的电路板恢复正常。 ![]() 开发技巧 一个周末我需要外出旅行,我想参与这个项目。在没有硬件的情况下,我编写了一个通用Windows应用程序来模拟Azure云的加热器行为。 ![]() 加热器模拟器应用程序 它是一个非常有用的测试工具,即使在返回之后,我仍然使用它来尝试不同的场景和云设置的部分,这些场景要么很难,要么对实际硬件来说太慢。模拟器的代码存在于GitHub中。 7 |8 N0 F, \- \在Stream Analytic作业上编辑查询时,我发现在旧的Azure管理端口中使用“测试”功能很有用。在这里,您可以上传json数据并立即查看查询结果。 # O6 p( ^- [& I- {![]() . x l( Y, ~" m } 原理图 ![]() 相关代码---
![]() |
STM32如何分配原理图IO
【实测教程】STM32CubeMX-STM32L4之研究(ADC)
【STWINKT1B评测】2.初步测试IIS3DWB振动传感器
【圣诞专享活动】使用TouchGFX做GUI显示:圣诞快乐&Merry Christmas!
串口通信波特率异常的解决办法
【STWINKT1B 评测】6. NanoEdge AI 音频分类器 (2)
【STWINKT1B 评测】5. NanoEdge AI 音频分类器 (1)
STWINKT1B评测】4.测试板载ISM330DHCX(6轴)
【STWINKT1B评测】-03-CoreMark跑分测试
【STWINKT1B评测】-02-串口-定时器LED灯测试