当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]一个月前,我手里拿着一个GNSS模块,心里在想:我可以开发一个导航设备,只要输入目的地的坐标,设备就能在我不走路时持续显示到目标的距离和方向吗?那个简单的问题成为了这个项目开始的起点。

一个月前,我手里拿着一个GNSS模块,心里在想:我可以开发一个导航设备,只要输入目的地的坐标,设备就能在我不走路时持续显示到目标的距离和方向吗?那个简单的问题成为了这个项目开始的起点。

我迅速用ESP32-C6、一个GNSS接收器和一块小型显示屏组装了一个初步原型。编写了一些测试代码后,当我移动时,惊讶地发现系统能够实时计算出到目的地的距离。

然而,有一个主要的局限性。

GNSS模块只有在用户正在主动移动时才能确定运动方向。如果停止行走,航向信息就会变得不可靠,因为接收器不再具备足够的移动数据来计算行进方向。

在研究解决方案的过程中,我发现早在智能手机导航普及之前,专用的航点导航设备就已经被广泛使用。这些设备将位置数据与指南针结合,持续指示目的地的方向。

这激励我为项目添加了一个数字指南针。

通过集成BMM350磁力计,导航仪现在即使在静止不动时也能确定自身方向。结果正是我所设想的:一个紧凑的手持设备,能够实时显示到预设航点的距离和方位角。

更令人印象深刻的是,该系统始终能实现约±5米的精度,这对于DIY导航项目来说非常出色。

本次构建所使用的硬件包括:

•DFRobot FireBeetle 2 ESP32-C6

•重力GNSS定位模块

•Gravity BMM350 三轴磁力计

•Fermion 1.54英寸 240×240 IPS TFT 显示屏

•用于用户输入的旋转编码器

•压电蜂鸣器用于反馈

•便携式使用的锂聚合物电池

为完成项目,所有部件都被封装在一个由Fusion 360设计的紧凑型定制外壳内,将原型机转变为一款实用的手持导航设备。

在本教程中,我将向你展示我是如何设计、组装、编程和测试这款DIY航点导航仪(Pathfinder)的,以便你能自己动手制作一个。

材料

电子产品

•1× DFRobot FireBeetle 2 ESP32-C6

•1× 重力GNSS定位模块

•1× Gravity BMM350 三轴磁力计

•1× Fermion 1.54英寸 240×240 IPS TFT 显示屏

•1× 旋转编码器

•1× 电容式蜂鸣器

•1× 锂聚合物电池

•1× 小型电源开关

硬件

•M2 螺丝套件

•M3螺丝套件

•螺丝刀

制造

•可使用3D打印机或

•预印封装部件

软件

•Arduino IDE

•Autodesk Fusion 360(用于机箱设计与修改)

步骤1:什么是GNSS,它是如何工作的?

在建造路径规划器之前,了解使其成为可能的技术会很有帮助。

什么是GNSS?

GNSS 是全球导航卫星系统的缩写,是用于卫星定位系统的统称,使地球上的接收设备能够确定自身位置。

目前全球正在运行多个GNSS星座:

•GPS(美国)

•GLONASS(俄罗斯)

•伽利略(欧盟)

•北斗(中国)

现代GNSS接收器可同时与多个卫星系统通信,从而提高定位精度,并缩短获取位置信息所需的时间。

GNSS是如何工作的?

每颗GNSS卫星持续广播包含以下信号的信号:

•其在空间中的精确位置

•确切的传输时间

•系统时间信息

GNSS接收器测量这些信号从多个卫星传到它所需的时间。

由于无线电波以光速传播,接收器可以计算出自己与每个卫星之间的距离。

通过结合至少四颗卫星的测量数据,接收器执行一种称为三边测量的过程,以确定:

•纬度

•经度

•海拔

•时间

接收器能接收到的卫星越多,定位精度通常就越好。

简化示例

想象一下,你站在地球的某个地方:

•一颗卫星告诉你,你位于一个大球体的某个位置。

•第二颗卫星缩小了可能的位置范围。

•第三颗卫星进一步降低了可能性。

•第四颗卫星提供了足够的信息,可计算出精确的三维位置。

这一过程持续不断地进行,通常每秒多次。

本项目中的GNSS

路径寻踪器使用一个连接到ESP32-C6的DFRobot重力GNSS定位模块。

GNSS模块持续提供:

•当前纬度

•当前经度

•海拔

•地速

•可见卫星数量

一旦输入目的地航点,ESP32 就会将当前的 GNSS 坐标与目的地坐标进行比较,并计算:

步骤2:到目的地的距离:哈弗斯线公式

一旦导航器知道你的当前位置坐标和目的地坐标,就需要计算这两个点之间的距离。

乍一看,这似乎很简单。然而,地球并非扁平的,而是近似球形的。因此,使用经纬度进行直线计算,在较长距离上会产生不准确的结果。

为了解决这个问题,固件使用了哈弗斯线公式,这是一种著名的导航公式,用于计算球面上两点之间的最短距离。

该公式需要四个输入:

•当前纬度

•当前经度

•目的地纬度

•目的地经度

使用这些坐标,它计算出大圆距离,即两点之间沿地球表面的最短路径。

随着用户移动,此距离会持续更新,使导航器能够实时显示到选定航点的剩余距离。

在固件中,计算出的距离以以下方式显示:

•附近目的地的米数

•长途行驶的公里数

这提供了一种简单直观的方式来跟踪实现目标的进度。

步骤3:前往目的地

只知道距离是不够的,你还得知道该朝哪个方向前进。

这就是轴承计算发挥作用的地方。

轴承是从一个位置到另一个位置的罗盘方向,从地理上的北点顺时针测量。

例如:

•0° = 北

•90° = 东

•180° = 南

•270° = 西

如果导航仪计算出的方位角为90°,则目的地位于你当前位置的正东方向。

如果计算出的方位角为225°,则目的地位于西南方向。

固件使用当前的GNSS坐标和目的地坐标来计算该航向。

示例

想象你站在:

•纬度:17.4000°

•经度:78.5500°

您的目的地是:

•纬度:17.4100°

•经度:78.5600°

轴承计算用于确定从当前位置到航点的方向。在此示例中,目的地大致位于你位置的东北方向。

步骤4:将轴承与数字指南针结合

计算出的方位角告诉我们目的地相对于真北的位置,但无法告诉我们设备当前朝向的方向。

这正是BMM350磁力计发挥作用的地方。

磁力计持续测量设备的朝向,使ESP32能够确定其当前的方向。

固件随后进行比较:

•目标轴承

•当前标题

确定目标位置相对于设备的位置。

例如:

•目标轴承 = 90°(东)

•设备朝向 = 45°(东北)

目的地位于你当前方向的右侧45度。

显示屏上的导航箭头会根据这个差值进行旋转,从而实时引导用户朝向选定的航点前进。

这种结合了GNSS定位、方位计算和数字指南针航向的方式,使Pathfinder即使在用户静止不动时,也能持续指向目的地。

步骤5:我为何选择 FireBeetle 2 ESP32-C6

该项目的核心是DFRobot FireBeetle 2 ESP32-C6,它非常适合用于便携式导航设备。

我选择它主要有三个原因:

•价格实惠——约5.90美元,性价比极高。

•电池友好型——内置锂聚合物电池接口和充电电路,无需额外的充电模块。

•性能强劲——ESP32-C6 能够轻松处理 GNSS 数据、罗盘计算、显示更新和用户输入,且不会因任务过重而影响性能。

另一个主要优势是其内置的Wi-Fi和蓝牙连接功能。无需在设备上直接输入坐标(硬编码),我只需创建一个简单的网页界面,即可通过本地网络无线传输航点的经纬度值。

这显著提升了用户体验,同时保持了硬件的简单和紧凑。

总体而言,FireBeetle 2 ESP32-C6 为这款 Pathfinder 提供了成本、功能、性能和功耗管理之间的完美平衡。

步骤6:在Fusion 360中设计外壳

我在 Fusion 360 中设计了一个定制外壳,将原型转化为一个紧凑的手持设备。

该装置由三个3D打印部件组成:

主机箱

主机箱包含所有主要部件的安装点,包括:

•FireBeetle 2 ESP32-C6

•GNSS模块

•BMM350 磁力计

•旋转编码器

•压电蜂鸣器

•电源开关

顶部区域还设有专门的GNSS天线安装区,以确保良好的卫星信号接收。侧面设有开口,便于访问ESP32-C6的USB Type-C接口,方便编程和充电。

封面

前面板通过安装螺丝固定1.54英寸TFT显示屏。

还包括:

•旋转编码器切割

•前面板上的装饰性图形

•集成式登山扣环,用于将导航仪固定在背包或装备上

编码器旋钮

第三部分是一个定制设计的旋转编码器旋钮,通过3D打印制成,并压入编码器轴上。

所有外壳部件均设计为无需支撑材料即可轻松打印,并可根据需要进行修改,以适配不同的硬件配置。

您可以从本项目下载 Fusion 360 设计文件和 STL 文件,并根据自身需求进行定制。

步骤7:3D打印零件

CAD设计完成后,是时候打印外壳了。

本次构建中,我使用了:

•外壳和旋钮用橙色PLA

•用于装饰图形和旋钮的黑色PLA

待打印零件

打印以下组件:

•1× 住房

•1× 前封面

•1× 编码器旋钮

我使用标准PLA打印参数,0.4毫米喷嘴和0.2毫米层高打印了所有部件。无需特殊打印设置,所有部件均可在无支撑材料的情况下打印。

步骤8:安装模块

封装完成后,就是将电子元件安装到外壳中的时候了。

安装ESP32-C6:

首先将 FireBeetle 2 ESP32-C6 放置到外壳内的指定安装位置。

确保USB Type-C接口与机箱侧面的开口正确对齐。

对齐后,使用以下方法固定板子:

•2× M2 螺丝

安装GNSS和磁力计模块:

接下来,将GNSS定位模块和BMM350磁力计模块安装到各自指定的安装位置上。

将每个模块上的安装孔与外壳中的凸台对齐,并使用以下方式固定:

•2× M3 螺丝用于 GNSS 模块

•BMM350 模块用 2× M3 螺丝

在拧紧螺丝之前,请确保两个模块都平直地紧贴安装表面。

步骤9:安装编码器、蜂鸣器和电源开关

安装好主模块后,现在是时候安装用户界面组件了。

安装旋转编码器

将旋转编码器安装到外壳内部提供的两个支架上。

对准安装孔,并使用以下方式固定编码器:

•2× M2 螺丝

确保编码器轴在前面板开口处居中,并能自由旋转。

安装蜂鸣器

将压电蜂鸣器轻轻按入外壳上专门设计的插槽中。

蜂鸣器应能紧密安装,无需额外硬件。

安装电源开关

接下来,将电源开关插入外壳上的开关开口。

用力将其压入到位,直到牢固地卡入槽中。

如果开关感觉松动,请涂抹少量速干胶将其固定。注意不要让胶水进入开关内部,以免影响其正常工作。

步骤10:安装GNSS天线

将GNSS天线安装到外壳内的专用天线舱中,如图所示。该外壳设计可牢固固定天线,同时保持其位于设备顶部。

将天线安装到位后,将天线电缆连接到GNSS模块的天线接口上。将接口向下按压,直到听到“咔哒”一声固定到位。

连接器较小且较脆弱,安装时请小心操作。避免拉扯电缆本身,应始终用手握住连接器本体进行操作。

步骤11:将所有线路连接起来

到目前为止,组装过程相当干净且简单。现在是将所有部分连接起来的关键环节:布线和焊接。

GNSS模块和BMM350磁力计

GNSS接收器和BMM350磁力计均通过I²C接口与ESP32-C6通信。

连接以下引脚:

•模块到ESP32-C6

•GND~ GND

•VCC~ 3.3V

•SDA~ SDA

•SCL~ SCL

由于两个模块都使用I²C,因此可以共享相同的SDA和SCL线路。

旋转编码器

按以下方式连接旋转编码器:

•编码器转ESP32-C6

•GND~ GND

•VCC~3.3V

•A~ GPIO 6

•B~ GPIO 7

•C~ GPIO 2

蜂鸣器

按以下方式连接压电蜂鸣器:

•蜂鸣器到ESP32-C6

•GND~ GND

•信号(+)~ GPIO 4

电池与电源开关

将锂聚合物电池连接到ESP32-C6上的电池接口。

为了使设备能够开关,将电源开关与电池的正极线串联。

接线顺序:

•电池(+)→ 开关 → ESP32 电池(+)

•电池(-)→ ESP32 电池(-)

这使得当设备未使用时,开关可以切断整个系统的电源。

所有连接完成后:

•检查所有焊点。

检查相邻导线之间是否有短路。

•在为设备通电前,请确认电池极性正确。

•线路整齐铺设,以防止最终组装时干扰外壳。

一切接线和测试完成后,即可安装显示屏并关闭机箱。

步骤12:安装显示屏

所有内部组件接线完成后,现在可以将显示屏安装到前面板上了。

将1.54英寸TFT显示屏安装在前面盖板的显示屏开口后方,并将显示屏的安装孔与盖板上提供的安装柱对齐。

对齐后,使用以下方式固定显示屏:

•2× M2 螺丝

确保显示屏平贴在盖板上,并居中放置于显示窗口内,以获得最佳外观效果。

安装完成后,前盖组件已准备好与主壳体连接,并可进行最终装配。

步骤13:将显示屏连接到ESP32

由于显示屏和FireBeetle ESP32-C6使用了GDI(通用显示接口)连接器,这一步在整个构建过程中是最简单的之一。

只需使用显示屏附带的GDI数据线,将一端连接到显示屏,另一端连接到ESP32-C6上的GDI接口即可。

由于电源和通信信号都通过同一根电缆传输,因此无需额外布线。

在连接电缆之前,请仔细检查连接器的方向,并与参考图进行对比。错误连接电缆可能导致显示屏无法正常工作。

步骤14:最终组装

所有电子元件安装并测试完毕后,现在可以关闭机箱,完成整机组装。

将锂聚合物电池小心地放入外壳中,并整齐排列电线,以防止外壳关闭时电线被夹住。

接下来,将前面板安装到外壳上,并检查以下内容:

•两部分之间没有电线被卡住。

•显示电缆已安全布设。

•编码器轴可顺利穿过盖板开口。

一切就位后,使用以下方法固定盖子:

•3× M3 螺丝

从盖子背面插入螺丝,并均匀拧紧,直到机箱牢固闭合。

组装完成后,将3D打印的编码器旋钮安装到编码器轴上,并确认其旋转顺畅。

您的DIY路径探测器现已完全组装完毕,可进行电源启动、配置和现场测试。

步骤15:刷写固件

硬件组装完成后,最后一步是将Pathfinder固件上传到ESP32-C6。

下载Pathfinder固件:

在上传代码之前,请从 GitHub 下载最新的 Pathfinder 固件:Pathfinder GitHub 仓库

•下载压缩包。

•解压ZIP文件。

•在Arduino IDE中打开Pathfinder.ino项目。

安装 Arduino IDE:如果尚未安装,请从官方网站下载并安装 Arduino IDE:

•下载 Arduino IDE

•使用默认设置进行安装

安装ESP32板载软件包:

•打开 Arduino IDE

•前往“文件”→“首选项”

•在附加的管理板 URL 中,添加:

•点击确定

•前往工具 → 板件 → 板件管理器

•搜索ESP32

•通过 Espressif Systems 安装 ESP32

安装所需库

DFRobot GNSS 库:

•开放库管理器

•草图 → 包含库 → 管理库

•搜索:

•点击安装

DFRobot GDL 显示库:

搜索:

并安装最新版本。

安装 BMM350 库:

目前必须手动安装 BMM350 库。

•访问 DFRobot BMM350 GitHub 仓库:DFRobot BMM350 GitHub 仓库

•点击代码 → 下载ZIP

•在 Arduino IDE 中,前往:Sketch → 包含库 → 添加 ZIP 库

•选择已下载的ZIP文件。

该库现在将被添加到您的Arduino安装中。

选择正确的电路板:

使用 USB Type-C 数据线将 FireBeetle 2 ESP32-C6 连接到电脑。

然后配置Arduino IDE:

•主板:DFRobot FireBeetle 2 ESP32-C6

•端口:选择与您的设备对应的COM端口

•点击上传。

•等待编译和刷写完成。

上传成功后,路径查找器将自动重启并显示启动界面。

步骤16:连接到接入点并配置Pathfinder

刷入固件后,现在是时候配置你的Pathfinder了。

连接到Pathfinder Wi-Fi网络:

使用电源开关打开Pathfinder。

启动后,设备将自行创建Wi-Fi接入点。

•打开手机或电脑上的Wi-Fi设置。

•寻找路径探测器热点。

•使用密码登录:

打开配置门户:

连接到Pathfinder网络后,打开网页浏览器并访问以下地址:

你应该看到路径规划器的配置界面。

添加途经点:

通过网页界面,输入您要保存的每个位置的详细信息:

•地点名称

•纬度

•经度

点击保存以存储航点。

您可以添加多个位置,这些位置之后将直接在路径规划器中可用。

设置您的时区:

网页界面还提供时区选择菜单。

简单来说:

•选择您所在时区。

•点击保存。

这可确保设备显示正确的本地时间。

持久化存储:

所有航点和时区信息均存储在ESP32的非易失性存储器(NVS)中。

这意味着即使设备关闭,您的设置仍会保存。

保存后,位置将自动加载,并在路径规划器菜单系统中可用。

校准指南针:

在使用路径导航前,必须先校准指南针。

开始校准

•双击编码器旋钮以打开菜单。

•使用旋转编码器滚动。

•选择设置。

•打开校准指南针。

校准过程将引导您完成八个方向的指南针设置:

•北(N)

•东北(NE)

•东(E)

•东南(SE)

•南(S)

•西南(SW)

•西(W)

•西北(NW)

每个方向:

•身体朝向指定方向。

•按下编码器旋钮以记录测量值。

•移动到下一个方向并重复。

这通常是一次性设置,除非设备被移动到新环境或指南针性能发生变化。

故障排除:

如果发现导航箭头没有准确指向目的地:

•重复罗盘校准过程。

•在每次校准步骤中,请确保面向正确的方向。

•校准时请将设备远离大型金属物体或强磁场。

开始导航:

当您的位置已添加并校准好指南针后:

•双击编码器旋钮以打开菜单。

•选择一个已保存的位置。

主屏幕现在将显示:

•到所选目的地的距离

•指向目标的箭头方向

•附加导航信息

移动时,距离会实时更新,而指南针则会持续将导航箭头指向你选定的航点。

步骤17:路径查找器代码的工作原理

路径规划器固件结合GNSS接收器和BMM350磁力计的数据,实现实时航点导航系统。

从总体上看,固件执行以下五项主要任务:

1. 读取GNSS数据

GNSS模块持续提供:

•纬度

•经度

•海拔

•速度

卫星数量

•UTC 时间

此信息用于确定设备在地球任何位置的当前位置。

2. 加载已保存的航点

设备启动时,会从ESP32的非易失性存储(NVS)加载所有已保存的航点和设置。

包括:

•已保存的位置

•纬度和经度值

•所选时区

•设备设置

由于数据存储在NVS中,即使设备关闭后仍可保留。

3. 计算距离和方位角

一旦选择了一个航点,固件就会进行比较:

•当前GNSS坐标

•目的地坐标

使用哈弗斯线公式,可计算地球表面两点之间的最短距离。

该代码还计算了方位角,表示目的地相对于真北方向的方向。

结果是:

•到目标的距离

•目标方向

4. 读取磁力计

BMM350 持续测量地球磁场。

利用这些读数,固件计算设备的当前航向。

与GNSS航向不同,指南针即使在用户静止站立时也能继续工作。

这使得路径寻路者始终知道它朝向的方向。

5. 绘制导航箭头

最终的导航箭头是通过以下方式计算得出的:

•如果目的地在正前方,箭头则指向直上。

•如果目标在左侧或右侧,箭头将相应旋转。

这一过程持续不断,提供实时导航指引。

调试方向问题

根据磁力计在机箱内的安装方式,指南针方向可能与预期方向不一致。

常见症状包括:

•箭头指向相反方向

•箭头显示为镜像

•南北互换

•东与西互换

为了解决此问题,Pathfinder 包含两种指南针配置设置:

heading_offset:此值用于旋转整个指南针方向。

示例:

未应用旋转。

指南针旋转了90度。

指南针旋转180度。

如果指南针持续以固定的角度指向错误的方向,请调整此数值。

典型值:

•0°

•90°

•180°

•270°

反向指南针:此设置可反转指南针的旋转方向。

正常运行。

反向标题计算。

如果使用此选项:

•向左转弯会使箭头向右移动。

•向右转会使箭头向左移动。

指南针行为似乎被镜像了。

快速调试步骤

上传固件后:

测试1:面向北方

使用手机的指南针,朝北方向前进。

路径导航仪的朝向应显示约为:0° 或 360°

测试2:顺时针旋转

缓慢顺时针旋转。

标题应平滑递增:

如果数值反而减少,请尝试:

反向指南针 = !反向指南针;

测试3:检查方向

如果北方看起来像南方:

如果北面出现为东面:

如果北面显示为西面:

这两种设置可使固件在无需更改硬件的情况下,补偿不同磁力计安装方向的影响。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

本项目的目标是使用 Buildroot 为树莓派 Zero W 开发一个定制的嵌入式 Linux 发行版。系统设计仅包含应用程序所需的基本组件,例如 Wi-Fi 连接、SSH 和 SCP 访问、I2C 支持以及 Pyth...

关键字: Linux 树莓派 显示屏 SSD1306

从小时候起,GTA就是我玩过的最早的游戏之一,从那一刻起我就成了它的忠实粉丝。一直让我着迷的一点是屏幕角落里那个小小的圆形地图,它会显示你的位置以及你在游戏世界中的移动方向。它的运作方式与谷歌地图这样的真实导航系统非常相...

关键字: GTA 谷歌地图 ESP32-S3 显示屏

雷达通过Wi-Fi连接至OpenSky网络API,可下载指定区域内的飞机位置信息。飞机在平滑的动画雷达界面上显示,并配有航向指示器、飞行选择功能以及专用详情页面。

关键字: 飞行雷达 显示屏 ESP32-S3

除了光学红外输出外,许多电表还配备RS485接口,可通过该接口提供用电数据,例如用于控制家庭太阳能系统。根据地区和能源供应商的不同,数据通常通过广为人知的MODBUS RTU协议或所谓的SML协议(智能消息语言)传输。本...

关键字: OLED 显示屏 RS485

在我的一些之前视频中,我向大家展示了如何在不同显示屏上模拟制作模拟VU表。这次我将讲解如何制作这样一个项目,但使用的是包含几乎所有元件(包括MCU)的显示模块。只需添加几个无源元件和一个LED,即可作为峰值表来工作。

关键字: 显示屏 LED ESP32

这些通过AEC-Q102认证的器件具有与人眼相当的光谱感光度,并采用紧凑的0805和顶视QFN封装,可实现更优的光谱角性能

关键字: 光传感器 显示屏 抬头显示器

waveshare商店的电子墨水显示屏外观吸引人,非常有趣。这个项目旨在尝试管理高分辨率显示,同时有机会自行设计HAT板的变体,并研究FPC类型的连接器。

关键字: 电子纸 显示屏 PCB

Smart Dice 是一款基于 ESP32 构建的 3D 数字骰子摇器,其设计灵感源自非洲卢多(ludo)游戏规则,这种游戏深深根植于尼日利亚和西非文化之中。该骰子在 240x240 TFT 显示屏上呈现为一个真实可旋...

关键字: 显示屏 传感器 ESP32 MPU6050

现代导航系统功能强大,但往往高度依赖智能手机、网络连接以及频繁充电。在徒步、登山、骑行、露营或紧急情况下,这些依赖可能成为制约因素。户外环境中手机耗电快,阳光下屏幕难以看清,偏远地区电力供应也变得不稳定。

关键字: 导航 太阳能 ESP32-C6

与许多语音控制系统不同,所有语音识别功能均完全在设备自身运行。无需将音频发送至外部服务器,也无需云端处理,即使没有网络连接,系统也能持续运行。

关键字: 麦克风 扬声器 ESP32-C6
关闭