基于STM32F103C8T6与多传感器融合的智能垃圾桶系统设计
1. 项目背景与核心功能设计每次看到家里的垃圾桶需要手动掀盖总觉得不够卫生又麻烦。去年我用STM32F103C8T6做了个智能垃圾桶现在把完整开发过程分享给大家。这个项目最实用的地方在于当手靠近到30cm范围内桶盖自动打开手离开后延迟关闭全程无需触碰。核心功能实现依赖三个关键模块的协同工作HC-SR04超声波模块实时监测手部距离SG90舵机控制桶盖开合动作OLED显示屏显示当前状态和距离数据选择STM32F103C8T6作为主控是因为它性价比极高72MHz主频完全够用GPIO资源丰富还有多个定时器可供PWM和捕获使用。实测下来整套系统待机电流仅15mA用移动电源就能持续供电一周以上。2. 硬件模块选型与电路设计2.1 主控芯片配置STM32F103C8T6最小系统板是项目的大脑需要特别注意几个关键配置时钟源使用8MHz外部晶振通过PLL倍频到72MHz供电方案开发板USB口供电5V舵机单独供电时需共地调试接口建议预留SWD接口方便在线调试// 时钟配置示例使用标准库 RCC_HSEConfig(RCC_HSE_ON); while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) RESET); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE);2.2 超声波测距模块HC-SR04的硬件连接有讲究Trig引脚配置为推挽输出PB8Echo引脚配置为浮空输入PB7抗干扰设计信号线加100Ω电阻并联10pF电容滤波实测中发现模块在3cm以内会有盲区建议在软件中设置最小检测阈值。测距精度方面在30cm范围内误差能控制在±0.5cm完全满足需求。2.3 舵机驱动方案SG90舵机的控制要注意几个细节PWM参数周期20ms50Hz脉宽0.5ms-2.5ms对应0-180°机械结构我用3D打印了连杆机构建议增加限位开关保护舵机电源处理单独5V/2A电源供电并接1000μF电容保持电压稳定// PWM配置关键代码TIM2通道2 TIM_OCInitTypeDef oc; oc.TIM_OCMode TIM_OCMode_PWM1; oc.TIM_Pulse 50; // 初始位置0° TIM_OC2Init(TIM2, oc);3. 软件架构与关键算法3.1 多任务调度设计采用前后台系统架构主循环处理OLED刷新状态机维护中断服务定时器中断处理超声波计时EXTI中断处理紧急停止void TIM3_IRQHandler() { if(TIM_GetITStatus(TIM3, TIM_IT_Update)) { overflow_count; TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } }3.2 距离测量优化算法原始数据需要经过三重滤波中值滤波连续采样5次取中间值滑动平均保留最近10次测量结果动态阈值根据环境噪声自动调整触发距离float get_filtered_distance() { static float history[10]; float temp[5]; // 采样5次 for(int i0; i5; i){ temp[i] get_raw_distance(); delay_ms(2); } // 中值滤波 bubble_sort(temp); float median temp[2]; // 更新滑动窗口 memmove(history, history1, 9*sizeof(float)); history[9] median; // 计算平均值 float sum 0; for(int j0; j10; j) sum history[j]; return sum/10; }4. 系统联调与性能优化4.1 模块协同问题排查调试时遇到过典型问题定时器冲突超声波和舵机共用TIM3导致异常解决方案超声波改用TIM4舵机用TIM2电源干扰舵机动作时导致单片机复位解决方法加磁珠隔离电源4.2 稳定性提升技巧通过三个措施提升可靠性看门狗启用独立看门狗IWDG超时时间1s异常恢复检测到异常后自动重新初始化外设状态保存意外断电后能恢复之前状态// 看门狗配置 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_32); // 32分频 IWDG_SetReload(0xFFF); // 约1s超时 IWDG_ReloadCounter(); IWDG_Enable();5. 功能扩展与改进方向当前系统已经可以稳定工作但还有优化空间低功耗模式加入红外唤醒功能使用STM32的STOP模式无线功能增加蓝牙模块远程查看状态记录开合次数统计机械改进改用步进电机实现无接触开盖增加重量传感器检测垃圾满实际使用中发现在厨房等潮湿环境需要做好防水处理。我用热熔胶密封了所有电路接口运行半年仍正常工作。如果要做商业化产品建议改用防水超声波传感器和金属齿轮舵机。