基于stm32单片机四足机器人,应用sg90舵机(8个)控制四条腿,BT06蓝牙模块与单片机进行串口通讯,控制机器人前进后退转动

一、设计简介

针对STM32单片机控制的四足机器人项目,使用8个SG90舵机并通过蓝牙BT06进行控制,以下是视频展示

基于stm32四足机器人,sg90舵机8个,蓝牙模块BT06

百度网盘源码资料下载链接https://pan.baidu.com/s/1DpydIRuhsTLnbWYqtZ3o0A?pwd=vgaz

二、硬件准备

  1. STM32单片机

 STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。

具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。

内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。

  1. SG90舵机

  2. 共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%)
    1. 蓝牙BT06模块

    2. 用于实现与手机或其他蓝牙设备的无线通信,从而控制四足机器人的运动。

    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<波特率>”,可以设置或查询模块的串口波特率。
  • 三、硬件连接

    1. STM32与SG90舵机的连接

    2. 使用STM32的PWM输出引脚(如TIM2和TIM4的通道)连接SG90舵机的信号线。
    3. 根据SG90舵机的工作原理,通过PWM信号的占空比来控制舵机的旋转角度。
    4. STM32与蓝牙BT06模块的连接

    5. 将蓝牙BT06模块的RXD和TXD引脚分别连接到STM32的串口(如USART2)的TXD和RXD引脚上。
    6. 配置STM32的串口以接收和发送蓝牙数据。

    四、软件设计

    1. STM32固件开发

    2. 使用Keil等开发工具进行STM32固件的开发。
    3. 配置STM32的时钟、GPIO、PWM和串口等外设。
    4. 编写PWM控制代码,用于生成控制SG90舵机所需的PWM信号。
    5. 编写串口通信代码,用于接收和解析来自蓝牙BT06模块的数据。
    6. 蓝牙通信协议

    7. 定义一套蓝牙通信协议,用于手机或其他蓝牙设备与STM32单片机之间的数据交换。
    8. 协议可以包括控制指令、数据格式、校验方式等内容。
    9. 四足机器人步态控制

    10. 根据四足机器人的运动需求,设计相应的步态控制算法。
    11. 通过调整SG90舵机的旋转角度和速度,实现四足机器人的前进、后退、转向等动作。
    12. 调试与优化

    13. 在实际调试过程中,可能需要对PWM信号的占空比、串口通信的波特率等参数进行调整。
    14. 根据四足机器人的运动效果,对步态控制算法进行优化。

    五、原理图及设计流程图

    六、程序代码

    #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

    作者:铭创电子设计

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于stm32单片机四足机器人,应用sg90舵机(8个)控制四条腿,BT06蓝牙模块与单片机进行串口通讯,控制机器人前进后退转动

    发表回复