2026寒假练 – 基于人工智能硬件实验套件平台实现智能语音氛围灯带
该项目使用了人工智能硬件实验套件平台,实现了智能语音氛围灯带的设计,它的主要功能为:1. 设计3种氛围灯显示模式,要求灯珠在一定周期内存在连续变化,例如跑马灯、彩虹灯、呼吸灯等。2. 在 OLED 上显示当前模式、亮度及速度。3. 在执行开关灯、模式切换、速度、亮度切换时,都使用蜂鸣器短鸣进行提示。4. 使用麦克风外部输入,通过AI模型实现设备控制。。
标签
嵌入式系统
student
更新2026-03-24
22

很高兴能参加硬禾科技的2026寒假在家一起练活动,我选择的平台是“人工智能硬件实验套件平台”,选择的任务是“智能语音氛围灯带”。人工智能硬件实验套件以Seeed XIAO ESP32-S3 Sense为核心主控,集成摄像头、麦克风等AI感知能力,搭配13个精选功能模块,具有丰富的应用场景。

 

所选任务介绍:

1. 设计至少3种氛围灯显示模式,要求灯珠在一定周期内存在连续变化,例如跑马灯、彩虹灯、呼吸灯等。

2. 使用以下至少一种外部输入(麦克风/摄像头),通过AI模型实现设备控制。

   1)通过麦克风实现设备唤醒,并设置至少 3 条语音指令,例如开灯、关灯、切换模式、调快、调慢、调亮、调暗等,语音识别可使用EDGE IMPULSEESP-SR或上位机等部署相关模型。

   2)通过摄像头实现至少 3 种手势识别,例如握拳关灯、比“OK”确认、手掌切换模式等,手势识别可使用EDGE IMPULSEESP-DL或上位机等部署相关模型。

3. OLED 上显示当前模式、亮度及速度。

4. 在执行开关灯、模式切换、速度、亮度切换时,都使用蜂鸣器短鸣进行提示。

 

项目设计思路:

  1. 使用麦克风采集要识别的关键词,保存到SD卡中,在EDGE IMPULSE中训练模型,并部署到ESP32上
  2. ESP32识别关键词,控制蜂鸣器、OLED和灯带进行相关控制


使用的硬件模块:

ESP32‑S3 Sense、麦克风、SD卡、RGB 灯带(SK6812)、OLED、蜂鸣器模块。

ESP32‑S3 Sense采用双核处理器芯片,运行频率高达240 MHz,支持Arduino开发。

 

硬件框图:


软件开发环境:

VSCODE+PlatformIO+Arduino

 

软件流程图:

(框图由AI生成)

  

实现功能:

 1. 设计3种氛围灯显示模式,要求灯珠在一定周期内存在连续变化,例如跑马灯、彩虹灯、呼吸灯等。

实现逻辑:

定义 8 号引脚驱动 10 SK6812 灯珠,配置基础亮度 505 秒模式切换间隔、颜色变化速度等硬件参数;通过全局变量管理灯效模式、色相值(HSV 0-65535)等核心状态。runMarquee 函数递增色相值,让 10 颗灯珠基于不同色相偏移实现多彩跑马,正反向依次点亮 / 熄灭;runRainbow 快速更新色相,为每颗灯珠分配连续彩虹色相,实现流畅的彩虹渐变流动;runBreath 生成随机亮度值,控制所有灯珠同步从 0 50 渐亮、再从 50 0 渐暗,呈现带随机色彩的呼吸效果。

(由AI根据代码生成)(代码由AI根据提示词生成)

 

2. OLED 上显示当前模式、亮度及速度。

实现逻辑:

初始化I2C驱动的SSD1306 128X64 OLED屏,定义多个显示函数:scn_wfw显示唤醒等待提示,scn_stdy显示待机状态,scn_mode0/1/2分别显示跑马灯、彩虹灯、呼吸灯模式及默认亮度、速度,均先清缓存、设字体、绘文字再刷新屏幕。

(由AI根据代码生成)

 

3. 在执行开关灯、模式切换、速度、亮度切换时,都使用蜂鸣器短鸣进行提示。

实现逻辑:

代码实现无源蜂鸣器短鸣一次的功能。首先定义蜂鸣器引脚9、短鸣时长100毫秒、鸣响频率800Hz等常量;初始化时将蜂鸣器引脚设为输出模式;主循环中调用`beepOnce()`函数触发蜂鸣器短鸣。`beepOnce()`函数通过`tone()`发出800Hz音频,维持100毫秒后,用`noTone()`停止发声,适配无源蜂鸣器驱动逻辑。

(由AI根据代码生成)(代码由AI根据提示词生成)

 

4. 使用麦克风外部输入,通过AI模型实现设备控制。

   1)通过麦克风实现设备唤醒,并设置 3 条语音指令,例如开灯、关灯、切换模式、调快、调慢、调亮、调暗等,语音识别可使用EDGE IMPULSE部署相关模型。

实现逻辑:

语音识别功能分为模型训练和语音识别。

模型训练:

1.使用开发板捕获(离线)音频数据,将录制的声音样本保存为 .wav 音频文件到 microSD 卡。

2.Edge Impulse 中上传收集的声音数据;创建脉冲(预处理/模型定义);预处理(MFCC)。

3.Edge Impulse 中进行模型设计和训练,构建机器学习模型。

4. Edge Impulse打包所有需要的库、预处理函数和训练好的模型,下载部署到 XIAO ESP32S3 Sense开发板上。

语音识别:

识别的核心基于“XIAO ESP32S3-Sense 关键词识别”的DEMO例程。

其中识别例程:“

1.代码的核心是Edge Impulse 模型推理 + ESP32S3 I2S 音频采集,实现实时语音关键词识别;

2.核心逻辑是:采集音频→模型推理→找最高置信度分类→控制 LED(索引 3 触发);

3.关键配置点:I2S 引脚、采样率(16kHz)、模型类型(麦克风)、内存分配。”

为了优化识别效果,采用AI实现语音识别的滑动窗口:“

不再等缓冲区填满后一次性替换全部数据,而是保留大部分历史数据,仅滑动更新最新的一小段数据(重叠 / 滑动步长),从而实现更连续、无间断的推理,提升识别实时性。”


5. 程序运行的状态机

// 0"dakai", 1"fast", 2"guanbi", 3"qiehuan", 4"white"
uint8_t dec_a = 4, dec_b = 4, dec_c = 4;
// 定义字符串数组
const char* label[] = {
  "dakai",
  "fast",  
  "guanbi",
  "qiehuan",
  "white"
};

#define SOFF 5
#define M1 0
#define M2 1
#define M3 2
#define WFW 4
uint8_t main_state = WFW;


void state_switch(uint8_t new_dec)
{
    dec_a = dec_b;
    dec_b = dec_c;
    dec_c = new_dec;
    if(dec_a!= 4 && dec_a!= 1){
        if( dec_a==dec_b && dec_b == dec_c){
            switch(dec_a)
            {
                case 0:
                    if(main_state == SOFF || main_state == WFW)
                        main_state = M1;
                break;
                case 2:
                    if(main_state != SOFF)
                        main_state = SOFF;
                break;
                case 3:
                    if(main_state != SOFF && main_state != WFW)
                        main_state = (main_state+1)%3;
                break;
                default:
                    ;
                break;
            }
            ei_printf("\n dec:%d main_state:%d\n\n\n", dec_a, main_state);


            dec_a = 4;
            dec_b = 4;
            dec_c = 4;
            scn_dis(main_state);
            beepOnce();


        }
    }
}

 程序的逻辑为,记录3次语音识别结果,将新的结果覆盖旧的结果。如果识别结果不是背景噪声和错误识别项,且连续3次的识别结果一致时,根据识别结果进行状态转移。默认状态为等待唤醒。

语音识别结果有:打开、切换、关闭三种;状态有:关闭、模式1、模式2、模式3、等待唤醒五种。

  1. 识别结果为“打开”,若此时状态为关闭或等待唤醒时,状态切换为打开状态
  2. 识别结果为“关闭”,若此时状态不是关闭,状态切换为关闭状态
  3. 识别结果为“切换”,若此时状态不是关闭且不是等待唤醒状态,切换一种模式

执行完状态转移以后,串口打印转移后的结果,将识别结果切换为背景噪音。OLED根据当前状态进行刷新,同时蜂鸣器鸣响一次。而RGB灯带在主循环中根据状态进行模式选择。


结果展示:

  • 等待唤醒模式:

  • 跑马灯模式:

  • 彩虹灯模式:

  • 呼吸灯模式:

  • 关闭后处于待机模式:

 

遇到的困难:

  1. Seeed Studio XIAO ESP32S3 Sense的语音识别问题,通过EDGE IMPULSE实现的语音识别在demo例程上实现质量很差,感谢群里大佬提出的滑动窗口概念,使得语音识别成为现实。
  2. ArduinoPlatform IO环境安装问题,由于ArduinoIDE编译速度极其缓慢,所以安装了VscodePlatform IO插件。插件在新建工程、安装三方库上,可能由于网络问题,极其折磨人。
  3. 语音识别与灯带控制,语音识别和灯带控制需要并行运行,最佳方式是采用多线程或者多核的方式进行,由于时间关系,不得已将两部分代码融合到一起串行执行。
  4. 灯带进行显示时,无法通过HSV参数动态控制亮度,使用AI多次进行调整无效,只能用RGB的方式进行调整。

 

心得体会:

本次项目经历真正感受到了AI已经融入到开发中,项目的核心功能是AI语音识别,项目编程中很多代码都是由AI生成的,项目报告中的框图和程序说明也部分由AI绘制和编写。在项目中,人可以从工作中解放出来,将精力投入到想法创作和结果检查上。虽然AI可能还有很多不足,但是崛起的趋势已经势不可挡。拥抱AI的新质生产力是不被时代淘汰的唯一选择。

附件下载
pio_clean.zip
团队介绍
大家好,我是student
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号