云计算百科
云计算领域专业知识百科平台

从硬件搭建到APP控制搭建一台智能小车

智能小车是嵌入式入门的经典项目,本文分享一款基于 STC89C52RC + 深圳大夏龙雀科技 DX-BT37 蓝牙模块 打造的多功能智能小车,集蓝牙遥控、超声波避障、红外避障、RGB炫彩灯效于一体。

在做这个项目之前,我对比了市面上多款蓝牙模块,最终选择大夏龙雀的BT37,核心原因有二:一是它采用 BK3633 芯片,支持 蓝牙 5.2 协议,抗干扰能力强;二是工作电流仅 5mA 左右,对电池供电的小车来说非常友好;实际测试中,能够稳定连接,完全满足智能小车的遥控需求。


一、项目功能概览

1.1 功能清单

功能模块

具体功能

实现方式

蓝牙遥控

前进、后退、左转、右转、停止、变速、模式切换

BT37 BLE 透传 + 手机APP

超声波避障

前方测距,自动减速、停车

HC-SR04 超声波模块

红外避障

两侧检测障碍物,自动转向

红外避障模块

RGB炫彩灯

前大灯/转向灯/呼吸灯/彩虹灯

RGB LED + PWM 混色

速度控制

5档速度可调

MX1508 PWM 调速

电源管理

锂电池供电 + TP4056 充电

两节18650 + TP4056

1.2 项目亮点

  • 入门友好:以 STC89C52RC 为主控,51单片机是高校嵌入式入门的首选,代码简单易懂

  • 蓝牙稳定:采用大夏龙雀 BT37 蓝牙 5.2 模块,遥控体验流畅

  • 功能齐全:遥控 + 避障 + 灯效 + 调速

  • 成本低廉:全部物料加起来不到50元


二、系统总体架构

整个系统采用 "手机端(APP)— BT37蓝牙模块 — STC89C52主控 — 执行层(电机、传感器、灯光)" 的三层架构:

2.1 工作原理

  • 蓝牙连接:BT37 模块上电后自动广播,手机蓝牙搜索并建立 BLE 连接,WORK-STATUS 引脚输出高电平表示连接成功

  • 指令下发:用户在手机端点击方向键或功能按钮,指令通过 BLE 透传至 BT37 模块

  • UART通信:BT37 通过 UART(默认波特率9600)将指令发送给 STC89C52RC 主控

  • 指令解析:51单片机解析指令,执行对应的电机驱动、传感器读取或灯效变换

  • 状态回传:传感器数据和运行状态通过蓝牙回传到手机端显示

  • 2.2 硬件选型清单

    模块

    型号

    接口

    数量

    说明

    主控

    STC89C52RC

    ×1

    51单片机,8051内核,LQFP-44

    蓝牙

    大夏龙雀 DX-BT37

    UART

    ×1

    BLE5.2,BK3633芯片,AT指令配置

    电机驱动

    MX1508

    PWM

    ×1

    双路直流电机驱动,低功耗

    电机

    直流减速电机(带轮胎)

    ×2

    TT马达,1:48减速比

    超声波

    HC-SR04

    触发+回波

    ×1

    测距范围2cm~400cm

    红外避障

    红外对管模块

    数字输出

    ×2

    左右各一,检测障碍物

    灯光

    RGB LED(共阴)

    PWM

    ×1

    三原色混合,炫彩效果

    电源

    18650 锂电池

    ×2

    3.7V串联,7.4V供电

    充电

    TP4056 充电模块

    ×1

    锂电池并联充电(改装后)

    搭建

    面包板 + 杜邦线 + 车底盘

    1套

    免焊接,快速原型


    三、硬件设计与连接

    3.1 硬件连接总览

    全部电路通过面包板 + 杜邦线搭建,无需PCB,零基础也能快速上手。连接示意图如下:

    3.2 STC89C52RC 引脚分配

    // STC89C52RC 引脚分配
    #define MOTOR_L_IN1 P1_0 // 左电机 IN1
    #define MOTOR_L_IN2 P1_1 // 左电机 IN2
    #define MOTOR_R_IN1 P1_2 // 右电机 IN1
    #define MOTOR_R_IN2 P1_3 // 右电机 IN2

    // ========== 超声波 HC-SR04 ==========
    #define TRIG_PIN P2_0 // 触发信号
    #define ECHO_PIN P2_1 // 回波信号

    // ========== 红外避障 ==========
    #define IR_LEFT P2_2 // 左红外
    #define IR_RIGHT P2_3 // 右红外

    // ========== RGB LED ==========
    #define LED_R P1_4 // 红灯
    #define LED_G P1_5 // 绿灯
    #define LED_B P1_6 // 蓝灯

    3.3 MX1508 电机驱动原理

    MX1508 是一款双通道直流电机驱动芯片,体积小、功耗低,非常适合小型智能小车:

    IN1

    IN2

    电机状态

    1

    0

    正转

    0

    1

    反转

    1

    1

    刹车

    0

    0

    滑行

    通过 PWM 信号控制 IN1/IN2 的占空比即可实现调速。STC89C52 没有硬件 PWM,可使用定时器中断模拟 PWM 输出,也可以用 PCA 模块实现(STC89C52RC 带 PCA 功能)。

    3.4 HC-SR04 超声波测距原理

    超声波模块通过发射40kHz方波,检测回波时间计算距离:

    // 超声波测距函数
    float HC_SR04_GetDistance(void)
    {
    unsigned int time;
    float distance;

    TRIG_PIN = 0;
    delay_us(5);
    TRIG_PIN = 1; // 发送10us触发脉冲
    delay_us(10);
    TRIG_PIN = 0;

    while(ECHO_PIN == 0); // 等待回波
    TR0 = 1; // 启动定时器0计时
    while(ECHO_PIN == 1); // 等待回波结束
    TR0 = 0; // 停止计时

    time = TH0 * 256 + TL0; // 读取计时值
    TH0 = 0; TL0 = 0; // 清零

    // 距离 = 时间 × 声速 / 2
    // 声速340m/s = 34000cm/s = 0.034cm/us
    distance = (float)time * 0.017; // 除以2

    return distance;
    }

    3.5 电源方案设计

    电源是小车的"心脏",本项目采用双节18650锂电池方案:

    • 动力供电:两节18650串联,输出约7.4V,直接给 MX1508 和电机供电,保证动力充足

    • 控制供电:通过 AMS1117-3.3V 降压,给 STC89C52、BT37、传感器供电(STC89C52可宽压3.3~5V工作,建议3.3V以匹配BT37电平)

    • 充电方案:将两节电池改为并联(3.7V),通过 TP4056 单芯片充电,充满后切换回串联模式使用

    • 注意事项:BT37 工作电压 2.0~3.6V,严禁直接接7.4V,必须经过稳压!

    注意:BT37 模块的 VBAT 引脚建议就近放置 22uF + 0.1uF 两个滤波电容,减少射频突发传输时的电压跌落,提高通信稳定性。这是手册里特别强调的细节,实测确实有效。

    3.6 电平匹配注意事项

    STC89C52 是 5V 单片机,而 BT37 是 3.3V 模块,两者串口通信需要注意电平匹配:

    • BT37 TX → STC89C52 RX:3.3V 高电平可以被 5V 单片机识别为高电平,直接连接即可

    • STC89C52 TX → BT37 RX:5V 高电平超过 BT37 的 3.6V 最大耐压,必须使用电平转换模块降压

    最简单的方案:串联一个 1KΩ 电阻 + 3.3V 钳位二极管,或者直接用分压电路(2K + 3.3K 电阻分压)。


    四、大夏龙雀 DX-BT37 蓝牙模块

    BT37 是整个项目的无线通信核心,这里专门展开讲一下这款模块的技术特点和使用心得。

    4.1 模块核心参数

    参数

    规格

    芯片型号

    BK3633

    蓝牙协议

    蓝牙 5.2 

    工作电压

    2.0~3.6V

    工作电流

    约5mA

    深度睡眠电流

    约1μA

    空旷通信距离

    181.6m

    4.2 为什么选 BT37?

    我之前也用过其他品牌的蓝牙模块,综合对比下来,大夏龙雀 BT37 的优势体现在:

    BT37支持蓝牙5.2,连接速度更快、功耗更低、AT指令丰富,板载天线,无需额外设计天线电路。

    4.3 AT指令配置示例

    BT37 的 AT 指令与 BT36 兼容,我常用指令如下(注意实测发现部分AT指令需重启后才能生效):

    // AT 指令示例(串口发送,返回OK表示成功)
    "AT\\r\\n" // 测试AT指令是否正常
    "AT+NAME=MyCar\\r\\n" // 设置设备名称为 MyCar
    "AT+BAUD=9600\\r\\n" // 设置波特率9600
    "AT+PWR=7\\r\\n" // 设置发射功率(0-9级)
    "AT+UUID=FFE0\\r\\n" // 设置服务UUID
    "AT+PWRM=0\\r\\n" // 设置功耗模式(0正常,1低功耗,2冬眠)
    "AT+RESET\\r\\n" // 复位模块

    4.4 供电参考电路


    五、通信协议设计

    5.1 指令格式

    采用简洁的文本指令协议,以 \\r\\n 结尾,便于调试:

    // ========== 运动控制指令 ==========
    "FWD\\r\\n" // 前进
    "BACK\\r\\n" // 后退
    "LEFT\\r\\n" // 左转
    "RIGHT\\r\\n" // 右转
    "STOP\\r\\n" // 停止

    // ========== 速度控制 ==========
    "SPD:1\\r\\n" // 速度1档
    "SPD:2\\r\\n" // 速度2档
    "SPD:3\\r\\n" // 速度3档
    "SPD:4\\r\\n" // 速度4档
    "SPD:5\\r\\n" // 速度5档

    // ========== 灯效控制 ==========
    "LED:0\\r\\n" // 关灯
    "LED:1\\r\\n" // 前大灯(白光常亮)
    "LED:2\\r\\n" // 左转灯(黄色闪烁)
    "LED:3\\r\\n" // 右转灯(黄色闪烁)
    "LED:4\\r\\n" // 刹车灯(红色常亮)
    "LED:5\\r\\n" // 呼吸灯(RGB渐变)
    "LED:6\\r\\n" // 彩虹灯(RGB循环)

    // ========== 模式切换 ==========
    "MODE:0\\r\\n" // 手动遥控模式
    "MODE:1\\r\\n" // 自动避障模式

    // ========== 数据查询 ==========
    "GET:DIST\\r\\n" // 查询前方距离

    // ========== 回复格式 ==========
    "OK\\r\\n" // 执行成功
    "ERR\\r\\n" // 执行失败
    "DIST:25.3\\r\\n" // 距离数据(cm)

    5.2 串口解析实现

    STC89C52 使用硬件串口中断接收数据,逐字节解析:

    #define RX_BUF_SIZE 32
    unsigned char rx_buf[RX_BUF_SIZE];
    unsigned char rx_index = 0;
    bit cmd_ready = 0;

    // 串口中断服务函数
    void UART_ISR() interrupt 4
    {
    unsigned char ch;

    if(RI) {
    RI = 0;
    ch = SBUF;

    if(ch == '\\n' || rx_index >= RX_BUF_SIZE – 1) {
    rx_buf[rx_index] = '\\0';
    cmd_ready = 1;
    rx_index = 0;
    } else if(ch != '\\r') {
    rx_buf[rx_index++] = ch;
    }
    }
    }

    // 主循环中处理指令
    void main(void)
    {
    UART_Init(); // 串口初始化,9600波特率
    Motor_Init(); // 电机初始化
    LED_Init(); // LED初始化
    HC_SR04_Init(); // 超声波初始化

    while(1) {
    if(cmd_ready) {
    cmd_ready = 0;
    Parse_Command(rx_buf);
    }

    // 自动避障模式
    if(auto_mode) {
    Obstacle_Avoidance();
    }

    // LED灯效任务
    LED_Task();
    }
    }


    六、软件架构与控制流程

    6.1 主循环结构

    整个系统采用前后台架构:中断负责数据接收和PWM时序,主循环负责指令解析和业务逻辑。

    // 主循环概览
    void main(void)
    {
    System_Init(); // 系统初始化

    while(1) {
    // 1. 处理蓝牙指令
    if(cmd_ready) {
    Parse_Command(rx_buf);
    cmd_ready = 0;
    }

    // 2. 自动避障模式
    if(auto_mode) {
    Obstacle_Avoidance_Task();
    }

    // 3. LED灯效刷新
    LED_PWM_Update();

    // 4. 定时采集传感器
    if(timer_100ms) {
    timer_100ms = 0;
    sensor_distance = HC_SR04_GetDistance();
    }
    }
    }

    6.2 自动避障算法

    void Obstacle_Avoidance_Task(void)
    {
    float dist = HC_SR04_GetDistance();

    if(dist < 10.0) {
    // 距离太近,停车后退
    Motor_Backward();
    delay_ms(500);
    Motor_TurnRight();
    delay_ms(800);
    }
    else if(IR_LEFT == 0) {
    // 左边有障碍物,右转
    Motor_TurnRight();
    delay_ms(300);
    }
    else if(IR_RIGHT == 0) {
    // 右边有障碍物,左转
    Motor_TurnLeft();
    delay_ms(300);
    }
    else {
    // 前方畅通,前进
    Motor_Forward();
    }
    }


    七、手机APP控制端

    为了让小车的控制更便捷,开发了配套的 蓝牙控制APP(也可用微信小程序实现),通过 BLE 直接连接 BT37 模块:

    APP功能

    功能区

    功能说明

    方向控制

    D-pad方向键,前进/后退/左转/右转/停止

    速度调节

    5档速度滑块,实时调整车速

    模式切换

    手动遥控 / 自动避障 一键切换

    灯效控制

    大灯/转向灯/刹车灯/呼吸灯/彩虹灯

    状态显示

    连接状态、电池电压、前方距离


    八、机械结构与组装

    8.1 车体结构

    小车采用双层结构设计:

    • 底层:电机驱动板(MX1508)+ 电池 + 电机 + 车轮 + 红外

    • 上层:STC89C52 主控板 + BT37 蓝牙模块 + 超声波 + RGB灯

    这样的布局好处是重心低、行驶稳定,同时传感器安装在前端,检测更灵敏。

    8.2 组装要点

  • 电机固定:使用铜柱将电机支架固定在底盘上,确保左右电机对称

  • 万向轮:前端安装一个万向轮作为支撑,使小车能够灵活转向

  • 电池仓:建议设计专门的电池仓,避免电池晃动影响重心

  • 传感器高度:超声波和红外避障模块安装高度约3~5cm,与地面平行

  • 布线整理:用扎带整理线束,避免线材缠绕车轮


  • 九、实测问题记录

    9.1 超声波测距不准

  • 确保 TRIG 触发脉冲宽度 ≥ 10us

  • 可以多次采样取平均值,减小误差

  • 9.2 小车走不直

  • 左右电机转速有差异,软件上做速度补偿,也可以在程序中微调左右PWM占空比

  • 检查轮胎是否安装到位,万向轮是否灵活


  • 十、项目总结

    基本物料总结

    物料

    单价(参考)

    数量

    STC89C52RC 最小系统板

    约3元

    ×1

    大夏龙雀 DX-BT37 蓝牙模块

    约1元

    ×1

    MX1508 电机驱动

    约3元

    ×1

    TT减速电机 + 轮胎

    约8元

    ×2

    HC-SR04 超声波模块

    约4元

    ×1

    红外避障模块

    约2元

    ×2

    RGB LED + 电阻

    约1元

    ×1

    18650 锂电池 + 电池盒

    约6元

    ×2

    TP4056 充电模块

    约2元

    ×1

    车底盘 + 万向轮

    约8元

    1套

    面包板 + 杜邦线

    约5元

    若干

    AMS1117-3.3V + 电容

    约1元

    ×1

    不到50元的成本,就能做出一台功能齐全的蓝牙智能小车,性价比非常高。

    对于入门嵌入式的朋友来说,做一台自己的蓝牙智能小车,是学习单片机、电机驱动、传感器和蓝牙通信的绝佳练手项目。希望这篇文章能给你带来启发,也欢迎在评论区交流你的创意!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 从硬件搭建到APP控制搭建一台智能小车
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!