)
手机蓝牙App控制STM32四足机器人全流程实战指南项目背景与核心价值在创客教育和机器人开发领域四足机器人一直是最能激发学习热情的项目类型之一。不同于轮式或履带机器人四足结构对运动控制算法提出了更高要求是理解机器人运动学的绝佳载体。本项目采用STM32F103C8T6作为主控配合PCA9685舵机驱动板和JDY-31蓝牙模块实现了一个可通过手机App无线控制的完整四足机器人解决方案。这个项目的独特优势在于全开源设计提供完整的3D打印文件、电路连接图和经过验证的代码库模块化架构蓝牙通信、舵机控制和运动算法分层实现便于二次开发低成本方案全部采用常见电子元件整体成本控制在300元以内教育友好从硬件组装到软件调试全程可追踪适合教学演示1. 硬件系统搭建1.1 核心组件选型组件型号关键参数备注主控芯片STM32F103C8T6ARM Cortex-M3, 72MHz, 64KB Flash最小系统板即可舵机驱动PCA968516通道12位PWM, I2C接口需外接5V电源蓝牙模块JDY-31蓝牙3.0, 30米传输距离默认波特率9600舵机SG90180°旋转, 4.8V供电需12个同型号结构件3D打印PLA材质, 1.5mm厚度提供STL文件1.2 电路连接详解PCA9685连接方案VCC → 5V电源正极 GND → 电源负极 SCL → PB6(I2C1) SDA → PB7(I2C1)JDY-31蓝牙模块接线VCC → 3.3V GND → GND RX → PA9(USART1_TX) TX → PA10(USART1_RX)注意舵机电源必须与主控电源共地但建议使用独立5V/3A电源为PCA9685供电避免舵机动作时导致MCU复位。1.3 机械结构组装要点腿部关节装配每个腿部使用3个舵机分别控制髋、膝、踝关节使用M2螺丝固定舵机与结构件避免过紧导致舵机卡滞机身平衡调整重心应落在四足形成的支撑多边形内可通过配重块微调重心位置线材管理使用束线带整理舵机线缆确保线材不会限制关节运动2. 蓝牙通信系统实现2.1 JDY-31模块配置通过串口发送AT指令配置模块参数# 示例使用Python脚本配置蓝牙模块 import serial ser serial.Serial(COM3, 9600, timeout1) ser.write(bATNAMEQuadBot\r\n) # 设置设备名称 ser.write(bATPIN1234\r\n) # 修改配对密码 ser.write(bATBAUD8\r\n) # 设置波特率115200常用AT指令速查表指令功能示例ATNAME修改设备名ATNAMEQuadBotATPIN设置配对码ATPIN8888ATBAUD波特率设置ATBAUD8 (115200)ATVERSION查询版本ATVERSION2.2 手机端控制App开发推荐使用开源框架MIT App Inventor快速构建控制界面界面设计添加6个按钮控件分别对应前进、后退、左转、右转、待机、特殊动作每个按钮按下发送对应字符码如F、B等蓝牙通信逻辑// App Inventor示例代码块 当 蓝牙客户端1.接收到数据 如果 接收到的数据 F 则 机器人控制.前进 结束 如果数据协议设计单字节控制指令0x01~0x06对应不同动作状态反馈机制机器人可回传当前姿态数据3. 运动控制算法实现3.1 舵机底层驱动PCA9685初始化关键代码void PCA_Init() { // 设置PWM频率为50Hz标准舵机控制频率 uint8_t prescale (int)(25000000.0f / (4096 * 50.0f * 0.83f)) - 1; PCA_Write(PCA9685_MODE1, 0x10); // 进入睡眠模式 PCA_Write(PCA9685_PRESCALE, prescale); PCA_Write(PCA9685_MODE1, 0x80); // 退出睡眠 HAL_Delay(5); }舵机角度控制函数void SetServoAngle(uint8_t channel, float angle) { // 将角度转换为PWM脉宽500-2500us uint16_t pulse (uint16_t)(angle * 2000.0f / 180.0f 500.0f); uint16_t pwm (uint16_t)(pulse * 4096 / 20000.0f); // 转换为12位值 PCA_SetPWM(channel, 0, pwm); }3.2 四足步态算法三角步态实现流程初始姿态对角两组腿如左前右后向外展开另两组腿向内收拢运动循环graph TD A[抬起右前腿] -- B[向前摆动] B -- C[放下右前腿] C -- D[身体前移] D -- E[抬起左后腿] E -- F[向前摆动] F -- G[放下左后腿] G -- H[身体前移]对应代码实现void TrotGait() { // 第一步右前腿摆动 SetServoAngle(0, 60); // 髋关节 SetServoAngle(1, 30); // 膝关节 HAL_Delay(200); // 第二步身体前移 for(int i0; i4; i) { SetServoAngle(i*4, currentAngle[i]-5); } HAL_Delay(300); // 后续步态类似实现... }3.3 运动参数优化技巧速度调节减小步幅可提高运动稳定性增加步频可提升移动速度能耗优化在保持姿态阶段降低PWM占空比采用间歇性供电策略防抖处理// 添加运动滤波 float filteredAngle 0.9f * filteredAngle 0.1f * targetAngle; SetServoAngle(channel, filteredAngle);4. 系统集成与调试4.1 完整控制流程蓝牙指令接收void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart-Instance USART1) { switch(rxBuffer[0]) { case F: currentMode FORWARD; break; case S: currentMode STOP; break; // 其他指令处理... } HAL_UART_Receive_IT(huart1, rxByte, 1); } }主控制循环while(1) { switch(currentMode) { case FORWARD: TrotGait_Forward(); break; case STOP: StandStill(); break; // 其他模式处理... } HAL_Delay(10); }4.2 常见问题排查舵机抖动问题检查电源是否充足建议使用示波器观察电压波动确认PWM信号接地与电源共地尝试添加滤波电容1000μF以上蓝牙连接不稳定# 使用AT指令调整发射功率 ATPOW8 # 设置为最大功率8dBm运动不协调使用标记笔在关节处做参考标记逐步调整每个舵机的零点位置记录各关节的理想运动范围4.3 进阶改进方向姿态反馈系统添加MPU6050传感器实现平衡控制通过PID算法自动调整重心视觉导航扩展# 使用OpenCV实现简单视觉跟踪 import cv2 cap cv2.VideoCapture(0) while True: ret, frame cap.read() # 颜色识别处理...ROS集成通过STM32的USB接口实现ROS通信使用rosserial协议传输控制指令项目所有设计文件和源码已托管至GitHub仓库包含详细的Wiki文档和演示视频。在实际教学中建议分阶段实现先完成单腿控制再实现四足协调最后添加蓝牙功能。这种渐进式开发方法能有效降低学习曲线。