
本帖最后由 点点&木木 于 2019-4-12 09:10 编辑 Azure Stream Analytics自动监视传感器,可在发生危险时发送推文和警报。也可通过智能手机控制。 ![]() 3 v! ^0 Q& @5 G0 b * U. g# _# n/ T# L0 l 这个项目中使用的东西 硬件组件 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 , d5 S& q! X9 i0 x7 Z 手动工具和制造机器 烙铁(通用) 3D打印机(通用) 绳钻 n+ S& H. H0 i) x) N3 B在我国,天然气压力在需求高峰时段内全天波动。每年有无人看管的加热器有很多人丧生,一氧化碳中毒。 & y" e; T8 \# J# G" T7 Q0 E5 M这个项目的灵感来自一个冬天的夜晚,当我女儿的房间太冷,但我不能在她睡觉时让加热器保持开启状态。 ! u* [5 U* X! A当我开始设计这个项目的时候,我想,如果我把一个支持WiFi的控制器如MKR1000放在那里,那么除了安全之外我还可以做很多很酷的事情。这就是智能手机连接,使用摩托车零件自动点火的情况。 4 A2 J- s J2 s2 [4 e9 c框图 ![]() + D( f4 j7 c( \/ l; X1 m: e 加热器通过物联网中心向Azure发送遥测数据。Stream Analytics正在对设备数据进行近乎实时的分析,并将根据配置的SQL请求发布警报。Worker角色将获取Stream Analytics生成的警报,并通过IoT Hub将警报转发给设备。 / j! Q, F/ d- f1 S0 C/ F4 R如果您有足够的气体和电子工作经验,可尝试此项目。 为避免火灾危险,在将纸板和电子设备连接到燃气设备时要小心。 硬件设置 在构建此项目时,MKR1000未发布且文档未公开。我担心的是MQ5气体传感器使用加热器,如果连接到MKR1000电源,可能无法满足电流需求。为安全起见,我使用降压转换器为模块提供5v工作电压。然后在板载稳压器上使用MKR1000提供3.3V工作电压。 如果您有来自Sparkfun的符合3V标准的MOSFET,如FQP30N06L,那么您不需要Quad NAND芯片,但您需要将MOSFET的电压拉低的10k电阻。 7 N- U# v. j4 c2 X4 P8 }% f2 f我强烈建议使用可测量电流的台式电源。这将非常有用的,当您在软件或布线中出错并且意外地让MOSFET导通或处于浮动状态时。桌面电源电流消耗会将在您闻到燃烧的硅的味道之前提醒您 & _0 C4 P2 a5 p![]() / G( S# D; w: b+ ~$ o. m5 ~ ![]() DHT11安装 ![]() 温度传感器安装 ( q# ]. [& y8 ? D1 x5 n2 c5 o& _' ]# k3 [1 u! K2 \. i' Z ![]() ![]() 液晶显示 1 |# E _( j9 X! h4 \ ![]() 火焰传感器 ![]() 带盖的火焰传感器 % e! {9 i9 l9 N5 F- S6 r/ B ![]() 0 |2 P% Z' M" p V1 L+ ]: L " c3 ]- _$ H. ^7 A" z ![]() 添加气体传感器 2 k% l4 ~4 E. y( w! |5 h 制作盒子 1 A1 S3 d% t( `( V. i: v" V![]() ![]() ![]() % b; D. K" g/ |" r4 y) F 我只是用了一个旧鞋盒,然后把它切成我的规格。激光切割亚克力板是我的第一选择。 ( z/ F8 W- V9 b. V4 `" ^6 {& F5 s4 u9 D* i' K6 ^* v7 Y. x8 j 钻孔 ; h( l# g, |- D0 y ~- |![]() 需要一个好的钻头来钻孔 ( e3 P- ?5 K/ E* ~, ]( ^9 K" D4 V( Z6 W7 a4 L7 O ![]() 点火线圈需要连接到金属体上 电磁阀故障排除 4 k A+ S) C0 k+ Z1 [1 a装配后我意识到我的螺线管漏气了。我打开它,在它的磁盘上发现了洞。用一点点超级胶水固定它。 8 N% B9 B# U- W6 R& W! x![]() " S- W- _' B1 u ![]() & }$ v) K: u9 H3 U% k4 E 使用聚四氟乙烯胶带棉线密封 ; M" S5 A G1 y& c* }& g7 V9 z5 ] T3 a, g$ g" ] ![]() ![]() ) ?. A* n; [+ \ F$ L+ k- E/ C 1 R! T# u+ ~0 X ![]() 这是我检验泄露的方法 ![]() 请注意,反激式二极管直接焊接在端子上 4 s% w& M6 f9 S1 U( C( R1 L3 }7 S0 |- z% D " k$ ^- h) h7 p ![]() ![]() 7 {/ m6 S& s3 f5 f, z ^ A% A 7 Q1 B/ K; X* a) a 3D打印 " X5 z' P& G% `3 v) e0 N我需要一个用于火焰传感器的支架,这样我就可以调节它以获得最佳的火焰视野而不会产生大量的热量。3D打印解决了这个问题。此外,需要保护火焰传感器免受周围阳光的照射。我为此目的3D打印了一个封面。 q( A, q _% s- A N4 { H需要使用LCD支架将其抬高至靠近盖板以便于读取。 ![]() 要打印的型号 9 G1 o: ]6 k' Q9 C, {5 }9 y3 X, p1 |) ~: |! p+ x% k' U ![]() 5 {6 q; f! E5 a' e& ]. M ![]() . g/ Q. Z! ?9 [( V# b( O) o" @. Y ![]() , d) p) y q% q$ O8 c# _4 O7 M ![]() 安装火焰传感器 # [' s( K |* F0 c9 Q![]() 安装支架 2 E0 V( { V+ E @! d5 [$ Z( f X8 [! W3 h4 c2 A% p6 g1 [; s' j3 P ![]() ![]() ![]() * ?$ Z1 `% S1 `4 k ![]() 安装火焰传感器盖 + U0 q# [( l7 Z; k # Y, q$ g3 o% |5 G, o n% Z, N ![]() LCD支架 ) U0 @& t# P! s- H- L. A; @# o& j. F0 s1 A! K ![]() LCD安装 - V4 l' c: y1 N/ _- f( W1 d LCD正在运行屏幕保护程序。代码是我的Sketch的一部分,但在最终版本中未启用。 Azure云安装 要运行应用程序,您需要执行以下操作: 创建一个IoT集线器,它将从设备接收数据并将命令发送回设备 创建一对Event hub和StreamAnalytics作业,该作业将从IoT中心读取数据并将警报发布到事件中心 为桥接控制器和设备创建另一对Stream Analytics作业和事件中心。 创建将由工作者角色使用的存储帐户。 部署工作者角色,这些角色将从事件中心读取警报,并通过IoT中心将警报转发给设备并发送推文。 / T4 ^0 @# b8 B9 F8 \ 创建物联网中心 " w5 {8 |. P: a; O* |登录Azure门户。 在跳转栏中,单击“新建”,然后单击“物联网”,再单击“IoT Hub”。 在New IoT Hub中,为IoT Hub指定所需的配置。 在“名称”框中,输入名称以标识您的IoT中心。验证名称后,“名称”框中会出现绿色复选标记。 " A' c. S, Y7 J2 {9 z( Y6 D根据需要更改定价和比例等级。此应用程序需要允许多个设备的付费层。 在“资源”组框中,创建新资源组,或选择现有资源组。有关更多信息,请参阅使用资源组管理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中读取主键 创建两个事件中心 2 o ]' ~0 N a! m h& n登录Azure管理门户。 在页面的左下角,单击+ NEW按钮。 选择应用服务,服务总线,事件中心,快速创建 为Event Hub输入以下设置(使用您为事件中心和命名空间选择的名称): 事件中心名称:“myeventhubname” 地区:您的选择 订阅:您的选择 命名空间名称:“mynamespacename-ns” 单击“创建事件中心” 选择mynamespacename-ns并进入Event Hub选项卡 选择myeventhubname事件中心,然后进入Configure选项卡 在“共享访问策略”部分中,添加新策略: Name =“readwrite” 权限=发送,收听 单击“保存”,然后转到evnet hub Dashboard选项卡,并单击底部的“连接信息” 记下读写策略名称的连接字符串。 创建两个Stream Analytics作业 登录Azure门户。 在跳转栏中,单击“新建”,然后单击“物联网”,再单击“流分析作业”。 输入作业名称,选择订阅,选择创建IoT Hub时创建的同一资源组,选择位置,然后单击“创建”。 创建作业后,单击作业拓扑部分中的“输入”磁贴。在“输入”边栏选项卡中,单击“添加” 输入以下设置: 输入别名=“gassense” Type =“数据流” 来源=“IoT Hub” IoT Hub =“myiothubname”(使用您之前创建的IoT Hub的名称) 共享访问策略名称=“iothubowner” 共享访问策略密钥=“iothubowner主密钥”(这是您在创建IoT中心时记下的密钥) IoT Hub Consumer Group =“”(将其保留为默认空值) 事件序列化格式=“JSON” 编码=“UTF-8” 返回Stream Analytics作业刀片,单击“查询”磁贴。 : p4 u3 E w# u1 Z5 W U. O$ K气体传感器检查和推文工作的查询将是: 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刀片,单击顶部的“开始”按钮启动作业 桥接作业的查询将只是: SELECT * INTO gassense4phone FROM gassense 我还尝试使用流分析工作来监控火焰传感器并使用以下查询: SELECT * INTO gassense4phone FROM gassense WHERE gassense.flamesense < 500 但最终没有使用它。 ! a+ q9 a; ^" v+ z9 I请注意火焰传感器值在看到火焰时会下降,而气体传感器值在闻到气体时会上升。 创建存储帐户 登录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 在IoT Hub中创建新的设备标识 要将设备连接到IoT Hub实例,您需要生成唯一的标识和连接字符串。物联网中心为您做到了这一点。要创建新的设备标识,您可以使用设备资源管理器工具(目前仅在Windows上运行) 2 E! H1 v# M! e( G. j3 o6 E5 }# @) M. O& a& O( l 软件 您需要安装以下功能才能构建和运行应用程序和Azure Web角色项目。 ![]() ' o' u% u9 }8 u1 ?' D ![]() 最新版本的Arduino SAMD电路板定义不适用于MRK1000。我必须安装较早版本1.6.3才能使其正常运行。 构建Arduino Sketch需要以下库 ![]() & s0 j, S* O1 J Arduino的Azure Iot Arduino的WiFi 101 Adafruit统一传感器库(适用于DHT) Adafruit Gfx图书馆 Adafruit的-PCD8544 - 诺基亚5110-LCD库 WiFi固件 $ }; o6 G) Q: r5 [0 N( z8 B, P5 q 请务必遵循以下说明: ' d, y; `" b- Uhttp://github.com/arduino-libraries/WiFi101-FirmwareUpdater 让您的设备与Azure HTTPS通信。您需要使用IoT中心的主机名。 * }6 ~7 q& Q# O9 N7 q4 s 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的文档可以帮助我找出问题所在。 我注意到了JTAG调试端口。我环顾四周,发现Adafruit 对Arduino Zero的优秀 写作。它没有开箱即用,但我仍然需要解决一些编译器问题。我能够恢复引导程序,我的电路板恢复正常。 ![]() 开发技巧 一个周末我需要外出旅行,我想参与这个项目。在没有硬件的情况下,我编写了一个通用Windows应用程序来模拟Azure云的加热器行为。 ![]() 加热器模拟器应用程序 它是一个非常有用的测试工具,即使在返回之后,我仍然使用它来尝试不同的场景和云设置的部分,这些场景要么很难,要么对实际硬件来说太慢。模拟器的代码存在于GitHub中。 6 T" W8 ~2 x3 ?0 V5 U在Stream Analytic作业上编辑查询时,我发现在旧的Azure管理端口中使用“测试”功能很有用。在这里,您可以上传json数据并立即查看查询结果。 ![]() ! S- ~9 C* _% q3 l3 w2 l 原理图 ![]() 相关代码---
![]() |
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灯测试