【项目背景】
- 在2024年巴黎奥运会上,中国体育代表团以卓越的表现荣获40枚金牌,展现了中国体育的强大实力和运动员们的非凡风采。为了纪念这一历史性时刻,并激励更多人关注和参与体育活动,我们启动了一项特别的展示项目——利用行空板K10 开发板和MindPlus平台,结合现代科技,打造了一个交互式展示系统。
- 本项目的核心是展示中国奥运冠军的辉煌成就,通过视觉和语音的双重呈现,让参观者能够直观地感受到中国运动员在国际舞台上的卓越表现。我们采用了行空板K10开发板,这是一款功能强大的微控制器,具备高速处理能力和丰富的扩展接口,非常适合用于此类交互式展示项目。
- 项目中,我们使用了SD卡库功能来存储和读取奥运冠军的图片,确保了数据的稳定性和易更新性。每隔10秒,系统会自动切换展示下一位冠军的照片,并同步播放该运动员的姓名及所获奖项的语音信息,为参观者提供了一个流畅且富有教育意义的观赏体验。
- 为了增强互动性,项目集成了先进的语音识别技术,允许用户通过简单的语音命令来控制展示模式的切换。使用“开始”自动播放、“停止”停止当前展示,极大地提升了用户体验的便捷性和友好性。
- 此外,我们还注重了项目的可访问性和教育意义,旨在通过这个展示平台,不仅让参观者了解到中国运动员的成就,更激发他们对体育精神的思考和对健康生活方式的追求。我们相信,通过科技与体育的结合,可以为社会带来更多正能量,推动体育文化的传播和发展。
【项目亮点】 创新展示技术:本项目采用行空板K0开发板作为核心,结合MindPlus平台的强大功能,实现了一个高度集成的交互式展示系统,为传统奥运成就展示带来了技术创新。 智能语音交互:集成先进的语音识别技术,用户可以通过简单的语音命令控制展示流程,实现真正的无接触操作,提升互动性和用户体验。 个性化视觉体验:通过SD卡存储的高清图片,结合定制的展示逻辑,每10秒自动更新展示内容,确保每位奥运冠军的风采都能得到充分展现。 教育与纪念并重:项目不仅纪念了中国运动员在2024年巴黎奥运会上的卓越成就,同时也传递了体育精神和健康生活的理念,具有深远的教育意义。 环境适应性强:优化的语音识别算法能够适应不同的环境噪音,确保在多种场景下都能准确响应用户的指令。 用户友好的反馈机制:系统在接收到语音命令后,会通过语音或视觉反馈告知用户命令已被执行,增强了用户的参与感和满意度。
【项目硬件】
求“闺女”给本项目贡献的画作
行空板K10展示冠军图片
【准备图片】
存入到SD卡中
【程序编写】
1.为使用 整型变量,自己制作了一个小扩展
2.冠军信息列表函数
3.程序初始化函数
4.语音模式切换函数
5.图片语音轮换播报
6.主程序
-
- /*!
- * MindPlus
- * esp32s3bit
- *
- */
- #include "asr.h"
- #include <SimpleList.h>
- #include "unihiker_k10.h"
-
- // 动态变量
- String mind_s_TuPianMing, mind_s_XinXiNaRong;
- volatile float mind_n_MoShi, mind_n_ShiJian, mind_n_GuanJunZongShu, mind_n_TuPianXuHao,
- mind_n_CunFangTuPianShu, mind_n_XinXiXuHao;
- SimpleList<String> mind_l_XinXi;
- // 函数声明
- void DF_ChengXuChuShiHua();
- void DF_XinXiChuShiHua();
- void DF_YuYinMoShiQieHuan();
- void DF_TuPianYuYinLunHuanBoBao();
- // 创建对象
- UNIHIKER_K10 k10;
- uint8_t screen_dir=2;
- int a=0;
- int b=0;
- ASR asr;
-
-
- // 主程序开始
- void setup() {
- k10.begin();
- k10.initScreen(screen_dir);
- k10.creatCanvas();
- asr.asrInit(CONTINUOUS, CN_MODE, 6000);
- while(asr._asrState == 0){delay(100);}
- asr.setAsrSpeed(2);
- k10.initSDFile();
- DF_ChengXuChuShiHua();
- DF_XinXiChuShiHua();
- asr.speak("初始化完成");
- }
- void loop() {
- DF_YuYinMoShiQieHuan();
- DF_TuPianYuYinLunHuanBoBao();
- }
-
-
- // 自定义函数
- void DF_ChengXuChuShiHua() {
- k10.setScreenBackground(0x000000);
- k10.canvas->updateCanvas();
- mind_n_MoShi = 0;
- mind_n_ShiJian = millis();
- asr.addASRCommand(1+1, "zhan shi");
- asr.addASRCommand(2+1, "ting zhi");
- mind_n_GuanJunZongShu = 40;
- mind_n_TuPianXuHao = mind_n_GuanJunZongShu;
- mind_n_CunFangTuPianShu = 40;
- mind_n_XinXiXuHao = mind_n_CunFangTuPianShu;
- k10.canvas->canvasDrawImage(0, 0, "S:/41.jpg");
- k10.canvas->updateCanvas();
- }
- void DF_XinXiChuShiHua() {
- mind_l_XinXi.push_back("黄雨婷 盛李豪 射击 混合团体10米气步枪");
- mind_l_XinXi.push_back("陈艺文 昌雅妮 跳水 女子双人3米板");
- mind_l_XinXi.push_back("谢 瑜 射击 男子10米气手枪");
- mind_l_XinXi.push_back("杨昊 练俊杰 跳水 男子双人十米台");
- mind_l_XinXi.push_back("盛李豪 射击 男子10米气步枪");
- mind_l_XinXi.push_back("王楚钦 孙颖莎 乒乓球 混合双打");
- mind_l_XinXi.push_back("陈芋汐 全红婵 跳水 女子双人10米台");
- mind_l_XinXi.push_back("邓雅文 自由式小轮车 女子公园赛");
- mind_l_XinXi.push_back("潘展乐 游泳 男子100米自由泳");
- mind_l_XinXi.push_back("刘宇坤 射击 男子50米步枪三姿");
- mind_l_XinXi.push_back("杨家玉 田径 女子20公里竞走");
- mind_l_XinXi.push_back("王宗源 龙道一 跳水 男子双人3米板");
- mind_l_XinXi.push_back("郑思维 黄雅琼 羽毛球 混合双打");
- mind_l_XinXi.push_back("陈梦 乒乓球 女子单打");
- mind_l_XinXi.push_back("陈清晨 贾一凡 羽毛球 女子双打");
- mind_l_XinXi.push_back("郑钦文 网球 女子单打");
- mind_l_XinXi.push_back("樊振东 乒乓球 男子单打");
- mind_l_XinXi.push_back("刘洋 体操 男子吊环");
- mind_l_XinXi.push_back("游泳 男子4乘100米混合泳接力");
- mind_l_XinXi.push_back("李越宏 射击 男子25米手枪速射");
- mind_l_XinXi.push_back("邹敬园 体操 男子双杠");
- mind_l_XinXi.push_back("全红婵 跳水 女子10米台");
- mind_l_XinXi.push_back("李发彬 举重 男子61公斤级");
- mind_l_XinXi.push_back("花样游泳 集体技巧自选");
- mind_l_XinXi.push_back("侯志慧 举重 女子49公斤级");
- mind_l_XinXi.push_back("刘浩 季博文 男子500米双人划艇");
- mind_l_XinXi.push_back("谢思埸 跳水 男子3米板");
- mind_l_XinXi.push_back("罗诗芳 举重 女子59公斤级");
- mind_l_XinXi.push_back("常园 拳击 女子54公斤级");
- mind_l_XinXi.push_back("徐诗晓 孙梦雅 女子500米双人划艇");
- mind_l_XinXi.push_back("陈艺文 跳水-女子3米板");
- mind_l_XinXi.push_back("樊振东 马龙 王楚钦 乒乓球男子团体");
- mind_l_XinXi.push_back("吴愉 拳击-女子50公斤级");
- mind_l_XinXi.push_back("刘焕华 男子81公斤级");
- mind_l_XinXi.push_back("艺术体操团体全能");
- mind_l_XinXi.push_back("曹缘 跳水男子10米跳台跳水");
- mind_l_XinXi.push_back("陈梦 孙颖莎 王曼昱 乒乓球女子团体");
- mind_l_XinXi.push_back("王柳懿 王芊懿 花样游泳双人");
- mind_l_XinXi.push_back("李倩 女子拳击75公斤级");
- mind_l_XinXi.push_back("李雯雯 举重女子81公斤以上级");
- }
- void DF_YuYinMoShiQieHuan() {
- if (asr.isWakeUp()) {
- if (asr.isDetectCmdID(1+1)) {
- mind_n_MoShi = 1;
- asr.speak("好的,已开始为您展示");
- }
- else if (asr.isDetectCmdID(2+1)) {
- mind_n_MoShi = 2;
- k10.canvas->canvasDrawImage(0, 0, "S:/41.jpg");
- k10.canvas->updateCanvas();
- asr.speak("好的,已为您停止展示");
- }
- }
- }
- void DF_TuPianYuYinLunHuanBoBao() {
- if ((mind_n_MoShi==1)) {
- if (((millis() - mind_n_ShiJian)>10000)) {
- mind_n_ShiJian = millis();
- a=mind_n_TuPianXuHao;
- b=mind_n_XinXiXuHao;
- mind_s_TuPianMing = (String(a) + String(".jpg"));
- mind_s_XinXiNaRong = (String("第") + String((String(a) + String((String("金") + String(mind_l_XinXi[b-1]))))));
- k10.canvas->canvasClear();
- k10.canvas->canvasDrawImage(0, 0, "S:/" + mind_s_TuPianMing);
- k10.canvas->updateCanvas();
- asr.speak(mind_s_XinXiNaRong);
- mind_n_TuPianXuHao -= 1;
- if ((mind_n_TuPianXuHao==(mind_n_GuanJunZongShu - mind_n_CunFangTuPianShu))) {
- mind_n_TuPianXuHao = mind_n_GuanJunZongShu;
- }
- mind_n_XinXiXuHao -= 1;
- if ((mind_n_XinXiXuHao==0)) {
- mind_n_XinXiXuHao = mind_n_CunFangTuPianShu;
- }
- }
- }
- }
-
复制代码
这段代码是一个Arduino程序,用于MindPlus平台上的行空板K10开发板。它实现了一个自动循环展示中国奥运冠军图片和信息的系统,并可以通过语音命令控制展示的开始和停止。下面是对代码的详细解析:
包含的头文件
"asr.h":语音识别功能的头文件。
<SimpleList.h>:一个简单的列表库,用于存储和管理字符串列表。
"unihiker_k10.h":可能是针对UNIHIKER_K10显示屏的自定义库。
动态变量
mind_s_TuPianMing 和 mind_s_XinXiNaRong:用于存储图片名称和信息内容的字符串变量。
mind_n_MoShi、mind_n_ShiJian、mind_n_GuanJunZongShu 等:浮点型和整型变量,用于控制程序流程和存储状态。
函数声明
DF_ChengXuChuShiHua:初始化程序环境。
DF_XinXiChuShiHua:初始化信息列表。
DF_YuYinMoShiQieHuan:处理语音模式切换。
DF_TuPianYuYinLunHuanBoBao:处理图片和语音的循环播放。
创建对象
UNIHIKER_K10 k10:创建显示屏对象。
ASR asr:创建语音识别对象。
主程序
setup():初始化硬件,设置屏幕方向,初始化语音识别,加载图片,初始化程序状态,添加语音命令。
loop():主循环,调用自定义函数处理语音模式切换和图片语音循环播放。
自定义函数
DF_ChengXuChuShiHua():设置屏幕背景,初始化程序状态,添加语音命令,加载初始图片。
DF_XinXiChuShiHua():向列表中添加奥运冠军的信息。
DF_YuYinMoShiQieHuan():检测语音唤醒并识别命令,根据命令切换展示模式。
DF_TuPianYuYinLunHuanBoBao():在展示模式下,每10秒更新一次图片和语音信息,实现循环播放。
程序逻辑
程序开始时,执行setup()函数进行初始化。
在loop()函数中,不断检测语音命令并根据命令切换展示模式。
当处于展示模式时,每10秒通过DF_TuPianYuYinLunHuanBoBao()函数更新图片和语音信息。
图片和语音信息的更新通过修改全局变量和调用显示屏及语音识别对象的方法实现。
【演示视频】
|