Funpack第二季第一期一起玩Syntiant TinyML
硬禾学堂联合Gigi-key发起的”完成就全额退“活动,本期板卡为syntiant tinyml板卡,活动任务为用不少于三个语音指令呈现不同效果,或其他不低于本任务的自定义命题。
标签
Funpack参赛
语音识别
Syntiant
嵌入式机器学习
薛定谔的猫
更新2022-07-05
西安邮电大学
529
  • 项目描述

本次项目是硬禾学堂联合Digi-Key发起的Funpack第二季第一期“玩成功就全额退”活动。本次活动所使用的板卡Syntiant TinyML于4月1日上线,购买后大约一个月所有时间到货。在5月20日开始直播讲解活动流程及项目讲解,于6月30日晚上12点前完成任务并上传项目。

所使用的的板卡Syntiant TinyML配备超低功耗Syntiant ® NDP101神经决策处理器™,与传统的MCU相比不仅功耗小,而且系统效率也得到很大提高。另外Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,仅为一个硬币大小,但是一个小型的独立系统,神经决策处理器使用NDP101,连接BMI160 6轴运动传感器和SPH0641LM4H麦克风,其主机处理器为SAMD21 Cortex-M0+ 32位低功耗48MHz ARM MCU,内置256KB FLASH和32KB SRAM,5个数字I/O,与Arduino MKR系列板兼容,其中包含1路UART接口和1路I2C接口(包括在数字I/O引脚中),2MB板载串行闪存、一个用户定义的RGB LED和uSD卡插槽。使用者可以通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。

此次活动参与者需要在以下任务任选其一:

任务一:

用自带的麦克风,搭建机器学习模型,使板卡上的LED灯根据中文语音指令(不少于三个指令)呈现出不同效果,如开灯、关灯、闪烁、SOS、呼吸等;

任务二:

若您针对这个板卡有更好的创意,可自命题完成(难度不能低于任务一)。

我选择的是任务一,项目所完成的是用Syntiant TinyML自带麦克风,使板卡实现开灯、关灯和闪烁三个效果。开发本项目即使觉得很有趣,同时也想了解一下嵌入式机器学习,提高自己动手能力。

另外本项目实现语音控制或运动识别等功能也很有发展前景,例如在一些不方便用手直接控制的地方可以采用语音或运动识别,例如疫情期间电梯按键防止交叉污染,可以采用语音控制;或是对于残障人士不方便的时候,可以用本板卡的功能协助完成。另外Syntiant TinyML 板的体积小,功耗低,效率高,接到其他系统也很方便,不会过多占用系统资源。

在做本次项目时也遇到了很多问题:

  1. 首先时电脑无法检测到接入的端口。开始我以为是环境没装对,一直到后面才意识到可能是USB线的问题。因为自己之前使用的是无线鼠标的充电线,没有传输数据的功能,后面换了数据线才能检测到端口。
  2. 下载官方go-stop程序卡顿。我参考了b站简简单单的创意up的教程,可能是所给的参考例程有点问题,下载后一直卡到给板子写程序那块,但却能检测到板卡的串口信息。后来通过文档直接在官方下载程序解决本问题。
  3. 安装arduino IDE及库文件出错。由于开始报错缺少库文件h,我将源码中的该文件移动,但导致错误越来越多。最后询问up简简单单的创意后按下面方法解决。
    1. https://github.com/edgeimpulse/firmware-syntiant-tinyml 下载zip;
    2. 解压后 ,目录名称改为 firmware-syntiant-tinyml;
    3. 打开命令行,CD到firmware-syntiant-tinyml 中,然后执行update_libraries_windows.bat;
    4. 双击打开 firmware-syntiant-tinyml.ino ,然后选择 MKRZero板子,编译,就能顺利完成;
  4. 板子不能烧录程序。在一次烧录模型后,串口突然卡住,能检测到端口,但无法用串口助手连接,也不能用bat文件烧程序,并且板卡上的RGB灯变为常亮的绿灯。最终是在活动群里其他人那里知道解决方法:连按两次复位键进入默认BootLoader,然后就恢复正常。
  5. 板卡的RGB灯一有声音就会有红灯闪烁,影响项目效果。将中断函数里面的“打开红灯”关闭后不在闪烁。
  • 各功能对应的主要代码片段及说明
if (strcmp(event, "close") == 0) {
        flag_switch = 0;
        // Toggle LED
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
}

代码说明:当传过来的字符串标签为“close”时,执行关闭指令,关闭RGB灯;

if (strcmp(event, "open") == 0) {
        // Toggle LED
        flag_switch = 1;
     //Turn on the white light
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, HIGH);
    }

代码说明:当传过来的字符串标签为“open”时,执行开启指令,此时RGB灯为白灯,且后续的RGB灯需要次关键字激活。

if ( (strcmp(event, "red") == 0) && (flag_switch == 1) )
    {
        //Turn on the red light
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
    }

    if ( (strcmp(event, "green") == 0) && (flag_switch == 1) )
    {
        //Turn on the green light
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, LOW);
    }

    if ( (strcmp(event, "blue") == 0) && (flag_switch == 1) )
    {
        //Turn on the blue light
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, HIGH);
    }

代码说明:在打开指令的基础基础上,当说出关键字“红灯”、“绿灯”或者“蓝灯”时,板卡会常亮相关灯;

if(strcmp(event, "noise") != 0)
    {
        strcpy(event_temp, event);
    }
    
    if (strcmp(event_temp, "flash") == 0) {
            digitalWrite(LED_BLUE, LOW);
            digitalWrite(LED_GREEN, LOW);
            digitalWrite(LED_RED, HIGH);
            delay(200);
            digitalWrite(LED_RED, LOW);
            delay(200);
        }

代码说明:当语音指令为“闪烁”时,RGB灯会闪烁红灯。

  • 功能展示及说明

Fl-AMDUW0NE_R-5vBPGK8cw0Y-Ta

当说出关键字“打开”时,板卡会进入预备状态,RGB灯的颜色为白色;FnZKXfifyXFoVoy_CSzAMXbofqPv

当在打开状态的基础上说出关键字“红灯”时,板卡红灯常亮;

Fm2jQKGIdIKvLy1xwlcuq1Xl5Dz5

当在打开状态的基础上说出关键字“绿灯”时,板卡绿灯常亮;

FjDn17qWT__U2aLnK9QMV6wO09e7

当在打开状态的基础上说出关键字“绿灯”时,板卡绿灯常亮;

FmhMPG0fU90oIZWfJ1lyH23kFLGZ

当说出关键字“关闭”时,板卡会关闭灯;

当说出关键字“闪烁”时,板卡会红灯闪烁;(展示结果在视频展示)

  • 心得体会

本次活动让我收获颇多,不仅提高了我的专业能力,也让我对嵌入式机器学习有了更深的理解。在本次项目中遇到了很多问题,每次遇到问题研究不出来想放弃的时候多和别人交流,问题就得到解决,让我明白和别人交流很有必要,闭门造车行不通。

另外看“说明书”很重要,以前没有看说明书的习惯,都是直接看别人的视频讲解,或者直接自己摸索,但这样有可能走歪路,尤其是自己摸索,本次项目中由于前期这一不好的习惯导致走了很多弯路,后来多亏别人的帮助才走出来。很多问题都是文档里讲解的,而EDGE IMPULSE关于syntiant Tinyml讲解也讲得很细,基本问题都有介绍,还有正确的操作。

本次项目并不复杂,虽然走了一段时间弯路,但明白功能模块分工后也很容易理清思路,而且板卡感觉还有很大的开发空间,可以在后续在基于这款板卡做延伸功能,给我的收获挺多的,以后再去做其他项目也不会像无头苍蝇乱撞。

希望硬禾学堂以后可以出更多这样有趣、实用的活动!以后还会参加。

附件下载
firmware-syntiant-tinyml.zip
团队介绍
学生
团队成员
支一帆
学生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号