构建一个便携式的数字地图设备
扫描二维码
随时随地手机看文章
PathFinder 是一款可穿戴的便携式设备,它存储了我家乡的地图,通过 D 键按钮即可查看和导航该地图。这就是“路径探索者”,这是一款由 UNIHIKER M10 提供动力的 DIY 数字地图设备,旨在帮助您找到正确的路线。
我会去家乡附近山区乘坐游乐设施,在那里,有些地方经常会出现信号中断的情况。完全依赖谷歌地图是不可取的;有时由于数据问题,地图无法完全加载,如果遇到这种情况而被困在那里,那可真是糟糕透顶了。
如果我们有一张实体地图以及一些导航技能的话,这一切都能解决。我没有实体地图,但我已经制作了一张数字化地图,并将其加载到了 UNIHIKER M10 板上。我们可以通过方向按钮来使用这张地图进行导航。有了这张地图,如果有人被困了,他们也能自己找到出路。
为了验证这一点,我前往了我家乡附近的一片偏远山区,并使用这张地图来导航一条我之前从未走过的小路。我按照地图的指示前行,顺利地找到了回家的路,没有任何困难。
这篇文章详细介绍了该项目的整个构建流程,包括印刷电路板的制造过程、代码编写以及设备组装等环节,那么让我们开始进行构建吧。
所需材料
这些就是本项目所使用的材料——
•定制印刷电路板(由 PCBWAY 提供)
•Unihiker M0 开发板
•3D 打印部件
•IP5306 电源管理集成电路
•10 微法 1206 电容
•C 类端口
•垂直式按钮
•LED 0603 绿色型号
•1 微亨电感(贴片式)
•按钮尺寸为 4×4 毫米。
硬件 - UNIHIKER M1
我们项目的核心产品是 UNIHIKER M10,这是一款非常独特的单板计算机。它配备了内置的 2.8 英寸触摸显示屏,并内置了 Wi-Fi 和蓝牙功能。
使这款设备真正与众不同的在于其处理器和协处理器。它采用的是RK3308 ARM 64 位处理器,拥有 4 个核心,工作频率为 1.2GHz。它配备有 512MB 的 DDR3 内存,并内置有 16GB 的 eMMC 芯片。
为了控制 GPIO(通用输入输出)接口,它配备了一个协处理器,即 GD32VF103C8T6。这个名称可能较长,但它是一款基于 RISC-V 架构的处理器,工作频率为 108MHz,配备有 64KB 闪存和 32KB SRAM。
中央处理器无法直接控制通用输入输出端口,因此我们添加了一个协处理器,我们可以使用 Python 来控制它。系统通过 PinPong 库来控制这个协处理器。
地图用户界面构建
UNIHIKER M10 运行的是完整的 Debian Linux 系统。它上面的所有设备,包括屏幕、GPIO 引脚和传感器,都是通过 Python 进行控制的,因此没有 Arduino IDE 支持,而且遗憾的是也没有 C 语言支持。
对于这张地图,我从《辐射:新维加斯》中的“仪表板 3000”界面中获取了灵感,该界面有着琥珀色的色调。普通的地图太过单调,而作为一名《辐射》的粉丝,我有责任创作出一款受“仪表板”启发的地图。
使用了两个库。第一个是 UNIHIKER 驱动程序,它控制着内置的 240×320 显示屏。然后是 PinPong 库,用于读取和写入 GPIO 引脚。
显示帧
我们首先创建一次图像组件,然后在每一帧中仅更新其文件内容。
使用 Pillow 进行渲染
所有图形均在内存中使用 Pillow 库进行绘制——不使用帧缓冲区,也不使用 pygame 库。每一帧都会经过以下处理:
•从 2000×2000 的地图中裁剪出一个 320×240 的视图区域
•涂抹一层琥珀色的色调
•绘制 CRT 网格 + 位置标识图标
•复合扫描线叠加
•使瞄准器动起来
•绘制 HUD 指示条
•旋转至横屏模式
•保存并推送
Amber Tint
该地图将以正常的 RGB 格式加载。若要获得“皮普-鲍伊”那种磷光效果,需将红色通道用作所有三个通道的亮度源:
物理按键
按钮通过带有内部上拉电阻的 GPIO 引脚进行连接。当被按下时,它们会使该引脚变为低电平,因此读数为“0”意味着“已按下”。
肖像屏上的风景画
物理显示尺寸为 240×320(竖屏)。我将图像绘制到一个 320×240 的画布上(横屏),然后在保存前对每一帧进行旋转:
渲染循环
标准固定时间间隔循环——休眠一段时间,休眠时间为帧预算中剩余的时间。
图书馆
UNIHIKER 电源输入端
接下来,在完成了地图设置的配置之后,我们解决了 UNIHIKER 电源输入的问题。UNIHIKER M10 使用 USB Type-C 接口作为电源输入端口,能为设备提供稳定的 5 伏电压,从而使设置能够正常运行。但这款板子的问题在于没有内置电池接口。
在 Type-C 接口附近,我们能看到两个接线端。第一个接线端连接到 USB Type-C 接口的 VCC 端子,而另一个接线端则连接到 GND 端子。
通过为这两个端子提供 5 伏电压,我们就能为这块电路板供电,但要做到这一点,我们需要一个稳定的电源。
3D 设计
对于这个项目,我的想法是制作一个带有屏幕和旁边四个按钮的装置,其灵感来源于赛博朋克风格,该风格非常注重显示屏,并且其外形呈矩形且对称。
为了完善设计,我添加了一个遮阳帘部分,它还具有实用功能。当设备在户外使用时,它能为显示屏提供遮挡,使观看更加清晰。
我还添加了一个较大的旋钮,这个部件既不实用也不具备实际功能,只是出于美观的考虑才被加入进去的。此外,在正面我还添加了一个额外的部件以增强美观效果。
通过添加不同的部件,我的目的是使用三种颜色的细丝(红色、白色和黑色)进行 3D 打印,从而打造出出色的色彩搭配效果。
在该模型内部,有着合理的电路布局,其中包括按钮板。每个电路都有其专属的安装螺钉孔,我们将电路板放置在这些孔中,并用 M2 螺丝将其固定。
我们还在设备的一侧增设了开口,以便在需要重新编程该设备时能够接触到 UNIHIKER M10 的 USB 接口。此外,还增设了用于接触电源模块的 USB 接口以及电源开关按钮的开口。
为了安装身份证带,我们在一端加了一个类似钩子的部件,这样身份证带就可以与之连接了。
3D 打印部件
模型确定后,我们使用 Hyper PLA 材料按照相同的设置进行了所有部件的 3D 打印,这些设置包括 0.2 毫米的层高、25%的填充率以及 0.3 毫米 Z 距离的支撑结构。
前部主体部分采用了白色的超亮聚乳酸材料进行印刷。后部主体、阴影部分以及美观部分均使用黑色的超亮聚乳酸材料进行印刷。
红色超高强度聚酰亚胺被用于打印这四个开关以及旋钮部分。
PCB 设计 - 电源板
在这里,我们正在重新使用我那个便携式显示器项目中所用的电路。
在该电路中,IP5306 电源管理芯片从 3.7V 锂离子电池中持续获取 5V/2A 的电量。其高截止和低截止特性可防止电池过充和过放电。
我们所使用的充电接口是一种 Type C 通孔接口,它与 IC 充电接口相连。除了充电接口和地线之外,我们还配备了一个 10 微法的滤波电容以及一个由 10 微法电容和 2 欧姆电阻组成的组合元件。
此外,还在集成电路的 LED 接口处新增了四个 LED,这些 LED 将用作电池电量充足指示灯。
现在这个设备上新增了一个按钮,用于开启和关闭它。
此外,我们在 IC 和 GND 输出端还额外添加了两个滤波电容。
PCBWAY 服務
在完成设计后,我生成了印刷电路板的格柏文件,并将其发送给 PCBWay 进行制造。
我们下了两笔订单,其中一笔是关于按钮板的,我们选定将其制作成带有紫色焊膏遮蔽层和白色丝印的样式;另一笔是电源板的订单,其采用蓝色焊膏遮蔽层和白色丝印的样式。
下单后,印刷电路板在一周内就送到了,速度之快令人惊叹,而且这些电路板的质量也非常好。
在过去十年里,PCBWay 一直以提供可靠的印刷电路板制造和组装服务而树立了良好的声誉,成为了全球工程师和制造者们的首选合作伙伴。
老实说,如果你正在制作定制的印刷电路板却不去使用 PCBWay 这个平台,那你就是在给自己制造麻烦。他们还提供数控加工和 3D 打印服务。
功率板组装流程
对于此印刷电路板的组装过程,我们使用了一种焊膏分配注射器。我们将焊膏涂抹在每个元件的焊盘上,以此开始主电路组装过程。在此过程中,我们使用的是锡/铅 63/37 焊膏,其熔点为 190 摄氏度。
接下来,我们逐一取出每个表面贴装器件,并将其放置在正确的位置上。
随后,所有组件都会与各自的焊盘永久性地固定在一起。此时,整个电路会被放置在回流加热板上,该加热板会将印刷电路板加热至焊膏熔化所需的温度。
接下来,我们将每个 THT 组件(包括 Type C 接口和垂直按钮)放置在正确的位置。我们将 Type C 接口置于顶部,但将按钮的位置翻转过来,放置在底部。使用电烙铁,将这两个组件固定在相应的位置上。
电源
对于该项目的电源,我们使用的是锂离子电池,具体型号为 14500 形式、电压为 3.7 伏、容量为 600 毫安时的锂离子电池,该电池还配备了预装的 PCM 电路。这个 PCM 电路能够防止电池过充和过放电,甚至还能提供短路保护。
该电池的 B+ 和 B- 两端通过烙铁与我们的电源管理板上的电池端子进行焊接连接。
为了测试这个装置,我使用了一台万用表,按下垂直按钮以开启电路,然后我们就能看到指示灯亮了起来。
通过使用万用表,我们可以检测电路的输出电压,测量结果稳定在 5 伏,这表明装置正在正常运行。
PCB 设计 - 按钮板
这是我们项目中使用的第二个印刷电路板,即按钮板。
在这里,我们在一块 20×20 毫米的板子上添加了四个 4×4 毫米的按钮。每个按钮的放置位置以及安装孔的位置都是根据 3D 模型来确定的。
还添加了一个 CON5 连接器。第一个引脚连接到地线,其余四个端口分别与每个按钮引脚相连。通过这个连接器,我们之后将把 UNIHIKER M10 与我们的按钮板进行配对。
按纽板组装工艺
按钮板的组装过程非常简单明了。
我们将四个按钮分别放置在相应位置,将板子翻转过来,然后用烙铁将按钮的所有引线焊接好。
电子设备设置
该项目的电子配置包括:先将 UNIHIKER M10 与按钮板按以下顺序进行连接:
按钮 A 连接到 UNIHIKER 的 P3 端口。按钮 B 连接到 UNIHIKER 的 P0 端口。按钮 C 连接到 P1 端口。按钮 D 连接到 P2 端口。
我们还使用了内置的蜂鸣器,它与 P26 进行了配对。
接下来,我们用两根连接线将电源板的 5V 和 GND 端子与 UNIHIKER 的 5V 和 GND 端子连接起来。
按下垂直方向的按钮,设备就会开启,而“UNIHIKER”屏幕也会亮起,这表明设备已正常运行。
车身组装流程
现在我们开始组装过程,首先将按钮板放置在四个螺钉孔上。然后,用四颗 M2 螺丝将其固定。
接下来,锂离子电池被放置在机身下方,此处我们设计了一个电池固定座。电路也安装在两个螺钉凸起处的位置,并通过使用两颗 M2 螺丝固定到位。我们还使用少量热胶来确保电池保持完好且固定在正确位置。
我们使用强力胶水将我们设计的装饰部分粘贴上去,并将其放置在车身的前部。我们先在前部涂抹强力胶水,然后放置装饰部分,并将其固定在适当的位置。
UNIHIKER M10 从车辆前部车身内部安装。我们使用热胶将其牢固固定。
这些 3D 打印的按钮是从前部主体内部插入到相应位置的。然后,将前部和后部主体合在一起,并用四颗 M2 螺丝固定好。
接下来,将旋钮部分安装在设备的正面。这个旋钮仅具有装饰作用,并非具有实际功能。
从正面来看,我们将遮光部分放置到位,并用两颗 M2 螺丝将其固定。
组装工作已经完成。
可穿戴式表带
为了使这个设备便于佩戴,我加装了一条身份证挂带,这样携带起来就更方便了。
这款肩带扣固定在机箱左侧我设计的一个专用部件上。一旦安装好,这个设备就可以像身份证一样佩戴在身上了。
结果
这就是这个项目的最终成果:PathFinder,这是我设计的一款便携式数字地图设备,能帮助同行者找到自己的路线。它本质上就是一个屏幕内的地图,无需连接 Wi-Fi 或任何网络即可加载使用。通过方向控制键,我们可以轻松地在地图上导航。
这张地图的设计风格与《辐射:新维加斯》中的那张类似,有着琥珀色的色调,但它展示的是我的小镇,感觉相当酷。
为了在实际生活中测试这个设备,我骑上摩托车,前往了一个我之前从未去过的地方。我尝试使用“路径导航器”来导航,结果效果非常好。
我按照地图指引,走上了一条荒无人烟的公路,实际上这条公路就在一片丛林之中,然后我沿着这条路穿行而过,最终回到了熟悉的高速公路旁。
结论
这张地图是有效的,而且效果相当好,但在实地测试过程中我还是遇到了一些问题。
最让人恼火的是显示屏。优尼赫克显示屏的背光相当暗淡,在强光下几乎无法看清内容。我甚至为它设计了一个遮光罩,但效果并不好。此外,该显示屏的触摸屏还有一层反光层,这使得在户外的可视性更差了。
另一个限制因素是地图的尺寸。目前,该地图覆盖的区域约为 2000×2000 像素,这个尺寸可以通过修改 map.py 中的参数来增大,但这样做会使代码变得更重。因此,我需要找到一种既能高效缩放地图又不会显著增加代码大小的方法。
我还意识到,如果把这个装置安装在我的摩托车上,而不是像徽章一样佩戴在身上,可能会更加实用。
在这种配置下,我可以通过添加温度传感器、视频录制功能,甚至一些像追踪前方车辆这样的人工智能特性来扩展其功能。如果将其安装在自行车上,它甚至还可以配备蓝牙音箱;可能性是无穷无尽的。
本文编译自hackster.io





