1. 项目背景与设计目标
去年在给侄女辅导作业时,我发现她总抱怨练字枯燥。这让我萌生了一个想法:能不能做个会"听写"的机器人?经过三个月的迭代开发,这款基于STM32的声控写字机器人终于成型。它不仅能识别20种常用语音指令,还能通过手机App远程控制,在A4纸上写出工整的汉字。
核心功能亮点:
- 离线语音识别:采用LD3320芯片,无需联网即可识别"横竖撇捺"等笔画指令
- 双模无线控制:ESP8266 WiFi模块和HC-05蓝牙模块并行工作
- 运动精度控制:42步进电机配合TMC2209驱动芯片,实现0.1mm定位精度
- 模块化机械结构:3D打印的十字滑台机构,可快速更换不同笔具
2. 硬件系统设计
2.1 主控选型与电路设计
选择STM32F103C8T6作为主控芯片,主要考虑三点:
- 72MHz主频足够处理运动控制算法
- 丰富的外设接口(5个USART、2个SPI、2个I2C)
- 性价比突出(淘宝价约12元)
关键电路设计要点:
- 电机驱动部分:使用TMC2209静音驱动芯片,通过UART配置256细分
c复制// 电机驱动初始化代码示例
void Stepper_Init(void) {
UART_Config(DRIVER_UART, 115200);
Send_Config_Command(0x05, 0x0004); // 设置256细分
Send_Config_Command(0x06, 0x0014); // 设置静音模式
}
- 电源管理:采用LM2596降压模块为电机供电,AMS1117-3.3为控制电路供电
2.2 机械结构实现
运动机构采用CoreXY结构,相比传统XY滑台具有以下优势:
- 电机固定在底座,运动部件质量轻
- 双电机协同控制,避免单边皮带松弛
- 运动学转换公式:
code复制X = (M1 + M2) / 2 Y = (M1 - M2) / 2
笔具升降机构使用SG90舵机配合凸轮设计,实测升降响应时间仅80ms。3D打印件用PLA材料,关键部位设计了0.2mm的装配公差。
3. 软件系统架构
3.1 状态机设计
采用状态模式管理机器人工作流程,定义5个主要状态:
mermaid复制stateDiagram
[*] --> Idle
Idle --> Listening: 语音触发
Listening --> Processing: 收到指令
Processing --> Moving: 路径规划完成
Moving --> Idle: 运动完成
状态转换代码实现:
c复制typedef enum {
STATE_IDLE,
STATE_LISTENING,
STATE_PROCESSING,
STATE_MOVING
} RobotState;
void State_Handler(void) {
switch(currentState) {
case STATE_IDLE:
if(voice_detected()) currentState = STATE_LISTENING;
break;
// 其他状态处理...
}
}
3.2 笔画数据处理
汉字笔画数据采用自定义压缩格式存储:
- 每个笔画用8字节表示:2字节起点坐标 + 2字节终点坐标 + 4字节控制点
- 常用500汉字字库仅占用35KB Flash空间
- 动态加载算法实现按需读取
笔画插值算法采用Bresenham改进算法:
c复制void Draw_Stroke(Point start, Point end) {
int dx = abs(end.x - start.x);
int dy = -abs(end.y - start.y);
int err = dx + dy;
while(1) {
Stepper_MoveTo(start.x, start.y);
if(start.x == end.x && start.y == end.y) break;
int e2 = 2 * err;
if(e2 >= dy) { err += dy; start.x += (start.x < end.x ? 1 : -1); }
if(e2 <= dx) { err += dx; start.y += (start.y < end.y ? 1 : -1); }
}
}
4. 关键问题解决方案
4.1 语音识别优化
实测发现LD3320在环境噪声50dB以上时识别率下降明显。通过以下措施提升至92%:
- 添加简单的回声消除算法
- 设置关键词权重:给"横竖撇捺"等笔画指令更高优先级
- 添加二次确认机制:识别后LED闪烁提示
4.2 运动抖动问题
初期测试发现快速运动时笔画出现锯齿。解决方法:
- 电机驱动改用TMC2209的StealthChop模式
- 运动规划添加S型速度曲线
- 机械结构增加直线导轨预紧力
4.3 无线控制延迟
实测WiFi模块在复杂网络环境下延迟可达300ms。优化方案:
- 采用UDP协议替代TCP
- 数据包添加时间戳实现帧同步
- 设置双缓冲接收机制
5. 实测效果与改进方向
经过50小时连续测试:
- 平均书写速度:2.5字/分钟(楷书)
- 定位精度:±0.15mm
- 语音识别准确率:91.7%
- 无线控制响应时间:<150ms
后续改进计划:
- 增加压力传感器实现笔迹粗细变化
- 开发图形化编程界面
- 支持英文连笔书写
这个项目最让我惊喜的是CoreXY结构的运动稳定性,以及TMC2209驱动芯片带来的静音效果。建议初学者可以从更简单的XY机构入手,逐步理解运动控制原理。所有3D打印文件和源码已开源在GitHub,欢迎交流改进建议。