基于stm32单片机四足机器人,应用sg90舵机(8个)控制四条腿,BT06蓝牙模块与单片机进行串口通讯,控制机器人前进后退转动
针对STM32单片机控制的四足机器人项目,使用8个SG90舵机并通过蓝牙BT06进行控制,以下是视频展示
一、设计简介
针对STM32单片机控制的四足机器人项目,使用8个SG90舵机并通过蓝牙BT06进行控制,以下是视频展示
基于stm32四足机器人,sg90舵机8个,蓝牙模块BT06
百度网盘源码资料下载链接
https://pan.baidu.com/s/1DpydIRuhsTLnbWYqtZ3o0A?pwd=vgaz
二、硬件准备
-
STM32单片机:
STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。
具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。
内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。


-
SG90舵机:
- 共8个,用于驱动四足机器人的四条腿。

SG90舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统。在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
- 无负载速度:0.12秒/60度(4.8V)
- 堵转扭矩:1.2~1.4公斤/厘米(4.8V)
- 使用温度:-30~+60摄氏度
- 死区设定:7微秒(7MHZ)
- 工作电压:4.8V~6V
- 位置等级:1024级
舵机一般可以在0~180度或0~360度范围内转动任意角度,经常用于小车小船转向控制和机械臂的关节等。舵机的转动角度范围不是固定的,一般选用0~180度旋转的舵机,简称180度舵机。
SG90舵机的工作原理主要由电机、电子控制板和位置反馈器三部分组成。当系统通过SG90 PWM信号控制电子控制板时,电机内部的电机轴会向上或向下旋转,从而输出一定的转角位置。位置反馈器会读取输出轴的角度位置信息,并将该信息反馈给电子控制板,从而实现闭环控制。
在控制SG90舵机时,MCU需要产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。高电平时间与舵机旋转角度的对应关系如下:
- 0.5ms:0度(占空比为2.5%)
- 1.0ms:45度(占空比为5.0%)
- 1.5ms:90度(占空比为7.5%)
- 2.0ms:135度(占空比为10.0%)
- 2.5ms:180度(占空比为12.5%)
-
蓝牙BT06模块:
- 用于实现与手机或其他蓝牙设备的无线通信,从而控制四足机器人的运动。

BT06蓝牙模块是一款专为智能无线数据传输设计的模块,以下是对其的详细介绍:
一、主要特点
- 遵循蓝牙规范:BT06蓝牙模块遵循V3.0蓝牙规范,确保了数据传输的稳定性和高效性。
- 支持UART接口:该模块支持UART接口,方便与各种微控制器、单片机等设备进行连接和数据传输。
- 支持SPP蓝牙串口协议:BT06蓝牙模块支持SPP(Serial Port Profile)蓝牙串口协议,使得数据传输更加简单和直接。
- 成本低、体积小:模块具有成本低、体积小的优点,适合在各种小型设备中使用。
- 功耗低、收发灵敏性高:只需配备少许的外围元件就能实现其强大功能,同时功耗较低,收发灵敏性高。
二、硬件接口
- 电源接口:通常接在5V供电口上。
- 数据传输接口:TXD、RXD接口用于数据传输,只需将蓝牙的TXD、RXD接口对应接在串口的RXD、TXD上,即可进行数据传输。
三、工作模式
- 数据透传模式:当BT06蓝牙模块上电并与手机APP配对成功后,即进入数据透传模式。在数据透传模式下,从串口发送出的所有消息都可以原封不动地传输到手机APP中,实现了数据的透明传输。
四、AT指令集
BT06蓝牙模块支持AT指令集,用户可以通过串口发送AT指令来配置和控制模块。以下是一些常用的AT指令:
- 测试指令:发送“AT”,返回“OK”表示模块工作正常。
- 模块复位:发送“AT+RESET”,模块将重启并恢复到默认状态。
- 获取软件版本号:发送“AT+VERSION”,返回软件版本号。
- 恢复默认状态:发送“AT+DEFAULT”,模块将恢复到出厂默认设置。
- 设置/查询蓝牙地址码:发送“AT+LADDR<地址码>”,可以设置或查询模块的蓝牙地址码。
- 设置/查询设备名称:发送“AT+NAME<名称>”,可以设置或查询模块的蓝牙设备名称。
- 查询模块角色:发送“AT+ROLE”,可以查询模块的角色(主角色或从角色)。
- 设置/查询配对码:发送“AT+PIN<配对码>”,可以设置或查询模块的蓝牙配对密码。
- 设置/查询串口波特率:发送“AT+BAUD<波特率>”,可以设置或查询模块的串口波特率。
三、硬件连接
-
STM32与SG90舵机的连接:
- 使用STM32的PWM输出引脚(如TIM2和TIM4的通道)连接SG90舵机的信号线。
- 根据SG90舵机的工作原理,通过PWM信号的占空比来控制舵机的旋转角度。
-
STM32与蓝牙BT06模块的连接:
- 将蓝牙BT06模块的RXD和TXD引脚分别连接到STM32的串口(如USART2)的TXD和RXD引脚上。
- 配置STM32的串口以接收和发送蓝牙数据。
四、软件设计
-
STM32固件开发:
- 使用Keil等开发工具进行STM32固件的开发。
- 配置STM32的时钟、GPIO、PWM和串口等外设。
- 编写PWM控制代码,用于生成控制SG90舵机所需的PWM信号。
- 编写串口通信代码,用于接收和解析来自蓝牙BT06模块的数据。
-
蓝牙通信协议:
- 定义一套蓝牙通信协议,用于手机或其他蓝牙设备与STM32单片机之间的数据交换。
- 协议可以包括控制指令、数据格式、校验方式等内容。
-
四足机器人步态控制:
- 根据四足机器人的运动需求,设计相应的步态控制算法。
- 通过调整SG90舵机的旋转角度和速度,实现四足机器人的前进、后退、转向等动作。
-
调试与优化:
- 在实际调试过程中,可能需要对PWM信号的占空比、串口通信的波特率等参数进行调整。
- 根据四足机器人的运动效果,对步态控制算法进行优化。
五、原理图及设计流程图


六、程序代码
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_usart.h"
#include "bsp_GeneralTim.h"
#include "bsp_servo.h"
uint8_t state;
int main()
{
USART_Config();
LED_GPIO_Config();
printf("四足机器人初始化中!\r\n");
GENERAL_TIM_Init();
while(1)
{
if(USART_GetFlagStatus(DEBUG_USARTx_2,USART_FLAG_RXNE) != RESET)
{
state = USART_ReceiveData(DEBUG_USARTx_2);
Usart_SendByte(DEBUG_USARTx_1, state);
}
//机器人的动作通过扫描串口的值进行选择进入
//蓝牙主机设置为:按下发送01、02、03...,松手发送00
switch(state)
{
case 0:
//暂停状态
break;
case 1:
//前进
Servo_Advance();
break;
case 2:
//右转
Servo_RightTurn();
break;
case 3:
//左转
Servo_LeftTurn();
break;
case 4:
//后退
Servo_Retreat();
break;
case 5:
//特殊姿势1,左右摆动
Servo_Pose_1();
break;
case 6:
//站立
Servo_Stand();
break;
case 7:
//趴下
Servo_Fall();
break;
case 8:
//复位姿态
Servo_Reset();
break;
default:
printf("无任何状态指示!\r\n");
break;
}
}
}
七、实物图片

八、实物图片

百度网盘源码资料下载
https://pan.baidu.com/s/1DpydIRuhsTLnbWYqtZ3o0A?pwd=vgaz
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)