基于51单片机的蓝牙控制小车程序(HC-05+L298N)

张开发
2026/4/11 22:45:31 15 分钟阅读

分享文章

基于51单片机的蓝牙控制小车程序(HC-05+L298N)
一、系统概述基于STC89C52RC单片机11.0592MHz晶振通过HC-05蓝牙模块实现手机APP与单片机的无线通信结合L298N电机驱动模块控制2路直流减速电机实现小车的前进、后退、左转、右转、停止及调速功能。系统支持实时指令响应和低功耗设计适用于教育机器人、玩具小车等场景。二、硬件设计2.1 核心组件选型模块型号/参数功能说明主控STC89C52RC8KB Flash512B RAM蓝牙指令解析、电机控制逻辑、状态管理蓝牙模块HC-05主从一体蓝牙2.0与手机APP通信串口透传波特率9600bps电机驱动L298N双H桥2A/路驱动2路直流电机正转/反转/调速电机2×直流减速电机6V带轮小车动力左/右轮差速转向电源7.4V锂电池或5V/2A DC为L298N和电机供电单片机用5V稳压手机APP蓝牙串口调试器如“蓝牙调试器”发送控制指令字符型如’F’前进2.2 硬件连接图------------------- ------------------- ------------------- | STC89C52RC | | HC-05 | | L298N驱动模块 | | P3.0(RXD) ← HC-05|TXD | VCC→5V, GND→GND | | VCC→7.4V, GND→GND | | P3.1(TXD) → HC-05|RXD | STATE→P3.7状态指示| | IN1→P2.0, IN2→P2.1 | | P2.0~P2.3 → L298N|IN1~IN4 | | | IN3→P2.2, IN4→P2.3 | | P1.0 → L298N|ENA左电机PWM | | | ENA→P1.0, ENB→P1.1 | | P1.1 → L298N|ENB右电机PWM | | | OUT1/2→左电机 | | 5V稳压 → 单片机VCC | | | OUT3/4→右电机 | ------------------- ------------------- -------------------关键说明HC-05默认波特率9600bps8N1通过AT指令可配置为主/从模式本设计设为主模式手机连接从机。L298NIN1/IN2控制左电机正转/反转IN3/IN4控制右电机ENA/ENB为使能端高电平有效接PWM可调速。三、软件设计Keil C513.1 开发环境IDEKeil μVision5C51编译器晶振11.0592MHz确保串口波特率误差1%通信协议蓝牙串口透传手机APP发送单字符指令如’F’/‘B’/‘L’/‘R’/‘S’3.2 核心原理蓝牙通信HC-05与手机APP配对后通过串口P3.0/RXD、P3.1/TXD接收指令波特率9600bps。指令解析单片机接收单字符指令映射为电机控制动作如’F’前进‘L’左转。电机控制通过L298N的IN1~IN4控制电机转向ENA/ENB接PWM信号本设计用IO口模拟PWM占空比可调。3.3 核心代码实现3.3.1 头文件与引脚定义#includereg52.h#includeintrins.h// 引脚定义 // 蓝牙模块HC-05P3.0RXD接收P3.1TXD发送#defineBLUETOOTH_RXDP3_0#defineBLUETOOTH_TXDP3_1// L298N电机驱动#defineMOTOR_IN1P2_0// 左电机正转#defineMOTOR_IN2P2_1// 左电机反转#defineMOTOR_IN3P2_2// 右电机正转#defineMOTOR_IN4P2_3// 右电机反转#defineMOTOR_ENAP1_0// 左电机使能PWM#defineMOTOR_ENBP1_1// 右电机使能PWM// 状态指示LED#defineLED_RUNP3_7// 运行状态灯闪烁表示正常// 全局变量 unsignedcharbluetooth_cmd0;// 蓝牙接收指令F/B/L/R/Sbit cmd_received0;// 指令接收完成标志3.3.2 延时函数微秒/毫秒级11.0592MHz// 微秒延时误差±1usvoidDelayUs(unsignedintus){while(us--){_nop_();_nop_();_nop_();_nop_();// 4个_nop_≈3.6us需根据晶振调整}}// 毫秒延时voidDelayMs(unsignedintms){unsignedinti,j;for(i0;ims;i)for(j0;j110;j);// 110次循环≈1ms}3.3.3 串口初始化蓝牙通信9600bps// 串口初始化模式18N1波特率9600bps11.0592MHzvoidUART_Init(){SCON0x50;// 模式18位UART允许接收REN1TMOD|0x20;// 定时器1模式28位自动重装TH10xFD;// 波特率9600bpsTH1256-11059200/(12×32×9600)2530xFDTL10xFD;TR11;// 启动定时器1ES1;// 允许串口中断EA1;// 开总中断}3.3.4 电机控制函数L298N驱动// 左电机控制dir0停1正转2反转speed0~100%占空比voidMotor_Left(unsignedchardir,unsignedcharspeed){if(dir0){// 停止MOTOR_IN10;MOTOR_IN20;}elseif(dir1){// 正转MOTOR_IN11;MOTOR_IN20;}elseif(dir2){// 反转MOTOR_IN10;MOTOR_IN21;}MOTOR_ENA(speed0)?1:0;// 使能PWM简化高电平全速低停止}// 右电机控制同上voidMotor_Right(unsignedchardir,unsignedcharspeed){if(dir0){// 停止MOTOR_IN30;MOTOR_IN40;}elseif(dir1){// 正转MOTOR_IN31;MOTOR_IN40;}elseif(dir2){// 反转MOTOR_IN30;MOTOR_IN41;}MOTOR_ENB(speed0)?1:0;}// 小车动作函数简化版全速voidCar_Forward(){// 前进Motor_Left(1,100);// 左电机正转全速Motor_Right(1,100);// 右电机正转全速}voidCar_Backward(){// 后退Motor_Left(2,100);Motor_Right(2,100);}voidCar_TurnLeft(){// 左转左轮停右轮转Motor_Left(0,0);Motor_Right(1,100);}voidCar_TurnRight(){// 右转右轮停左轮转Motor_Left(1,100);Motor_Right(0,0);}voidCar_Stop(){// 停止Motor_Left(0,0);Motor_Right(0,0);}3.3.5 串口中断蓝牙指令接收// 串口中断服务函数接收蓝牙指令voidUART_ISR()interrupt4{if(RI){// 接收中断标志RI0;// 清除标志bluetooth_cmdSBUF;// 读取接收字符cmd_received1;// 标记指令接收完成}}3.3.6 主函数指令解析与执行voidmain(){UART_Init();// 初始化串口蓝牙通信LED_RUN0;// 初始灯灭while(1){// 1. 状态指示LED闪烁1HzLED_RUN~LED_RUN;DelayMs(500);// 2. 解析蓝牙指令并执行if(cmd_received){cmd_received0;// 清除标志switch(bluetooth_cmd){caseF:Car_Forward();break;// 前进caseB:Car_Backward();break;// 后退caseL:Car_TurnLeft();break;// 左转caseR:Car_TurnRight();break;// 右转caseS:Car_Stop();break;// 停止default:break;// 无效指令}}}}四、测试与验证4.1 硬件连接按2.2节连接HC-05P3.0/P3.1、L298NP2.0~P2.3P1.0/P1.1电机接L298N输出端电源用7.4V锂电池L298N的12V接7.4V5V输出给单片机。4.2 功能测试手机APP配置安装“蓝牙调试器”连接HC-05设置发送单字符‘F’/‘B’/‘L’/‘R’/‘S’。动作测试发送’F’小车前进发送’L’左转发送’S’停止观察是否与指令一致。参考代码 51单片机蓝牙控制小车程序www.youwenfan.com/contentcss/182664.html五、总结基于51单片机和HC-05蓝牙模块实现了小车无线控制核心是串口通信和电机驱动逻辑。通过模块化设计可扩展PWM调速用定时器生成PWM波、避障功能添加超声波传感器或循迹功能添加红外对管满足更复杂的控制需求。

更多文章