深夜改BUG时突然想到:要是垃圾桶能听懂人话该多省事。于是就有了这个用STM32捣鼓的语音交互垃圾桶,实测识别率居然比我点的奶茶配送员还靠谱
当识别到有用户时语音模块开始识别语音,识别的语音经放大滤波比较,处理后信号传入CPU模块,通过程序的控制与判断,得出垃圾箱的LED灯的打开,然后通过串口发出命令给语音模块播报相对应的语音,告知用户投放那种垃圾类型,以便起到更好的垃圾分类效果;当识别到有用户时语音模块开始识别语音,识别的语音经放大滤波比较,处理后信号传入CPU模块,通过程序的控制与判断,得出垃圾箱的LED灯的打开,然后通过串口发出命
基于STM32单片机智能垃圾箱设计 语音识别控制及垃圾分类 可自定义增减功能。 自定义设计,具体需要什么功能根据自己的需求定制。 硬件设计:STM32F103C8T6芯片控制中心模块,红外检测电路模块、语音交互和输出电路模块、LED指示电路、垃圾量检测红外电路、OLED显示屏显示电路、光敏感应电路、LED灯条照明电路、太阳能供电及锂电池充放电模块组成。 系统: 太阳能智能语音播报垃圾分类设计实现用户需要投放垃圾时,能够语音提示具体把厨余垃圾、有害垃圾、可回收垃圾、其他垃圾进行分类。 红外传感器具有检测,CPU进行处理判断是否有用户需要扔垃圾。 当识别到有用户时语音模块开始识别语音,识别的语音经放大滤波比较,处理后信号传入CPU模块,通过程序的控制与判断,得出垃圾箱的LED灯的打开,然后通过串口发出命令给语音模块播报相对应的语音,告知用户投放那种垃圾类型,以便起到更好的垃圾分类效果;垃圾量红外传感器检测垃圾,进行信息反馈,监控,实现垃圾满时进行提示,并且进行OLED显示屏进行显示观看;光敏传感器采集外界光照强度,进行LED灯条亮灭控制; 1.语音识别:语音识别器具有语音识别、语音输出,语音输出端将语音识别器播放的语音段电信号转化成声波,语音输出是通过CPU控制输出需要的指令。 触发成功后语音模块进入识别阶段后,系统延时一定时间识别停留,当用户有语言输入发出指令后,识别的数据进入单片机进行系统比对,比对出最相似的指令后,单片机系统进行控制LED垃圾箱指示灯的开启,引导用户相对应的投放垃圾 2.垃圾量检测: 系统初始化后进行垃圾量检测,检测是通过红外判断距离进行检测,红外线检测垃圾底部与顶部的距离,检测的值如果低于设定的阈值,系统就会判断垃圾已满,进而单片机系统控制语音播报,并且OLED显示屏上具体显示垃圾箱垃圾已满 3.光照强度判断: 系统初始化后,开启光敏传感器,采集外界光照强度模拟量数据,通过转换,得出外界光照强度值,系统通过电频输出控制LED灯条的亮度,从而调节灯的亮度。 当检测的外界光照强度为白天,那么单片机驱动LED灯条进行关灯,当检测的外界光照强度为黑夜,单片机驱动LED灯条进行开灯 4.太阳能供电: 电源是保证设备的稳定、可靠运行的关键。 采用太阳能设计,更加的环保方便,电源电压稳压至5V进行对锂电池进行充电,锂电池电量给各部分电路模块供电。
先说核心玩法:对着垃圾桶喊'苹果核',它就会亮起厨余垃圾的绿灯。整个过程就像在跟话痨机器人玩密室逃脱——红外感应先确认你是不是要扔垃圾,OLED屏同步显示剩余容量,光敏模块自动补光,整套系统还挂着太阳能板续命。

硬件清单里最骚的是这个语音识别模块,我用的是LD3320芯片。这货支持非特定人声识别,连训练都省了。核心逻辑就这段代码:
void ASR_Process(void){
if(识别到关键词){
HAL_UART_Transmit(&huart1, (uint8_t*)"CMD_OK\r\n", 8, 100);
switch(识别结果){
case 0x01: // 厨余
LED_Set(GREEN, ON);
PlaySound(1); // "请投放湿垃圾"
break;
case 0x02: // 可回收
LED_Set(BLUE, ON);
PlaySound(2);
break;
// ...其他分类
}
}
}
实际调试发现需要加个500ms的消抖延时,不然路过打个喷嚏都能误触发。语音播报用PWM驱动喇叭时,记得在DMA传输完成中断里关PWM,否则会出现鬼畜的电流声。
垃圾量检测用的是夏普GP2Y0A21红外传感器,这玩意儿输出的是模拟电压。ADC采样后要做非线性校准:
float GetTrashLevel(){
float voltage = ADC_Read() * 3.3 / 4096;
// 实测数据拟合公式
return 23.5 * pow(voltage, -1.2); // 单位cm
}
当检测距离小于15cm时触发满仓警告,这时候OLED屏会显示哭脸表情包。为了省电,只有在红外感应到人体时才唤醒显示屏,其他时间保持休眠状态。

基于STM32单片机智能垃圾箱设计 语音识别控制及垃圾分类 可自定义增减功能。 自定义设计,具体需要什么功能根据自己的需求定制。 硬件设计:STM32F103C8T6芯片控制中心模块,红外检测电路模块、语音交互和输出电路模块、LED指示电路、垃圾量检测红外电路、OLED显示屏显示电路、光敏感应电路、LED灯条照明电路、太阳能供电及锂电池充放电模块组成。 系统: 太阳能智能语音播报垃圾分类设计实现用户需要投放垃圾时,能够语音提示具体把厨余垃圾、有害垃圾、可回收垃圾、其他垃圾进行分类。 红外传感器具有检测,CPU进行处理判断是否有用户需要扔垃圾。 当识别到有用户时语音模块开始识别语音,识别的语音经放大滤波比较,处理后信号传入CPU模块,通过程序的控制与判断,得出垃圾箱的LED灯的打开,然后通过串口发出命令给语音模块播报相对应的语音,告知用户投放那种垃圾类型,以便起到更好的垃圾分类效果;垃圾量红外传感器检测垃圾,进行信息反馈,监控,实现垃圾满时进行提示,并且进行OLED显示屏进行显示观看;光敏传感器采集外界光照强度,进行LED灯条亮灭控制; 1.语音识别:语音识别器具有语音识别、语音输出,语音输出端将语音识别器播放的语音段电信号转化成声波,语音输出是通过CPU控制输出需要的指令。 触发成功后语音模块进入识别阶段后,系统延时一定时间识别停留,当用户有语言输入发出指令后,识别的数据进入单片机进行系统比对,比对出最相似的指令后,单片机系统进行控制LED垃圾箱指示灯的开启,引导用户相对应的投放垃圾 2.垃圾量检测: 系统初始化后进行垃圾量检测,检测是通过红外判断距离进行检测,红外线检测垃圾底部与顶部的距离,检测的值如果低于设定的阈值,系统就会判断垃圾已满,进而单片机系统控制语音播报,并且OLED显示屏上具体显示垃圾箱垃圾已满 3.光照强度判断: 系统初始化后,开启光敏传感器,采集外界光照强度模拟量数据,通过转换,得出外界光照强度值,系统通过电频输出控制LED灯条的亮度,从而调节灯的亮度。 当检测的外界光照强度为白天,那么单片机驱动LED灯条进行关灯,当检测的外界光照强度为黑夜,单片机驱动LED灯条进行开灯 4.太阳能供电: 电源是保证设备的稳定、可靠运行的关键。 采用太阳能设计,更加的环保方便,电源电压稳压至5V进行对锂电池进行充电,锂电池电量给各部分电路模块供电。
光敏控制部分最有意思,用光敏电阻分压接ADC。但直接读原始值会闪瞎眼,所以做了滑动滤波:
#define LIGHT_SAMPLES 10
uint16_t light_buf[LIGHT_SAMPLES];
uint16_t GetLightLevel(){
static uint8_t index = 0;
light_buf[index] = ADC_Read();
index = (index+1) % LIGHT_SAMPLES;
uint32_t sum = 0;
for(int i=0; i<LIGHT_SAMPLES; i++)
sum += light_buf[i];
return sum / LIGHT_SAMPLES;
}
配合PWM调光算法,让LED灯条亮度渐变而不是突然亮瞎眼。实测在黄昏时分会有呼吸灯效果,莫名治愈。

太阳能充电管理用的是TP4056芯片,但需要自己加个电压监控:
void CheckBattery(){
float vol = ADC_Read(BAT_PIN) * 3.3 * 2 / 4096; // 分压电路
if(vol < 3.6){
PlaySound(5); // "电量不足请充电"
LED_Blink(RED, 200);
}
}
遇到阴雨天会自动切换锂电池供电,系统进入低功耗模式时整机电流能压到8mA以下。
这个项目的精髓在于功能模块可以像乐高一样拼装。比如加上ESP8266就能微信推送垃圾满提醒,接个舵机改造成自动开盖。下次准备尝试接入ChatGPT,让垃圾桶能吐槽用户乱扔垃圾——毕竟,没有毒舌功能的AI不是好智能硬件。"
更多推荐
所有评论(0)