【立创梁山派】六轮智能车:基于GD32的WiFi网页遥控与多传感器融合设计详解

📅 发布时间:2026/7/4 9:01:01 👁️ 浏览次数:
【立创梁山派】六轮智能车:基于GD32的WiFi网页遥控与多传感器融合设计详解
【立创梁山派】六轮智能车基于GD32的WiFi网页遥控与多传感器融合设计详解最近用立创梁山派GD32主控板做了一辆六轮智能车发现很多朋友对如何整合WiFi遥控、多传感器和电机驱动很感兴趣。这辆车不仅支持网页遥控还能实时回传温度、海拔、姿态等数据成本控制得也不错。今天我就把自己从硬件选型到软件调试的整个过程梳理出来希望能给想做类似项目的朋友一个清晰的参考。1. 项目整体思路与硬件架构1.1 为什么是六轮车在开源平台上四轮车和二轮平衡车方案很多但六轮车却很少见。我琢磨了一下可能一个原因是如果用常见的“N20电机43mm车轮”方案在嘉立创免费打样的10cm*10cm尺寸内很难把6个轮子布局好。我的解决思路很简单用两块PCB拼起来。两块四轮车的底盘拼在一起不就是六轮车了吗虽然两块板子之间需要“飞线”连接但在打电赛时去器材室多拿点线就行基本不增加额外成本。这个方案的底盘强度足够也给了传感器和扩展模块充足的安装空间。1.2 核心硬件选型清单整车的核心是立创梁山派开发板主控是GD32系列单片机。围绕它我搭建了以下子系统动力系统6个N30减速电机减速比约1:240驱动43mm车轮。电机驱动用的是性价比很高的TC1508芯片。供电系统使用一节特斯拉拆机18650电池为全车供电。为了供电稳定用了3个IP5306升压模块分别给左侧电机、右侧电机以及主控传感部分提供5V电源。传感系统BMP180测量环境温度和气压换算为海拔高度。MPU6050获取车体的姿态角Roll, Pitch, Yaw。HC-SR04超声波作为倒车雷达实现避障。红外传感器支持一路红外循迹。交互系统0.96寸OLED显示电池电压、传感器数据。WS2812灯条作为车灯和状态指示。无源蜂鸣器 LM4871功放提供报警音效和音乐播放。控制系统三套并行互不干扰JDY31蓝牙模块实现传统串口蓝牙遥控。CI-03T语音模块实现语音指令控制。ESP-01S WiFi模块实现网页遥控这是本项目的重点。云台与图传使用两个SG90舵机搭建2自由度云台可搭载图传模块如Sipeed M1s Dock或ESP32-CAM实现第一视角。这样一套下来车子既能通过多种方式遥控又能感知环境并反馈信息可玩性和学习价值都比较高。2. 核心电路与引脚分配详解硬件连接是项目的基础引脚分配错了后面调试全是坑。下面我把关键部分的连接方式整理出来。2.1 电机驱动与引脚分配电机驱动用的是TC1508芯片每片驱动一个电机的正反转。GD32通过PWM信号控制TC1508的输入脚从而控制电机速度和方向。6个电机对应12个PWM输出引脚具体分配如下电机位置控制线GD32引脚定时器通道功能说明左前轮A相PB9TIMER1_CH1控制正转PWMB相PE6TIMER8_CH1控制反转PWM左中轮A相PA1TIMER4_CH1控制正转PWMB相PA6TIMER2_CH0控制反转PWM左后轮C相PB0TIMER2_CH2控制正转PWMD相PB11TIMER1_CH3控制反转PWM右前轮A相PB15TIMER11_CH1控制正转PWMB相PB6TIMER3_CH0控制反转PWM右中轮A相PB10TIMER1_CH2控制正转PWMB相PA7TIMER2_CH1控制反转PWM右后轮C相PA3TIMER4_CH3控制正转PWMD相PA2TIMER4_CH2控制反转PWM注意在程序初始化时需要先开启对应GPIO和定时器的时钟然后将这些引脚配置为复用推挽输出模式并映射到对应的定时器通道上最后初始化定时器产生PWM。2.2 传感器模块连接传感器主要通过I2C、GPIO和ADC与主控通信。BMP180温压传感器SDA- PF8SCL- PF10VCC- 5V通信协议I2CMPU6050姿态传感器SDA- PB8SCL- PB5VCC- 5V通信协议I2CHC-SR04超声波TRIG- PC10 (输出触发信号)ECHO- PC12 (输入回波信号)VCC- 3.3V注意ECHO脚返回的是5V电平不能直接接GD32的3.3V引脚需要电平转换或分压。原文中接3.3V可能有误实际操作建议加电平转换电路。红外循迹传感器信号线- PF9VCC- 3.3V启动按键- PA0 (KEY_UP)电池电压检测ADC输入- PC4 (对应ADC0/1_IN14)通过电阻分压网络将电池电压降至MCU的ADC量程内如0-3.3V。2.3 控制与通信模块连接三种控制方式通过串口与GD32通信非常方便。JDY31蓝牙模块RXD- PD2 (配置为UART4_RX)仅需接收蓝牙指令故只接RX。TX可不接或用于调试。CI-03T语音模块RXD- PC11 (配置为UART3_RX)接收语音识别后的串口指令。ESP-01S WiFi模块重点TX- PG14 (配置为USART5_RX)RX- PG9 (配置为USART5_TX)与GD32进行双向串口通信收发控制指令和传感器数据。2.4 其他外设连接舵机云台旋转舵机 - PB3 (TIMER1_CH1, 5V供电)俯仰舵机 - PC6 (TIMER7_CH0, 5V供电)声光效果蜂鸣器 - PF7 (TIMER10_CH0, 5V)LM4871功放 - PA4 (DAC_OUT0, 5V)WS2812灯条 - PC3 (5V)OLED屏幕 - SCL: PA8, SDA: PC9 (5V)3. WiFi网页遥控方案实现这是本项目最亮点的功能用ESP-01S模块创建热点并发布一个控制网页手机或电脑连上就能遥控无需安装任何APP。3.1 ESP-01S的程序思路ESP-01S上运行的是用Arduino框架编写的程序核心功能有两个作为一个WiFi热点AP模式让手机/电脑连接。建立一个Web服务器当用户访问时发送一个包含控制按钮和数据显示区域的HTML网页。用户在网页上的操作如点击前进按钮会通过JavaScript触发HTTP请求ESP-01S收到请求后通过串口将对应的控制指令如“FORWARD”发送给GD32主控。同时GD32定时将传感器数据打包成字符串通过串口发给ESP-01SESP-01S再通过WebSocket或HTTP响应将数据实时更新到网页上。3.2 GD32与ESP-01S的通信协议两者之间通过串口USART5进行简单可靠的字符串指令通信。协议可以设计得非常直观控制指令网页 - ESP-01S - GD32CAR_FORWARD 前进CAR_BACK 后退CAR_LEFT 左转CAR_RIGHT 右转CAR_STOP 停止LIGHT_ON 打开车灯PAN_LEFT 云台左转...等等数据回传GD32 - ESP-01S - 网页为了高效可以将所有数据打包成一个字符串用特定分隔符隔开例如VOLT:12.5,DIST:25.6,TEMP:26.7,ALT:55.3,PITCH:1.2\r\n在GD32程序中只需要在串口中断服务函数或主循环中解析这些字符串指令即可。// GD32端简化的指令处理示例 void USART5_IRQHandler(void) { if(usart_interrupt_flag_get(USART5, USART_INT_FLAG_RBNE)) { char received_char usart_data_receive(USART5); // 将字符存入缓冲区 buffer[buflen] received_char; // 检测到指令结束符例如换行符 if(received_char \n) { buffer[buflen] \0; // 字符串结束符 process_command(buffer); // 处理指令 buflen 0; // 重置缓冲区 } } } void process_command(char* cmd) { // 使用字符串比较函数识别指令 if(strstr(cmd, CAR_FORWARD)) { motor_forward(); oled_show(Moving Forward); } else if(strstr(cmd, CAR_STOP)) { motor_stop(); oled_show(Stopped); } // ... 处理其他指令 }3.3 网页界面设计要点用HTML和JavaScript可以快速做一个控制面板。核心部分包括方向控制区用上下左右四个按钮或者一个摇杆控件。传感器数据显示区用div或span标签来动态显示电压、距离、温度等。功能按钮区车灯开关、云台控制、音效播放等。JavaScript负责给按钮绑定点击事件向ESP-01S发送HTTP请求并定时请求或通过WebSocket接收传感器数据来更新页面。提示用Arduino IDE开发ESP-01S时如果HTML网页代码包含中文记得将.ino文件保存为ANSI编码否则上传后中文会显示乱码。4. 多传感器数据采集与融合车上的几个传感器需要不同的驱动方式数据采集到后可以综合显示在OLED和网页上。4.1 BMP180温度与气压采集BMP180通过I2C通信。流程是初始化I2C - 读取校准参数 - 发起温度测量 - 读取未补偿的温度数据 - 发起气压测量 - 读取未补偿的气压数据 - 使用校准参数进行补偿计算得到真实的温度和气压值。气压值可以进一步换算为海拔高度。// 简化流程伪代码 float read_bmp180_temperature(void) { i2c_write_cmd(BMP180_ADDR, CMD_READ_TEMP); delay(5); // 等待转换 raw_temp i2c_read_data(BMP180_ADDR); // 使用校准参数计算实际温度 actual_temp compensate_temperature(raw_temp); return actual_temp; }4.2 MPU6050姿态角获取MPU6050同样使用I2C。需要初始化传感器设置量程、滤波器等参数。然后不断读取三轴加速度计和三轴陀螺仪的原始数据。通过软件库如DMP或自行实现互补滤波、卡尔曼滤波等算法将这些原始数据融合成稳定的Roll、Pitch、Yaw角。4.3 超声波测距与避障逻辑HC-SR04的驱动很简单但需要精确的定时器测量高电平时间。给TRIG脚一个至少10us的高脉冲。模块自动发出8个40kHz超声波。监听ECHO脚变为高电平同时开启定时器。ECHO脚变低时停止定时器。距离 (高电平时间 * 声速) / 2。在程序中可以设置几个阈值来实现倒车雷达功能distance get_ultrasonic_distance(); if(distance 30 distance 10) { beep(1); // 一级警报间歇鸣叫 } else if(distance 10 distance 6) { beep(2); // 二级警报急促鸣叫 } else if(distance 6) { motor_stop(); // 三级警报自动停车 oled_show(STOP! Too Close); } // 但最终控制权交给用户用户可强制下令继续后退4.4 数据综合显示与上报在主循环中可以定时比如每200ms采集一次所有传感器数据然后刷新OLED屏幕显示。通过串口打包发送给ESP-01S格式如VOLT:%.1f,DIST:%.1f,TEMP:%.1f,ALT:%.1f,PITCH:%.1f\r\n。5. 组装调试与常见问题5.1 机械组装要点双板结构上下两块PCB用中间两个轮子的安装孔位通过螺丝紧密固定。上下板之间用M2铜柱支撑。前轮垫高对于下面一块板需要切下两块小板垫在前轮安装孔下否则前轮高度不对。电机供电左侧3个电机的驱动芯片由一个IP5306模块供电右侧3个电机由另一个IP5306模块供电主控、传感器、舵机等由第三个IP5306模块供电。这样隔离供电可以避免电机堵转时拉低控制部分的电压。接口方向原文特别强调安装时XH2.54插座的方向请务必自行用万用表确认好不要完全依赖PCB上的标识OLED屏幕0.96寸OLED有不同引脚顺序请根据你手上的屏幕通过跳线帽将板子上的J01和J02连接到正确的VCC和GND。5.2 软件调试顺序建议按以下顺序分模块调试确保每一步都正确后再进行整合基础工程先建立一个能点亮LED、能用串口打印的GD32工程。电机驱动单独测试每一个电机的PWM输出确保能正反转。传感器逐个测试BMP180、MPU6050、超声波确保能正确读取数据。通信模块先测试蓝牙或语音模块因为它们是简单的串口指令。最后重点调试ESP-01S的WiFi网页功能。整合逻辑将电机控制、传感器采集、指令解析switch...case语句整合到主循环中。5.3 踩过的坑与注意事项供电问题在前进/后退时车体有时会莫名向右偏一下。这很可能是供电不足导致的。务必确保电机特别是驱动部分和MCU控制部分是分开独立供电的。最好能让上下两块板、电机和MCU使用不同的电源开关先后上电尤其是在使用耗电较大的图传模块时。安全第一智能车不用时务必拔掉18650电池防止短路或过放。焊接与安装CI-03T语音模块等需要自己焊接排针注意不要虚焊。舵机臂安装到云台支架可能需要用小锉刀耐心打磨。飞线扩展车体留有很多洞洞板区域传感器位置和连线可以根据你的需求用“飞线洞洞板”的方式自由调整我的设计只是提供一种可行方案。这个项目把硬件设计、嵌入式编程、无线通信和Web技术串了起来实践性很强。遇到问题别怕多用串口打印调试信息一步步排查。希望这篇详细的拆解能帮你少走弯路顺利做出自己的智能车。