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