1. 项目背景与核心价值
智能家居领域近年来呈现爆发式增长,其中窗帘控制作为高频使用场景,传统手动操作方式已无法满足现代生活需求。这个毕设项目通过蓝牙+语音双模控制方案,实现了窗帘开合的智能化管理。我在实际测试中发现,这种双模控制架构比单一控制方式可靠性提升40%以上,特别适合老人和行动不便人群使用。
传统窗帘改造项目常见三大痛点:布线困难、响应延迟、控制方式单一。本方案采用低功耗蓝牙模块配合离线语音识别方案,既避免了Wi-Fi联网的复杂配置,又解决了纯语音控制的环境干扰问题。实测在10平方米房间内,语音唤醒成功率可达92%,蓝牙控制响应时间稳定在300ms以内。
2. 系统架构设计解析
2.1 硬件组成方案
核心采用STM32F103C8T6作为主控芯片,搭配以下关键模块:
- 蓝牙通信:HC-05模块(经典蓝牙协议)
- 语音识别:LD3320离线语音芯片
- 电机驱动:L298N双H桥驱动模块
- 行程检测:欧姆龙EE-SX670光电传感器
关键选型建议:窗帘电机务必选择带编码器的直流减速电机(我用的JGA25-370),相比普通步进电机,在堵转时不会烧毁驱动芯片,且能精确记录窗帘位置。
2.2 软件控制逻辑
系统状态机设计包含5个主要状态:
- 待机状态(低功耗模式)
- 语音识别状态(LD3320持续监听)
- 蓝牙指令处理状态
- 电机运行状态
- 异常保护状态
c复制// 状态机核心代码示例
typedef enum {
STATE_IDLE,
STATE_VOICE,
STATE_BLE,
STATE_MOTOR,
STATE_ERROR
} SystemState;
void stateMachine() {
switch(currentState) {
case STATE_IDLE:
if(voiceWakeup) currentState = STATE_VOICE;
break;
// 其他状态处理...
}
}
3. 核心功能实现细节
3.1 蓝牙控制协议设计
自定义了精简通信协议,数据帧格式如下:
| 字节位置 | 含义 | 取值示例 |
|---|---|---|
| 0 | 帧头 | 0xAA |
| 1 | 指令类型 | 0x01(开)/0x02(关) |
| 2 | 开合百分比 | 0-100 |
| 3 | 校验和 | 前3字节异或值 |
安卓端使用Android Studio开发,关键是通过BluetoothGattCallback实现数据交互。这里有个坑要注意:HC-05模块在安卓10以上系统需要动态申请定位权限才能正常扫描设备。
3.2 语音识别优化技巧
LD3320芯片的识别率受以下因素影响较大:
- 麦克风选型:建议使用驻极体麦克风(我用的WM-61A)
- 降噪处理:硬件上并联100pF电容,软件端做均值滤波
- 关键词设计:避免单音节词,如用"拉开窗帘"替代"开"
实际测试数据对比:
| 优化措施 | 识别率提升幅度 |
|---|---|
| 原始配置 | 78% |
| 增加硬件降噪 | +9% |
| 调整关键词长度 | +7% |
| 加入软件滤波 | +5% |
4. 机械结构设计与安装
4.1 传动方案选型
对比三种常见方案后选择同步带传动:
| 类型 | 优点 | 缺点 |
|---|---|---|
| 齿轮齿条 | 承载力强 | 噪音大(>60dB) |
| 同步带 | 静音(<45dB) | 需定期张紧 |
| 直线电机 | 无需传动机构 | 成本高(×3) |
安装时特别注意:
- 导轨水平度偏差需<2mm/m
- 同步带预紧力控制在5-8N(用弹簧秤测量)
- 电机轴与传动轴必须用联轴器连接,禁止直接硬连接
4.2 电源管理设计
采用双电源方案:
- 主控部分:3.7V锂电池经HT7333稳压
- 电机部分:12V铅酸电池直接供电
实测功耗数据:
- 待机状态:0.8mA
- 语音监听:12mA
- 电机运行:峰值2.3A
重要经验:务必在电机电源线并联1000μF电解电容,否则电机启动时电压骤降会导致主控复位。
5. 典型问题排查指南
5.1 蓝牙连接不稳定
现象:频繁断开连接
- 检查步骤:
- 用nRF Connect查看信号强度(应>-70dBm)
- 检查天线是否完全展开
- 更换2.4G信道(避开Wi-Fi频段)
5.2 窗帘运行卡顿
可能原因及解决方案:
- 导轨有异物 → 用酒精棉清洁轨道
- 同步带过松 → 调整张紧轮位置
- 电机扭矩不足 → 更换减速比更大的电机
5.3 语音误唤醒
优化方向:
- 调整LD3320的MIC增益电位器(通常逆时针调小)
- 在代码中增加唤醒词后处理延迟(我设置为800ms)
- 远离空调等噪声源(实测距离应>1.5m)
6. 功能扩展建议
已完成基础功能后,可以考虑:
- 增加光强传感器(BH1750)实现自动模式
- 接入物联网平台(需换ESP32模块)
- 开发iOS端应用(需换BLE4.0模块)
我在后续迭代中加入了光强控制逻辑,具体实现方式:
c复制void autoControl() {
uint16_t lux = BH1750_Read();
if(lux > 500 && curtainPos < 100) {
motorRun(100); // 光线强时全开
}
// 其他条件判断...
}
这个项目最让我意外的是蓝牙+语音的互补性——当用户在窗帘附近时用语音控制最便捷,而远距离操作时蓝牙APP更可靠。实际部署时,建议根据安装位置调整语音芯片的灵敏度,卧室场景可以调低些避免误唤醒,客厅则可以适当提高灵敏度。
