资料介绍
描述
什么
这记录了我如何制作一个可以测量地面上积雪量的设备。它能够使用小电池运行多年,在零以下 (Celcius) 温度下生存,并使用 LoRaWAN 将测量结果传输到互联网以进行进一步处理。
为什么
这个项目是出于必要而开始的——如果需要清理我们相当长的车道上的积雪,我希望我的起床闹钟能提前一个小时响起。在我多风的小镇,我需要部署多个传感器来应对积聚。
这可能有许多实际应用,包括
- 道路除雪
- 物业管理,避免倒塌
- 停车场
- 电网管理
- 机场维修
谁
我是电子健康领域的一名软件开发人员,过去几年我一直在业余时间研究电子产品和 3D 打印机。我喜欢分享我在本地创客空间的旅程,并撰写了一些指南,主要是关于 hackster 和 element14。
如何
本指南将涵盖创建低功耗传感器设备的有趣步骤,并深入探讨某些兴趣点。这些原理可用于其他类型的应用,例如替代传感器。我的编码风格和方法揭示了我在软件方面的背景。总是热衷于学习。
在本指南中,我将提供数据表的链接。数据表可能听起来并不令人兴奋,但在尝试突破硬件极限时却是关键。
传感器原理
我做了很多搜索,寻找其他人用来测量积雪的原理。这些是我的一些发现:
- 降雪融化
- 高度尺的视觉监控
- 雷达
这些都不符合可以使用电池使用多年的低成本设备。
我最终使用了超声波传感器。它实际上不能测量雪的深度,但是通过从已知的地面长度中减去读数,可以推断出它。
我使用的传感器HRXL-MaxSonar MB7374专门设计用于读取不同类型雪面特征的读数。它还防水,防护等级为 IP67。
微控制器
我一直想尝试一种新的 SoC,Seeed Studio Lora-E5 ,它具有小尺寸、LoRaWAN 无线电和低能量要求。Seeed Studio 慷慨地提供了样品和 Lora-E5-mini 开发板。该项目不以任何方式赞助。如果概念验证证明可行,我计划申请 Seeed Studio 提供的PCBA 产品,以围绕Lora-E5设计定制 PCB 。我找到了一个非常好的项目,只需进行一些修改,它就会成为我的灵感来源。作者查尔斯·哈拉德 ( Charles Hallard ) 帮助我解决了一些功耗问题。
能量源
传感器和开发板将根据设备的总尺寸设定前提。我的目标是纽扣电池供电设备,但很快得出结论,这对于开发板来说是不可行的。我选择了 AA 尺寸的电池,SAFT LS14500 。该电池可以安全地提供 50mA 的持续电流,高达 250mA 的脉冲电流,而不会因压降而损坏电池。它可以提供几年的运行时间,对于一个 PoC 来说绰绰有余。
拆箱 Lora-E5-mini
开发板手感坚固,带有 USB-C 连接器。请注意,此连接器仅用于为设备供电和进行串行通信。您不能以这种方式对设备进行编程,因为您可能习惯于使用 Arduino 兼容板。但是,我能够在几分钟内使用工厂提供的 AT 固件为我的 The Things Stack 应用程序配置它。完整的过程记录在 wiki 中。
我将假定您具备 TTN 的先验知识(我使用 The Things Stack Community Edition),如果您不走运的话,因为那里有很多很棒的指南。
微控制器编程
程序员
如前所述,开发板不能通过 USB 编程新固件。我以大约 35 美元的价格订购了一个ST Link V3 (STLINK-V3SET) ,它允许我的计算机对微控制器进行固件编程和调试。你不能使用 USB-to-FTDI 适配器、Atmel-ICE 或类似的东西,我花了一段时间寻找明确的答案。
首要任务是通过 USB更新 ST Link ,需要创建一个 ST 帐户。真的?!
然后我继续构建随附的 MB1440B 板,这样我就可以实际访问与 MCU 接口所需的引脚。
此外,我还花了一些时间弄清楚在编程器和开发板上使用什么引脚。我希望 Seeed wiki 能让这一点更清楚,因为我不得不依靠放大连接图片然后研究 MB1440B 数据表来猜测相应的引脚。
在 MB1440B 上,您会发现横向挤压成排的引脚。其中一组称为 CN6,但很难阅读和查找。检查图片。下表列出了通过 SWD 接口对 MCU 进行编程所需的连接器(复位是可选的):
连接表 ST Link v3 <--> LoRa-E5-mini
Color | ST Link (CN6) | LoRa-E5-mini
Yellow | NRST | RST
Green | DIO | DIO
Purple | GND | GND
Grey | CLK | CLK
在此设置中,仍需要连接 USB-C 以提供电源和可选的串行连接。
写设备应用
Lora-E5 包含来自 ST 的微控制器STM32WLE5JC 。我过去只使用 STM32(或与此相关的任何 STM 系列)进行过简短的开发,因此我不得不决定使用工具链和 IDE 对其进行编程。我一直想测试Mbed-os 框架和 IDE并试一试。Mbed 提供了对不同类型硬件的抽象,隐藏了库,并且应该让您专注于编写应用程序代码。听起来不错!虽然我能够在设备上编译和运行它,但我并不喜欢 Mbed。原因有很多,但主要是 IDE 感觉太基础了,缺乏重构支持,调试,例如 Charles Hallard 有一个很好的演练,告诉你如何设置它,如果你想试一试的话。
下一个明智的选择是带有用于 STM32WL 的 STM32Cube MCU 包和可选的 STM32 Cube Programmer 的 STM32 Cube IDE。我遵循了Lora-E5 wiki ,从擦除工厂 AT 固件开始,但无法编译示例项目。事实证明示例项目已经过时,并且还基于用户代码严重交织在一起的模板。我收到确认这将在不久的将来更新,并且该回购已从我测试时的位置移动。
经过大量实验和搜索后,我发现了一个不错的存储库,其中包含最新的 LoRa-E5 代码库,并演示了在物联网 (TTN) 上发送传感器数据. 我做了一个叉子,花了很多晚上研究和调试代码。乍一看,STM32 Cube IDE 令人不知所措。我过去使用过类似的 IDE,这帮助我建立了一个粗略的概览。我发现最令人困惑并且在某种程度上仍然如此的是生成代码和用户代码的混合。尽管我定期进行 git 提交,但我还是花了很多时间因为我的更改被覆盖而感到沮丧。我学会了尝试使用配置向导而不是在某些区域直接更改代码的艰难方法。我对配置工具的许多方面仍然不满意,但现在我对结果并不感到惊讶。
/* USER CODE BEGIN */
/* USER CODE END */
代码的关键方面太多,无法详细介绍,我将扩展一些。我希望您能够编译和运行该项目,如果是这样,请使用调试器来理解代码流。
调试设置
首先,确保您养成在调试模式和低功耗模式之间切换的习惯。这由 sys_conf.h 中的以下定义决定:
VERBOSE_LEVEL
APP_LOG_ENABLED
DEBUGGER_ENABLED
LOW_POWER_DISABLE
STATUS_LED_ENABLE
我使用最后一个来切换 LED 指示灯,但为了追踪 LED 的所有可能使用,我将实际的切换注释掉了。请注意,当通过 USB 进行串行通信时,您无法控制是否使用 LED,正如您在板原理图CP2102N USB 桥上看到的那样。这让我有点头疼,直到我发现在断开连接时情况并非如此。
例如,如果您设置 DEBUGGER_ENABLED = 0 和 LOW_POWER_DISABLE = 0,任何调试尝试都会很快超时。
我没有找到在 STM Cube 内显示串行输出的方法,所以我使用具有正确波特率的Termite RS232 终端来捕获通过 USB 的日志记录。MCU 有多个 USART,USART1 用于日志记录,可以通过 USB 或 LoRa-E5-mini 引脚 TX(SoC 上的 PB6)读取。
LoRaWAN 配置
继续,您需要通过新设备注册来设置您自己的 LoRaWAN 设置。通过在 STM32CubeIDE 中打开 .ioc 文件,选择 Middleware-> LoRaWAN -> LoRaWAN comissioning 来使用配置工具。不要直接写入 se-identity.h 文件,因为它会被覆盖。
- “App/Join EUI”映射到 LORAWAN_JOIN_EUI
- “应用程序密钥”映射到 se-identity.h 中的 LORAWAN_APP_KEY
- “网络密钥”映射到 LORAWAN_NWK_KEY 出于安全原因,无论如何不应使用“静态设备地址”,因此不会使用网络和应用程序会话密钥。
-
TTN "AppEUI" 对应中的LORAWAN_JOIN_EUI
se-identity.h
-
TTN "DevEUI" 对应中的LORAWAN_DEVICE_EUI
se-identity.h
-
TTN "AppKEY" 对应 LORAWAN_APP_KEY 中
se-identity.h
经常出现的问题是:如何在不公开私钥的情况下在公共代码存储库上跟踪我的项目?一个选项是提交一个带有假值的配置版本,停止在 git 中跟踪文件,并更改为真实值。这带来了一些问题:如何在其他计算机上继续开发该项目,甚至在以后接手该项目时确保保持正确的值?另外,如果配置文件包含我实际想要更改和共享的其他设置怎么办?我愿意接受建议。
编辑:感谢我的同事 Erling 推荐GitHub Encrypted secrets 。
我决定在开发期间提交我的密钥,然后在发布之前重新生成它们。
与传感器接口
我研究了MB7374 数据表以了解它的许多方面和选项。建议通过引脚 5 读取测量值以确保准确性,因为它提供 TTL 输出。启动并打印产品信息后,它将以连续模式输出每个测量值,作为一串以“R”开头的 ASCII 字符,后跟使用 4 位数字的以毫米为单位的到表面的距离,例如“R0928”,对应于 92.8 厘米。我在 STM32 上使用 9600 波特率的 USART2。
6HRXL-MaxSonar-WRST7
MB7374-1XX
Copr. 2011-2019
MaxBotix Inc.
RoHS 23b 119 0819
TempI
R0937
R0937
R0936
R0936
R0936
R0936
TempI表示使用内部温度计。
注意:对于雪地应用,建议使用 5v 电源以实现 MB7374 的最佳运行。LoRa-E5-mini 上的稳压器AP2112仅在电池供电时提供 3.3v(5v 引脚仅在连接 USB-C 时接合)。因此,这一概念验证有望提供下一个版本是否需要为传感器提供 5v 电压的答案。
MB7374 引脚 5(串行输出)连接到 LoRa-E5-mini 引脚 TX2(STM32WLE5JC 的 PA2)。请记住,串行只是输出,不需要输入。MB7374 引脚 7 (GND) 连接到 GND。我将 MB7374 引脚 6 (V+) 连接到开发板引脚 D0 (PA0)。待机状态下传感器的电流消耗太高,我决定在每次传输前使用 GPIO 来接通它。该引脚有一个用户标签 US_ENABLE(超声波启用)。我确保引脚可以提供足够的电流,阅读两个数据表,也通过测量。更稳健的解决方案需要使用晶体管来切换传感器。查看我的土壤水分指南以获取示例。
LoRa应用
主要设备逻辑位于文件 lora_app.c 中。SendTxData只是启用传感器,获取读数并准备一个缓冲区,其中包含要传输的实际字节,传输,然后进入睡眠(停止 2 模式),重复。
项目 repo 包含用于 The Things Stack 的 Javascript 上行链路解码脚本。
function decodeUplink(input) {
var bytes = input.bytes
return {
data: {
distance: ((bytes[0] & 0x80 ? 0xFFFF<<16 : 0) | bytes[0]<<8 | bytes[1]),
temperaturec: ((bytes[2] & 0x80 ? 0xFFFF<<16 : 0) | bytes[2]<<8 | bytes[3]),
voltage : (bytes[4]<<8 | bytes[5])
},
warnings: [],
errors: []
};
}
距离:到表面的距离,以毫米为单位。雪越多,数字越低。
temperaturec:这是 MCU 温度。这不应该是对设备周围环境的可靠测量,因为它旨在为某些 MCU 功能提供校准参考。该设备是防水的,进一步消除了对环境的敏感性。由于 MCU 做的工作很少,我仍然想看看它是否可以提供有用的数据。我在设备附近安装了一个可靠的温度传感器,到目前为止它们报告的温度非常相似。由于我的代码中的一个错误,温度值被报告为整数。
voltage:这应该是电池电压,是电池即将耗尽的指标。这是使用生成的函数 SYS_GetBatteryLevel 检索的。我认为这个函数是有问题的,因为它似乎报告了 MCU AREF。我将不胜感激关于如何实施的任何建议。
接收数据如果传输之后是 TTN 应用程序返回排队的下行链路消息,则触发。我已经实现了一个下行消息:传输间隔的配置。这使我能够更改测量之间的分钟数,从 0 到 65535。这允许最长约 45 天的睡眠时间。请注意,如果要更改间隔,请求将排队等待下一次计划的设备传输,所以要小心。在 The Things Stack 控制台中,您可以通过导航到设备、转到“消息”选项卡,然后转到“下行链路”来对下行链路进行排队。FPort 为 1,Payload 类型为 Bytes。您需要将分钟数格式化为两对十六进制数字,最高有效字节在前。例如“01FF”将对应于 511 分钟。由于懒惰,设备应用程序需要两对,
物联网 CLI
一旦将数据路由到 The Things Network,有数以千计的选项可用于处理数据。我在以前的指南中介绍了一些。在本指南中,我想重点介绍一种使用 The Things Network 命令行界面 (CLI) 调查几天的测量值的简便方法。
ttn-lw-cli use 1/au1/nam1>.cloud.thethings.network
最后使用OAuth2.0 登录。
ttn-lw-cli login
现在您可以进行查询以检索消息。由于它默认使用 gRPC protobuf,除了冷启动外,传输速度快如闪电。
ttn-lw-cli applications storage get "snowmonitor" --limit 10 --order "-received_at" --up.uplink-message.decoded-payload
将结果转储到一个 .json 文件中,您可以使用您最喜欢的绘图工具在本地进行漂亮的可视化。
功率分析
在整个开发过程中,我积极使用我信赖的 Qoitech Otii Arc来测量和比较更改硬件和代码时对电流消耗的影响。这使我能够系统地尝试不同的电源电压电平、天线设计、代码执行顺序等。一些有趣的观察:
- 让 ST Link 连接到开发板,但与计算机断开连接会导致更高的电流消耗。这促使我坚持进行测量,每次都断开 ST 链路。
- 自适应数据速率 (ADR) 需要一段时间才能优化。在我的设置中,我不得不等待大约 4-5 次传输以确保它已经稳定下来并且我正在比较苹果与苹果。在我的设置中,这是 DR5 (SF7BW125)。
- 一个简单的 8.6 厘米线天线的性能确实不如随附的鞭状天线。
- 一种可能的硬件设计在以 HF (868MHz) 传输时限制了非常低的功耗。
- 定期日志记录(VLEVEL_OFF = 非详细)对消耗没有显着的负面影响。
- 传输 UNCONFIRMED_MSG 似乎消耗更多电流 - 值得研究实施。
- LoRa-E5-mini 在最小 2.5v 稳压器输入电压下掉电。对于与 LS14500 电池一起使用,这很好,因为它具有非常平坦的放电曲线。
为了您的观赏乐趣,电源配置文件包含在回购协议中。
总之,我在睡眠期间实现了大约 73uA 的电流消耗。虽然与 SoC 宣传的 2uA 速率相去甚远,但这对于 PoC 来说还不错。开发板调节器可能占了大部分多余部分(数据表:通常为 55uA),其余部分为浮动引脚等。
传输峰值约为 80mA,参考。HF 问题。大约消耗 7uWh pr。传播。使用一个简单的计算器可以告诉我们,在这种情况下,每 15 分钟传输一次与每 60 分钟传输一次相比,差异微不足道。前者粗略估计电池寿命超过 3.5 年,远远超过设计定制电路之前进行测试所需的时间。
计算机辅助设计
这种概念验证显然需要在相当恶劣的条件下进行户外测试。我花了一半的项目时间来设计防水外壳并使用树脂 SLA 打印机 3D 打印它。容纳天线和传感器是一个很大的挑战,我最终设计了一个外壳,允许电子设备在拧入传感器的同时旋转。橡胶垫圈提供密封。
我首先对所有重要组件进行建模,这样可以节省大量迭代。
传感器采用奇怪的美国标准螺纹,NPT 美国锥管螺纹 (ANSI B 1.20.1) ,3/4"-14。什么?!我花了很多时间试图在 Fusion 360 中打一个匹配的孔,终于finding a plugin that would help. 每次更新 Fusion 360 时都需要安装此插件,非常蹩脚。
最终结果看起来就像光剑生了一个带管炸弹的孩子,但它似乎达到了目的。
3D打印
我相信这可以使用质量稳定的 FDM 打印机打印,但我认为您需要使用树脂涂层将其密封。使用优质 SLA 打印机(例如 Formlabs Form 3)的结果是打印过程非常顺利。我需要做一些迭代,因为我还没有弄清楚线程,我想添加一些文本以防它丢失。作为一项额外措施,我在天线开口周围添加了一些蓝色螺纹锁固剂。
结果
该设备已运行 14 天,传输了 1903 次测量值。令我惊喜的是,传感器并不像我担心的那样依赖与表面的直角。表面粗糙度似乎可以反射足够多的声波。它一直保持干燥,这是我另一个非常关心的问题。我计划让传感器测量更长的时间,然后返回平均值以提高准确性。我还必须制作一个更大的帽子来防止积雪,正如在一场特别严重的风暴中观察到的那样。
最后的想法和下一步
我曾希望尝试使用纽扣电池为裸露的 LoRa-E5 芯片供电。发现高频传输期间电流消耗的高尖峰促使我推迟使用电容器的实验,直到这个版本的 PoC 完成。定制的纽扣电池供电 PCB 将为减小整体设计的尺寸和复杂性带来巨大机遇。
- 带1 Wire温度传感器的低功耗LoRa节点
- NET Core LoRaWAN客户端使用Seeed LoRa E5模块
- 使用ST Cube编程器和IDE对LoRa E5迷你设备进行编程
- 基于Seedstudio的LoRa E5迷你板 0次下载
- 使用MQTT集成来监控控制基于LoRa E5的物联网设备
- 低功耗唤醒型传感器
- 台信接近开关传感器E5-D5NK-BH 8次下载
- 台信接近开关传感器E5-D5PK-BH 8次下载
- 低功耗无线传感器网络节点设计与实现 17次下载
- 单极霍尔开关/低功耗高频率霍尔电路传感器HAL249 27次下载
- 基于低功耗传感器解决方案 0次下载
- 基于低功耗的无线传感器网络设计 2次下载
- 低功耗无线传感器网络 6次下载
- 低功耗传感器解决方案 9次下载
- HSC-SR80雪深传感器产品使用手册
- 24G超低功耗雷达模块LD2410S功耗实测 1130次阅读
- FLIR E4、E5、E6和E8红外热像仪的性能特点及应用范围 2666次阅读
- 亚太天能科技E5/E5c指纹锁简介 6552次阅读
- 倾斜传感器的生活应用_倾角传感器如何使用 9556次阅读
- 无线压力传感器原理_无线压力传感器动态特性 2710次阅读
- 中国科学院开发出了多种低功耗小尺寸高性能的气体传感器 1295次阅读
- 深入理解低功耗无线传感器网络标准 2039次阅读
- 基于适用于地下隧道环境复杂的无线倾角传感器介绍 2389次阅读
- 低功耗高线性度CMOS温度传感器的原理及设计 4446次阅读
- 基于MEMS威廉希尔官方网站 和无线倾角传感器在地下隧道中的应用 2367次阅读
- 低功耗应用的MEMS加速仪传感器功能,如何将之利用在系统设计上 720次阅读
- 基于低功耗红外瓦斯传感器MIPEX和CC2430的无线瓦斯传感器节点设计 2002次阅读
- MAX12900高度集成的4-20mA传感器变送器,可节省20%空间、功耗降低50% 5701次阅读
- 低功耗无线PIR运动检测参考设计--TIDA-01476解决方案 3231次阅读
- 详解低功耗温度补偿式电桥信号调理器和驱动器电路 4572次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多