1. 为什么需要智能垃圾桶?
传统垃圾桶最大的痛点就是需要手动开盖。想象一下,你正在厨房处理生肉,手上沾满油渍,这时候还要去掀开垃圾桶盖子,不仅不方便,还容易把细菌带到手上。更糟的是,如果忘记及时清理,垃圾堆积会产生异味,甚至引来蚊虫。这些问题在卫生间场景下更加突出——潮湿环境会加速细菌滋生。
智能垃圾桶的核心价值就是解决这些痛点。通过自动感应开盖,完全避免了手部接触;满溢检测功能可以及时提醒清理;而低功耗设计则确保了长时间免维护使用。我去年给父母家厨房装了一个自制版本,他们反馈最实用的就是不用再担心弄脏手,尤其是处理油腻厨余时特别方便。
2. 硬件选型与电路设计
2.1 主控芯片选择
STM32F103C8T6(俗称"蓝莓派")是这个项目的性价比之王。它具备:
- 72MHz主频的Cortex-M3内核
- 64KB Flash + 20KB RAM
- 丰富的外设接口(3个USART、2个SPI、2个I2C)
- 超低功耗特性(待机电流<10μA)
相比Arduino,STM32的定时器资源更丰富,特别适合需要精确控制PWM的场景。我在初期测试时尝试过用Arduino Nano驱动SG90舵机,发现PWM稳定性不如STM32,偶尔会出现抖动现象。
2.2 传感器选型对比
人体感应模块: HC-SR501是最经济实惠的选择(单价约5元),但要注意两个细节:
- 调节板上电位器将检测距离设为30cm左右(避免过远误触发)
- 跳线设置为"不可重复触发"模式(防止持续输出高电平)
超声波测距模块: HC-SR04的经典组合是:
- VCC接5V(注意STM32IO口耐压)
- Trig接PA9(普通GPIO)
- Echo接PA8(需支持外部中断)
实测中发现,当垃圾袋有褶皱时,超声波可能误判距离。我的解决方案是在代码中加入滤波算法——连续5次检测值差异<2cm才判定有效。
2.3 驱动电路设计
SG90舵机的驱动要注意三点:
- PWM频率必须严格50Hz(周期20ms)
- 脉冲宽度0.5ms-2.5ms对应0-180°
- 最好单独供电(避免电机启动时电压波动影响MCU)
这是我使用的TIM2配置代码:
// PWM周期 = (71+1)*(1999+1)/72MHz = 20ms htim2.Instance = TIM2; htim2.Init.Prescaler = 71; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 1999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;3. 低功耗优化实战
3.1 电源管理方案
采用3.7V 1000mAh锂电池供电时,关键优化点:
- AMS1117-3.3V稳压芯片要选低静态电流版本(IQ<5μA)
- 未使用的GPIO口设置为模拟输入模式(减少漏电流)
- 关闭调试接口(SWD引脚会额外消耗约50μA)
实测数据对比:
| 模式 | 电流消耗 | 续航时间 |
|---|---|---|
| 全速运行 | 15mA | 约3天 |
| 待机模式 | 0.8mA | 约50天 |
| STOP模式 | 20μA | 约200天 |
3.2 软件优化技巧
在main循环中加入低功耗策略:
while(1) { if(无触发事件) { HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); SystemClock_Config(); // 唤醒后需重新初始化时钟 } // 处理传感器数据... }几个关键参数设置:
- HC-SR501检测间隔:默认2秒检测一次
- 超声波采样率:待机时每30秒检测一次,开盖后每秒检测一次
- 舵机动作完成后立即进入STOP模式
4. 常见问题与解决方案
4.1 舵机抖动问题
症状:桶盖开合时出现明显抖动 解决方法:
- 检查PWM信号稳定性(用示波器观察波形)
- 在舵机电源端并联1000μF电容
- 机械结构增加阻尼(我用3D打印的齿轮组替代了直接连接)
4.2 误触发处理
当家里有宠物时,HC-SR501可能会误触发。我的解决方案是:
- 安装时调整传感器角度(离地30cm,向下倾斜15°)
- 软件端添加双重验证:
if(HCSR501_Triggered() && Ultrasonic_Distance()<50) { // 确认是人体靠近才触发 Open_Lid(); }4.3 锂电池管理
TP4056充电模块要注意:
- PROG引脚接2K电阻(充电电流设为500mA)
- 在BAT+和BAT-之间接10K电阻作为假负载(防止过放)
- 最好增加电压检测电路,当电压<3.3V时LED闪烁报警
这个项目最让我有成就感的是父母实际使用后的反馈——他们再也不用担心处理垃圾时弄脏手,而且一个月才需要充一次电。对于想入门的开发者,建议先从基础功能做起,逐步添加智能特性。