【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)

简介: 通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。

基于STM32的蓝牙小车项目详解

源码下载
完整项目已打包,开源免费:https://shangjinzhu.blog.csdn.net/article/details/150432527

一、项目概述

随着智能小车和物联网技术的发展,基于STM32的蓝牙小车已成为学习嵌入式开发和无线控制的热门项目。本项目基于STM32微控制器,结合蓝牙通信、超声波测距、电机驱动及编码器,实现了一辆可远程控制、具备避障功能的智能小车。

核心功能包括:

  • 蓝牙无线遥控小车前进、后退、转向、停止
  • 超声波实时测距,实现前方障碍物自动避障
  • 电机PWM驱动,实现速度控制
  • 编码器计数,实现小车行驶里程统计

该项目不仅适合初学者学习STM32硬件控制,也可作为智能机器人开发的基础平台。


在这里插入图片描述

二、硬件设计与接口说明

本项目的硬件设计主要包括STM32主控板、电机驱动模块、蓝牙模块、超声波模块、编码器及LED/按键等外围设备。各功能与IO口对应关系如下表:

功能/外设 IO口 备注
LED GPIOA 12, GPIOC 13 官方例程与补充
Key GPIOA 15, GPIOA 0 官方例程与补充
ADC GPIOA 4 官方例程
I2C GPIOB 8, GPIOB 9 官方例程
USART1 TX: PA9, RX: PA10 官方例程
USART2 TX: PA2, RX: PA3 官方例程
USART3 TX: PB10, RX: PB11 官方例程
Soft I2C PB8, PB9 官方例程
超声波测距 - 控制输出 GPIOB 1 官方例程
超声波测距 - 定时器输入 Timer3: GPIOB 0 官方例程
电机转向控制 - AIN2 GPIOB 15 官方例程
电机转向控制 - AIN1 GPIOB 14 官方例程
电机转向控制 - BIN1 GPIOB 13 官方例程
电机转向控制 - BIN2 GPIOB 12 官方例程
电机PWM输出 - CH1 GPIOA 8 官方例程
电机PWM输出 - CH4 GPIOA 11 官方例程
编码器输入 - Timer2 GPIOA 0, GPIOA 1 官方例程
编码器输入 - Timer4 GPIOB 6, GPIOB 7 官方例程
定时器输出 - Timer3 CH3 PB0 官方例程
定时器输出 - Timer3 CH4 PB1 官方例程
定时器输入 - Timer1 CH1 PA8 官方例程
定时器输入 - Timer3 CH1 PA6 官方例程
延时功能 Timer4 官方例程
系统时间 Timer2 官方例程
电机控制备用 PA1, PA2, PA3, PA4 补充

硬件连接说明

  1. 电机驱动模块:使用H桥控制小车前后左右运动,PWM信号控制速度。
  2. 蓝牙模块:通过USART串口与STM32通信,实现手机APP远程控制。
  3. 超声波模块:通过GPIO输出Trig信号,输入Echo信号到定时器捕获,实现精确测距。
  4. 编码器:利用定时器输入捕获计数,实现轮速与里程测量。
  5. LED与按键:用于状态指示和手动控制。

在这里插入图片描述

三、STM32开发环境搭建

本项目采用STM32F103系列开发板,开发工具为 STM32CubeIDE。开发步骤如下:

  1. 创建STM32工程,选择对应芯片型号
  2. 配置时钟、GPIO、定时器、USART、ADC等外设
  3. 生成初始化代码
  4. 编写功能模块程序

外设初始化示例(C语言)

// GPIO初始化
void MX_GPIO_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStruct = {
   0};

    // LED GPIO初始化
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_13;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、蓝牙控制实现

1. 蓝牙通信原理

蓝牙模块(如HC-05)通过串口与STM32通信,接收手机APP发送的控制指令。常用指令如:

指令 功能
'F' 前进
'B' 后退
'L' 左转
'R' 右转
'S' 停止

2. USART串口接收示例

uint8_t rx_data;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
   
    if(huart->Instance == USART2)
    {
   
        switch(rx_data)
        {
   
            case 'F': move_forward(); break;
            case 'B': move_backward(); break;
            case 'L': turn_left(); break;
            case 'R': turn_right(); break;
            case 'S': stop_car(); break;
        }
        HAL_UART_Receive_IT(&huart2, &rx_data, 1);
    }
}

五、电机驱动与PWM控制

小车的速度通过PWM信号控制,方向通过H桥电机驱动器控制。

PWM初始化示例

void MX_TIM1_Init(void)
{
   
    TIM_OC_InitTypeDef sConfigOC = {
   0};

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 71;
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 999;
    HAL_TIM_PWM_Init(&htim1);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}

六、超声波避障功能

超声波模块通过Trig产生10μs脉冲,Echo输入到定时器,测量高电平时间,计算距离:

float get_distance(void)
{
   
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
    HAL_Delay(0.01);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    uint32_t duration = HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1);
    float distance = duration * 0.034 / 2;
    return distance;
}

当距离小于设定阈值时,小车自动停止或转向。


七、编码器实现里程计数

利用编码器信号和定时器捕获,统计轮子旋转次数,计算行驶距离和速度。

uint32_t encoder_count = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
   
    if(htim->Instance == TIM2)
    {
   
        encoder_count = __HAL_TIM_GET_COUNTER(htim);
    }
}

八、软件整合与逻辑流程

  1. 初始化外设
  2. 启动PWM输出
  3. 启动USART接收蓝牙指令
  4. 循环读取超声波距离,判断是否避障
  5. 根据蓝牙指令控制小车运动
  6. 读取编码器数据进行速度/里程统计

整体流程图如下:

[蓝牙接收指令] --> [解析指令] --> [控制电机PWM与方向]
                     |
                     v
                [超声波测距]
                     |
             距离 < 阈值 ? --> [停止/转向]
                     |
                     v
                [编码器计数]

九、调试与优化

  1. 蓝牙通信:检查串口波特率是否匹配,确保数据稳定传输
  2. PWM调速:通过调整占空比实现平滑加速/减速
  3. 超声波测距:注意防止干扰,超声波避障逻辑可增加滤波
  4. 编码器:避免抖动导致计数不准确,可使用硬件滤波或软件防抖

十、总结

通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
本项目基于STM32微控制器,成功实现了一辆具备蓝牙远程控制、超声波避障、电机PWM调速以及编码器里程计数功能的智能小车。通过对GPIO、USART、定时器、PWM和I2C等外设的综合运用,系统能够稳定响应蓝牙指令,同时具备自动避障能力。该项目不仅适合初学者学习STM32硬件控制与嵌入式编程,也为后续扩展如循迹导航、视觉识别或自动寻路提供了坚实的硬件与软件基础。整体来看,本项目兼具实用性和拓展性,是入门智能机器人开发的优秀案例。

相关文章
|
4月前
|
传感器 数据采集 人工智能
基于STM32单片机的智能晾衣架设计与实现【开源免费】
随着智能家居的发展,传统晾衣架已经难以满足现代家庭对便捷、智能化的需求。基于STM32单片机的智能晾衣架能够实现自动升降、光照检测、风干控制、远程控制等功能,为家庭用户提供更智能、更舒适的晾晒体验。本项目以STM32F103C8T6为核心控制器,通过电机驱动模块、光照传感器、温湿度传感器、蓝牙/Wi-Fi通信模块,实现晾衣架的自动化与远程控制。
基于STM32单片机的智能晾衣架设计与实现【开源免费】
|
4月前
|
传感器 数据采集 算法
【免费开源】基于 STM32F4 的四轴飞行器设计与实现——从零开始到成功起飞(项目源码打包分享)
四轴飞行器作为一种低空、低成本的遥感平台,已经在多个领域展现出广泛的应用潜力。相比其他类型的飞行器,它在硬件上结构紧凑、安装方便,但在软件层面却充满挑战——从传感器数据融合到姿态解算,再到快速且稳定的控制算法,每一环节都需要精心设计,也正因此让四轴飞行器更具技术魅力。
455 74
|
4月前
|
存储 编解码 开发者
基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】
小恐龙游戏最初是作为浏览器离线小游戏而广为人知,其简单的操作与生动的画面使其深受用户喜爱。本项目将经典的小恐龙跳跃游戏移植到嵌入式平台上,使用STM32微控制器作为核心控制器,OLED屏幕进行显示,搭配按键或触摸实现用户交互。通过本项目,既可以体验游戏开发在嵌入式系统上的实现方式,又能掌握STM32 GPIO、定时器、OLED驱动、按键扫描及简单动画实现技术。
基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】
|
4月前
|
传感器 数据采集 物联网
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
随着可穿戴设备的普及,智能手环逐渐成为健康管理、运动监测和生活便捷的重要工具。本项目旨在设计一款基于STM32微控制器和FreeRTOS实时操作系统的智能手环,具备心率监测、运动计步、睡眠分析以及蓝牙通信功能。通过FreeRTOS实现多任务调度,提高系统响应效率和资源利用率,同时保证低功耗设计,延长手环续航。
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
|
4月前
|
传感器 数据采集 安全
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
本项目成功实现了基于STM32的智慧行李箱设计,采用了超声波测距、重力传感器和报警系统等技术,打造了一款智能且安全的行李箱。通过超声波测距模块,行李箱能够实时跟随主人并根据距离变化调整电机的速度与方向,确保小车始终保持与主人的相对位置。此外,重力测量模块能够检测行李箱内物品的重量,若超重则及时通过LED和蜂鸣器提醒主人,避免物品过重对行李箱造成损害或不便。
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
|
4月前
|
传感器 人工智能 监控
【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码
本项目基于STM32F103C8T6设计实现智能宠物喂食系统,支持定时喂食、远程控制、余粮检测、语音提示等功能,结合传感器与物联网技术,提升宠物喂养智能化水平,适用于家庭及嵌入式课程实践。源码开源,具备良好扩展性。
【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码
|
10月前
|
存储 安全 数据安全/隐私保护
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
本文介绍了基于STM32的Customer BootLoader刷新项目的第一部分:使用STM32CubeMX搭建UART串口通信工程。项目采用正点原子探索者v2开发板,通过USB串口与上位机通信,实现固件刷新功能。主要内容包括: 1. 硬件原理图介绍:详细描述了开发板的串口连接方式及电路图。 2. STM32CubeMX工程搭建:从创建新工程、配置系统时钟、USART串口设置到生成代码,一步步详细说明。 3. 代码编写:展示了如何使用HAL库实现串口接收和发送数据,并提供了main.c的完整代码。 4. 工程下载和调试:编译并下载工程到开发板,通过串口调试助手验证通信功能。
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
|
10月前
|
芯片 内存技术
STM32 Customer BootLoader 刷新项目 (二) 方案介绍
本项目设计了一款基于STM32的二级BootLoader,旨在为客户自定义启动过程提供软件更新和操作后门。BootLoader架构分为三层:ST自带Boot(SB)、客户定制化Boot(CB)和应用层(APP)。CB通过USART与MCU通信,支持多种指令如版本查询、擦除扇区、写入数据等,实现灵活的软件管理和更新功能。Flash空间分配为Sector 0-1用于CB,Sector 2-11用于APP。整个方案详细介绍了内存布局、跳转逻辑及支持的指令集,确保系统稳定运行并支持未来的扩展需求。
 STM32 Customer BootLoader 刷新项目 (二) 方案介绍
|
传感器 数据采集 监控
基于阿里云MQTT服务,设计一个STM32的智能光伏控制系统
这篇文章详细介绍了利用STM32F103C8T6单片机实现光伏发电系统的关键技术。全文分为四章:第一章阐述了光伏发电的背景、意义及应用场景,强调其在绿色能源领域的重要性。第二章介绍了如何通过STM32F103C8T6及光敏电阻和伺服电机实现光线追踪系统,详细描述了硬件选择、连接及使用HAL库编写的单片机程序。第三章讲解了最大功率点追踪(MPPT)的原理,并展示了如何利用STM32F103C8T6和相关传感器、DC-DC转换器实现MPPT功能。第四章描述了如何通过STM32F103C8T6与SIM7600CE 4G模块连接到阿里云MQTT服务,实现设备状态数据的远程传输和控制。本文提供了全面的硬
18200 5