在这里插入图片描述
在这里插入图片描述

行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好

在这里插入图片描述
TT马达四驱全向福来轮小车使用的特色底板、TT电机、全向福来轮与扩展板

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

主打:人工智能模块

在这里插入图片描述

语音识别合成相关说明

在这里插入图片描述
在这里插入图片描述

辅助:屏幕显示相关积木

在这里插入图片描述
接脚 IO 扩展模块

在这里插入图片描述

在这里插入图片描述

LED控制模块

在这里插入图片描述
四驱福来轮(四轮全向轮)控制原理图

在这里插入图片描述

【花雕动手做】行空板 K10 系列实验之全向福来轮语音控制 TT 马达四驱小车

实验开源代码

// 行空板K10离线语音识别库,提供唤醒词、离线语音指令识别(无需网络)
#include "asr.h"
// 行空板K10硬件底层驱动:屏幕、画布、中英文字体等外设接口
#include "unihiker_k10.h"
// Microbit电机拓展板驱动库,控制M1/M2/M3/M4四路直流电机,适配麦克纳姆轮底盘
#include <Microbit_Motor.h>

// 全局对象实例化
UNIHIKER_K10   k10;         // 行空板主控硬件对象
ASR            asr;          // 离线语音识别对象
uint8_t        screen_dir=2; // 屏幕方向参数2:正向竖屏显示
Microbit_Motor motorbit;     // 四路电机驱动对象


// 上电初始化函数,通电/复位仅执行一次
void setup() {
    // 初始化行空板全部底层硬件驱动
	k10.begin();

    // 初始化离线语音模块
    // CONTINUOUS:持续监听模式;CN_MODE:中文识别;10000:语音会话超时(毫秒)
	asr.asrInit(CONTINUOUS, CN_MODE, 10000);

    // 阻塞等待语音模块初始化完成
    // _asrState == 0 代表模块未就绪,不断延时轮询
	while(asr._asrState == 0){delay(100);}

    // 设置屏幕显示方向
	k10.initScreen(screen_dir);
    // 创建绘图画布,所有文字、图形都需要绘制到画布
	k10.creatCanvas();

    // 注册语音指令:【指令ID,拼音关键词】
    // 规则:识别关键词必须填写拼音,不能直接写中文;ID从1开始,使用n+1写法
	asr.addASRCommand(0+1, "qian jin");  // ID1 前进
	asr.addASRCommand(1+1, "ting che");  // ID2 停车
	asr.addASRCommand(2+1, "hou tui");   // ID3 后退
	asr.addASRCommand(3+1, "you heng");  // ID4 右横走
	asr.addASRCommand(4+1, "zuo heng"); // ID5 左横走
	asr.addASRCommand(5+1, "zhuan quan");//ID6 原地转圈
}

// 主循环,初始化结束后无限循环运行
void loop() {
    // 判断是否识别唤醒词【你好小新】
	if (asr.isWakeUp()) {
        // 唤醒成功,画布第6行打印红色提示
		k10.canvas->canvasText("已唤醒行空板小车.......", 6, 0xFF0000);
		k10.canvas->updateCanvas();
	}
	else {
        // 未唤醒待机状态,第4行蓝色文字提示唤醒词
		k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
		k10.canvas->updateCanvas();
	}

    // =====================语音指令分支=====================
    // 识别【前进】
	if (asr.isDetectCmdID(0+1)) {
		motorbit.motorRun(M1, CW, 200);   // M1正转
		motorbit.motorRun(M2, CW, 200);   // M2正转
		motorbit.motorRun(M3, CCW, 200);  // M3反转
		motorbit.motorRun(M4, CCW, 200);  // M4反转
        // 自由坐标文字:X=0,Y=180,黑色,24号中英文字体,透明度50,开启抗锯齿
		k10.canvas->canvasText("K10 小车前进", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 识别【停车】:停止全部电机
	if (asr.isDetectCmdID(1+1)) {
		motorbit.motorStop(ALL);
		k10.canvas->canvasText("K10 小车停止", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 识别【后退】
	if (asr.isDetectCmdID(2+1)) {
		motorbit.motorRun(M1, CCW, 200); // M1反转
		motorbit.motorRun(M2, CCW, 200); // M2反转
		motorbit.motorRun(M3, CW, 200);   // M3正转
		motorbit.motorRun(M4, CW, 200);   // M4正转
		k10.canvas->canvasText("K10 小车后退", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 识别【右横走】
	if (asr.isDetectCmdID(3+1)) {
		motorbit.motorRun(M2, CCW, 200);
		motorbit.motorRun(M4, CW, 200);
		k10.canvas->canvasText("K10 小车右横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 识别【左横走】
	if (asr.isDetectCmdID(4+1)) {
		motorbit.motorRun(M2, CW, 200);
		motorbit.motorRun(M4, CCW, 200);
		k10.canvas->canvasText("K10小车左横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 识别【原地转圈】四个电机全部正转,实现自旋
	if (asr.isDetectCmdID(5+1)) {
		motorbit.motorRun(M1, CW, 200);
		motorbit.motorRun(M3, CW, 200);
		motorbit.motorRun(M2, CW, 200);
		motorbit.motorRun(M4, CW, 200);
		k10.canvas->canvasText("K10小车原地转圈", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

    // 清空画布第6行文字,防止唤醒提示文字叠加残留
	k10.canvas->canvasClear(6);
}

行空板 K10 离线语音全向轮小车 代码解读

一、头文件

#include "asr.h"
#include "unihiker_k10.h"
#include <Microbit_Motor.h>
  1. asr.h离线语音识别库
    内置语音模块,不需要 WiFi / 互联网;固定唤醒词:你好小新,支持自定义语音命令。
  2. unihiker_k10.h:行空板 K10 官方硬件库,驱动屏幕、绘图画布、字体显示。
  3. Microbit_Motor.h:microbit 电机拓展板驱动,控制 M1/M2/M3/M4 四路直流电机。

二、全局对象

UNIHIKER_K10   k10;
ASR            asr;
uint8_t        screen_dir=2;
Microbit_Motor motorbit;
  • k10:行空板主控对象,管理所有板载外设
  • asr:语音识别实例
  • screen_dir=2:屏幕配置为正向竖屏
  • motorbit:四路电机驱动对象

三、setup () 上电初始化(只运行 1 次)

void setup() {
	k10.begin();
	asr.asrInit(CONTINUOUS, CN_MODE, 10000);
	while(asr._asrState == 0){delay(100);}
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	asr.addASRCommand(0+1, "qian jin");
	asr.addASRCommand(1+1, "ting che");
	asr.addASRCommand(2+1, "hou tui");
	asr.addASRCommand(3+1, "you heng");
	asr.addASRCommand(4+1, "zuo heng");
	asr.addASRCommand(5+1, "zhuan quan");
}

逐行说明:

  1. k10.begin():初始化行空板底层硬件。
  2. asr.asrInit(CONTINUOUS, CN_MODE, 10000)
    • CONTINUOUS:持续监听模式
    • CN_MODE:中文识别
    • 10000:语音会话超时时间 (ms)
  3. while(asr._asrState == 0)
    阻塞等待语音模块初始化完成,模块没就绪不会往下执行。
  4. initScreen 设置屏幕方向;creatCanvas 创建画布。
  5. asr.addASRCommand(ID, "拼音")

重要:指令只能填写拼音,不能直接写中文;ID 从 1 开始,代码使用 n+1 写法。

在这里插入图片描述

四、loop () 无限主循环

void loop() {
	if (asr.isWakeUp()) {
		k10.canvas->canvasText("已唤醒行空板小车.......", 6, 0xFF0000);
		k10.canvas->updateCanvas();
	}
	else {
		k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
		k10.canvas->updateCanvas();
	}
  • asr.isWakeUp():检测是否说出唤醒词【你好小新】
  • 唤醒成功 → 屏幕第 6 行红色提示文字
  • 未唤醒待机 → 屏幕第 4 行蓝色文字提示唤醒词

规则:不唤醒,所有运动指令完全不响应

// 前进
if (asr.isDetectCmdID(0+1)) {
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
motorbit.motorRun(M4, CCW, 200);
k10.canvas->canvasText(“K10 小车前进”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

四轮差动向前直行;
canvasText(x,y,颜色,字体,透明度,抗锯齿):自由坐标文字,固定 Y=180 显示运动状态。

// 停车
if (asr.isDetectCmdID(1+1)) {
motorbit.motorStop(ALL);
k10.canvas->canvasText(“K10 小车停止”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

motorStop(ALL) 关闭全部电机。

// 后退
if (asr.isDetectCmdID(2+1)) {
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
motorbit.motorRun(M4, CW, 200);
k10.canvas->canvasText(“K10 小车后退”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

电机转向和前进相反,实现后退。

// 右横走
if (asr.isDetectCmdID(3+1)) {
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M4, CW, 200);
k10.canvas->canvasText(“K10 小车右横”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

只驱动 M2、M4,M1、M3 静止,整车向右平移。

// 左横走
if (asr.isDetectCmdID(4+1)) {
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M4, CCW, 200);
k10.canvas->canvasText(“K10小车左横”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

只驱动 M2、M4 反向,整车向左平移。

// 原地转圈
if (asr.isDetectCmdID(5+1)) {
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M3, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M4, CW, 200);
k10.canvas->canvasText(“K10小车原地转圈”, 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}

四个电机全部正转,实现原地自旋。

	k10.canvas->canvasClear(6);
}

清空画布第 6 行文字,防止唤醒提示文字持续叠加。

整体工作流程

  1. 上电 → 硬件与语音模块初始化
  2. 待机,持续监听唤醒词
  3. 说出:你好小新 → 唤醒语音系统
  4. 说出运动指令,小车执行动作
  5. 电机持续运转,必须语音下达 “停车” 才能停机

Mind+图形编程

在这里插入图片描述
在这里插入图片描述

实验场景图与视频记录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【【花雕动手做】行空板 K10 系列实验之全向福来轮语音控制 TT 马达四驱小车 #机器人小车 #智能小车编程 #组装四驱车 #行空板K10 #科技改变生活】

https://www.bilibili.com/video/BV1qY3v6oEua/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐