基于STM32的智能语音识别分类垃圾桶

若该文为原创文章,转载请注明原文出处。

一、 项目背景与引言

(一) 研究背景及意义

随着城市化进程加快和人口增长,"垃圾围城"已成为全球性的环境挑战。有效的垃圾分类是实现垃圾减量化、资源化、无害化处理的关键前提。然而,公众普遍存在垃圾分类知识不足、嫌麻烦等问题,导致分类效果不佳。本项目旨在利用嵌入式人工智能技术,设计一款基于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

(二) 功能模块划分

  1. 主控模块:流程调度、逻辑控制、指令解析。

  2. 语音交互模块:识别用户指令并执行开盖操作,播报提示音。

  3. 状态检测模块:检测4个桶内的垃圾高度。

  4. 人机交互模块:OLED显示状态,蜂鸣器报警,按键控制。

  5. 执行机构模块:舵机控制桶盖的打开和关闭。

三、 硬件设计与实现

(一) 主控模块选型及介绍

采用STM32F103C8T6最小系统板。

  • 核心:Cortex-M3内核,72MHz主频,性能充足。

  • 资源:足够多的GPIO口控制4个舵机、4个超声波模块、显示屏、按键等,USART、I2C、定时器等外设完备。

  • 优点:成本极低,社区资源丰富,开发便捷。

(二) 传感器模块选型及电路设计

  1. 超声波传感器模块

    • 选型HC-SR04,性价比高,应用广泛。

    • 数量:4个,分别安装在"可回收"、"厨余"、"有害"、"其他"四个垃圾桶内部顶端,垂直向下检测距离。

    • 电路 :每个传感器的Vcc接5V,Gnd接GND,Trig触发引脚和Echo回响引脚分别接STM32的4组GPIO(如Trig1->PA0, Echo1->PA1Trig2->PA2, Echo2->PA3, 以此类推)。

  2. 语音识别模块

    • 选型LD3320离线语音识别模块。它不需要联网,可直接在本地识别预先设定的关键词(如"打开可回收垃圾"、"关闭"、"苹果核是什么垃圾"等)。

    • 电路 :模块与STM32通过并行总线或SPI接口连接(取决于具体模块型号),接线相对复杂,需参考模块手册。RSTCSWRDATA等引脚需连接到STM32的特定GPIO。

(三) 执行模块选型及驱动电路

  1. 舵机

    • 选型SG90微型舵机,扭矩足以打开小型桶盖。

    • 数量:4个。

    • 驱动电路 :每个舵机的信号线(橙色/白色)分别接STM32的一个GPIO(如PB6, PB7, PB8, PB9)。注意: 舵机供电必须使用外部5V电源,切勿直接从STM32板载的3.3V或5V取电,否则会导致单片机复位或损坏。

  2. 蜂鸣器

    • 选型有源蜂鸣器(高电平触发)。

    • 电路:正极通过一个1K电阻接STM32的GPIO(如PC13),负极接GND。

(四) 显示与交互模块

  1. OLED显示屏

    • 选型:0.96寸I2C接口OLED模块(SSD1306)。

    • 接口电路SCL接PB10,SDA接PB11。

  2. 按键

    • 选型:轻触按键。

    • 电路:一端接GPIO(如PA15),另一端接地。GPIO内部配置为上拉输入模式。

(五) 电源模块设计

  • 采用5V 2A以上的直流电源适配器作为总输入。

  • 一路5V直接给4个舵机和语音模块供电。

  • 另一路通过AMS1117-3.3V稳压芯片转换为3.3V,为STM32、OLED、超声波模块等供电。

四、 软件设计与实现

(一) 开发环境搭建

  • IDE:Keil uVision 5

  • 配置工具:STM32CubeMX用于生成初始化代码

  • :HAL库或标准外设库

(二) 系统初始化

  1. 初始化系统时钟、GPIO、I2C、定时器。

  2. 初始化OLED,显示开机界面。

  3. 初始化语音识别模块,并添加关键词列表(如"可回收"、"厨余"、"有害"、"其他"、"打开"、"关闭"、"帮助"、"电池"、"塑料袋"等)。

  4. 播放欢迎语音:"欢迎使用智能垃圾桶,保护环境卫生,人人有责"。

  5. 初始化所有舵机至关闭状态。

(三) 软件流程图与逻辑

(四) 关键代码片段

主循环核心逻辑

复制代码
// 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("塑料袋属于其他垃圾");
    }
    // ... 其他物品
  }
}

五、 系统测试与优化

(一) 测试方案

  1. 单元测试:分别测试舵机转动角度、超声波测距准确性、语音识别率、OLED显示、蜂鸣器发声。

  2. 功能测试

    • 逐一说出"打开XX垃圾"指令,检查对应舵机是否动作。

    • 说出"电池"、"果皮"等物品名称,检查语音回复是否正确。

    • 遮挡超声波传感器,模拟桶满状态,检查蜂鸣器是否报警。

    • 按下按键,检查是否按顺序开盖。

    • 测试10秒后桶盖是否自动关闭。

  3. 压力测试:连续快速发出不同指令,测试系统响应稳定性和识别率。

(二) 优化方向

  1. 识别率优化:调整LD3320的麦克风灵敏度,优化关键词列表(选择差异大的词条),在安静环境下测试。

  2. 机械结构优化:设计合理的桶盖连杆机构,确保舵力足够且流畅。

  3. 功耗优化:增加人体红外感应模块(HC-SR501),无人时进入低功耗休眠状态,有人靠近再启动语音识别,节省电能。

  4. 数据统计:增加ESP8266 WiFi模块,将垃圾投放次数和满溢数据上传到云平台,用于大数据分析。

六、 结论与展望

(一) 项目总结

本项目成功设计并实现了一个基于STM32和离线语音识别技术的智能分类垃圾桶原型。系统能够准确响应语音指令,自动打开对应的垃圾桶盖,并能通过语音查询功能辅助用户进行垃圾分类。同时,集成的满溢检测功能有效提醒用户及时清理垃圾,解决了传统垃圾桶的痛点。整个系统成本可控,功能完整,具有良好的交互性和实用性。

(二) 未来展望

  1. 集成计算机视觉:增加一个摄像头模块,结合轻量化的TensorFlow Lite Micro模型,实现"语音+图像"双模式识别,进一步提高分类准确性和用户体验。

  2. 自动打包换袋:设计更为复杂的机械结构,实现垃圾袋的自动封口和更换功能。

  3. 太阳能供电:在垃圾桶顶部加装太阳能电池板,结合锂电池管理,实现自供电,适合公园、广场等户外场景部署。

  4. 社区物联网络:将区域内所有智能垃圾桶组网,监控中心可以实时查看每个点的状态,规划最优的清运路线,真正实现"智慧环卫"。

如有侵权,或需要完整代码,请及时联系博主。

相关推荐
CC呢4 小时前
基于单片机智能家居环境检测系统/室内环境检测设计
stm32·单片机·嵌入式硬件·物联网·智能家居
智者知已应修善业5 小时前
【51单片机8*8点阵显示箭头动画详细注释】2022-12-1
c语言·经验分享·笔记·嵌入式硬件·51单片机
极客小张8 小时前
【项目思路】基于STM32+ZigBee的智能家居--浴室场景设计
c语言·python·stm32·智能家居·课程设计·项目设计·企业项目
璞致电子11 小时前
【PZ-AU15P】璞致fpga开发板 Aritx UltraScalePlus PZ-AU15P 核心板与开发板用户手册
嵌入式硬件·fpga开发·fpga·fpga开发板·xilinx开发板
芯岭技术12 小时前
MS32C001单片机芯片介绍,QFN16/20封装 主频24MHz
单片机·嵌入式硬件
weixin_7007114012 小时前
硬件基础与c51基础
单片机·嵌入式硬件
Jack1530276827914 小时前
深度剖析 DC - DC 转换器在新能源汽车中的关键应用
单片机·嵌入式硬件·汽车·充电桩·电动工具·汽车音响系统
武文斌7715 小时前
单片机:GPIO、按键、中断、定时器、蜂鸣器
单片机·嵌入式硬件