项目描述:
一,板卡介绍
本次活动使用的是syntiant TinyMl board板卡,该板卡配备超低功耗 Syntiant ® NDP101神经决策处理器™,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行,与基于 MCU 的传统 MCU 相比,吞吐量提高 20 倍,系统效率提高 200 倍。
Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个小型的独立系统,通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。
主要特点:
· 主机处理器: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卡插槽
· 神经决策处理器使用NDP101,连接了两个传感器:
· BMI160 6轴运动传感器
· SPH0641LM4H麦克风
· NDP101支持多达 560k 个参数和 64 种输出分类
· 电路板可使用5V micro-USB或3.7V LiPo电池供电
二,环境搭建
板卡支持edge impulse和Arduino开发,其文档可在edge impulse帮助文档可以找到。
1)首先是安装Arduino-Cli,建议同时下载0.18和0.13两个版本,下载安装完之后要添加环境变量才能正常使用。
2)其次是固件的烧录,板卡分为音频固件和IMU固件,每次只能烧写一个,本项目烧录的是音频固件,这里是链接,地址在github,需要科学上网。
至此,前期准备工作基本完成。
三、模型训练
项目使用了edge impulse平台进行训练,其平台也提供了详细的教程,跟着流程走即可,建议是先拷贝一份官方的示例,然后直接在其中增添数据即可,项目中使用了官方的噪声集,然后录入了自己“open”,“close”,“blink”数据,其他的配置直接按官方默认的即可。
其中,官方例程可能存在一定问题,在使用Arduino编译时可能会提示缺少头文件,可以使用分支下的fix-header文件,这个问题也是困扰了很久才能解决。
数据导入之后,最后烧录固件和库文件
库文件这里要重点说一下,库文件下载下来之后里面会有这几个东西
其中文件夹是和训练的模型相关的参数,这个是要和官方的例程替换的,下面两个是烧录用的固件,由于已经生成了固件,直接只用生成的烧录即可,所以用不到这两个。若直接替换model文件夹,Arduino会提示报错,需要注释几行东西
model文件夹内容
直接打开最后一个model_variables.h文件,注释下图颜色加深内容
至此,程序基本完成,剩下的直接在Arduino修改firmware.ino文件即可。
四,实物展示
“开灯”效果展示,听到开灯指令后亮红灯
“关灯”指令效果展示,听到指令后开发板显示绿灯
“闪烁”指令展示,听到指令后开发板闪烁蓝灯
五,注意事项
1)推荐直接克隆官方例程,然后在其中增添数据,训练模型配置不用更改。
2)官方例程sytiant-RC在Arduino配置时可能会出现头文件缺失问题,在上面也有说过,直接使用分支fix-header即可。
3)模型训练完成之后生成的库文件不能直接粘贴替换,要注释几行语句,文件目录/src/model-parameters/model_variables.h,其他人文档里都有详细描述。
4)在板子上语音识别经常误触发的话,可以加入官方的噪声集一起训练模型。
六,最后总结
首先,非常感谢硬禾学堂能够提供这次机会,提供一个这样的平台,把一群志同道合的人聚到一起共同研究问题。其次,在这次活动中,也遇到了很多的问题,疫情原因,环境配置,程序烧录,但幸好我们都共同走了下来,克服了许多问题,同时也认识了许多的朋友,共同在这条路上越走越远。最后,希望硬禾学堂能越办越大,红红火火。