云天 发表于 2025-1-6 13:33:44

行空板K10——语音麦昆小车

【项目背景】
      随着人工智能技术的迅猛发展,语音识别与控制技术在各个领域的应用日益广泛。在教育、娱乐、工业自动化等领域,语音控制技术为用户提供了更为便捷和直观的交互方式。行空板K10是一款集成了多种传感器和通信模块的开发板,具有强大的计算能力和丰富的扩展接口,能够与各种外设进行无缝连接。麦昆小车是一款功能灵活的智能小车,具有良好的运动性能和扩展性,能够搭载各种传感器和执行器,实现复杂的运动控制和任务执行。
      将行空板K10与麦昆小车相结合,实现语音控制小车的项目,旨在探索语音识别技术在智能机器人领域的应用潜力。通过语音指令,用户可以远程控制小车的运动方向(前进、后退、向左、向右转)以及机械爪的动作(张开、闭合、抓取等),从而实现对小车的语音操控和任务执行。这一项目为麦昆小车提供新的交互方式。
      在教育领域,该项目可以作为机器人教育和编程教育的实践案例,帮助学生了解语音识别技术的原理和应用方法,培养学生的创新思维和实践能力。在娱乐领域,语音控制小车可以为用户提供更加丰富和有趣的互动体验,例如在家庭娱乐中,用户可以通过语音指令让小车完成各种有趣的动作和任务。
【硬件组合】




【项目准备】

1.修改用户库“代码生成器”的“config.json”文件,增加"esp32s3bit":true,支持行空板K10。

2.在“Arduino\static\libraries\Maqueen_Motor”目录下新增“esp32s3bit”文件夹,并将“fireBeetleEsp32”目录下的“Maqueen_Motor.cpp.o”文件录制到“esp32s3bit”。
【编写程序】
1.编写小车相应控制函数

2.编写机械爪相应控制函数

3.编写电机相应控制函数(暂时未使用)

4.主程序



5.Arduino C 代码

/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
#include <Maqueen_Motor.h>

// 动态变量
volatile float mind_n_JiaoDu;
// 函数声明
void DF_BiHe();
void DF_ZhangKai();
void DF_DianJi(String mind_s_ZuoYou, float mind_n_ZhuanSu, String mind_s_ZhengFanZhuan);
void DF_DianJiChuShiHua();
void DF_TingZhi(String mind_s_ZuoYou);
void DF_ZhuaQu();
void DF_Song();
void DF_Jin();
void DF_HouTui(float mind_n_SuDu);
void DF_ZuoZhuan(float mind_n_SuDu);
void DF_YouZhuan(float mind_n_SuDu);
void DF_QianJin(float mind_n_SuDu);
void DF_TingChe();
// 创建对象
UNIHIKER_K10k10;
uint8_t       screen_dir=2;
ASR         asr;
Maqueen_Motor motor;


// 主程序开始
void setup() {
      k10.begin();
      k10.initScreen(screen_dir);
      k10.creatCanvas();
      asr.asrInit(CONTINUOUS, CN_MODE, 60000);
      while(asr._asrState == 0){delay(100);}
      k10.setScreenBackground(0x000000);
      k10.canvas->canvasText("行空板", 84, 50, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
      k10.canvas->canvasText("语音麦昆车", 60, 200, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
      k10.canvas->updateCanvas();
      DF_DianJiChuShiHua();
      asr.addASRCommand(0+1, "qian jin");
      asr.addASRCommand(1+1, "hou tui");
      asr.addASRCommand(2+1, "zuo zhuan");
      asr.addASRCommand(3+1, "you zhuan");
      asr.addASRCommand(4+1, "ting zhi");
      asr.addASRCommand(5+1, "jin yi jin");
      asr.addASRCommand(6+1, "song yi song");
      asr.addASRCommand(7+1, "bi he");
      asr.addASRCommand(8+1, "zhang kai");
      asr.addASRCommand(9+1, "zhua qu");
      mind_n_JiaoDu = 110;
}
void loop() {
      if (asr.isDetectCmdID(0+1)) {
                DF_QianJin(200);
      }
      if (asr.isDetectCmdID(1+1)) {
                DF_HouTui(200);
      }
      if (asr.isDetectCmdID(2+1)) {
                DF_ZuoZhuan(150);
      }
      if (asr.isDetectCmdID(3+1)) {
                DF_YouZhuan(150);
      }
      if (asr.isDetectCmdID(4+1)) {
                DF_TingChe();
      }
      if (asr.isDetectCmdID(5+1)) {
                DF_Jin();
      }
      if (asr.isDetectCmdID(6+1)) {
                DF_Song();
      }
      if (asr.isDetectCmdID(7+1)) {
                DF_BiHe();
      }
      if (asr.isDetectCmdID(8+1)) {
                DF_ZhangKai();
      }
      if (asr.isDetectCmdID(9+1)) {
                DF_ZhuaQu();
      }
}


// 自定义函数
void DF_BiHe() {
      mind_n_JiaoDu = 110;
      motor.servo(motor.S1, mind_n_JiaoDu);;
}
void DF_ZhangKai() {
      mind_n_JiaoDu = 45;
      motor.servo(motor.S1, mind_n_JiaoDu);;
}
void DF_DianJi(String mind_s_ZuoYou, float mind_n_ZhuanSu, String mind_s_ZhengFanZhuan) {
      if ((mind_s_ZuoYou==String("左"))) {
                if ((mind_s_ZhengFanZhuan==String("正"))) {
                        motor.motorRun(motor.LEFT,motor.CW,mind_n_ZhuanSu);;
                }
                else {
                        motor.motorRun(motor.LEFT,motor.CCW,mind_n_ZhuanSu);;
                }
      }
      else {
                if ((mind_s_ZhengFanZhuan==String("正"))) {
                        motor.motorRun(motor.RIGHT,motor.CW,mind_n_ZhuanSu);;
                }
                else {
                        motor.motorRun(motor.RIGHT,motor.CCW,mind_n_ZhuanSu);;
                }
      }
}
void DF_DianJiChuShiHua() {

}
void DF_TingZhi(String mind_s_ZuoYou) {
      if ((mind_s_ZuoYou==String("左"))) {
                motor.motorStop(motor.LEFT);;
      }
      else if ((mind_s_ZuoYou==String("右"))) {
                motor.motorStop(motor.RIGHT);;
      }
      else {
                motor.motorStop(motor.LEFT);;
                motor.motorStop(motor.RIGHT);;
      }
}
void DF_ZhuaQu() {
      mind_n_JiaoDu = 90;
      motor.servo(motor.S1, mind_n_JiaoDu);;
}
void DF_Song() {
      if ((mind_n_JiaoDu>50)) {
                mind_n_JiaoDu = (mind_n_JiaoDu - 5);
                motor.servo(motor.S1, mind_n_JiaoDu);;
      }
}
void DF_Jin() {
      if ((mind_n_JiaoDu<110)) {
                mind_n_JiaoDu = (mind_n_JiaoDu + 5);
                motor.servo(motor.S1, mind_n_JiaoDu);;
      }
}
void DF_HouTui(float mind_n_SuDu) {
      motor.motorRun(motor.LEFT,motor.CCW,mind_n_SuDu);;
      motor.motorRun(motor.RIGHT,motor.CCW,mind_n_SuDu);;
}
void DF_ZuoZhuan(float mind_n_SuDu) {
      motor.motorStop(motor.LEFT);;
      motor.motorRun(motor.RIGHT,motor.CW,mind_n_SuDu);;
}
void DF_YouZhuan(float mind_n_SuDu) {
      motor.motorRun(motor.LEFT,motor.CW,mind_n_SuDu);;
      motor.motorStop(motor.RIGHT);;
}
void DF_QianJin(float mind_n_SuDu) {
      motor.motorRun(motor.LEFT,motor.CW,mind_n_SuDu);;
      motor.motorRun(motor.RIGHT,motor.CW,mind_n_SuDu);;
}
void DF_TingChe() {
      motor.motorStop(motor.LEFT);;
      motor.motorStop(motor.RIGHT);;
}


【演示视频】https://www.bilibili.com/video/BV1ymrGY9EQe/?share_source=copy_web

木子呢 发表于 2025-1-6 13:51:05

太丝滑了!!!!赞!

u56FwceNKhP1 发表于 2025-1-8 14:25:44

修改用户库“代码生成器”的“config.json”文件,增加"esp32s3bit":true,请问这个config.json文件的路径是多少啊

云天 发表于 2025-1-8 19:04:13

C:\Users\自己的电脑名\AppData\Local\DFScratch\extensions
页: [1]
查看完整版本: 行空板K10——语音麦昆小车