一、蓝牙小车
- 小车
1.1 两个直流电机
1.2驱动板
1.3 电池
1.4 单片机系统板
2.蓝牙

HC-05 是一款市面上非常常见的经典蓝牙串口通信模块,支持主从模式切换,广泛用于无线数据传输和嵌入式开发,采购时可根据需求选择不同品牌和型号 。
这模块能干啥
HC-05 主要是用来代替串口线,让两个设备之间不用插线就能传数据。
无线透传:它把串口数据变成蓝牙信号发出去,对方收到后再变回串口数据,就像有一根看不见的线连着 。
主从都能当:既可以当主机主动连别人,也能当从机被别人连,两个 HC-05 之间也能直接对话 。
适用场景:常用来做手机控制小车、智能家居遥控、单片机之间传数据等,有效距离大概 10 米左右 。
买回来怎么接
接线比较简单,但要注意电压和引脚对应,接错了可能烧模块或通信失败。
引脚功能:模块通常有 6 个引脚,常用的是 VCC(电源)、GND(地)、TXD(发送)、RXD(接收),还有 STATE(状态指示)和 KEY(配置用)。
电源电压:工作电压一般是 3.6V 到 6V,但核心芯片是 3.3V 的,如果用 5V 供电最好加个降压电路,或者直接接 3.3V 更稳妥 。
信号线接法:
交叉连接:模块的 TXD 接单片机的 RXD,模块的 RXD 接单片机的 TXD,千万别接反了 。
电平匹配:如果单片机是 5V 电平,建议在模块 RXD 引脚串个 1k 左右的电阻,防止电压太高损坏模块 。
二、写程序
参考单片机串口交互的程序
https://blog.csdn.net/ganhui13000/article/details/134644689?spm=1011.2415.3001.5331

main.c
c
#include <reg52.h>
#include "string.h"
#include "motor.h"
unsigned char ta[]={"123你好?\r\n"};//
unsigned char ta_temp[10];
unsigned char temp=0,i=0;
bit flag_rx=0;
void uart_init()
{
SM0=0;
SM1=1;
PCON=0; //SMOD=0
TMOD=0X20;
TH1=TL1=256-3;
TR1=1;
REN=1;
}
void string(unsigned char *p)
{
while(*p!=0)
{
SBUF=*p;
while(TI!=1);//等待发送完成
TI=0;
p++;
}
}
void main()
{
//出口初始化
uart_init();
// SBUF='A';
// while(TI!=1);//等待发送完成
// TI=0;
// SBUF='B';//发送新的数据
// while(TI!=1);
// TI=0;
//
// string("单片机好玩吗?\r\n");
// string(ta);
ES=1;//串口分开关
EA=1;//总开关
while(1)
{
// while(RI!=1);//等待接收完成
// temp=SBUF;//读取数据
// P2=temp;
// RI=0;//清除标志位
// 判断 字符串 ta 与ta_temp 是否相等
if(flag_rx==1)
{
flag_rx=0;
if(temp=='G'){//up
qianjin();
P2=~0X10;
} else if(temp=='K'){//DOWN
houtui();
P2=~0X01;
}
else if(temp=='H'){//L
zuozhuan();
P2=~0X02;
}
else if(temp=='J'){//R
P2=~0X04;
youzhuan();
}
else{ //I
P2=~0X08;
stop();
}
SBUF=temp;
while(TI!=1);//等待发送完成
TI=0;
// string(ta_temp);
}
}
}
void uart()interrupt 4
{
if(RI==1)
{
temp=SBUF;
//ta_temp[i]=temp;
RI=0;
//i++;
if(temp=='G'||temp=='H'||temp=='I'||temp=='J'||temp=='K' )
{
flag_rx=1;
//i=0;
//temp=0;
}
}
if(TI==1)
{
}
}
motor.h
c
#include <reg52.h>
sbit P00=P0^0;//电机1
sbit P01=P0^1;//电机1
sbit P02=P0^2;//电机2
sbit P03=P0^3;//电机2
sbit key=P3^3;
void qianjin();
void houtui();
void zuozhuan();
void youzhuan();
void stop();
void delay(unsigned int ms);
unsigned char keynum=0;
/////////////////////////////////////////////////////////////////////
/*void main()
{
key=1;
while(1)
{
if(key==0)
{
delay(1000);
if(key==0)
{
keynum++;
if(keynum==6) keynum=0;
}
while(key==0);
}
if(keynum==1) {qianjin();}
if(keynum==2) {houtui();}
if(keynum==3) {zuozhuan();}
if(keynum==4) {youzhuan();}
if(keynum==5) {stop();}
}
}*/
// 功能是延时
//无返回值
//ms的范围 0-65535 测试过1代表2us
void delay(unsigned int ms)
{
while(ms--);
}
void qianjin()
{
P00=1; P01 =0;
P02=1; P03 =0;
}
void houtui()
{
P00=0; P01 =1;
P02=0; P03 =1;
}
void zuozhuan()
{
P00=0; P01 =1;
P02=0; P03 =0;
}
void youzhuan()
{
P00=0; P01 =0;
P02=0; P03 =1;
}
void stop()
{
P00=0; P01 =0;
P02=0; P03 =0;
}
三、手把收教学视频
20260616_103042蓝牙51单片机小车
B站视频
https://www.bilibili.com/video/BV1ukjT61EEN/?vd_source=2f51b53d36c7b878a5128c37eb2800a4