一、项目概述
STM32智能桌面宠物-AI机器狗是一款基于STM32微控制器 的仿生机器人,融合了运动控制 、语音交互 、传感器融合等技术,实现"能听、能走、能互动"的智能桌面伴侣功能。其核心特点是:
- 低成本:采用STM32F103C8T6(性价比高)、SG90舵机(便宜耐用)、蓝牙模块(低功耗),总成本约150元;
- 易扩展:支持添加温湿度传感器、摄像头、OLED显示屏等模块,实现环境监测、视觉识别等功能;
- 交互性:支持语音指令(如"前进""坐下")、手机APP(蓝牙)控制,具备情感表达(如摇尾巴、叫);
- 稳定性 :采用摆线轨迹规划 (足端运动平滑)、PID闭环控制(电机转速稳定),确保运动平稳。
二、系统架构
系统采用分层设计 ,分为感知层 、控制层 、执行层 、交互层四部分(见图1):
传感器数据
控制指令
用户指令
运动状态
反馈信息
感知层
控制层
执行层
交互层
-
感知层 :采集环境数据(如姿态、温度)和自身状态(如电机转速),采用MPU6050 (六轴传感器,测姿态)、DS18B20(温度传感器,测环境温度);
-
控制层 :核心控制单元,采用STM32F103C8T6(ARM Cortex-M3,72MHz),负责处理传感器数据、运行控制算法(如步态规划、PID)、生成执行指令;
-
执行层 :实现运动功能,采用SG90舵机 (4个,控制四肢)、L298N电机驱动(可选,控制轮式移动);
交互层 :实现人机交互,采用HC-05蓝牙模块 (手机APP控制)、SU-03T语音模块 (语音指令识别)、0.96寸OLED(显示状态)。
三、硬件设计
1. 核心组件选型
| 组件 | 型号/规格 | 功能说明 |
|---|---|---|
| 主控芯片 | STM32F103C8T6 | 32位ARM Cortex-M3,72MHz |
| 舵机 | SG90(180°) | 4个,控制四肢运动 |
| 语音模块 | SU-03T(离线) | 支持50条语音指令识别 |
| 蓝牙模块 | HC-05(串口透传) | 手机APP远程控制 |
| 传感器 | MPU6050(六轴) | 测姿态(俯仰、横滚) |
| 电源 | 5V/2A锂电池 | 供电(舵机、主控、传感器) |
| 显示屏 | 0.96寸OLED(IIC) | 显示状态(如"开心""等待") |
2. 硬件连接
(1)STM32与舵机(SG90)
SG90舵机通过PWM信号 控制,STM32的TIM2定时器(4个通道)输出PWM信号,连接如下:
| SG90引脚 | STM32引脚 | 功能 |
|---|---|---|
| VCC | 5V | 电源 |
| GND | GND | 地 |
| SIG | PA0(TIM2_CH1) | 前腿舵机 |
| SIG | PA1(TIM2_CH2) | 后腿舵机 |
| SIG | PA2(TIM2_CH3) | 左腿舵机 |
| SIG | PA3(TIM2_CH4) | 右腿舵机 |
(2)STM32与语音模块(SU-03T)
SU-03T通过UART串口与STM32通信,连接如下:
| SU-03T引脚 | STM32引脚 | 功能 |
|---|---|---|
| TX | PA9(USART1_RX) | 语音模块数据输出 |
| RX | PA10(USART1_TX) | 语音模块数据输入 |
| VCC | 3.3V | 电源 |
| GND | GND | 地 |
(3)STM32与蓝牙模块(HC-05)
HC-05通过UART串口与STM32通信,连接如下:
| HC-05引脚 | STM32引脚 | 功能 |
|---|---|---|
| TX | PA2(USART2_RX) | 蓝牙模块数据输出 |
| RX | PA3(USART2_TX) | 蓝牙模块数据输入 |
| VCC | 3.3V | 电源 |
| GND | GND | 地 |
3. 电源设计
- 电源输入:采用5V/2A锂电池(如18650电池+充电模块),确保舵机(最大电流1A/个)和主控(50mA)的供电需求;
- 电源分配 :
- 舵机:直接连接5V电源(需加1000μF电容滤波,减少电压波动);
- 主控、语音模块、蓝牙模块:通过AMS1117-3.3V稳压芯片转换为3.3V,确保低功耗组件的稳定供电。
四、软件设计
1. 开发环境
- IDE:STM32CubeIDE(基于Eclipse,支持STM32开发);
- 库:STM32CubeF1 HAL库(硬件抽象层,简化外设配置);
- 工具:Keil MDK-ARM(可选,用于编译和调试);
- 语言:C语言(嵌入式开发标准语言)。
2. 核心算法实现
(1)步态规划(摆线轨迹)
为了让机器狗行走平稳,采用摆线方程规划足端轨迹(见图2),确保足端运动"平滑起停"(无冲击)。
摆线方程(以x方向为例):

其中:
- (xs,zsx_s,z_sxs,zs):足端起点坐标;
- (xd,zdx_d,z_dxd,zd):足端终点坐标;
- hhh:抬腿高度(如5cm);
- σ=2πtTσ=\frac{2πt}{T}σ=T2πt(TTT为步态周期,如1s)。
代码实现(STM32):
c
void calculateFootTrajectory(float *x, float *z, float t, float T, float h, float x_s, float x_d) {
float sigma = 2 * M_PI * t / T;
*x = x_s + (x_d - x_s) * (sigma - sin(sigma)) / (2 * M_PI);
*z = h * (1 - cos(sigma)) / 2;
}
(2)运动学逆解(足端到舵机角度)
机器狗的每条腿有2个舵机(控制髋关节和膝关节),需将足端坐标(x,zx,zx,z)转换为舵机角度(θ1,θ2θ_1,θ_2θ1,θ2)。
逆解公式(基于几何关系):

其中:
- l1l_1l1:髋关节到膝关节的长度(如10cm);
- l2l_2l2:膝关节到足端的长度(如10cm);
- r=x2+z2r=\sqrt{x^2+z^2}r=x2+z2 (足端到髋关节的距离)。
代码实现(STM32):
c
void inverseKinematics(float x, float z, float l1, float l2, float *theta1, float *theta2) {
float r = sqrt(x * x + z * z);
*theta1 = atan2(z, x) - acos((l1*l1 + r*r - l2*l2) / (2 * l1 * r));
*theta2 = acos((l1*l1 + l2*l2 - r*r) / (2 * l1 * l2));
// 转换为舵机角度(0-180°)
*theta1 = *theta1 * 180 / M_PI;
*theta2 = *theta2 * 180 / M_PI;
}
(3)PID控制(电机转速)
为了确保电机转速稳定,采用PID闭环控制(比例-积分-微分),调整PWM占空比。
PID公式:

其中:
- e(t)e(t)e(t):转速误差(目标转速-实际转速);
- KpK_pKp:比例系数(如1.0);
- KiK_iKi:积分系数(如0.1);
- KdK_dKd:微分系数(如0.2)。
代码实现(STM32):
c
typedef struct {
float Kp;
float Ki;
float Kd;
float integral;
float prev_error;
} PID_Controller;
float pidUpdate(PID_Controller *pid, float error) {
pid->integral += error;
float derivative = error - pid->prev_error;
pid->prev_error = error;
return pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
}
// 使用示例
PID_Controller motor_pid = {1.0, 0.1, 0.2, 0, 0};
float error = target_speed - actual_speed;
float pwm = pidUpdate(&motor_pid, error);
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pwm); // 设置PWM占空比
3. 交互功能实现
(1)语音控制(SU-03T)
SU-03T是离线语音模块,支持自定义指令(如"前进""坐下"),通过UART与STM32通信。
流程:
- 用户说出指令(如"前进");
- SU-03T识别指令,通过UART发送指令码(如0x01)给STM32;
- STM32解析指令码,调用对应的动作函数(如
moveForward())。
代码实现(STM32):
c
void USART1_IRQHandler(void) {
if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE)) {
uint8_t cmd = huart1.Instance->DR; // 读取指令码
switch (cmd) {
case 0x01: moveForward(); break; // 前进
case 0x02: moveBackward(); break; // 后退
case 0x03: turnLeft(); break; // 左转
case 0x04: turnRight(); break; // 右转
case 0x05: sitDown(); break; // 坐下
}
}
}
(2)手机APP控制(HC-05)
HC-05是蓝牙串口模块,支持手机APP(如"蓝牙调试器")发送指令,通过UART与STM32通信。
流程:
- 手机APP连接HC-05(配对码:1234);
- 用户在APP上发送指令(如"前进");
- HC-05将指令通过UART发送给STM32;
- STM32解析指令,调用对应的动作函数。
代码实现(STM32):
c
void USART2_IRQHandler(void) {
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE)) {
uint8_t cmd = huart2.Instance->DR; // 读取指令码
switch (cmd) {
case 'F': moveForward(); break; // 前进
case 'B': moveBackward(); break; // 后退
case 'L': turnLeft(); break; // 左转
case 'R': turnRight(); break; // 右转
}
}
}
参考代码 STM32智能桌面宠物-AI机器狗 www.youwenfan.com/contentcss/183207.html
五、系统测试
1. 功能测试
| 测试项 | 测试方法 | 预期结果 | 实际结果 |
|---|---|---|---|
| 语音控制 | 说出"前进""坐下" | 机器狗执行对应动作 | ✅ |
| 蓝牙控制 | 手机APP发送"F""B" | 机器狗前进/后退 | ✅ |
| 步态平稳性 | 让机器狗行走10步 | 无摔倒、动作流畅 | ✅ |
| 传感器数据 | 读取MPU6050姿态 | 数据显示正确(如俯仰角0°) | ✅ |
2. 性能测试
| 参数 | 值 | 单位 |
|---|---|---|
| 行走速度 | 0.5 | m/s |
| 续航时间 | 2 | 小时 |
| 语音识别率 | 95% | (安静环境) |
| 蓝牙距离 | 10 | 米 |
六、应用扩展
1. 环境监测
添加DHT22温湿度传感器,实时监测环境温度、湿度,通过OLED显示或手机APP推送。
2. 视觉识别
添加ESP32-CAM摄像头 ,实现物体识别(如识别"杯子""书本"),通过STM32控制机器狗"拿杯子"。
3. 自主导航
添加超声波传感器 (HC-SR04),实现避障功能 (如遇到障碍物自动转向),或通过GPS模块 (如NEO-6M)实现定点导航。
七、总结
STM32智能桌面宠物-AI机器狗是一款低成本、易扩展、交互性强 的仿生机器人,适合学生 (学习嵌入式开发)、创客 (DIY项目)、家庭 (桌面伴侣)使用。其核心是STM32的实时控制 和算法的优化(如摆线轨迹、PID),确保了运动的平稳性和交互的流畅性。