使用 RFM69CW 的徒步旅行数据记录器

老小孩
转载
发布时间: 2025-06-14 15:31:50 | 阅读数 0收藏数 0评论数 0
封面
这款徒步数据记录器用于记录徒步地点、开始和结束时间、温度、海拔和气压。它还会以声音形式报告徒步过程中的高度里程碑。 即使您对徒步旅行不感兴趣,您也可能会发现原理图、硬件和/或软件很有用。徒步旅行数据记录器由三个独立的设备及其 Arduino 项目组成。所有设备均使用 HopeRF RFM6

准备工作:

材料:

所有电路板均采用 Eagle 设计。

网关,值得注意的组件:

请参阅PCBWay上共享的电路板以获取完整的零件清单。

-ATmega1284P MCU

- 240x240 ST7789 RGB 显示器(源)

- RFM69CW 收发器(来源)

-USB CH340G串行

- USB 供电 TP4056 锂离子充电器,带有 FS8205A/DW01A 保护 IC

- LM3671 DC-DC 3v3 转换器(来源)

- YX5200-24SS MP3 播放器(与通用 DF 播放器模块中使用的 IC 相同)(来源)

- 8002A 单声道放大器连接至微型扬声器

- W25Q64FVSS 8MB SPI NORFLASH MP3 存储存储器(可以使用更小的尺寸,1MB 等)

- AT24C256N 32KB I2C EEPROM 扩展数据存储器(或更大,AT24C1024 等)

- DS3231 实时时钟

3 键遥控器,值得注意的组件:

请参阅PCBWay上共享的电路板以获取完整的零件清单。

主板

- ATmega644PA 或 ATmega1284P MCU

- 80x160 ST7735 RGB 显示器(源)

-RFM69CW收发器

- LM3671 DC-DC 3v3 转换器

USB 串行和充电板

请参阅PCBWay上共享的电路板以获取完整的零件清单。

-USB CH340G串行

- USB 供电 TP4056 锂离子充电器,带有 FS8205A/DW01A 保护 IC

BMP280 遥控器,值得注意的组件:

请参阅PCBWay上共享的电路板以获取完整的零件清单。

-ATtiny84A MCU

- BMP280 数字压力和温度传感器(来源)

-RFM69CW收发器

- LM3671 DC-DC 3v3 转换器

PDF
RFM69+Gateway+v1.2.pdf
50.45KB
PDF
USB+Serial+++Charger.pdf
24.19KB
PDF
BMP280+Remote+v1.0.pdf
18.86KB
PDF
3ButtonRemote+v1.0.pdf
22.00KB
1

详细介绍

三个设备:

  1. 网关 - 位于背包的顶部小袋中。 - 协调徒步数据的记录。 - 5 按钮 UI,带有多行 RGB 显示屏 - SD 卡插槽,用于下载已保存的徒步数据。 - 通过板载 MP3 播放器和微型扬声器提供高度里程碑通知。 - USB 串行和 10440 锂离子 3.7V 600mAh AAA 型电池,带板载充电器 - 3D 打印外壳 - 8 x 8 x 1.5 厘米
  2. BMP280 遥控器 - 挂在背包背面 - 每 4 秒广播一次温度和压力更新。 - 网关和 3 按钮遥控器使用压力读数来计算高度。 - 10440 锂离子 3.7V 600mAh AAA 电池,一次充电可使用数月。 - 3D 打印外壳 - 防水 - 8 x 5 x 1.5 厘米
  3. 遥控器 - 放在容易拿取的口袋中 - 控制并显示有关网关功能子集的信息。 - 3 按钮 UI,带多行 RGB 显示屏。 - USB 串行和 10440 锂离子 3.7V 600mAh AAA 型电池,带充电器 - 3D 打印外壳,按钮足够大,可与冬季手套一起使用 - 8 x 6 x 1.8 厘米

网关最多可存储 125 次徒步的摘要。之后,它会覆盖最旧的摘要。可以将更详细的徒步数据下载到 SD 卡中,每次徒步都存储为单独的文件。详细数据是每 4 秒记录一次的温度和压力。

除了基本的 Arduino 类之外,我没有编写的唯一软件是控制 RFM69 收发器和 SD 卡的类。

- Felix Rusu 的 RFM69 库 版权所有 Felix Rusu 2016


- Bill Greiman 的 SdFat 库 版权所有 Bill Greiman 2011-2018

本项目中使用的 Mac OS 实用程序应用程序:

请注意,下面所有的存储库都包含一个构建的应用程序(zip 文件)。

- SubsetFontCreator - 为 1 位或 RGB 显示创建字体子集作为压缩位图数据(RGB 是抗锯齿的,1 位不是)。

- SerialHexLoader - 用于通过 ISP 串行设置设备上的各种参数,以及导出二进制文件的 IntelHex 表示形式。

- FatFsToHex - 用于创建 FAT16 磁盘映像,以便在 NORFLASH 芯片上存储 MP3 数据。

- HikeLoggerUtility -(尚未发布,仍在编写中)用于解释和显示网关记录的详细徒步数据。它也是添加、编辑和导出徒步地点名称和海拔数据以加载到网关的地方。

除了收发器外,没有购买其他模块。我设计并制作了所有四块电路板。

使用摘要:

通过网关的 UI 设置徒步旅行的开始和结束位置。设置完成后,网关可以放在您的背包中。3 键遥控器用于开始、停止、暂停、恢复和标记徒步旅行已完成。3 键遥控器可以执行的唯一位置设置操作是交换开始和结束位置(就像您返回时所做的那样)。

3 键遥控器控制网关上可用的部分功能。遥控器显示当前时间、温度和海拔。记录徒步时,遥控器显示徒步的耗时和完成百分比(以海拔增加或减少为单位)。

网关记录的内容:

网关大约每 4 秒从 BMP280 遥控器接收一个数据包。此数据包包含当前气压和温度。记录徒步旅行时,此数据包数据将写入串行 EEPROM IC。当徒步旅行被标记为完成(UI 中的操作)时,日志将终止并设置要附加的下一个徒步旅行日志。插入 SD 卡后,完成的徒步旅行将保存到 SD 卡。系统会提示您“保存到 SD”。如果您随后按 Enter 键,当前在 EEPROM 中的日志将作为单独的文件写入 SD 卡。写入成功完成后,将显示“已保存”消息。当您移除 SD 卡时,您可以选择删除 EEPROM 上的日志。您必须在 UI 中明确选择“是”才能执行此操作。从 EEPROM 中删除日志不会影响存储的徒步旅行摘要,只会影响详细的徒步旅行日志数据。

使用 Mac 上的 HikeLoggerUtility 应用程序(尚未发布)来解释日志数据文件。HikeLoggerUtility 使用压力读数来计算每个样本的高度,显示温度随时间/高度的变化情况以及上升或下降的速度。HikeLoggerUtility 还允许您向日志添加元数据,例如当天的天气状况(多云/晴天/下雪/下雨/刮风),以及您穿了什么衣服以及您是否舒适。我发现这有助于决定在冬季徒步旅行时穿什么衣服。您可以查找在给定范围内的预期起始温度下您穿的衣服。

始终存储在网关上的摘要数据只能通过 USB 串行端口发送摘要重置命令来删除。这将删除摘要环形缓冲区中存储的所有摘要。摘要仅存储超过 75% 里程碑的远足。这消除了意外开始的日志摘要的写入。请注意,75% 里程碑规则仅适用于摘要。所有日志(无论是否意外)都保存到 SD 卡中。

网关报告的里程碑:

网关会在达到每个里程碑时播放 MP3 剪辑。里程碑分别为 25%、50% 和 75%。里程碑粒度可在代码中轻松更改为 100 的任意整数因子。我已将网关设置为在所有里程碑时播放 Mac OS“Glass”声音。您可以为每个里程碑播放不同的 MP3。当 MP3 播放完毕时,电路板的 MP3 部分将关闭以节省电量。

更多细节:

网关显示:

网关显示屏为文本显示,没有图标。显示分辨率约为每毫米 10 点,相当高,高于许多计算机显示器。例如,我的带 Retina 显示屏的 MacBook Pro 约为 5 ppmm。因此,使用的字体是抗锯齿的。240x240 网关显示屏价格为 1.60 美元,性价比很高。

XFont 类:

我查看了各种可用的 Arduino 字体渲染库,并决定编写自己的名为 XFont 的库。XFont 库对底层显示硬件和字体存储没有任何假设。所有显示类都派生自一个公共基类。字体数据可以存储在任何地方;闪存、串行 EEPROM 等。您只需提供一个流类来访问数据。字体类在 Arduino 代码中使用时做出的唯一存储假设是标题和字形查找表存储在 MPU 的闪存 (PROGMEM) 中。这些结构非常紧凑。

SubsetFontCreator 应用程序:

XFont 使用的字体数据由我的 SubsetFontCreator Mac OS 应用程序创建。SubsetFontCreator 使用开源 FreeType 库创建字体可用字体字形的紧凑子集,作为位图数据。例如,如果您正在为时钟编写代码,则只需要显示时间所需的 14 个字形(0 到 9、冒号和字母 A、M 和 P)。生成的字形数据针对 1 位和 8 位数据进行压缩。有关如何压缩数据的更多信息,请参阅 GitHub 上的 Readme.md

SubsetFontCreator 可以生成二进制文件、C++ 头文件或两者。生成的头文件包含样板代码,使将字体合并到 Arduino 草图中更加容易。数据可以是 1 位或 8 位。1 位数据所需的空间比 8 位少得多。8 位数据用于高分辨率显示器,当您有足够的内存来存储数据时,用于生成抗锯齿文本。作为字体类如何与存储无关的一个例子,Arduino 代码中使用的相同类用于在 SubsetFontCreator Mac OS 应用程序中创建所见即所得的字体样本。只需要几个显示和存储子类来支持 Mac。能够在 Mac 上调试字体类使其更易于维护。

有关 XFont 和 SubsetFontCreator 的更多信息,请参阅GitHub 上的SubsetFontCreator存储库。

PCBWay 上共享的电路板包括: 徒步数据记录器网关板 3 按钮遥控板 BMP280 遥控板 USB 串行 + 锂离子充电器板


2

组装电路板

我写过几篇教程,其中有一步一步的说明如何使用表面贴装设备 (SMD) 组装电路板。在本教程中,我将仅详细描述 3 键遥控板的组装以及如何焊接网关板的显示电缆。组装好一块 SMD 电路板后,您应该能够将其应用于大多数其他电路板。

3

组装3按钮遥控板

以下是组装电路板(或几乎任何小型电路板)的说明。如果您知道如何组装 SMD 电路板,请跳至步骤 9。

我用一小块木头作为安装块,将电路板楔入两块废弃的原型电路板之间。原型电路板用双面胶带固定在安装块上(PCB 本身没有胶带)。

4

涂抹焊膏并放置SMD零件

将焊膏涂到 SMD 焊盘上,使所有通孔焊盘裸露。我通常从左上角到右下角涂抹,以尽量减少弄脏已涂抹的焊膏的机会。如果确实弄脏了焊膏,请使用无绒抹布,例如卸妆用的抹布。避免使用 Kleenex/纸巾。控制涂抹到每个焊盘上的焊膏量是您通过反复试验掌握的。您只需在每个焊盘上涂抹一小点。涂抹量的大小与焊盘的大小和形状有关(大约 50-80% 的覆盖率)。如有疑问,请少用。对于彼此靠近的引脚,如 TSSOP 封装中的任何引脚,例如网关上的 LVC125A,您可以在所有焊盘上涂抹非常薄的条带,而不是尝试在每个非常窄的焊盘上涂抹单独的一小点。当焊料熔化时,阻焊层会导致焊料迁移到焊盘,就像水不会粘附在油性表面上一样。焊料会形成珠状或移动到具有裸露焊盘的区域。

特殊情况:组装网关或 3 键遥控器时,将焊膏涂在电路板的显示板上,但不要放置显示器

特殊情况:BMP280 遥控板上的 BMP280 传感器很小,我发现最好将焊膏(非常少量)涂抹到每个焊盘上,而不要将传感器直接放在焊膏上。焊料融化后,请按照下一步中的 BMP280 传感器说明进行操作。

可选特殊情况:在此步骤中,我尚未放置或涂抹 RFM69CW 模块的焊膏。我更喜欢在将热风枪应用到所有其他部件后焊接 RFM69CW。

免清洗助焊剂:(来源)

我使用低熔点焊膏(熔点 137°C):(来源)

放置 SMD 部件。轻敲每个部件,确保其平放在电路板上。放置部件时,我会用两只手来帮助精确放置。

如上所述,请勿将 BMP280 传感器直接放置在焊膏上。

5

使用热风枪

将焊枪垂直于电路板,距离电路板约 4 厘米。前几个部件周围的焊料需要一段时间才能开始熔化。不要试图通过将焊枪移近电路板来加快速度。这通常会导致部件四处飞散。焊料熔化后,移至电路板的下一个重叠部分。绕着电路板操作。我在电路板上移动时使用镊子将部件调整到位。

我使用 YAOGONG 858D SMD 热风枪。(在亚马逊上售价不到 40 美元。)包装内含 3 个喷嘴。我使用最大的(8 毫米)喷嘴。这种型号/款式由多家供应商制造或销售。重要的数字是 858D。我到处都看到过评级。这把枪对我来说效果很好。对于 137°C 低温焊料,我将热风枪设置为 235°C

显示器专用板组装技术

焊料融化后,就可以在这里安装显示器了。在显示器电缆焊盘上涂一层非常薄的免清洗助焊剂。使用双面胶带将显示器电缆固定在显示器金属框架上,以将显示器电缆固定在电路板焊盘上方。使用铅笔头烙铁,轻轻擦拭显示器电缆裸露侧的每个焊盘,重复操作,直到显示器电缆平放在电路板上。使用一块窄的 PCB 压住电缆进行焊接。我发现这种方法比尝试使用热风枪效果更好。

焊料熔化后,您就可以将 BMP280 传感器安装在 BMP280 传感器板上。此时,BMP280 的焊盘上应该只有轻微的焊料熔化凸起。在传感器的底面上涂上一层非常薄的免清洗焊膏。将传感器放在板上。使用热风枪并轻敲传感器,直到焊料熔化。如果操作正确,您应该会看到每个焊盘上的传感器下方都有最小的焊珠流出。

让电路板稍微冷却后,我更喜欢在这里安装 RFM69CW。将焊膏涂在 RFM69CW 焊盘上,放置 RFM69CW 模块,然后重新使用热风枪。请注意,当电路板变热时,焊膏会迅速扩散,因此如果您执行这种特殊情况,请注意需要小心将焊膏涂在变热的电路板上。

6

清洁/去除SMD助焊剂

我使用的焊膏被宣传为“免清洗”。您确实需要清洁电路板,这样看起来会好很多,并且可以去除电路板上的任何小焊珠。在通风良好的空间中,戴上乳胶、丁腈或橡胶手套,将少量助焊剂去除剂倒入小陶瓷或不锈钢盘中。重新密封助焊剂去除剂瓶。使用硬刷,将刷子轻轻浸入助焊剂去除剂中并擦拭电路板的某个区域。重复操作,直到完全擦洗电路板表面。为此,我使用枪式清洁刷。刷毛比大多数牙刷都要硬。

特殊情况:这可能没关系,但我用拇指将电路板放在 BMP280 气孔上,以防止助焊剂去除剂进入传感器内部。

我使用的助焊剂去除剂:MG Chemicals 4140 或 4140A。请注意,使用该产品后,电路板可能会显得有点粘。我发现,在产品完全蒸发后(可能需要一个小时或更长时间),粘性薄膜会变成白色灰尘,很容易从电路板上擦掉。

7

放置并焊接所有通孔部件,清理通孔销

待助焊剂去除剂从电路板上蒸发后,将所有通孔部件从最短到最长逐一放置并焊接。

很长一段时间以来,我都没有在我制作的任何电路板上安装 ICSP 接头。我改用测试探针弹簧针,要么连接到测试夹具,要么插入 2x3 杜邦外壳。有关 DIY 测试夹具的示例,请参阅:PCB 测试夹具

使用平口钳修剪电路板底面上的通孔针脚。这样做可以更轻松地去除助焊剂残留物。

为了获得美观的外观,请在剪切后重新加热通孔引脚上的焊料。这可以去除平切刀留下的剪切痕迹。

使用与步骤6相同的清洁方法,清洁电路板的背面。

此时,应按照原理图和零件清单组装所有 4 块电路板。

8

打印 3D 部件

网关案例:RFM69 网关

3 键遥控器外壳:RFM69 3 键遥控器

BMP280 外壳:RFM69 BMP280 遥控器

BMP280 链接包含一个允许充电的新底座设计。

9

下载软件在BMP280遥控器上加载软件

从 GitHub 下载软件:

ArduinoHikingLogger

ArduinoHikingLogger 存储库包含 HikingLoggerGateway 和 HikingLoggerRemote 草图的源代码。编译这两个草图时,请确保编辑 Arduino Preferences Sketchbook 位置以指向 ArduinoHikingLogger 文件夹。

网关和 3 按钮遥控器上的 MCU 是 ATmega1284P。为了编译此 MCU 的软件,您需要安装 MightyCore 板管理器。您可以通过在 Arduino 首选项中的附加板管理器 URL 中添加“https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json”来安装它。

将 /dev/cu.usbserial-14420 替换为连接到主板的实际端口。

Arduino-Tiny

Arduino-Tiny 存储库包含我的几个 ATtiny 相关草图的源代码。您感兴趣的草图是 BMP280Remote。编译此草图时,请确保编辑 Arduino Preferences Sketchbook 位置以指向 Arduino-Tiny 文件夹。

BMP280 遥控器上的 MCU 是 ATtiny84A。为了编译此 MCU 的软件,您需要安装 damellis/attiny 板管理器。您可以通过将“https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json”添加到 Arduino 首选项中的附加板管理器 URL 来安装它。

将 /dev/cu.usbserial-14420 替换为连接到主板的实际端口。

首先设置 ATtiny84A 的保险丝:

命令行中的保险丝设置(见下文)将 ATtiny84A 设置为使用 8MHz 的内部谐振器。这些保险丝设置还可以防止在下载新草图时擦除 EEPROM。许多默认保险丝设置不会这样做。

我使用 ISP 来实现这一点,特别是我设计的那个(参见AVR 编程器)您可以使用任何 AVR ISP,例如 Arduino 作为面包板上构建的 ISP,只要它是 3v3。请参阅 Arduino IDE 示例菜单中的 Arduino 作为 ISP 示例,了解 DIY ISP。

非常重要:您必须使用 3v3 ISP,否则将损坏电路板上的组件。

以下是 Mac OS 说明。

打开 BBEdit 工作表(您也可以从终端窗口执行此操作。)请注意,不应通过 Arduino IDE 加载 ATtiny84A 的引导加载程序。所有软件都通过 BMP280 板上的 ICSP 连接器通过 ISP 加载。

将 BMP280 板上的 SPDT 开关设置为“OFF/PROG”。这会将电路板的电源重新路由至 ICSP 电缆并禁用 RFM69CW 模块。如果 RFM69CW 模块未被禁用,它将干扰 ISP。

将 6 针 ISP 电缆从电路板上的 ICSP 接头连接到 3v3 ISP 上的连接器。

在 BBEdit 工作表或终端应用程序中运行:

/应用程序/Arduino\ 1.8.10.app/Contents/Java/hardware/tools/avr/bin/avrdude -C /应用程序/Arduino\ 1.8.10.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -p t84 -P /dev/cu.usbserial-A603R1VD -c avrisp -b 19200 -U lfuse:w:0xe2:m -U hfuse:w:0xd7:m -U efuse:w:0xff:m

您的 Arduino 应用程序的路径应该代替“/Applications/Arduino\ 1.8.10.app”。

上面的 /dev/cu.usbserial-A603R1VD 应该替换为连接到您的 ISP 的任何 USB 串行端口。

设置网络和节点 ID:

所有 3 个主板应具有相同的网络 ID。选择 1 到 254 之间的一个值。

所有 3 个板都需要一个唯一的节点 ID。网关应为 ID 1,3 按钮遥控器应为 2,BMP280 遥控器可以是大于 2 的任何值。

代码在草图的 setup() 例程中从 EEPROM 读取网络和节点 ID。以下说明定义了如何使用 SerialHexLoader 应用程序在 EEPROM 中设置这些 ID。设置这些 ID 的另一种方法是用硬编码值替换 setup() 中读取 ID 的代码。

使用连接到电路板 ICSP 连接器的 3v3 ISP 的 SerialHexLoader 应用程序,从命令菜单中选择“设置 NodeID…”。这将显示一个包含两个字段的对话框。输入节点和网络 ID。按下 OK 后,这将向 ISP 发送几个 AVR STK500 命令,以将两个 ID 写入从地址 2 开始的 MCU 的 EEPROM。您将在实用程序日志视图中看到成功或失败。

同样的程序用于设置网关和 3 键遥控器的节点和网络 ID。如上所述,网关应为 ID 1,3 键遥控器应为 ID 2,BMP280 节点 ID 可以是大于 2 的任何值。所有 3 个板共用的网络 ID 对于该组设备来说应该是唯一的。

上传 BMP280Remote 草图: 使用与步骤 10 相同的设置,使用 Arduino IDE 通过 ISP 上传 BMP280Remote 草图。上传后,将 BMP280 板上的 SPDT 开关设置为“ON”。

10

组装遥控器、网关、遥控器

上面的第二张图片展示了另一种外壳设计,其中包含一个充电插头。插头只需接入外壳内的正极和负极电线即可。查看thingiverse 链接以查看此设计以及一个用于容纳廉价锂电池充电器的小外壳。

部分:

(6)M2x4mm 内六角圆头螺钉(ISO7380)(来源)

(1)11x7x2mm 丁腈橡胶(又称 NBR)O 形圈(来源)

~22cm 1.5 直径橡胶垫圈材料。(又名橡胶首饰绳)(来源)

(1)28 毫米挡圈(来源)

(1)一套(+ 和 -)AA/AAA 电池弹簧板 10x9mm 板尺寸(来源)

(1)带有 IPEX 连接器的 433MHz 40x7mm PCB 天线(来源)

7cm 26awg 红线

4cm 26awg 黑色电线

直径 2 毫米的丙烯酸棒(用作板上 LED 的导光板)(来源)

(1)10440 AAA 型 600mAh 3.7V 锂离子电池(已充电)

LED导光板的准备与安装:

将位于底座下部中心附近的孔扩孔至丙烯酸棒的直径。我找到的 2 毫米棒实际上直径为 2.2 毫米。使用带有 500 号砂纸的打磨块,将丙烯酸棒的一端打磨光滑并修整成方形。将电路板暂时安装在底座中,将棒插入孔中,直到它与电路板上的 LED 接触。使用平口钳,将棒剪至与底座齐平。取出电路板和切割棒。将棒的切割端打磨光滑并修整成方形。混合少量塑料环氧树脂并将其涂抹在棒孔上。插入棒,直到它与底座表面齐平。清理任何残留的环氧树脂。放在一边等待它固化。

安装盖垫圈:

使用小型平头钝螺丝刀,将 1.5 毫米垫片材料放入底座内部的通道中。将垫片切割成合适的尺寸。

电池弹簧板的准备和安装:

在每个电池板的弹簧/电池侧焊接红色和黑色电线。将标签折叠到每个板的背面。按照照片所示插入电池板。放置电路板以确定所需的长度。将电线剪至适当长度并留出一些余地。将电线焊接到电路板的元件侧。(红色 +,黑色 -)

如图所示,将电池板滑入电池仓槽。

安装天线:

撕掉天线双面胶上的保护层。将天线放置在底座中,如图所示。将 IPEX 连接器连接到电路板上。

确保电路板上的开关已设置为 ON。

按照照片所示放置 O 形圈。使用两个 M2x4mm 螺钉安装电路板。

使用四颗 M2x4mm 螺丝安装电池和后盖。

在将电路板安装到外壳中之前,刻录引导加载程序会更容易。网关最初使用 ATmega644PA MCU,但由于库的变化,代码不适合,所以我改用 ATmega1284P。3 按钮遥控器可以使用任一 MCU。按照步骤 10 中的说明设置 Arduino IDE。

连接您的 3v3 ISP/编程器并在工具菜单中选择相应的串行端口。

在工具菜单中选择您的 ISP/程序员。

非常重要:您必须使用 3v3 ISP,否则将损坏电路板上的组件。

对于每个板:

将 ISP 连接到电路板上的 ICSP 接头后,在工具菜单中选择 Burn Bootloader。

如果一切都连接并配置正确,您应该在草图日志窗格中收到成功消息。

这也是为这些板设置网络和节点 ID 的好时机。按照步骤 11 中的说明进行操作。

11

创建位图字体

因为我并不拥有该项目中使用的字体,所以您需要使用我的 SubsetFontCreator 应用程序来创建字体位图 C++ 标头。

启动 SubsetFontCreator。

从 SubsetFontCreator 主窗口顶部的字体路径控制弹出窗口中选择“选择...”。

导航到 /Library/Fonts 文件夹并选择 MyriadPro-Regular.otf

数据弹出窗口应设置为 1 位。(所用的 MCU 有 64Kb 闪存。RGB 抗锯齿数据加上编译后的代码不适合。如果您想使用 RGB 抗锯齿,请将 MCU 更改为此系列 MCU 的 128Kb 版本。)

将大小设置为 36。

子集字符串应为“ !%)-:@!--?A[]]mm°°”,不包括引号。请确保包含前导空格。此外,由于 Instructables HTML 解释器中存在错误,请将“@”替换为“<”。它不喜欢引号内的小于号字符。

或者,您可以使用帮助对话框并粘贴 !%&'()-./0123456789:<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]m°,并带有前导空格。

这定义了要导出为位图数据的字形集。

从文件菜单中选择导出…。格式应设置为 C++ Header。

将文件 MyriadPro-Regular_36_1b.h 保存到 HikingLoggerGateway 草图文件夹。

如果 fontHeader 的 numCharCodes 字段为 55,则表示您已经生成了正确数量的字符代码。

对于剩下的两种字体,将数据弹出窗口设置为 RGB 抗锯齿。

AM 和 PM 字符串绘制为 18 pt 文本。通过将 Size 更改为 18 并将子集字符串更改为“AAMMPP”(不包括引号)来创建此位图标题。确保包含 2 个前导空格。

将文件 MyriadPro-Regular_18.h 导出到 HikingLoggerGateway 草图文件夹。

3 按钮遥控器的字体大小比网关的字体小,因为显示器每毫米的像素较少。

将字体大小设置为 24,将子集字符串设置为“ !%)-:@!--?A[]]mm°°”(与网关相同)由于 Instructables HTML 解释器中存在错误,请将“@”替换为“<”。它不喜欢引号内的小于号字符。

将文件 MyriadPro-Regular_24.h 导出到 HikingLoggerRemote 草图文件夹。

将字体大小设置为 14,将子集字符串设置为“ AAMMPP”(与网关相同)

将文件 MyriadPro-Regular_14.h 导出到 HikingLoggerRemote 草图文件夹。

因为远程显示需要 3 行文本,所以将 MyriadPro-Regular_24.h 中的 fontHeader 行高从 29 更改为 26


部分:

(11)M2x4mm 内六角圆头螺钉(ISO7380)

(2)M2x12mm 内六角圆头螺钉(ISO7380)

(1)一套(+ 和 -)AA/AAA 电池弹簧板,10x9mm 板尺寸,~14x9 包括焊片,9mm 宽

(1)433MHz 40x7mm PCB 天线,带 IPEX 连接器

8cm 26awg 红色/黑色粘合线(来源)

5cm 26awg 红线

5cm 26awg 黑色电线

(3)不同颜色的 4cm 26awg 电线(我用的是白色、粉色和紫色)

(1)直径 40 毫米、厚度 1 毫米的丙烯酸圆盘。(来源)

(1)直径 1 毫米 x 5 厘米不锈钢棒(或 16 awg 实心铜线)(来源)

直径 2 毫米的丙烯酸棒(用作 LED 的光导)

(1) 10440 AAA 3.7V 锂离子电池

(1)40mm 显示模板/面罩/安装指南(3ButtonRemoteFace.PDF)

3M 通用 45 喷胶或其他适用于纸张的喷胶。(来源)

安装显示器:

将保护膜保留在显示屏表面直到最终安装。

如照片所示,沿着电路板的上边缘放置一块 6 毫米宽的电工胶带。

如图所示,贴上一层双面胶带。

以印刷在板上的轮廓为指导,将显示内容放置/粘贴到板上。

准备和安装丙烯酸表面:

打印附件 3ButtonRemoteFace.PDF

按照轮廓小心地剪下其中一个打印面。

按照喷胶说明,在剪下的印刷面上喷一层薄薄的喷胶。

去掉丙烯酸盘一侧的保护性塑料薄膜。

小心地将印刷面放置/粘贴到丙烯酸盘的暴露面上。

将磁盘安装到虎钳中,使印刷面边缘的凹痕露出来。

使用链锯锉或其他精细圆锉,将丙烯酸锉至与印刷的凹痕相匹配。

对第二个较小的凹痕重复上述操作。请注意,这些凹痕用于对齐磁盘,因此准确性很重要。

将磁盘预先安装在底座中。

将圆盘固定在底座中,用美工刀刻划 30 毫米底座圆圈,力度要足以切割保护性塑料薄膜且不会损坏丙烯酸。

从底座上取出圆盘,小心地除去上一步中形成的外圈塑料薄膜,保留中心 30 毫米的保护性塑料薄膜圆圈。

混合少量塑料环氧树脂并将其抹在丙烯酸盘的外环上。

按下并对齐底座中的丙烯酸圆盘。

轻轻地去除从磁盘两侧挤出的环氧树脂,注意不要将环氧树脂涂抹到暴露的矩形纸窗上。

使用三个 M3x4mm 螺钉临时安装板,对丙烯酸盘施加压力,然后将底座放在一边,直到环氧树脂固化。

固化后,小心地去除剩余的保护膜。这也会去除丙烯酸表面上任何残留的环氧树脂。

对于 USB 串行充电器板状态 LED 上方的 4 个盖孔中的每一个,请按照步骤 12 中描述的说明准备和安装 LED 导光板。

按照步骤 12 所述,将单独的红线和黑线焊接到电池板上。

将电池电缆的另一端焊接到 USB 串行充电器板上,如照片所示。

将粘合的红色/黑色电源线焊接到主板上,如照片所示。

将红色/黑色电源线的另一端焊接到 USB 串行充电器板上,如照片所示。

如图所示,将剩余的 3 根电线焊接在 USB 串行充电器板和主板之间。(DTR、TXD、RXD)

安装天线:

撕掉天线双面胶背衬上的保护层。

将天线放置在底座中,如照片所示。

将 IPEX 连接器连接至主板。

确保 USB 串行充电器板上的开关设置为 ON。当此开关处于其他位置时,DTR 将不会在上传草图时根据需要重置电路板。

撕掉显示屏上的保护膜。

使用 6 个 M2x4mm 螺丝安装 USB 串行充电器板和主板。

组装并安装按钮:

通过移除按钮臂上的支撑材料来清理按钮印刷品。

将 1 毫米不锈钢棒切成三段 15 毫米的段。要切割棒,请使用表面非常坚硬的切割器。不要使用专为铜设计的切割器,否则会损坏切割器。只需在棒上刻一个凹痕即可。使用两个钳子,在凹痕处折断棒。

使用 15 毫米杆件将每个按钮连接到按钮板上。

如照片所示,将按钮板按入底座。

如图所示,将电池板滑入电池仓槽。

安装电池。

使用剩余的 M2 螺钉安装后盖。您可能需要等待此步骤,直到成功加载软件。在不夹住电池线的情况下盖上盖子有点棘手,但可行。我用镊子定位电线,这样在关闭盖子时它们不会被夹住。我一直没有机会改变设计,为这些电线留出更多空间。


12

组装网关

部分:

(7)M2x4mm 内六角圆头螺钉(ISO7380)

(1)一套(+ 和 -)AA/AAA 电池弹簧板,10x9mm 板尺寸,~14x9 包括焊片,9mm 宽

(1)433MHz 40x7mm PCB 天线,带 IPEX 连接器

5cm 26awg 红线

5cm 26awg 黑色电线

(1)14x20mm 扬声器(源)

(1)30x30mm 1mm 厚的方形亚克力板。(来源)

直径 2 毫米的丙烯酸棒(用作 LED 的光导)

(1) 10440 AAA 3.7V 锂离子电池

(1)2 针 Micro JST PH 2.0 连接器及针脚(来源)

集会:

注意:上图显示的是 1.0 版主板。最新版本 v1.2 使用 RTC 芯片。两者的组装方式相同。

将保护膜保留在显示屏表面直到最终安装。

将双面胶带贴在显示屏轮廓内的板上。

以印刷在板上的轮廓为指导,将显示内容放置/粘贴到板上。

通过移除所有支撑材料来清理基础打印件。顶壁上的所有切口(SD、USB 和开关)中都有支撑材料。电池仓侧面的扬声器支架插槽中也有支撑材料。

在底座正面扩出两个 3 毫米 LED 孔。

按照步骤 12 中的说明,在底座前面铰孔并安装四个 2 毫米杆 LED 导光板。

准备和安装 30x30mm 丙烯酸表面:

将丙烯酸表面预先安装在底座上。

将丙烯酸表面固定在底座上,用美工刀在外面划方形,力度要足以切开保护性塑料薄膜,且不会损坏丙烯酸。

将表面从底座上取下,并小心地除去上一步中形成的外层塑料薄膜,留下中心的 24x24 毫米方形保护塑料薄膜。

混合少量塑料环氧树脂并将其抹在丙烯酸表面的外边缘上。

按下并对齐底座中的丙烯酸表面。

轻轻地清除从脸部两侧挤出的环氧树脂。

使用四个 M3x4mm 螺钉临时安装板,对丙烯酸表面施加压力,然后将底座放在一边,直到环氧树脂固化。

固化后,小心地从两侧取下剩余的保护膜。这也会去除丙烯酸表面上任何剩余的环氧树脂。

安装 14x20mm 扬声器

扬声器线可以直接焊接到电路板上,也可以使用微型 JST PH 2.0 连接器。如果使用连接器,请将引脚压接到扬声器线上。将引脚插入连接器,并与照片中显示的极性相匹配。

撕掉扬声器双面胶背板上的保护层。将扬声器按照照片所示放置在底座上。

使用一颗 M2x4mm 螺钉,按照照片所示安装扬声器支架。请注意,支架的另一端适合电池仓侧面的插槽。

按照步骤 12 所述,将单独的红线和黑线焊接到电池板上。

将红线和黑线焊接到电路板上的电池连接处,如照片所示。

如图所示,将电池板滑入电池仓槽。

安装电池。

去除丙烯酸表面和显示屏上剩余的保护膜。

使用四颗 M2x4mm 螺丝安装电路板。

13

上传草图和网关模式说明

3 键遥控器和网关均有 USB 串行端口,可用于加载草图。使用步骤 10 中定义的设置,打开 HikingLoggerGateway.ino 和 HikingLoggerRemote.ino 并将其上传到其相应的电路板。如果您能够构建任一电路板,我会假设您知道如何完成此操作。

有关如何将 MP3 文件加载到网关的说明,请参阅FatFsToHex自述文件。

网关有几种模式:日志、起始位置选择、结束位置选择、查看徒步旅行、设置时间、测试 MP3、保存到 SD 卡、BMP280 同步和重置日志内存。

并非所有模式都随时可用。仅当您插入 SD 卡时,“保存到 SD 卡”才可用,并且只有在移除卡后才能退出。仅当同步状态发生变化(成功、失败、重试)时,BMP280 同步才可用。重置日志内存仅在弹出 SD 卡后立即可用。在远足日志进行过程中,无法选择起始/结束位置、设置时间和测试 MP3。

向上和向下按钮用于循环显示可用模式。

唤醒/睡眠:同时按下左、右按钮将唤醒处于睡眠状态的显示屏,或使其进入睡眠状态(如果已唤醒)。显示屏还将在 90 秒后自动进入睡眠状态。

日志模式:

控制开始、停止、恢复、结束日志以及交换开始和结束位置。

对于所有日志模式的状态,时间、温度和海拔都会显示在底部两行。温度可以以摄氏度或华氏度显示。海拔可以以米或英尺显示。

当日志未处于进度时,日志模式将以绿色显示起始位置,以红色显示结束位置。

当日志处于进度日志模式时,将显示经过的时间以及海拔增益或损失的完成百分比。

左、右按钮用于循环可用的操作。

要选择操作,请按下中央按钮,输入。

起始位置选择模式:

用于选择起始位置。

左、右按钮用于循环浏览可用位置。

要选择(更改)位置,请按中央按钮,输入。如果您更改模式而不按输入,则不会发生任何变化。

结束地点选择模式:

用于选择结束位置。

左、右按钮用于循环浏览可用位置。

要选择(更改)位置,请按中央按钮,输入。如果您更改模式而不按输入,则不会发生任何变化。

回顾徒步模式:

用于查看最近 125 条徒步摘要。

中央按钮可切换显示的摘要数据。第一个屏幕显示出发和结束地点、海拔和温度。第二个屏幕显示出发和结束时间、星期几和徒步时长。两个屏幕的第一行列出了徒步日期。

左、右按钮用于循环浏览已保存的徒步摘要。

SD 卡模式:

仅当插入 SD 卡时才会进入此模式,并且只有取出 SD 卡才能退出。

在此模式下您可以执行三项操作:

- 将徒步日志作为二进制文件保存至 SD。

- 将徒步地点作为 CSV 文件保存至 SD。

- 通过 CSV 文件从 SD 更新徒步旅行地点。

保存徒步日志:插入 SD 卡时,会显示提示“SAVE TO SD”。按 Enter 键启动保存。保存完成后,会显示“SAVED”。然后您需要取出 SD 卡。如果在弹出 SD 卡之前按下任何按钮,则会显示提示“EJECT SD CARD”。

一旦 SD 卡被弹出并且数据成功写入 SD,就会进入重置日志内存模式,否则就会进入日志模式。

保存徒步地点:插入 SD 卡时,会显示提示“SAVE TO SD”。按右键将操作更改为“SAVE LOCS”。按 Enter 启动保存。按 Enter 启动保存。保存完成后,会显示“SAVED”。然后您需要取出 SD 卡。SD 现在将包含文件 HikeLocations.csv。请注意,海拔以英尺为单位。无法在 CSV 文件中将单位更改为米。

更新和添加徒步地点:始终按照上一个操作说明中的说明保存一份新的 HikeLocations.csv 副本。此 CSV 文件有两个可编辑字段,即名称和海拔。

重要提示:对于现有条目,不应编辑 ID 字段。ID 字段由审核徒步模式和日志模式使用。审核的徒步摘要通过此 ID 引用位置信息,因此更改此 ID 将导致摘要信息错位。

要添加新位置,请将 ID 设置为 999 并填写其他两个字段。

要删除现有条目,请将海拔设置为 0。

编辑和添加完成后,插入包含修改后的 HikeLocations.csv 的 SD 卡,更新网关上的位置。插入 SD 卡时,会显示提示“SAVE TO SD”。按左键将操作更改为“UPDATE LOCS”。按 Enter 键启动保存。保存完成后,会显示“UPDATED”。然后您需要取出 SD 卡。

重置日志记忆模式:

仅当成功将日志数据保存到 SD 后弹出 SD 卡时才输入。

顶行显示 RESET LOG。

左、右按钮用于在NO和YES之间切换。

当显示 YES 时按回车键将重置/删除网关上存储的日志数据。

保存后将显示“RESET DONE”。

在重置日志内存模式中,您可以随时使用向上或向下按钮退出此模式。除非再次弹出 SD 卡,否则您将无法重新进入此模式。

BMP280同步模式:

当启动与 BMP280 遥控器的同步、同步成功以及同步失败或中断时,都会进入此模式。当同步正在进行时,此模式不能退出,直到成功完成或失败。同步需要 5 到 10 秒。同步成功时,显示 BMP SYNCD。当同步失败或中断(遥控器电池没电等)时,显示 SYNC BMP ERR。未同步时,可以在循环浏览可用模式时进入 BMP280 同步模式。进入 BMP280 同步模式将提示您按 [ENTER] 2 SYNC。这将再次尝试与 BMP280 同步。同步最终成功后,此模式将不再可用。

如果 BMP280 在同步后超出范围,则会播放索引 2 处的声音文件。目前这是一种令人讨厌的重复哔哔声。

设置时间和日期:

可以通过选择“设置时间”来设置时间。使用向上/向下箭头,循环浏览可用模式,直到到达“设置时间”。按 Enter 后,您将看到一个面板,可用于设置日期和时间。

您还可以使用 SerialHexLoader 应用程序来设置时间和日期,方法是打开与 USB 串行端口的连接,然后从菜单栏中选择 Command->Set Time。

14

远程模式描述

遥控器有 4 种模式:信息、日志、BMP280 同步、网关同步和睡眠。

并非所有模式都始终可用。BMP280 同步仅在同步状态发生变化(成功、失败、重试)时可用。网关同步仅在 BMP280 同步成功后立即可用。

中心模式按钮用于循环可用模式。

对于所有模式,无线电活动指示都绘制为显示屏底部的 2 像素高条,表示无线电活动状态以及排队等待发送的数据包数量。队列最多可容纳 4 个数据包(发送到网关的请求)。当前无线电活动是其中一个条,因此总共可能的条数为 5。

信息模式:

显示当前时间、温度和海拔。日志记录正在进行时,将显示已用时间和完成百分比。温度可以以摄氏度或华氏度显示。海拔可以以米或英尺显示。

日志模式:

控制开始、停止、恢复、结束日志以及交换开始和结束位置。

当日志未处于进度时,日志模式将显示起始位置和起始海拔。

当日志处于进度日志模式时,会显示结束位置和起始海拔。

可用的操作显示在显示屏的顶行。根据可用的选项,按下左侧或右侧按钮即可通过将命令发送到网关来执行命令。网关的响应将导致遥控器更新显示以反映正在执行的命令的结果。

BMP280同步模式:

当启动与 BMP280 遥控器的同步、同步成功以及同步失败或中断时,都会进入此模式。当同步正在进行时,此模式不能退出,直到它成功完成或失败。同步需要 5 到 10 秒。同步成功后,网关同步开始。当同步失败或中断(遥控器电池没电等)时,会显示 SYNC BMP(红色)和 [LEFT] 2 SYNC(白色)。BMP280 同步模式只有在成功后才能退出。BMP280 同步模式将提示您按 [LEFT] 2 SYNC。这将重试 BMP280 同步。当 BMP280 同步失败时,唯一可用的其他 UI 选项是按住左右按钮 2 秒钟让遥控器进入深度睡眠状态。

网关同步模式:

BMP280 同步成功后立即进入此模式。同步进行时,将显示 SYNCING BASE,并且只有在成功完成之前才能退出。网关同步需要 1 到 5 秒的时间。网关同步失败的唯一迹象是,SYNCING BASE 消息将在预期同步时间之后继续显示。只有当网关未运行或超出范围时才会发生这种情况。同步失败时唯一可用的 UI 选项是按住左右按钮 2 秒钟使遥控器进入深度睡眠状态。因为这是一个遥控器,如果它不能与基座同步,它就没用了。因此,我没有编写任何额外的代码来处理这种罕见的情况。

睡眠模式:

3 键遥控器有两种睡眠模式:轻度睡眠模式(仅关闭显示屏)和深度睡眠模式(关闭包括 RTC 在内的整个电路板)。从任一睡眠模式唤醒时,遥控器使用 BMP280 遥控器广播的数据包来了解何时与网关通信。当遥控器处于睡眠状态时,网关会在 BMP280 数据包到达后几毫秒内保持其接收器开启,以监听来自 3 键遥控器的可能同步请求。网关向 3 键遥控器发送的响应设置了当前时间、当前开始和结束位置以及徒步旅行是否正在进行中。来自 3 键遥控器的请求还会让网关知道遥控器已唤醒。网关将保持其接收器开启,直到遥控器进入睡眠状态。2 分钟不活动后,遥控器自动进入轻度睡眠模式,按住左右按钮 2 秒后进入深度睡眠模式。要从轻度睡眠中唤醒,请按下中央“模式”按钮。要从深度睡眠模式中唤醒,需要按住中央模式按钮 2 秒钟。这 2 秒钟的要求可以减少意外唤醒口袋中的 3 键遥控器的可能性。请注意,无法从日志模式进入深度睡眠,以防止意外启动/停止日志。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载