1. 项目开篇:为什么你需要一个蓝牙控制的舵机系统?
大家好,我是老张,一个在嵌入式领域摸爬滚打了十多年的“老电工”。今天想和大家分享一个既好玩又实用的项目——用你手边的STM32单片机,加上一个几十块钱的HC-05蓝牙模块,来打造一个可以无线遥控的智能舵机控制系统。这听起来是不是有点像遥控玩具?但它的潜力远不止于此。
想象一下,你可以用手机APP,隔空控制一个机械臂抓取小物件,或者让一个摄像头云台自动追踪你的移动,甚至为你的智能家居做一个自动开合的窗帘控制器。这些应用的核心,其实就是一个能接收无线指令、并精确控制角度的舵机系统。我之所以选择STM32和HC-05这个组合,是因为它们实在是太经典、太“能打”了。STM32性能强悍、资源丰富,而HC-05蓝牙模块价格低廉、稳定可靠,对于初学者和想快速做出成品的开发者来说,是性价比最高的入门组合。
很多朋友一听到“嵌入式”、“无线控制”就觉得头大,感觉要学一堆复杂的通信协议和底层驱动。别怕,这个项目我会带你从最基础的硬件连线开始,一步步写代码、调参数,直到舵机乖乖听你手机的话。我会把我在项目中踩过的坑、总结的经验都分享出来,保证你跟着做,一定能成功。文章最后,我也会提供完整的、可以直接编译运行的源码,让你拿到就能用。
2. 核心硬件“三剑客”:STM32、HC-05与SG90舵机
在动手连接电线之前,我们得先摸清楚手里这几个“宝贝”的脾气。这就好比你要组乐队,得先了解吉他、贝斯和鼓各自怎么发声。
2.1 大脑:STM32微控制器
我们项目的大脑是STM32,这里我以最常见的STM32F103C8T6(也就是常说的“蓝色药丸”或最小系统板)为例。它是一颗基于ARM Cortex-M3内核的32位单片机,主频高达72MHz,内存有20KB RAM和64KB Flash。听起来参数很唬人,但你只需要记住:它的计算能力足够强,外设(比如我们马上要用到的定时器和串口)非常丰富,而且社区资源庞大,遇到问题基本都能找到答案。
对于这个项目,STM32主要干三件事:
- 通过串口和HC-05蓝牙模块“聊天”:接收从手机发过来的控制指令。
- 产生精确的PWM信号:这是驱动舵机转动的关键。
- 执行逻辑判断:比如判断收到的是指令‘1’还是‘2’,然后让舵机转到对应的角度。
你不需要成为STM32专家才能开始。市面上有大量现成的库函数(比如标准库或HAL库),我们可以像搭积木一样调用它们,把复杂的寄存器操作封装成简单的函数。我会在后面的代码部分详细展示。
2.2 信使:HC-05蓝牙模块
HC-05是我们的无线信使,负责在手机和STM32之间传递信息。它基于经典的蓝牙2.0协议,支持串口透传。“透传” 这个词是关键,你可以把它理解为一个“无线串口线”。手机发送的数据,HC-05原封不动地通过串口传给STM32;STM32要发送的数据,它也原样转发给手机。我们完全不用去管复杂的蓝牙协议栈,就像使用有线串口一样简单。
这里有几个实战中必须注意的细节:
- 供电:HC-05模块的输入电压范围是3.2V到6V。虽然STM32的IO口是3.3V,但为了蓝牙通信更稳定,我强烈建议你用一根独立的5V电源线(比如从USB口或稳压模块取电)给HC-05供电。用3.3V有时也能工作,但通信距离和稳定性会大打折扣,这是我踩过的第一个坑。
- 引脚:我们主要用到5个引脚:VCC(接5V)、GND(接地)、TXD(发送端)、RXD(接收端)、KEY(模式设置脚)。接线时牢记:模块的TXD要接单片机的RXD,模块的RXD要接单片机的TXD,这是串口通信的常识,但新手接反是家常便饭。
- 状态指示灯:模块上的LED灯是重要的调试工具。快闪(每秒闪2次)通常是在搜索配对;慢闪(每2秒闪1次)表示已配对但未连接;双闪(闪两下停一下)则表示蓝牙已成功连接。学会看灯,能帮你快速定位问题。
2.3 执行者:SG90微型舵机
SG90舵机是我们的“手”和“脚”,负责把电信号转换成具体的角度动作。它内部有一个小型直流电机、一套减速齿轮和一个位置反馈电位器,组成了一个闭环控制系统。
控制它的秘诀在于理解PWM(脉冲宽度调制) 信号。SG90要求一个周期为20毫秒(即频率50Hz)的PWM波。在这个周期内,高电平的持续时间(脉冲宽度)决定了舵机的角度:
- 0.5ms脉宽 -> 对应舵机转到 0度 位置。
- 1.5ms脉宽 -> 对应舵机转到 90度 中间位置。
- 2.5ms脉宽 -> 对应舵机转到 180度 位置。
这个关系基本上是线性的。所以,我们的STM32就需要产生一个周期固定为20ms,但脉冲宽度能在0.5ms到2.5ms之间精确变化的PWM信号。STM32的定时器外设天生就

&spm=1001.2101.3001.5002&articleId=153096196&d=1&t=3&u=d56122a08efc4915bbefc8e77b91d1e8)
465

被折叠的 条评论
为什么被折叠?



