若该文为原创文章,转载请注明原文出处。
一、 项目背景与引言
(一) 研究背景及意义
随着城市化进程加快和人口增长,"垃圾围城"已成为全球性的环境挑战。有效的垃圾分类是实现垃圾减量化、资源化、无害化处理的关键前提。然而,公众普遍存在垃圾分类知识不足、嫌麻烦等问题,导致分类效果不佳。本项目旨在利用嵌入式人工智能技术,设计一款基于STM32的智能语音识别垃圾桶。它能够通过语音指令交互,辅助用户进行正确的垃圾分类,并通过传感器实时监控桶内状态,从而提升垃圾分类的便捷性、准确性与智能化管理水平,对推动环保事业具有积极的现实意义。
(二) 国内外研究现状
目前,智能垃圾桶领域的研究主要集中在感应开盖 (红外、超声波)、太阳能供电 和压缩功能 上。随着AIoT技术的发展,部分高端产品开始集成图像识别 和语音识别功能。基于图像识别的方案成本较高且计算复杂,而基于特定离线语音识别模块的方案,成本低、响应快、隐私性好,非常适合在本地的嵌入式设备上运行。本项目正是利用此类语音模块,实现一个高性价比、高互动性的智能分类垃圾桶解决方案。
(三) 论文研究内容
本研究的主要内容是设计并实现一个以STM32F103C8T6单片机为控制核心的智能分类垃圾桶系统。系统通过LD3320等离线语音识别模块接收用户指令,控制4个垃圾桶盖(通过舵机控制)的开关;通过HC-SR04超声波传感器检测各桶内的满溢程度;通过OLED显示屏进行状态提示;在桶满时通过蜂鸣器报警,最终实现语音交互分类、状态监控、自动提醒的核心功能。
二、 系统总体设计
(一) 系统架构
本系统采用模块化设计,以STM32单片机为处理和控制中心,连接语音识别、传感器、执行器、显示和报警模块。

硬件选型与功能说明
模块名称 | 推荐型号 | 通信接口 | 功能描述 |
---|---|---|---|
主控MCU | STM32F103C8T6 (核心板) | - | 系统大脑,处理所有数据和控制逻辑 |
语音识别 | LD3320 (非特定人语音识别) | UART | 识别"打开XX垃圾桶"或直接说垃圾名称(如"矿泉水瓶") |
语音播报 | JQ8900、WT588D或SYN6288 | UART 或 PWM | 播放提示音,如上电欢迎语、分类结果提示音 |
超声波测距 | HC-SR04 | GPIO (Trig/Echo) | 检测垃圾表面到桶盖的距离,换算为满溢程度 |
显示模块 | 0.96寸 OLED (SSD1306) | I2C | 显示四种垃圾桶状态(开/关、满溢百分比) |
执行机构 | SG90 舵机 (9g) x4 | GPIO (PWM) | 每个垃圾桶盖由一个舵机控制,模拟开合动作 |
报警装置 | 有源蜂鸣器 | GPIO | 桶满时发出"滴滴"报警声,提示清理 |
本地控制 | 轻触按键 x4 | GPIO | 每个按键对应一个垃圾桶,实现手动开盖 |
电源 | LM2596降压模块 + AMS1117 | - | 输入12V,输出5V和3.3V,为MCU |
(二) 功能模块划分
-
主控模块:流程调度、逻辑控制、指令解析。
-
语音交互模块:识别用户指令并执行开盖操作,播报提示音。
-
状态检测模块:检测4个桶内的垃圾高度。
-
人机交互模块:OLED显示状态,蜂鸣器报警,按键控制。
-
执行机构模块:舵机控制桶盖的打开和关闭。
三、 硬件设计与实现
(一) 主控模块选型及介绍
采用STM32F103C8T6最小系统板。
-
核心:Cortex-M3内核,72MHz主频,性能充足。
-
资源:足够多的GPIO口控制4个舵机、4个超声波模块、显示屏、按键等,USART、I2C、定时器等外设完备。
-
优点:成本极低,社区资源丰富,开发便捷。
(二) 传感器模块选型及电路设计
-
超声波传感器模块:
-
选型 :HC-SR04,性价比高,应用广泛。
-
数量:4个,分别安装在"可回收"、"厨余"、"有害"、"其他"四个垃圾桶内部顶端,垂直向下检测距离。
-
电路 :每个传感器的
Vcc
接5V,Gnd
接GND,Trig
触发引脚和Echo
回响引脚分别接STM32的4组GPIO(如Trig1->PA0
,Echo1->PA1
;Trig2->PA2
,Echo2->PA3
, 以此类推)。
-
-
语音识别模块:
-
选型 :LD3320离线语音识别模块。它不需要联网,可直接在本地识别预先设定的关键词(如"打开可回收垃圾"、"关闭"、"苹果核是什么垃圾"等)。
-
电路 :模块与STM32通过并行总线或SPI接口连接(取决于具体模块型号),接线相对复杂,需参考模块手册。
RST
、CS
、WR
、DATA
等引脚需连接到STM32的特定GPIO。
-
(三) 执行模块选型及驱动电路
-
舵机:
-
选型 :SG90微型舵机,扭矩足以打开小型桶盖。
-
数量:4个。
-
驱动电路 :每个舵机的信号线(橙色/白色)分别接STM32的一个GPIO(如PB6, PB7, PB8, PB9)。注意: 舵机供电必须使用外部5V电源,切勿直接从STM32板载的3.3V或5V取电,否则会导致单片机复位或损坏。
-
-
蜂鸣器:
-
选型 :有源蜂鸣器(高电平触发)。
-
电路:正极通过一个1K电阻接STM32的GPIO(如PC13),负极接GND。
-
(四) 显示与交互模块
-
OLED显示屏:
-
选型:0.96寸I2C接口OLED模块(SSD1306)。
-
接口电路 :
SCL
接PB10,SDA
接PB11。
-
-
按键:
-
选型:轻触按键。
-
电路:一端接GPIO(如PA15),另一端接地。GPIO内部配置为上拉输入模式。
-
(五) 电源模块设计
-
采用5V 2A以上的直流电源适配器作为总输入。
-
一路5V直接给4个舵机和语音模块供电。
-
另一路通过AMS1117-3.3V稳压芯片转换为3.3V,为STM32、OLED、超声波模块等供电。
四、 软件设计与实现
(一) 开发环境搭建
-
IDE:Keil uVision 5
-
配置工具:STM32CubeMX用于生成初始化代码
-
库:HAL库或标准外设库
(二) 系统初始化
-
初始化系统时钟、GPIO、I2C、定时器。
-
初始化OLED,显示开机界面。
-
初始化语音识别模块,并添加关键词列表(如"可回收"、"厨余"、"有害"、"其他"、"打开"、"关闭"、"帮助"、"电池"、"塑料袋"等)。
-
播放欢迎语音:"欢迎使用智能垃圾桶,保护环境卫生,人人有责"。
-
初始化所有舵机至关闭状态。
(三) 软件流程图与逻辑

(四) 关键代码片段
主循环核心逻辑
// main.c
int main() {
// 系统初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C_Init();
MX_TIM_Init(); // 用于舵机PWM和计时
OLED_Init();
Voice_Module_Init();
Servo_Close_All();
// 播放欢迎语音
Voice_Play_Welcome();
while (1) {
// 1. 读取超声波数据,计算满溢度(0-100%)
for (int i = 0; i < 4; i++) {
fullness[i] = Get_Ultrasonic_Distance(i) / MAX_HEIGHT * 100;
if (fullness[i] > 95) { // 如果满溢度超过95%
bin_full_flag |= (1 << i); // 设置对应桶满的标志位
} else {
bin_full_flag &= ~(1 << i); // 清除标志位
}
}
// 2. 满溢报警
if (bin_full_flag != 0) {
BUZZER_ON();
} else {
BUZZER_OFF();
}
// 3. 处理语音识别结果
if (voice_recognition_flag) {
voice_recognition_flag = 0;
Parse_Voice_Command(recognition_result);
}
// 4. 处理按键
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
HAL_Delay(50); // 消抖
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
current_bin = (current_bin + 1) % 4; // 循环切换到下一个桶
Servo_Open(current_bin); // 打开对应桶盖
auto_close_timer = 100; // 设置10秒定时器 (100 * 100ms)
}
}
// 5. 处理10秒自动关闭
if (auto_close_timer > 0) {
auto_close_timer--;
if (auto_close_timer == 0) {
Servo_Close_All();
}
}
// 6. 刷新OLED显示
OLED_ShowStatus(fullness, bin_full_flag, current_bin_opened);
HAL_Delay(100); // 主循环周期100ms
}
}
语音指令解析函数示例
// voice.c
void Parse_Voice_Command(char* result) {
if (strstr(result, "打开") != NULL) {
if (strstr(result, "可回收") != NULL) {
Servo_Open(BIN_RECYCLABLE);
auto_close_timer = 100;
} else if (strstr(result, "厨余") != NULL) {
Servo_Open(BIN_KITCHEN);
auto_close_timer = 100;
}
// ... 其他桶
} else if (strstr(result, "关闭") != NULL) {
Servo_Close_All();
auto_close_timer = 0;
} else if (strstr(result, "帮助") != NULL || strstr(result, "是什么垃圾") != NULL) {
// 帮助模式,识别具体物品
if (strstr(result, "电池") != NULL) {
Voice_Play_Response("电池属于有害垃圾");
} else if (strstr(result, "苹果核") != NULL) {
Voice_Play_Response("苹果核属于厨余垃圾");
} else if (strstr(result, "塑料袋") != NULL) {
Voice_Play_Response("塑料袋属于其他垃圾");
}
// ... 其他物品
}
}
五、 系统测试与优化
(一) 测试方案
-
单元测试:分别测试舵机转动角度、超声波测距准确性、语音识别率、OLED显示、蜂鸣器发声。
-
功能测试:
-
逐一说出"打开XX垃圾"指令,检查对应舵机是否动作。
-
说出"电池"、"果皮"等物品名称,检查语音回复是否正确。
-
遮挡超声波传感器,模拟桶满状态,检查蜂鸣器是否报警。
-
按下按键,检查是否按顺序开盖。
-
测试10秒后桶盖是否自动关闭。
-
-
压力测试:连续快速发出不同指令,测试系统响应稳定性和识别率。
(二) 优化方向
-
识别率优化:调整LD3320的麦克风灵敏度,优化关键词列表(选择差异大的词条),在安静环境下测试。
-
机械结构优化:设计合理的桶盖连杆机构,确保舵力足够且流畅。
-
功耗优化:增加人体红外感应模块(HC-SR501),无人时进入低功耗休眠状态,有人靠近再启动语音识别,节省电能。
-
数据统计:增加ESP8266 WiFi模块,将垃圾投放次数和满溢数据上传到云平台,用于大数据分析。
六、 结论与展望
(一) 项目总结
本项目成功设计并实现了一个基于STM32和离线语音识别技术的智能分类垃圾桶原型。系统能够准确响应语音指令,自动打开对应的垃圾桶盖,并能通过语音查询功能辅助用户进行垃圾分类。同时,集成的满溢检测功能有效提醒用户及时清理垃圾,解决了传统垃圾桶的痛点。整个系统成本可控,功能完整,具有良好的交互性和实用性。
(二) 未来展望
-
集成计算机视觉:增加一个摄像头模块,结合轻量化的TensorFlow Lite Micro模型,实现"语音+图像"双模式识别,进一步提高分类准确性和用户体验。
-
自动打包换袋:设计更为复杂的机械结构,实现垃圾袋的自动封口和更换功能。
-
太阳能供电:在垃圾桶顶部加装太阳能电池板,结合锂电池管理,实现自供电,适合公园、广场等户外场景部署。
-
社区物联网络:将区域内所有智能垃圾桶组网,监控中心可以实时查看每个点的状态,规划最优的清运路线,真正实现"智慧环卫"。
如有侵权,或需要完整代码,请及时联系博主。