| 【项目背景】 随着人工智能技术的迅猛发展,语音识别与控制技术在各个领域的应用日益广泛。在教育、娱乐、工业自动化等领域,语音控制技术为用户提供了更为便捷和直观的交互方式。行空板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_K10  k10;
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);;
}
 【演示视频】
 
 
 |