ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

无人艇控制器 | STM32F103C8T6+MPU6050+MQTT | X504302

无人艇控制器 | STM32F103C8T6+MPU6050+MQTT | X504302 项目编号X504302| 主控 STM32F103C8T6 | 姿态 MPU6050I2C | 定位 NEO-6M GPSUSART2 | 测距 超声波PA0 | 执行 SG90 舵机 光耦隔离继电器 | 通信 ESP8266 MQTT | 服务端 jeesite SpringBoot MySQL摘要本文介绍一套面向无人艇USV的运动控制与远程监控系统。硬件侧以 STM32F103C8T6 为主控MPU6050 六轴传感器经 I2C 输出俯仰角与横滚角NEO-6M GPS 模块经 USART2 输出经纬度与速度超声波测距模块以方波形式输出前方障碍物距离SG90 舵机调整航向、1 路光耦隔离继电器通断推进器动力回路LED 指示灯与无源蜂鸣器构成就地状态提示ESP8266 模组经 USART1 接入以 MQTT 客户端的身份与上位机交换数据。服务端基于 jeesite 平台与 SpringBoot 框架构建以 MySQL 完成数据持久化并实现 MQTT 客户端与业务接口两侧的收发网页端承担实时状态显示、远程操控与历史轨迹回放把姿态感知、定位、避障、远程操控与轨迹留痕整合进同一套闭环。一、技术栈速览层次技术选型职责主控 MCUSTM32F103C8T6ARM Cortex-M3最小系统板姿态解算、定位解析、避障判定与外设驱动Keil 5 固件开发姿态MPU6050三轴加速度 三轴陀螺仪I2C 接口SCL 接 PB7、SDA 接 PB6输出俯仰角与横滚角定位NEO-6M GPS 模块外接 ANT 天线RX 接 PA2、TX 接 PA3对应 USART2输出经纬度与速度测距超声波测距模块图纸标注 US-016 / HC-SR04RANG 接 PA0以方波形式输出前方障碍物距离方向执行SG90 舵机PWM 摆角 0~180°SIGNAL 接 PB4按网页端下发的舵令调整航向动力执行1 路光耦隔离继电器模块IN 接 PB11通断推进器动力回路实现启动与停止状态提示LED 指示灯串 220 Ω 无源蜂鸣器LED 由 PC15 驱动蜂鸣器信号端接 PB1通信ESP8266ESP-01SUSART1R 接 PA9、T 接 PA10MQTT 发布与订阅消息中转EMQX 中国区公共节点broker-cn.emqx.io:1883按主题转发上下行报文两端互不直连服务端jeesite Java SpringBoot MySQL Bootstrap业务接口、MQTT 客户端与数据持久化网页端实时状态、远程控制、轨迹追踪与历史查询1920×1080 桌面页面地图用于轨迹描绘二、系统架构设计系统自下而上划分为感知执行层、控制层、网络层、服务层与应用层层间以明确的接口解耦。这里的分层逻辑是避障判定放在主控内完成网络只承担搬运。图 1 系统总体架构图图 2 系统功能结构图从功能边界看设备侧只做「采集 避障 执行」三件事历史留痕、轨迹回放与坐标修正全部集中在服务端。这样后续换用别的姿态传感器、或增加一路测距时改动都落在设备侧与接口约定上网页端照旧。三、硬件系统设计图 3 硬件系统原理框图3.1 引脚分配各外设与主控的连接关系由硬件原理图确定嘉立创 EDA 绘制PDF 版带完整文字层两路串口各占一组收发脚其余外设使用通用 IO连接对象信号引脚说明MPU6050 姿态传感SCL时钟PB7与硬件 I2C1 的默认功能分配SCL PB6恰好相反可知姿态数据走通用 IO 模拟时序MPU6050 姿态传感SDA数据PB6同上模块另有 XDA / XCL / ADO / INT 四脚在本图中未连接GPS 定位模块RX模块接收PA2对应 USART2 的发送脚与模块 RX 交叉连接GPS 定位模块TX模块发送PA3对应 USART2 的接收脚VCC 接 5 VGND 接地超声波测距RANG距离输出PA0模块以方波输出距离值主控按脉宽换算OUT 脚在本图中未连接SG90 舵机SIGNAL信号PB4另两端接 5 V 与 GNDPB4 即 TIM3 通道 1需部分重映射同时也是 JTAG 的 NJTRST 脚推进器继电器IN控制端PB11DC 与 DC− 分别接 5 V 与 GND输出侧为 NO / COM / NC 三端ESP8266 通信R / T模块侧收发PA9 / PA10对应 USART1模块 V 接 3V3、G 接地LED 指示灯阳极驱动PC15回路为 PC15 → LED → R1220 Ω→ GND无源蜂鸣器信号端PB1另一端接地PB1 即 TIM3 通道 4默认与部分重映射均可用作为二次开发时的速查可直接复制下面这段引脚映射# X504302 无人艇控制器 · 引脚映射取自嘉立创 EDA 原理图位号按图纸标注 MPU6050 SCLPB7 SDAPB6 XDA/XCL/ADO/INT未连接 # 注意SCL/SDA 与硬件 I2C1 的默认分配SCLPB6/SDAPB7相反 # 姿态数据走 GPIO 模拟 I2C 时序未调用片上 I2C 外设 NEO-6M GPS RXPA2 TXPA3 # 对应 USART2与模块 RX/TX 交叉 VCC5V GNDGND ANT外接天线 超声波测距 RANGPA0 # 以方波输出距离主控按脉宽换算 OUT未连接 # 图纸标注 US-016 / HC-SR04 SG90 舵机 SIGNALPB4 # 另两端 5V / GND # PB4 经部分重映射为 TIM3_CH1同时也是 JTAG 的 NJTRST 脚 # 使用前必须关闭 JTAG、保留 SWD否则该脚被调试外设占用 推进器继电器 INPB11 # DC5V DC-GND 输出侧NO / COM / NC # 1 路光耦隔离 ESP8266 RPA9 TPA10 # 对应 USART1与模组 RX/TX 交叉 V3V3 GGND LED 指示灯 PC15 - LED - R1(220R) - GND 无源蜂鸣器 SIGNALPB1 # 另一端接地 # PB1 即 TIM3_CH4默认映射即可用 # 定时器分配推论 # PB4 TIM3_CH1部分重映射 PB1 TIM3_CH4默认映射 # 舵机所需的 50 Hz 波形与蜂鸣器所需的音频方波可由同一路 TIM3 承担 # 供电轨3.3V —— MPU6050 / GPS / ESP8266 # 5V —— SG90 舵机 / 继电器线圈 / 超声波模块3.2 原理图与实物图 4 硬件原理图图 5 硬件实物总览装配采用扩展板加杜邦线而非定制 PCB。样机阶段这一取舍降低了迭代成本更换测距模块或调整舵机安装位置时只需调整插接位置。一处素材情况需要如实说明需要如实说明三处素材情况。第一测距器件的名称存在口径差异《项目介绍》的器件清单与方案导图都写作「激光测距」而本项目原理图实际绘制并标注的是超声波测距模块US-016 / HC-SR04两者在本系统中承担同一角色 —— 探测前方障碍物距离本文的硬件描述以原理图为依据器件栏按图纸标注写作超声波测距模块。第二素材目录未提供独立的硬件实拍照片02系统截图实物图片 下只有 6 张 1920×1080 的 Web 界面截图本文中的实物照片取自演示视频的画面窗口分辨率受源画面限制已在图注中标明出处。第三《项目介绍》未逐条列出蜂鸣器而原理图中存在一只无源蜂鸣器本文按原理图将其计入硬件构成。四、通信链路设计设备与上位端之间不建立直连全部经 MQTT 服务器中转设备侧订阅一条主题等待指令向另一条主题发布采集结果服务端以 MQTT 客户端身份做同样的两件事。双方互不知道对方地址只按主题收发。图 6 系统数据交互时序图链路协议 / 方式说明无线承载Wi-Fi 2.4 GHzSTA 模式演示环境由电脑或手机开热点接入默认热点名 wrtkzq、密码 123456789苹果手机需在个人热点界面打开「最大兼容性」开关应用层协议MQTT 发布 / 订阅网页端与硬件之间不直连全部经 MQTT 服务器中转双方各自维护一条长连接MQTT 服务器broker-cn.emqx.io:1883采用 EMQX 中国区提供的公共中转节点稳定性可满足演示需要数据上报主题mybs/wrtkzqdata/40F520CCE11E设备向该主题发布姿态角、经纬度、障碍物距离与运行状态网页端订阅后刷新界面指令下发主题mybs/wrtkzqctr/40F520CCE11E网页端向该主题发布控制指令设备订阅后执行两条主题仅中段一词不同设备标识主题末段即设备 MAC 40F520CCE11E客户端 ID 为 40F520CCE11E53用户名与密码同为该 MAC主题前缀 wrtkzq 取自「无人艇控制器」的拼音首字母调试观测MQTTX 等 MQTT 客户端在电脑端订阅同一主题即可完整观察「下发—执行—上报」的交互过程4.1 主题命名与设备寻址主题名的末段是设备 MAC 地址前缀取自「无人艇控制器」的拼音首字母。同一台服务器因此可以挂载多艘无人艇而互不串扰排查问题时只要知道设备 MAC就能单独订阅它的两条主题观察数据流。下面这段是模块上电后打印的原始串口参数可逐字对照# X504302 无人艇控制器 · 模组串口启动参数原始输出逐字抄录 saved arguments ssid:wrtkzq pass:123456789 mqtt_server:broker-cn.emqx.io port:1883 TOPIC_Ctr:mybs/wrtkzqctr/40F520CCE11E TOPIC_Data:mybs/wrtkzqdata/40F520CCE11E client_id:40F520CCE11E53 userName:40F520CCE11E userPass:40F520CCE11E end # 说明 # 主题末段 设备 MAC本机实测 40F520CCE11E # client_id 为 MAC 追加后缀 53 # 用户名与密码同为该 MAC # 无线接入演示环境 # 热点名SSID: wrtkzq 密码: 123456789 # 接入方式 : 由电脑或手机开启 2.4 GHz 热点模组以 STA 模式接入 # 苹果手机需在个人热点界面打开「最大兼容性」开关 # 调试观测 # 可在电脑端用 MQTT 客户端工具订阅上述两条主题实时查看数据通信过程。4.2 一次远程操控与状态回传的完整往返以「岸上点一次舵令、艇上回一帧状态」为例把网页端、服务端、MQTT 服务器、ESP8266 模组与主控五个节点之间的往返拆开可以得到十二步时序1 Web 用户在远程控制区点击舵令 / 切换推进器与运行模式 2 Web - 服务端 提交控制指令推进器启停 / 自动手动 / 五档舵令 3 服务端 - MQTT 向 mybs/wrtkzqctr/MAC 发布指令报文 4 MQTT - ESP8266 按订阅关系推送下行报文 5 ESP8266 - STM32 经 USART1 透传主控解析指令并校验合法性 6 STM32 驱动 SG90 舵机转向、继电器通断推进器动力回路 7 STM32 障碍物进入阈值就地执行左转避障不等网络确认 8 STM32 周期采集姿态角、经纬度与障碍物距离 9 STM32 - ESP8266 回传俯仰角、横滚角、速度、方向角与距离 10 ESP8266 - MQTT 向 mybs/wrtkzqdata/MAC 发布上行报文 11 MQTT - 服务端 推送上行报文服务端解析并写入历史记录 12 服务端 - Web 刷新状态卡片并在百度地图上追加轨迹点其中第 6、7 两步值得单独说明舵令执行与左转避障全部由主控就地完成与上行链路在时间上没有依赖关系即便此刻网络不通艇仍能完成一次有效的避障动作。4.3 现有固件的四处接口特征把原理图导出的 PDF 文字层提取出来、按坐标还原成「引脚号—引脚名—网络标号」的对应关系可以确认四处与常规写法不同的地方# 特征一姿态数据走 GPIO 模拟 I2C而非硬件 I2C 外设 MPU6050 的 SCL / SDA 分别接在 PB7 / PB6 上。 而 STM32F103 的硬件 I2C1 默认功能分配是 SCLPB6、SDAPB7 —— 两根线恰好对调。 硬件外设的引脚功能是固定的无法这样接线后照常工作 # 姿态数据采用通用 IO 逐位模拟 I2C 时序的写法。 # 特征二舵机占用了 JTAG 复用脚 SG90 的 SIGNAL 落在 PB4。在 STM32F103C8T6 上PB4 的复位默认功能是 NJTRST 属于 JTAG 调试口的一部分要把它当普通 IO 或 PWM 输出使用 必须先把 AFIO 重映射寄存器配置为「关闭 JTAG、保留 SWD」。 图纸把与它同组的 PB3 单独用红色标出、且未连接任何网络 # 选脚阶段已经注意到这处冲突。 # 特征三舵机与蜂鸣器可共用同一路定时器 PB4 经部分重映射后是 TIM3_CH1PB1 则是 TIM3_CH4默认映射即可用。 两者属于同一路定时器的两个通道 # 舵机所需的 50 Hz 波形与蜂鸣器所需的音频方波可由 TIM3 一并承担。 # 特征四两路硬件串口分工明确 GPS 接 PA2/PA3 即 USART2 的收发脚ESP8266 接 PA9/PA10 即 USART1 的收发脚。 # 定位数据与网络数据各占一路硬件串口软件层不需要做串口复用。五、业务数据模型以下字段均取自系统实际运行界面可作为二次开发时的建表参考。# 终端信息实测字段 终端编号 终端名称 经度(标记) 纬度(标记) 状态 更新时间 -- 实测ZDBH01 / 无人艇控制器 / 119.62446 / 031.649279 / 离线 -- 字段名里的「标记」对应「坐标修正」功能GPS 漂移时可人工改写 -- 同一份数据在列表页叫「经度(标记)」在修正弹窗里叫「经度」 # 实时状态实测 8 项 俯仰角(PITCH) 横滚角(ROLL) 速度(节) 方向角 推进器 障碍物距离 模式 在线状态 -- 前两项来自 MPU6050速度与方向角来自 GPS距离来自超声波 -- 推进器取值工作中 / 停止模式取值自动 / 手动 # 历史记录实测字段 序号 控制器编号 控制器名称 速度(节) 俯仰角(pitch) 横滚角(roll) 更新时间 操作 -- 按时间段检索每页 20 条实测区间 2025-05-15 00:00 ~ 14:00 共 2364 条 -- 每条记录带一个定位按钮用于在地图上回溯该时刻的位置 # 远程控制三组按钮的取值域 推进器启动 / 停止 模式 自动 / 手动 方向机左满舵 / 左 / 直行 / 右 / 右满舵 -- 舵令限定为五档而非滑杆保证每次点击对应一条确定的报文把实时状态与历史记录放在一起看系统的数据流就完整了艇上按秒级周期上报服务端逐条落库实时页读最新一条历史页按时间段读一批。字段分组字段说明实时状态俯仰角(PITCH) / 横滚角(ROLL) / 速度(节) / 方向角前两项来自 MPU6050速度与方向角来自 GPS角度的正负号表示倾斜与偏转方向实时状态推进器 / 障碍物距离 / 模式 / 在线状态推进器取「工作中」或「停止」模式取「自动」或「手动」在线状态取「在线」或「离线」终端信息终端编号 / 终端名称 / 经度(标记) / 纬度(标记) / 状态 / 更新时间终端编号实测为 ZDBH01是设备在系统内的唯一标识历史记录控制器编号 / 控制器名称 / 速度(节) / 俯仰角(pitch) / 横滚角(roll) / 更新时间按时间段检索每页 20 条每条记录都带一个定位按钮用于在地图上回溯该时刻的位置方案阶段还明确了几条设计意图它们解释了系统为什么长成现在这个样子方面设计意图说明传输方式传输部分采用 Wi-Fi 方式无线链路走 2.4 GHz Wi-Fi 而非数传电台演示环境下用一部手机开热点即可完成全部联调避障策略遇到障碍物时左转避障检测到前方障碍物进入阈值后统一执行左转不区分左右属于单侧固定避障策略功能边界无路径规划功能系统只做实时操控与轨迹记录回放不承担自主路径规划这一边界在方案阶段就已明确其中避障策略这一条值得单独说明遇到障碍物时统一左转不区分左右。也就是说这不是一套「往障碍物反方向躲」的通用算法而是针对单一作业场景选定的固定动作 —— 实现简单、行为可预期代价是在狭窄水域里可能需要连续几次左转才能绕开。方案里同样明确写了「无路径规划功能」系统只做实时操控与轨迹记录回放这一点属于有意划定的边界。几帧实测样本可以直接说明字段含义与判定口径# 实时状态快照2025-05-15 07:26:51 俯仰角 -4.93 横滚角 3.84 速度 0 节 方向角 0 推进器 工作中 障碍物距离 199 模式 自动 在线状态 离线 # 历史记录连续 20 条2025-05-15 07:26:27 ~ 07:26:51 速度恒为 0.00 节 俯仰角区间 -5.02 ~ -4.81 横滚角区间 3.71 ~ 3.89 更新时间以约两秒为间隔递增与实时页那一帧的角度区间吻合六、界面实测网页端界面按「监控为主、配置为辅」的思路组织登录后即进入实时状态页。需要说明的是本项目界面截图是 1920×1080 的桌面网页在正文栏宽下会缩放到不足一半界面小字难以辨认因此每一项字段的具体取值在正文中一并写明图片主要承担「界面形态」的证据作用。关于隐私本项目界面截图中只有设备编号、经纬度与传感器读数不含姓名、手机号等个人信息未作脱敏处理。6.1 系统登录与终端管理系统以蓝色海面图作为登录页背景页面上只保留系统名称「无人艇运动控制系统」、登录账号、登录密码与登录按钮四项元素未登录时不展示任何监控或历史数据。登录后进入终端信息管理页表格字段包含终端编号、终端名称、经度(标记)、纬度(标记)、状态、更新时间与操作七列。图 7 登录页与终端信息管理页实测注册的一台终端为终端编号ZDBH01、终端名称无人艇控制器、经度(标记)119.62446、纬度(标记)031.649279、状态离线更新时间2025-05-15 07:26:51。「标记」二字对应的正是弹窗中的坐标修正功能 —— GPS 在岸边或被遮挡时定位会漂移系统允许人工把终端的经纬度改写成一个固定值这个值随后用于地图上该终端的默认落点。6.2 实时状态与远程控制实时状态页是系统的第一屏顶端给出数据采集时间与更新时间两行信息以及一个终端选择下拉框中间是八项实时数据卡片下半部分是远程控制区右侧固定一张地图用于实时描绘本次航行的轨迹。图 8 实时状态与远程控制页实测截取的一帧为数据采集时间2025-05-15 07:26:51、俯仰角-4.93°、横滚角3.84°、速度0节、方向角0°、推进器工作中、障碍物距离199、模式自动、在线状态离线。这帧数据里有两点值得注意一是俯仰角与横滚角都是几度量级的小角度说明 MPU6050 采到的是一个基本水平的静止姿态二是「障碍物距离 199」与「在线状态 离线」同时出现反映的是截图当下设备的实际状态。6.3 历史轨迹与数据回放历史数据管理页承担航迹的回溯。页面顶部提供控制器编号与更新时间区间两个查询条件查询按钮旁另有一个「历史轨迹查询」按钮点击后右侧地图会按该时间段把轨迹重绘一遍。表格字段包含序号、控制器编号、控制器名称、速度(节)、俯仰角、横滚角、更新时间与操作八列。图 9 历史数据与轨迹回放页实测查询区间为2025-05-15 00:00至2025-05-15 14:00每页显示 20 条页面底部标注共2364条。抽取其中连续 20 条来看速度恒为0.00节俯仰角在-5.02°至-4.81°之间波动横滚角在3.71°至3.89°之间波动更新时间以约两秒为间隔递增。这组数字与实时页那一帧的角度区间是吻合的 —— 说明两条页面的数据出自同一张表实时页只是取其中最新的一条。七、工程要点① 避障判定放在本地网络只做搬运。障碍物进入阈值后由主控直接驱动舵机转向与上行链路无依赖。链路异常时艇体仍能自我保护这也是把判定放在艇上而非云端的直接理由。② 两端互不知道对方地址。设备与网页端都只面对 MQTT 服务器按主题收发。艇换作业水域、服务端换部署位置都不影响对接。③ 主题末段用设备 MAC 寻址。同一台服务器可挂载多艘无人艇而互不串扰排障时只要知道设备 MAC就能单独订阅它的两条主题。④ 舵令限定为五档。左满舵 / 左 / 直行 / 右 / 右满舵每一次点击都对应一条确定的报文 —— 限定了取值就不存在浮点数传输与边界判定的问题。⑤ 选脚时优先照顾功能冲突。PB4 用作舵机意味着必须关掉 JTAGMPU6050 的两根 I2C 线与硬件 I2C1 默认分配相反说明走的是模拟时序两路串口各占一组收发脚互不争用。引脚在三个端口上跳着走但每一处都有明确理由。⑥ 供电轨要区分。SG90 舵机、继电器线圈与超声波模块取 5 VMPU6050、GPS 与 ESP8266 取 3.3 V同一块扩展板并存两条轨接线时需逐线核对。⑦ 坐标修正不可省。GPS 在岸边或被遮挡时定位会漂移系统为此留了人工改写标记坐标的入口否则历史轨迹的落点会随漂移一起乱掉。八、演示与获取图 10 演示视频封面完整的演示视频记录了整机接线与上电、舵机动作与指示灯状态以及网页端从登录到完成一次远程操控与轨迹回放的全过程片长约 6 分 15 秒实机画面以画中画窗口常驻在右侧。如需本项目的完整资料可在评论区留言或私信说明需要的项目编号X504302及用途学习 / 二次开发 / 课程设计以便提供对应的资料组织方式。交付内容形式硬件实物已装配并完成联调的整机扩展板 杜邦线程序源码STM32F103C8T6 固件工程与 Java 服务端 网页端工程硬件原理图嘉立创 EDA 源文件json / schdoc及导出的图像与文档演示视频系统完整运行的演示录像约 6 分 15 秒技术支持远程协助环境搭建、程序调试与小规模修改答疑项目编号 X504302。本文所述系统的引脚分配、通信参数、界面字段与实测数值均逐项取自硬件原理图、模组串口输出与系统运行截图界面中的终端编号、经纬度与传感器读数为演示数据相关技术问题可在评论区交流。
返回列表