1. 项目背景与需求分析
去年夏天帮朋友改造办公室垃圾桶时,发现传统脚踏式垃圾桶存在三个痛点:接触式开盖不卫生、感应不灵敏常需反复试探、电池续航短需频繁更换。这促使我着手设计一套更智能的解决方案。
智能垃圾桶的核心需求可归纳为:
- 非接触触发:挥手/人体接近自动开盖,避免手部接触
- 节能控制:待机电流<1mA,两节AA电池续航3个月以上
- 防夹保护:开合过程遇到障碍立即停止并回退
- 状态指示:通过LED显示电量/工作状态
2. 硬件系统设计
2.1 主控选型对比
测试了三种常见方案:
- STM32F103C8T6:性能过剩(72MHz主频),待机功耗高(5mA)
- ESP8266:自带WiFi但功耗大(80mA活跃状态)
- STC15W408AS:8位51内核,休眠电流0.1μA,最终选择
实测数据:STC15在0.5秒响应周期下,平均功耗仅0.8mA
2.2 传感器方案优化
最初使用HC-SR04超声波模块,但存在三个问题:
- 检测角度窄(15°锥形区域)
- 易受环境噪声干扰
- 功耗较高(15mA工作电流)
改进方案:
- 红外对管+调制解调:采用38kHz载波抗干扰
- 双传感器布局:桶前10cm处安装对射式,桶顶30cm处安装反射式
- 软件去抖:连续3次检测到信号才触发
2.3 驱动电路设计
电机选用N20减速电机(6V/100rpm),驱动方案对比:
| 方案 | 成本 | 可靠性 | 体积 |
|---|---|---|---|
| L298N模块 | 高 | 高 | 大 |
| 三极管阵列 | 低 | 中 | 小 |
| DRV8833芯片 | 中 | 高 | 小 |
最终选用DRV8833,支持1.8A峰值电流和过热保护,PCB尺寸仅10x10mm。
3. 软件控制逻辑
3.1 状态机设计
c复制enum {
SLEEP_MODE, // 等待中断唤醒
DETECT_MODE, // 持续检测信号
OPENING, // 正在开盖
OPEN_HOLD, // 开盖保持
CLOSING, // 正在关盖
ERROR_MODE // 异常状态
};
3.2 关键算法实现
自适应延时算法:
c复制void adaptive_delay(uint16_t base_time) {
uint8_t try_count = 0;
while(!limit_switch && try_count<5) {
delay_ms(base_time * (try_count+1));
try_count++;
}
}
电流检测防夹:
- 实时采样电机电流(0.1Ω采样电阻)
- 超过阈值500mA持续50ms即触发保护
- 记录堵转位置,下次开盖到该位置减速
4. 低功耗优化技巧
4.1 硬件级优化
- 所有外设独立供电,通过MOS管控制通断
- 传感器仅在上电后100ms内工作
- 选用低功耗比较器(如TS881,0.6μA)
4.2 软件级优化
- 时钟降频:主频从11.0592MHz降至1MHz
- 外设间歇工作:每300ms唤醒检测50ms
- 深度休眠模式:
c复制PCON |= 0x02; // 进入掉电模式
_nop_(); // 等待中断唤醒
实测功耗对比:
| 模式 | 原始方案 | 优化后 |
|---|---|---|
| 运行状态 | 25mA | 8mA |
| 待机状态 | 3mA | 0.6mA |
5. 常见问题排查
5.1 误触发问题
现象:无人在场时自动开盖
排查步骤:
- 检查传感器供电电压(需稳定5V)
- 用示波器观察接收端波形
- 调整接收头偏置电阻(通常10-20kΩ)
5.2 电机堵转问题
解决方案:
- 机械方面:在转轴加装尼龙垫片减少摩擦
- 软件方面:增加启动加速曲线
c复制for(int i=0; i<100; i+=5) {
pwm_set_duty(i);
delay_ms(10);
}
5.3 电池续航短
优化方向:
- 更换Energizer锂电池(3V电压平台更稳定)
- 添加电压检测电路,欠压时LED闪烁报警
c复制if(adc_read() < 2.4) {
led_blink(3);
enter_sleep();
}
6. 成品测试数据
经过200次开合循环测试:
- 平均响应时间:0.3秒
- 开盖角度:75°±2°
- 障碍物检测成功率:100%
- 电池续航:3个月(每天30次使用)
这个项目最让我意外的是低功耗表现——通过硬件选型和软件优化,最终待机电流仅0.6mA,比初始设计降低了20倍。建议在类似项目中,优先考虑STC15这类支持掉电模式的单片机,其特有的唤醒中断机制能完美平衡响应速度和功耗需求。