四轮独立驱动蓝牙遥控小车 项目总结报告
参赛方向:工业控制(电机控制)
核心:STM32F103 + 双 L298N+HC-05+OLED + 四轮独立控制
一、项目介绍 & 创意介绍
项目介绍
本项目立足于工业控制领域中的移动机器人电机控制技术,以STM32F103C8T6高性能单片机作为主控核心,搭建一套完整的四轮独立驱动式蓝牙遥控小车控制系统。整体系统由主控单元、无线通信单元、电机驱动单元、状态显示单元与四轮执行机构共同组成。
项目采用双L298N驱动方案,分别对四个TT直流减速电机进行独立驱动控制,结合HC-05蓝牙串口模块实现无线远程指令接收。设备上位机通过蓝牙下发控制指令,单片机完成数据接收、指令解析、PWM信号输出,从而控制小车完成前进、后退、原地左转、原地右转、紧急停止等基础运动动作。同时搭载0.96寸OLED显示屏,实时刷新当前接收指令编号与设备运行状态,实现人机交互可视化。
该小车本质为微型工业AGV移动机器人验证平台,复刻了工业移动底盘的差速控制、无线遥控、状态监测等核心功能,可用于学习工业直流电机调速原理、差速转向算法、串口无线通信、嵌入式闭环控制系统开发,具备极强的教学价值与工程实践价值。

创意介绍
- 四轮独立驱动,差速转向控制:区别于传统两轮驱动小车,本项目采用四轮独立驱动架构,四个电机可单独进行转速与正反转控制。通过左右车轮差速控制实现精准转向,运动灵活性更高,适配复杂行驶路况,完全贴合工业AGV小车的底层控制逻辑。
- 无线蓝牙远距离操控:搭载HC-05主从一体蓝牙模块,摒弃传统有线控制模式,有效消除线束束缚,操控距离可达10米左右,支持手机APP实时下发指令,适配远程自动化控制场景。
- 可视化人机交互系统:配置0.96寸OLED高清显示屏,无需上位机即可本地实时展示蓝牙接收指令、小车运行模式,开发人员可快速判断系统运行状态,方便硬件调试与故障排查。
- 模块化设计,拓展性极强:硬件电路分层独立,软件代码函数封装,整体结构简单、成本低廉、极易复刻。可在此项目基础上拓展红外避障、循迹、姿态传感器、自动巡航等功能,可直接迭代为巡检机器人、自动搬运AGV小车。
- 工业级电机控制逻辑:采用定时器PWM占空比调速方式,模拟工业电机调速方案,帮助开发者掌握工业场景下直流电机启停、制动、无级调速的核心技术。
二、硬件与 PCB 介绍
1. 硬件组成
- 主控:STM32F103C8T6 单片机,整车控制核心,统筹外设、电机、通信、语音逻辑。
- 动力部分:HX25035-4A 驱动芯片替代 L298N,驱动 4 个 TT 直流减速电机,四路 PWM 调速。
- 人机交互:0.96 寸 I2C-OLED 屏幕显示状态;6 个独立按键本地操控;3 路 LED 做系统状态指示灯。
- 语音模块:SPI 存储语音模块 + 串口 TTS 播报模块,分别实现固定提示音、实时文字播报。
- 无线通信:HC-05 蓝牙模块,串口连接主控,实现手机 APP 蓝牙遥控。
- 电源:板载稳压电路,外部宽压输入,分出 3.3V(MCU / 外设)、5V(电机 / 语音)双路供电;配套小车底盘、接插件、线材。
2. PCB 设计
PCB 按主控、电源、电机、外设分区域布局,强弱电分区布线;强弱电源分开铺铜,芯片就近添加去耦电容;高速 SPI/I2C 走线缩短,统一 PH2.54 接插件,便于拆装调试。

三、方案框图 & 设计思路
方案框图

整体架构:HC-05蓝牙模块 → STM32F103主控单片机 → 双L298N驱动模块 → 四路TT电机;STM32同步联动OLED显示屏完成数据可视化。
硬件层面采用分层设计思想:电源部分独立供电,电机电源与单片机逻辑电源分区布线,降低电机启停产生的电磁干扰;通信部分利用USART3串口对接HC-05蓝牙模块;电机控制部分利用TIM1、TIM2通用定时器输出8路PWM信号,分别控制四个电机转速与方向;显示部分通过I2C通信驱动OLED屏幕,实时同步系统运行数据。
软件采用模块化编程思想,将程序划分为初始化函数、蓝牙接收函数、电机PWM控制函数、指令解析函数、OLED显示函数。系统上电后完成外设初始化,开启串口接收中断,持续监听蓝牙指令;一旦捕获有效指令,通过Switch分支结构解析指令代码,并调用对应的电机控制函数,同时刷新OLED屏幕数据,形成“指令接收—解析—执行—反馈”的闭环控制系统。
四、原理图

五、软件流程图 & 关键代码介绍
软件流程图

关键代码介绍
- 蓝牙中断接收:通过串口中断实时获取蓝牙数据,完成指令采集;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART3)
{
if(uart3_rx_bufx >= '0' && uart3_rx_bufx <= '9') //读取蓝牙接收的数据
{
ly_data = uart3_rx_bufx - '0';
}
HAL_UART_Receive_IT(&huart3, &uart3_rx_bufx, 1); //开启串口,中断便于下一次进入中断
}
}
- PWM 电机控制:使用 TIM1、TIM2 输出 8 路 PWM,独立控制 4 个电机正反转与转速;
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
- 指令解析:switch 语句判断 1-5 数字指令,执行前进、后退、左转、右转、停止;
if(ly_data)
{
sprintf(shuzhu,"dat:%d",ly_data);
OLED_ShowString(2,2,shuzhu);
switch (ly_data)
{
case 1:motor_retreat();break; //后退
case 2:motor_stop();break; //停止
case 3:motor_advance();break; //前进
case 4:motor_left();break; //左转
case 5:motor_right();break; //右转
}
ly_data=0;
}
- OLED 显示:实时刷新接收的指令数据,直观展示系统状态。
sprintf(shuzhu,"dat:%d",ly_data);
OLED_ShowString(2,2,shuzhu);
六、功能展示图及说明
- 蓝牙发送3:小车前进,OLED 显示对应数据;
- 蓝牙发送1:小车后退,电机同步反向运转;
- 蓝牙发送4/5:小车左右转向,实现差速控制;
- 蓝牙发送2:小车立即停止,所有电机断电。


七、设计中遇到的难题和解决方法
- 问题:电机转动时干扰蓝牙,导致指令错乱
解决:优化供电,增加电源稳定性,分开模拟 / 数字供电。 - 问题:PWM 通道多,电机动作逻辑混乱
解决:封装独立电机函数(前进 / 后退 / 停止等),代码模块化管理。 - 问题描述:直接传输数字变量会导致屏幕显示乱码,无法正常展示接收指令。
解决:引入sprintf格式化函数,将数字变量强制转换为标准字符串格式后再调用OLED显示函数;同时优化屏幕刷新频率,避免高频刷新造成的屏幕卡顿、花 屏问题。
八、竞赛心得体会
在本次电子设计竞赛过程中,我完成了从硬件选型、电路接线、原理图绘制、程序编写、功能调试到整体项目整合的全流程开发,全方位提升了嵌入式硬件开发与电机控制相关专业能力。
硬件层面,我深入掌握了STM32单片机外设使用方法、L298N驱动模块工作原理、蓝牙串口通信接线规范,理解了电磁干扰的产生原理与对应的降噪、稳压解决方案,积累了大电流电机控制系统的布线与调试经验。软件层面,熟练掌握定时器PWM配置、串口中断回调机制、模块化编程思想,能够独立完成多外设协同工作的嵌入式程序开发。
本次以四轮独立驱动小车为载体,系统学习了工业控制领域AGV移动底盘的差速控制原理,明白了小型民用小车与工业移动机器人的共通之处,打破了单纯课本理论的局限性,深刻理解闭环控制系统、电机无级调速、无线远程控制的工程应用价值。
同时项目开发过程也暴露了我初期电路布局不合理、代码冗余度高、故障排查效率低等问题。通过不断调试优化,我的问题分析能力与工程思维得到极大提升。后续我计划在此项目基础上,增加姿态传感器、自动循迹、定点巡航等高级功能,进一步向工业级智能巡检AGV靠拢。本次竞赛收获颇丰,是我嵌入式学习道路上宝贵的实践财富。