MioChan

  • 2024-12-17
  • 加入了学习《【Follow me第二季第3期】EK_RA6M5汇总提交视频》,观看 【Follow me第二季第3期】EK_RA6M5汇总提交视频

  • 加入了学习《【2024 DigiKey 创意大赛】AI全功能环境监测站作品功能演示视频》,观看 【2024 DigiKey 创意大赛】AI全功能环境监测站作品功能演示视频

  • 2024-12-12
  • 上传了资料: 【Follow me第二季第3期】任务工程

  • 发表了主题帖: 【Follow me第二季第3期】EK_RA6M5汇总提交帖

    本帖最后由 MioChan 于 2024-12-13 09:45 编辑 从收到EK_RA6M5到今天终于完成了所有任务,因为之前没接触这种类型的板子,所以本期的任务对我来说感觉还是有点难度的。不过总得来说,EK_RA6M5真的是一块性能强大功能十分丰富的开发板,后续有空了非常值得我继续深入折腾   项目视频演示 所有任务的展示如下: 视频快捷索引: 入门任务:00:34 基础任务:01:25 进阶任务:02:16 拓展任务:02:50     物料展示 对应论坛帖:【Follow me第二季第3期】EK-RA6M5套件开箱贴 https://bbs.eeworld.com.cn/thread-1296944-1-1.html   本期物料只有开发板本体     任务成果展示   入门任务:搭建环境,下载调试示例程序,Blink,按键 对应论坛帖:【Follow me第二季第3期】EK_RA6M5入门任务——搭建环境,下载调试示例程序,Blink... https://bbs.eeworld.com.cn/thread-1300584-1-1.html   环境搭建的方法,主要就是保证fsp版本一一对应,不要下错版本,否则后面会出现各种问题。 首先我们要下载对应fsp的e2studio,github的下载页面在这里: https://github.com/renesas/fsp/releases/tag/v5.5.0 如果是windows用户可以直接访问 https://github.com/renesas/fsp/releases/download/v5.5.0/setup_fsp_v5_5_0_e2s_v2024-07.exe 直接进行下载。 下载后文件名是setup_fsp_v5_5_0_e2s_v2024-07.exe,运行进行安装即可,安装位置随意,并不一定要装到C盘,安装过程中主要改动以下两个地方选择,剩下的都是直接下一步就行 安装类型选择自定义 这一步把终端TM Terminal前的勾选上就行了 之后一直下一步就安装完成了。   下面我们还要下载官方提供的示例工程,对应的github仓库在这里:https://github.com/renesas/ra-fsp-examples/releases 主要容易踩坑的地方就是下错fsp版本,我们前面使用的是v5.5.0的fsp所以这里需要对应好。windows用户可以直接点这里直接下载,已经帮找好了:https://github.com/renesas/ra-fsp-examples/releases/download/v5.5.0.example.2/r20an0619eu0141-ek-ra6m5-exampleprojects.zip 下载后是一个压缩包,文件名为r20an0619eu0141-ek-ra6m5-exampleprojects.zip 解压后文件夹中的_quickstart就是我们需要的工程文件了。之后打开e2 studio导入这个工程的文件夹就可以了,搭建环境完毕。 下面我们开始下载调试示例程序,首先来编译工程,点击这个锤子后稍等一下,然后出现构建完成的提示后就可以了   接下来把线接到开发板的debug口,开始调试,细节可以看图片上的说明             基础任务:quad-spi flash和octo-spi flash配置及读写速度测试;DAC配置生成波形及性能测试 对应论坛帖:【Follow me第二季第3期】EK_RA6M5基础任务&进阶任务 https://bbs.eeworld.com.cn/thread-1300808-1-1.html     关于quad-spi flash和octo-spi flash配置及读写速度测试做起来比较简单,因为例程里都已经给出了,速度测试的代码主要为下图所示   在刷入例程的测试程序后,我们将数据线连到板子的full speed接口,然后打开终端选择串口打开命令后,我这里是10         确定后就能看见下面的界面了(默认背景是白色会看不清字体,可以在窗口-首选项-终端-Presets中选择暗色Dark的预设将背景改为黑色)       然后依次输入4、64、按tab键即可完成测速       接下来是DAC输出波形,这个可以按照视频教程中的方法来做 首先添加一个DAC功能栈       在引脚设置中分配p014引脚并解决引脚冲突的问题       下一步在初始化的代码中的这个位置输入下面的代码,完成DAC初始化 复制   fsp_err = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg); fsp_err = R_DAC_Start(&g_dac0_ctrl);       然后在led回调函数中加入发出正弦波的功能即可   烧录程序后用示波器链接对应的引脚和GND     可以在示波器查看到正弦波,并且板子的速度很快,基本上电就能立刻看到波形   进阶任务:示例程序中新增命令打印信息 对应论坛帖:【Follow me第二季第3期】EK_RA6M5基础任务&进阶任务 https://bbs.eeworld.com.cn/thread-1300808-1-1.html 这个任务也比较简单,基于例程修改就可以,首先在这个c文件修改显示的列表并加入一个新项目     接下来在menu_kis的头文件和c文件中声明和定义这个函数     我是直接让这个函数直接在控制台打印Hello EEWORLD!这句话       同样的将板子连入Debug口烧录,然后接会到Full Speed口查看终端。 现在可以看见菜单多了一个选项,输入6即可进入       成功输出了Hello EEWorld!     拓展任务:示例程序中新增命令打印信息 对应论坛帖:【Follow me第二季第3期】EK_RA6M5拓展任务——波形发生器 https://bbs.eeworld.com.cn/thread-1301677-1-1.html 扩展任务要求设计一个类似信号发生器功能的例程。可在示例程序上修改。通过命令或按键,设置DAC输出波形,可通过flash存储历史波形等信息。 在这个任务我一直是想着从零新建一个工程,配置定时器、USB串口实现按钮中断、多线程之类的,结果因为第一次接触这种板子没有什么经验,被卡住了很久。最后参考了坛友beyond_笑谈在帖子(https://bbs.eeworld.com.cn/thread-1301194-1-1.html)中实现方法,同样是直接基于示例程序进行修改,这样实现起来方便了很多。先在这里感谢一下笑谈做的工作,我在他代码的基础上继续实现了正弦波的生成,并可以自定义输出波形,即输入两个缩放因子对波形的幅度和周期进行改变,并修改了保存和读取波形的部分代码,以便可以保存自己自定义的波形及其加载。   这个程序相较于示例工程主要是以下两个地方做了变动: 下图是波形生成器的菜单部分,可以在USB串口中调整,其中wavetype,amplitude_scale,period_scale是三个全局变量,wavetype是取值为1、2、3的char变量定义了三种波形类型,amplitude_scale,period_scale取值为1-10内的int形,表示对波形的缩放因子,例如amplitude_scale=1表示幅度最大,2则缩小一半,以此类推。 下图是波形生成器的DAC生成波形的部分:   下面简单演示一下,板子上电默认输出锯齿波 我们输入1输出锯齿波,然后按n使用自定义参数,输入2、2即可得到幅度和周期缩放后的锯齿波     输入2,再按y,得到默认参数的方波   输入3,再按y,得到默认参数的为正弦波     项目总结 参与本期Follow Me活动让我收获颇丰。跟着视频教程完成各项任务后,我不仅加深了我对瑞萨系列开发板开发流程的了解,还掌握了在嵌入式系统中实现不同波形的生成方法以及实现更加灵活和精确的波形控制。总的来说,这次Follow Me活动是一次宝贵的学习经历,让我在实践中应用理论知识,提升了综合能力,为今后在嵌入式系统开发领域的发展打下了坚实的基础。感谢社区和得捷举办此次活动。     项目源码 https://download.eeworld.com.cn/detail/eew_nkXjf8/635241

  • 发表了主题帖: 【Follow me第二季第3期】EK_RA6M5拓展任务——波形发生器

    本帖最后由 MioChan 于 2024-12-12 21:30 编辑 扩展任务要求设计一个类似信号发生器功能的例程。可在示例程序上修改。通过命令或按键,设置DAC输出波形,可通过flash存储历史波形等信息。 在这个任务我一直是想着从零新建一个工程,配置定时器、USB串口实现按钮中断、多线程之类的,结果因为第一次接触这种板子没有什么经验,被卡住了很久。最后参考了坛友beyond_笑谈在帖子(https://bbs.eeworld.com.cn/thread-1301194-1-1.html)中实现方法,同样是直接基于示例程序进行修改,这样实现起来方便了很多。先在这里感谢一下笑谈做的工作,我在他代码的基础上继续实现了正弦波的生成,并可以自定义输出波形,即输入两个缩放因子对波形的幅度和周期进行改变,并修改了保存和读取波形的部分代码,以便可以保存自己自定义的波形及其加载。   这个程序相较于示例工程主要是以下两个地方做了变动: 下图是波形生成器的菜单部分,可以在USB串口中调整,其中wavetype,amplitude_scale,period_scale是三个全局变量,wavetype 取值为1、2、3定义了三种波形类型,amplitude_scale,period_scale取值为1-10内的int形,表示对波形的缩放因子,例如amplitude_scale=1表示幅度最大,2则缩小一半,以此类推。 下图是波形生成器的DAC生成波形的部分:   下面简单演示一下,板子上电默认输出锯齿波 我们输入1输出锯齿波,然后按n使用自定义参数,输入2、2即可得到幅度和周期缩放后的锯齿波   输入2,再按y,得到默认参数的方波   输入3,再按y,得到默认参数的为正弦波   下面是演示视频: [localvideo]351b7f4831e37986a63361ca8cc08248[/localvideo]         工程代码请见后续的汇总贴

  • 2024-12-03
  • 发表了主题帖: 【Follow me第二季第3期】EK_RA6M5基础任务&进阶任务

    本帖最后由 MioChan 于 2024-12-4 09:06 编辑 基础任务:quad-spi flash和octo-spi flash配置及读写速度测试;DAC配置生成波形及性能测试;   关于quad-spi flash和octo-spi flash配置及读写速度测试做起来比较简单,因为例程里都已经给出了,速度测试的代码主要为下图所示     在刷入例程的测试程序后,我们将数据线连到板子的full speed接口,然后打开终端选择串口打开命令后,我这里是10       确定后就能看见下面的界面了(默认背景是白色会看不清字体,可以在窗口-首选项-终端-Presets中选择暗色Dark的预设将背景改为黑色)     然后依次输入4、64、按tab键即可完成测速     接下来是DAC输出波形,这个可以按照视频教程中的方法来做 首先添加一个DAC功能栈     在引脚设置中分配p014引脚并解决引脚冲突的问题     下一步在初始化的代码中的这个位置输入下面的代码,完成DAC初始化 fsp_err = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg); fsp_err = R_DAC_Start(&g_dac0_ctrl);     然后在led回调函数中加入发出正弦波的功能即可   #include <math.h> #define M_PI 3.14159265358979323846 void gpt_blue_callback(timer_callback_args_t * p_args) {     FSP_PARAMETER_NOT_USED(p_args);     uint16_t dacvalue = 0;     static double w =0.0;     w += M_PI /30;     if (w>=M_PI*2) w=0.0;     dacvalue= (sin(w)+1)/2*4095;     R_DAC_Write(&g_dac0_ctrl, dacvalue);     烧录程序后用示波器链接对应的引脚和GND     可以在示波器查看到正弦波,并且板子的速度很快,基本上电就能立刻看到波形       进阶任务:示例程序中新增命令打印信息;   这个任务也比较简单,基于例程修改就可以,首先在这个c文件修改显示的列表并加入一个新项目   接下来在menu_kis的头文件和c文件中声明和定义这个函数   我是直接让这个函数直接在控制台打印Hello EEWorld这句话     同样的将板子连入Debug口烧录,然后接会到Full Speed口查看终端。 现在可以看见菜单多了一个选项,输入6即可进入     成功输出了Hello EEWorld!     关于最后那个拓展任务,因为之前没接触过这种板子,我感觉真的有点困难。主要是感觉展内容跨度一下子有点太大了,先前的任务并没有学习过如何开始创建一个新工程(工程需要做什么设置,定时器的配置,如何多线程),USB Console怎么配置,如何在一个新工程使用定时器做led的blink以及按钮中断之类的,视频也只是带着跑了一遍demo工程,视频我觉得还是应该讲讲基础的东西,以及整个工程的逻辑结构之类的,看完这个视频其他任务都能做完,但感觉对拓展任务没任何帮助  

  • 加入了学习《【Follow me第二季第3期】扩展任务---EK_RA6M5函数信号发生器》,观看 【Follow me第二季第3期】扩展任务---EK_RA6M5函数信号发生器

  • 2024-12-01
  • 加入了学习《FollowMe 第二季:3 - EK_RA6M5 开发板入门》,观看 EK-RA6M5 开发板入门

  • 发表了主题帖: 【Follow me第二季第3期】EK_RA6M5入门任务——搭建环境,下载调试示例程序,Blink...

    本帖最后由 MioChan 于 2024-12-1 15:58 编辑 本期Follow me的板子是瑞萨的EK_RA6M5,这种类型的开发板也是我第一次折腾,需要使用瑞萨的开发环境。 下面就简单分享一下环境搭建的方法,切记保证fsp版本一一对应,不要下错版本,否则后面会出现各种问题。 首先我们要下载对应fsp的e2studio,github的下载页面在这里: https://github.com/renesas/fsp/releases/tag/v5.5.0 如果是windows用户可以直接访问 https://github.com/renesas/fsp/releases/download/v5.5.0/setup_fsp_v5_5_0_e2s_v2024-07.exe 直接进行下载。 下载后文件名是setup_fsp_v5_5_0_e2s_v2024-07.exe,运行进行安装即可,安装位置随意,并不一定要装到C盘,安装过程中主要改动以下两个地方选择,剩下的都是直接下一步就行 安装类型选择自定义 这一步把终端TM Terminal前的勾选上就行了 之后一直下一步就安装完成了。   下面我们还要下载官方提供的示例工程,对应的github仓库在这里:https://github.com/renesas/ra-fsp-examples/releases 主要容易踩坑的地方就是下错fsp版本,我们前面使用的是v5.5.0的fsp所以这里需要对应好。windows用户可以直接点这里直接下载,已经帮找好了:https://github.com/renesas/ra-fsp-examples/releases/download/v5.5.0.example.2/r20an0619eu0141-ek-ra6m5-exampleprojects.zip 下载后是一个压缩包,文件名为r20an0619eu0141-ek-ra6m5-exampleprojects.zip 解压后文件夹中的_quickstart就是我们需要的工程文件了。之后打开e2 studio导入这个工程的文件夹就可以了,搭建环境完毕。 下面我们开始下载调试示例程序,首先来编译工程,点击这个锤子后稍等一下,然后出现构建完成的提示后就可以了   接下来把线接到开发板的debug口,开始调试,细节可以看图片上的说明 到这里入门任务就完成了~

  • 2024-10-25
  • 回复了主题帖: 【2024 DigiKey 创意大赛】AI全功能环境监测站

    秦天qintian0303 发表于 2024-10-25 13:29 这个透明的屏幕是什么啊?看着很高级啊 上一届大赛做的全息显示器

  • 2024-10-24
  • 回复了主题帖: 【Follow me第二季第3期】EK-RA6M5套件开箱贴

    lugl4313820 发表于 2024-10-24 18:58 不会吧,我的一个多星期了。还没有发货的消息! 看了一下我是17号下单的,不行工作时间去得捷官网找客服问问

  • 回复了主题帖: 【Follow me第二季第3期】EK-RA6M5套件开箱贴

    lugl4313820 发表于 2024-10-24 12:47 你的用了几天呀,我下单了,还没有看到有发货信息。 第一时间下单,昨天到的

  • 发表了主题帖: 【Follow me第二季第3期】EK-RA6M5套件开箱贴

    本帖最后由 MioChan 于 2024-10-24 09:37 编辑 很高兴能入围Follow me第二季第3期的活动,收到入围邮件后火速去得捷下单了,很快就收到了板子,趁热来个开箱贴   外包装的纸箱还是一如既往的大,为了方便拿在快递站就把外箱扔了,直接来看本体吧,整个套件的包装盒是纯白色的       打开后有一封欢迎信     下面就是配件盒,里面一共有三条线,分别是Micro USB数据线、OTG线、网线     再往下一层就是开发板本体了,第一次接触这家的板子,总之接口很丰富,做工看着也很好        

  • 2024-10-23
  • 发表了主题帖: 【2024 DigiKey 创意大赛】AI全功能环境监测站

    AI全功能环境监测站 作者:MioChan   一、作品简介 1.1作品功能介绍 本次创意大赛中,我设计并实现了一个AI全能环境监测站。该设备通过集成多款高精度气体传感器,能够全面监测环境中的多种气体成分,如温湿度、空气质量、二氧化碳和各类有害气体等。所有环境数据不仅可以实时显示在 Matrix RGB点阵屏上,还能够通过 Adafruit IO云平台上传,实现多设备多应用间的环境监测数据共享。用户可以通过网页端查看不同环境指标的实时数据及其变化趋势,获取清晰的历史数据图表和变化曲线。 为了增强用户体验,该系统还加入了智能语音提醒与建议功能。基于 Adafruit MatrixPortal M4开发板,系统不仅完成了环境数据的采集、显示和上传,还通过开发的 Unity 3D虚拟人物程序,实现了与用户的互动。虚拟人物能够根据环境数据做出及时反馈,通过语音提醒用户注意环境变化,例如空气质量下降时提供改善建议或提醒开窗通风等。 系统的AI核心在于本地部署的大型语言模型(LLM)和文字转语音(TTS)技术。LLM采用的是本地部署的Chat-GLM模型,负责分析采集到的环境数据,生成相应的文字反馈,TTS则将这些文字转换为语音,使虚拟人物能够与用户进行自然的语音互动。 该项目具有广泛的应用场景和前景,不仅可以应用于智能家居和室内环境监测,还可以在智能城市以及各种需要实时环境监控和反馈的场景中发挥作用。整个项目的子系统的设计保持了高内聚低耦合的特点,所有系统复用都十分方便。通过结合主流的AI技术和传感器硬件,本项目为未来的环境监测设备提供了一种智能化、全方位的解决方案。   1.2物料清单 本项目的物料清单包括多种硬件和软件组件,确保了系统的多功能性和稳定运行。首先介绍本次大赛由得捷报销的物料: Adafruit MatrixPortal M4开发板:境监测站硬件部分的核心控制器。这款开发板专为驱动RGB点阵屏设计,具备内置的HUB75接口,直接支持与点阵屏的连接,极大简化了硬件布线。此外,内置的ESP32模块为设备提供了Wi-Fi功能,能够通过无线网络上传数据至云端,适合环境监控场景下的数据远程传输与共享。 在数据处理和传感器方面,项目采用了多款环境传感器。BME680传感器是一款集温度、湿度、气压和空气质量(VOC)检测于一体的传感器,它为系统提供了全面的环境监测功能。该传感器特别适合对室内空气质量的检测,并能实时反馈空气污染状况。SGP30传感器专注于监测二氧化碳和挥发性有机化合物(TVOC)的浓度,帮助用户及时了解室内空气质量变化,确保健康和安全。为了进一步提升监测的全面性,系统还集成了MiCS-5524传感器,用于检测环境中的C2H5OH,C3H8,C4H10,CH4,CO,H2,H2S,NH3的存在。这些气体可能对人体健康产生危害,因此MiCS-5524的加入极大增强了系统的安全性预警能力。 以下是本人自备物料,包括所用软件: Adafruit RGB LED Matrix 64x32点阵屏。通过MatrixPortal M4的驱动,该点阵屏实时显示采集到的环境数据。64x32的分辨率允许在小面积内展示丰富的内容,并且支持动态滚动,用户可以通过网络实现自定义文字弹幕的远程控制,使得数据展示更加灵活和多样化。高亮度的LED点阵屏适合用于各种光线条件下的展示,确保数据可读性。 全息显示器。上一届创意大赛的硬件作品,本次也拿来继续使用了。不过与之前不同的是,上一次项目虚拟人物部分的实现使用的是Live2D,虽然有3D的感觉,但本质上还是2D模型,所有看似立体的动画只是在平面图形上做变形,很难实现与3D物体的交互。而在本项目中我重写了一套Unity 3D程序,直接驱动了一个VRM 3D人物模型,并且使用了Meta的Lip Sync技术实现人物口型与语音的同步,除了获取天气预报外,还加入了从IO云服务器获取环境监测站空气指标的功能,但空气质量变差,AI助手会语音提示用户。 GPU计算设备。在AI方面,本项目使用了本地部署的LLM大语言模型。LLM作为虚拟人物的灵魂,为虚拟人物赋能交互能力,本项目还集成了TTS(文字转语音)模型,将LLM生成的文字通过自然流畅的语音形式播报出来,增强了虚拟人物的交互能力,用户可以通过语音形式了解当前环境状况及相应的建议。   二、系统框图 系统的整体框架可以分为硬件部分、Unity 3D程序、AI服务端与Adafruit IO平台。硬件部分主要负责环境数据的采集与显示。通过MatrixPortal M4开发板,系统能够连接多种气体传感器,实时获取环境指标数据,这些数据不仅会通过点阵屏进行展示,还会定时上传到Adafruit IO平台,供用户在网页端查看历史数据和变化趋势。同时,MatrixPortal M4也会接收来自Adafruit IO的弹幕信息,并滚动显示在点阵屏上。 Unity 3D程序是该系统的重要交互界面。通过3D虚拟人物,用户可以更加直观地获取环境数据和反馈。虚拟人物能够根据当前的环境指标与用户互动,并展示气象预报等其他信息。此外,Unity程序还负责与AI服务端的通信,将用户的消息发送到AI服务端进行处理,由AI服务端的GLM大型语言模型生成智能响应。这些响应再通过文字转语音(TTS)技术转化为语音输出,实现虚拟人物的口型同步和语音播报。 AI服务端的智能处理能力体现在对环境数据和用户交互的深度分析上。通过GLM模型,AI不仅能够理解用户的输入,还能够根据环境数据提供合理的建议或提醒。结合TTS技术,AI服务端能够生成自然流畅的语音反馈,进一步提升用户的交互体验。   三、各部分功能说明 3.1硬件部分 在本项目中,硬件平台选用了 Adafruit MatrixPortal M4,这是专门为驱动RGB点阵屏设计的开发板。其最大优势在于板载的 HUB75 接口,使其能够直接插入并驱动RGB点阵屏,无需复杂的电线连接。此外,MatrixPortal M4还具备Wi-Fi功能,方便将采集到的环境数据通过互联网上传至 Adafruit IO 平台。MatrixPortal M4还集成了 I2C接口,支持与多种传感器的连接。本项目使用的传感器包括 BME680(用于检测温湿度、气压及VOC)、SGP30(检测CO2及总VOC)、以及 MiCS-5524(专门监测一氧化碳等有害气体)。这些传感器通过I2C接口实现与主板的通信。主板负责读取这些传感器的数据,并将其展示在RGB点阵屏上。此外,通过Wi-Fi连接,这些数据会实时上传到Adafruit IO平台,方便用户远程查看。 RGB点阵屏是系统的主要显示方式。除了展示环境数据,点阵屏还会滚动显示从Adafruit IO接收到的弹幕信息,实现远程与用户的交互。硬件部分主要实现的功能如下: 显示环境信息: 设计了一套UI,屏幕会滚动显示各项环境指标,每一屏最多显示三项,滚动播放。对于部分指标数值过长,导致单位显示不下的问题,对单位也额外增加了相应的逻辑,用来滚动显示这些显示不下的内容。 自定义弹幕文字显示: 该功能主要是用来滚动显示一些弹幕文字,通过网络功能实现。本来想和之前的项目一样做一个接受POST请求的API服务器,但这个版本的CircuitPy似乎对网络底层库支持的不太好,使用之前在Adafruit ESP32S3 TFT Feather的代码总是出问题,最后看了一下官方文档发现adafruit_matrixportal 已经包含了一些网络功能的实现,最后想了想决定通过Adafruit IO https://io.adafruit.com/ 来解决这个问题,这既简化了网络通信的复杂性,又能利用已经成熟的工具来处理数据。Adafruit IO 提供了一个相对容易上手的接口,可以通过publish和subscribe来接收和显示文本信息。在项目中,我将设备连接到Adafruit IO的服务中,创建了两个feed一个用于接受弹幕内容另一个定义弹幕颜色。通过订阅feed,我能够实时地从远程设备或应用发送数据,并在点阵屏上滚动显示。并且这样也解决了之前只能内网访问的问题,通过Adafruit IO服务托管这些信息,我们可以在任意位置的连接互联网的电脑上发布或订阅这些内容。最重要的是Adafruit IO也有相应的python库,我们也可以在其他python服务程序中更新这些内容。当然,已经做了中文字库支持。 传感器接入: 建立好显示环境信息的UI后接下来就是实际连接传感器了,更新面板的数据了。下面是我用到的气体传感器。 BME680 是来自 Bosch Sensortec 的环境传感器,能够同时检测多种环境参数,广泛应用于空气质量监测。它集成了气体、湿度、压力和温度传感器。 SGP30 是 Sensirion 开发的一款空气质量传感器,主要用于检测空气中的二氧化碳 (CO₂) 和总挥发性有机物 (TVOC)。 MiCS-5524 是一款半导体气体传感器,专门用于检测一氧化碳 (CO) 和甲烷 (CH₄) 等有害气体。它基于金属氧化物半导体 (MOS) 技术,能够在低浓度下对一氧化碳表现出高度灵敏性。因为不支持i2c所以直接用飞线连接到了A0引脚。 将上面的传感器连接到开发板即可。 顺便一提,Adafruit这些i2c接口的连接线(上)和常用的4p80mm连接线(下)的线序并不一样,我们需要在另一端做一个交叉。简单来说,用尖嘴镊子把接线端子顶出来,换到镜像的位置即可。 数据记录功能: 既然是环境监测站自然要有保存历史数据的功能,这里我最初的是想法是将传感器数据写入到板载存储器中。不过这样有个很大的问题,这些数据只有连接到这个板子的电脑才能读取,用网络实现不仅麻烦,如果外部设备频繁请求这些信息也会大量消耗板子有限的计算资源。最后还是想到了用Adafruit IO,我们可以在IO中创建不同环境指标的feed,让板子定时上传这些数据到IO上,这样不仅能记录历史数据,其他应用能非常方便的获取这些数据,还能直接在IO创建一个环境监测面板直接查看这些数据,也不需要再额外设计一个软件来画图了。 下面是监测面板的效果: 底座制作: 这个LED点阵屏接上开发板后有点重心不稳,本身是考虑给它直接做一个外壳嵌进去,不过在测量数据的过程中发现,这个板子的后面还是有点热的,直接把传感器都放进去,板子后面的积热会让温度测量不准,还得考虑通风问题。所以最后索性直接设计一个底座就好了,把线卡到后面,即能让屏幕更稳固也解决了散热问题。 模型建好后直接用3D打印制作就好了,因为插销部分有悬空,切片时加了个支撑   3.2 Unity3D程序部分 系统中的 Unity程序负责虚拟人物的创建和驱动。虚拟人物不仅只是拥有皮囊,通过大语言模型(LLM)和文本转语音(TTS)让其还具有灵魂,通过lip sync技术还能使得3D人物角色进行口型同步,让虚拟人物在发声时口型与语音内容相一致,使其更加自然逼真。 VRM系统是这个虚拟系统的核心,用来驱动虚拟角色的展示。VRM模型是基于Unity中的动画状态机来进行管理的。通过动画状态机,我们能够定义虚拟角色的各种动作和状态切换。每一个状态代表虚拟角色在某种特定情境下的表现,比如迎宾、待机、或是发出环境警告。当用户与虚拟角色进行交互时,状态机会根据设定好的触发条件切换到对应的动作状态。例如,当用户点击虚拟角色时,程序会通过触发器(trigger)切换到迎宾动画。而在系统监测到环境数据出现异常,如空气质量下降时,状态机会切换到警告状态,角色通过特定的动画和表情来提醒用户。动画状态机的使用保证了虚拟角色在不同场景下的灵活表现,使其行为更自然、更贴近实际。因为我本身是VRChat玩家,所以手上也有不少人物模型可以使用,本项目所使用的模型是本人在Booth上自费购买的,无版权问题。 在网络请求部分,程序与多个后端服务进行交互,主要包括文本转语音(TTS)服务和大语言模型(LLM)的智能对话功能。对于TTS服务,程序会根据当前的系统状态生成语音文本,并通过HTTP POST请求将生成的文本发送到后端TTS服务。TTS服务处理后返回语音数据,程序会将该数据同步播放,并结合Meta Lipsync实现虚拟角色的口型同步,保证角色能够准确表达语音内容。大语言模型部分,当用户提出问题或进行交互时,程序会将用户的文本请求发送给LLM,后端模型生成智能回复后,程序会将其显示在UI中并交由TTS服务播报给用户。这样,虚拟角色不仅能够播报环境数据,还能与用户进行智能化的对话和互动,提升了系统的实用性和娱乐性。 Meta Lipsync 技术在系统中的作用是通过语音合成时生成的音频数据与虚拟角色的口型进行同步。系统会解析TTS生成的语音数据,计算音频中的元音、辅音等关键音素,并实时调整虚拟角色的嘴部动画,以匹配发音的变化。这一技术保证了虚拟角色的口型动作能够与语音保持高度一致,使其在语音播放过程中看起来更加自然逼真。用户在观看角色时,不仅可以听到与环境数据相关的语音信息,还能看到与之同步的口型动作,增强了虚拟角色的表现力。 在环境指标获取方面,程序集成了两个主要的数据来源:和风天气API和Adafruit IO平台。通过和风天气API,程序能够实时获取当前的天气数据,包括室外温度、未来降水情况,并根据这些数据对UI进行相应更新。此外,程序还通过Adafruit IO平台获取空气质量监测站的上传数据,包括室内温度、湿度、气压、有害气体等环境信息。这些数据通过网络发送到虚拟角色所在的系统,实时更新虚拟角色的环境感知。当传感器检测到有害气体超标时,程序会触发虚拟角色的警告机制,角色会通过语音和动画动作提醒用户,增强了系统的实用性和安全性。 事件系统是这个程序的核心控制逻辑,负责管理用户与虚拟角色的交互、UI显示、以及摄像机的控制。用户可以通过拖拽摄像机来调整视角,观察虚拟角色的不同动作和表情。事件系统会根据用户的操作,适时调整虚拟角色的状态。当用户点击角色或特定UI按钮时,系统会响应这些交互,执行相应的功能或动画切换。例如,当检测到空气质量变差时,事件系统会触发虚拟角色的警告状态,更新UI信息,显示当前环境中的空气质量数据,并提醒用户采取行动。除此之外,在搭配我上一届大赛制作的全息显示器使用时,也可以对画面进行镜像处理,保证用户在全息模式下能够正确查看虚拟角色和文字UI。     3.3 LLM服务 ChatGLM 是一款基于 Transformer 架构的大语言模型,专门为中文和英文双语环境设计。它借鉴了 GPT(Generative Pre-trained Transformer)家族的模型结构,并在此基础上进行优化,使其能够在对话和任务处理等场景中表现出色。与 GPT-3 类似,ChatGLM 使用了自回归语言建模技术,基于大规模的语料库进行预训练,然后经过微调,能够处理生成式对话、文本摘要、翻译等自然语言任务。 ChatGLM 模型的核心基于 Transformer 架构,Transformer 是一种深度神经网络结构,尤其擅长处理序列数据,如文本。在 Transformer 架构中,最主要的部分是多头自注意力机制(Multi-Head Self-Attention),它能够有效地捕捉序列中不同位置的词语间的关系。通过多头自注意力机制,模型可以从多个不同的“关注点”来理解输入文本中的含义,这让 ChatGLM 能够生成连贯且逻辑清晰的长文本段落。 在预训练阶段,ChatGLM 会处理大量的文本数据,包括百科、新闻、社交媒体等,学习到语法结构、语义关联以及世界知识。通过这种大规模预训练,模型掌握了语言的基本构造规则和常识信息。在微调阶段,ChatGLM 进一步被调整以适应具体任务,比如对话生成。在对话场景下,它不仅能够理解输入的语境,还可以生成相关性很强的回复。 ChatGLM 的特点之一是支持双语处理,它能够同时处理和生成中文与英文文本。这是通过在预训练过程中使用大量中英双语数据来实现的。与许多单语模型相比,ChatGLM 在双语场景中具有明显优势,尤其是在多语言对话任务中,它能够在中英文间自然地切换。 在实际应用中,ChatGLM 能够理解复杂的上下文并生成连贯的对话内容。例如,当用户提出一个问题时,模型能够基于问题提供符合逻辑且具备信息性的回复。此外,ChatGLM 还具备一定的知识推理能力,能够帮助用户解决复杂的问题,如技术支持、信息查询等。 在本系统中,ChatGLM 主要负责处理用户与虚拟角色之间的智能对话任务。用户输入问题或指令后,系统通过 HTTP 请求将文本发送给 ChatGLM 模型,后端处理后返回生成的文本回复。生成的回复内容既可以通过 UI 显示给用户,也可以通过 TTS 转换为语音,配合虚拟角色的口型同步,形成完整的语音交互体验。 3.4 TTS服务 在本项目使用的TTS算法是VITS,这是一个基于生成式对抗网络(GAN)和变分推断技术的文本转语音(TTS)系统。相比于传统的TTS模型,VITS 的核心优势在于它可以通过少量的数据生成自然流畅的语音,并且在语音质量和语音自然度方面有显著提升。它结合了基于流模型(Flow-based model)和 GAN 的优点,能够在高效生成语音的同时,确保输出语音的高保真度。VITS 的设计理念融合了几种关键技术,主要有变分推断:它用于从文本中捕捉潜在的音素和韵律信息,通过推断潜在的语音特征来生成与文本相对应的语音表现。这种技术允许模型有效地处理文本到语音的复杂映射,使生成的语音在自然性和表现力上更接近真实人类发音;自回归和非自回归生成模型的结合:自回归模型依赖于先前生成的语音片段来生成后续的语音片段,而非自回归模型则能够并行生成所有语音帧。VITS 结合了两者的优势,利用自回归模型的高质量生成能力和非自回归模型的高效性,使得生成过程更加流畅和快速;Flow 模型:VITS 利用基于流的模型来建模语音的分布,这种模型能够在不牺牲质量的情况下,通过变分推断进行有效的语音生成。流模型擅长处理复杂的概率分布,因此在捕捉语音的多样性和细节表现方面效果尤为突出;GAN(生成式对抗网络):GAN 技术使 VITS 在语音生成过程中可以通过判别器的反馈不断优化生成器的输出。生成器负责生成语音,判别器则评估语音的自然度,通过这种对抗机制,VITS 的生成器能够逐步提升语音的质量,生成更加逼真的声音。 在本系统中,VITS 主要负责将虚拟角色的文本回复转换为自然流畅的语音。首先,当用户输入文本时,ChatGLM 模型会生成相应的回复文本,接着该文本被发送到 TTS 服务,VITS 模型基于输入文本生成对应的语音数据。生成的语音数据可以实时播放,使得虚拟角色不仅能够通过文本回复与用户互动,还能够通过自然的语音与用户进行对话。这种人机交互方式极大地提升了系统的交互体验,使虚拟角色在用户眼中更具生命力和真实感。   四、作品源码 https://download.eeworld.com.cn/detail/eew_nkXjf8/634608   五、作品功能演示视频 时间索引: 物料展示 00:24 设计思路 01:55 功能演示 02:38   六、项目总结 首先,还是感谢EEWORLD和得捷能一直举办这类活动。这次比赛不仅让我有机会发挥自己的创造力,还让我在实践中学到了很多新知识,收获颇丰。整个项目涉及了硬件开发、软件开发、网络通信、3D模型驱动、3D建模、3D打印、大语言模型以及文本转语音技术等多个方面,虽然从整体来看每个项目难度可能并不算太高,但它让我能用平时接触到的各个领域的新技术,真正的动手进行实践,极大地拓展了我的知识面,也让我积累了不少经验。 在硬件开发方面,通过对Adafruit MatrixPortal M4开发板进行环境数据的采集和显示等功能的实现,让我对Circuitpy的应用和底层原理有了更深入的理解。在本项目之前我其实从未接触过气体传感器,在完成本项目后我对气体传感器的认识和使用也得到了进一步提高。除此之外,本项目中我也是第一次尝试把硬件设备接入Adafruit IO这类的云平台,以往我都是直接在内网构建HTTP API请求服务器来完成这些操作,在完成这个项目后我也体会到了使用云平台的便利性。并且,在这个项目的开发中我也真的明白了项目充分的前期调研的重要性,因为这些气体传感器应用方面的库很多都只有Arduino的,而我使用Circuitpy开发就会遇到很多阻碍。发现这个问题的时候代码几百行都写完了,最后只能想办法硬着头皮实现。 此外,软件开发的部分让我深刻体会到了软硬件结合的重要性,从编写用于驱动点阵屏显示的代码,到实现实时数据上传和远程数据监控,每一步都让我对系统的整体架构有了更加系统的认识。在项目的Unity 3D程序部分,我成功驱动了一个3D人物模型,在这个过程中真的有很多细节需要学习,比如animator、animation的使用,如何给人物加载外部的fbx动作等等。通过本项目的实操,让我对Unity的使用也变得愈发熟练。同时,项目中我本地部署了一个大语言模型,并通过文本转语音技术,使得虚拟人物能够根据环境数据做出智能语音反馈。这一部分让我对人工智能与现实场景的结合有了更深刻的理解,也让我体验到了机器智能为人机交互带来的便捷与创新。我本人的研究方向就是AI相关,这也让我对自己的研究领域更深一步的热爱。 通过这个比赛,我不仅拓展了自己的技能,还更加理解了跨领域知识融合的意义。再次感谢大赛的机会,这段经历将成为我未来创意与开发之路上的宝贵财富。 帖子汇总: 【2024 DigiKey 创意大赛】物料开箱帖 https://bbs.eeworld.com.cn/thread-1290188-1-1.html 【2024 DigiKey 创意大赛】AI环境监测站-硬件部分 https://bbs.eeworld.com.cn/thread-1296178-1-1.html   七、其他 这里我想补充一点,虽然Adafruit IO为C、Python提供了相关的库函数,但诸如Unity 开发中C#的语言并没有这样的库,而对于如何使用HTTP调用API官方文档也写的很模糊,这里直接给出一个Python的请求代码,其它语言只要参考一下就能直接使用而不依赖官方库了。 修改IO上某一Feed的值 import requests # 设置必要的参数 io_key = "aio_XXXX" username = "XXXX" feed_key = "XXXX" url = f"https://io.adafruit.com/api/v2/{username}/feeds/{feed_key}/data" # 要上传的值 data = { "value": "20000" } # 设置请求头,包含 API 密钥 headers = { "X-AIO-Key": io_key } # 发送 POST 请求上传数据 response = requests.post(url, headers=headers, data=data) # 检查返回结果 if response.status_code == 200: print("Data uploaded successfully!") else: print(f"Error: {response.status_code} - {response.text}") 获取IO上某一feed的值 import requests # 设置必要的参数 io_key = "aio_XXX" username = "XXX" feed_key = "XXX" url = f"https://io.adafruit.com/api/v2/{username}/feeds/{feed_key}/data" # 设置请求头,包含 API 密钥 headers = { "X-AIO-Key": io_key } # 发送 GET 请求 response = requests.get(url, headers=headers) # 解析返回的数据 if response.status_code == 200: data = response.json() if data: latest_value = data[0]["value"] # 获取最新的 feed 值 print(f"Latest feed value: {latest_value}") else: print("No data available.") else: print(f"Error: {response.status_code} - {response.text}")      

  • 上传了资料: 【2024 DigiKey 创意大赛】AI全功能环境监测站作品源码

  • 2024-10-16
  • 回复了主题帖: 【2024 DigiKey 创意大赛】AI环境监测站-硬件部分

    wangerxian 发表于 2024-10-15 18:20 气体传感器一般都不会返回具体浓度,都得自己转换,有些值还和温度有关。 关键这些库都没有Circuitpy的就很麻烦

  • 2024-10-15
  • 发表了主题帖: 【2024 DigiKey 创意大赛】AI环境监测站-硬件部分

    本帖最后由 MioChan 于 2024-10-15 16:22 编辑 本次创意大赛我要制作的是一个AI环境监测站,我选择的开发板是Adafruit MatrixPortal M4,整个硬件方面的实现基于Circuit Python。选这个板子主要是因为它专门为驱动点阵屏设计,自带HUB75接口,可以直接插到点阵屏上。如果是用其他开发板需要自己连接差不多16条线,对于IO引脚少的板子再拓展其他功能也很麻烦。另外这个板子还带有一个i2c接口,对于Adafruit的传感器可以直接用4p连接线连接。   本帖主要是分享一下环境数据采集及其显示相关的硬件部分的设计过程,至于AI是一套单独的系统,后面再做介绍。我是比较喜欢高内聚低耦合的设计,一套系统就做一件事情,几套系统间可以互现协作,哪一套也都能拿来单独使用。 首先是点阵屏的驱动,因为板子自带了HUB75接口,直接扣到点阵屏上连接好屏幕的电源线即可。 板子出厂自带了一个重力感应的沙漏程序,可以简单测试一下板子功能是否正常,确定好没问题后,即可开始刷入Circuitpy固件了。 我使用的是CircuitPython 9.1.4 可以在这里下载https://circuitpython.org/board/matrixportal_m4/ 烧录过程也很简单,连接开发板到电脑,双击开发板上的reset按钮,NeoPixel RGB LED变为绿色后,电脑中会出现一个MATRIXBOOT的磁盘,将刚刚下载好的.uf2文件拖到MATRIXBOOT中即可。接下来开发板会重启,然后出现一个新的名为 CIRCUITPY的磁盘,接下来在里面就可以写代码了。 该开发板主要实现的功能如下:   1.显示环境信息: 设计了一套UI,屏幕会滚动显示各项环境指标,每一屏最多显示三项,滚动播放。对于部分指标数值过长,导致单位显示不下的问题,也额外增加了相应的逻辑,用来滚动显示这些显示不下的内容。   2.自定义弹幕文字显示: 该功能主要是用来滚动显示一些弹幕文字,通过网络功能实现。本来想和之前的项目一样做一个接受POST请求的API服务器,但这个版本的CircuitPy似乎对网络底层库支持的不太好,使用之前在Adafruit ESP32S3 TFT Feather的代码总是出问题,最后看了一下官方文档发现adafruit_matrixportal 已经包含了一些网络功能的实现,最后想了想决定通过Adafruit IO https://io.adafruit.com/ 来解决这个问题,这既简化了网络通信的复杂性,又能利用已经成熟的工具来处理数据。Adafruit IO 提供了一个相对容易上手的接口,可以通过publish和subscribe来接收和显示文本信息。在项目中,我将设备连接到Adafruit IO的服务中,创建了两个feed一个用于接受弹幕内容另一个定义弹幕颜色。通过订阅feed,我能够实时地从远程设备或应用发送数据,并在点阵屏上滚动显示。并且这样也解决了之前只能内网访问的问题,通过Adafruit IO服务托管这些信息,我们可以在任意位置的连接互联网的电脑上发布或订阅这些内容。最重要的是Adafruit IO也有相应的python库,我们也可以在其他python服务程序中更新这些内容。当然,已经做了中文字库支持。   比较简单的例子是我们可以直接在io的dashboard创建一个面板为feed手动赋值。   [localvideo]76c1c87d153eba290d29031939a4ad69[/localvideo]       3.传感器接入: 建立好显示环境信息的UI后接下来就是实际连接传感器了,更新面板的数据了 下面是我用到的气体传感器 BME680 是来自 Bosch Sensortec 的环境传感器,能够同时检测多种环境参数,广泛应用于空气质量监测。它集成了气体、湿度、压力和温度传感器。 SGP30 是 Sensirion 开发的一款空气质量传感器,主要用于检测空气中的二氧化碳 (CO₂) 和总挥发性有机物 (TVOC)。 MiCS-5524 是一款半导体气体传感器,专门用于检测一氧化碳 (CO) 和甲烷 (CH₄) 等有害气体。它基于金属氧化物半导体 (MOS) 技术,能够在低浓度下对一氧化碳表现出高度灵敏性。因为不支持i2c所以直接用飞线连接到了A0引脚。 将上面的传感器连接到开发板即可。 顺便一提,Adafruit这些i2c接口的连接线(上)和常用的4p80mm连接线(下)的线序并不一样,我们需要在另一端做一个交叉。简单来说,用尖嘴镊子把接线端子顶出来,换到镜像的位置即可。   4.数据记录功能: 既然是环境监测站自然要有保存历史数据的功能,这里我最初的是想法是将传感器数据写入到板载存储器中。不过这样有个很大的问题,这些数据只有连接到这个板子的电脑才能读取,用网络实现不仅麻烦,如果外部设备频繁请求这些信息也会大量消耗板子有限的计算资源。最后还是想到了用Adafruit IO,我们可以在IO中创建不同环境指标的feed,让板子定时上传这些数据到IO上,这样不仅能记录历史数据,其他应用能非常方便的获取这些数据,还能直接在IO创建一个环境监测面板直接查看这些数据,也不需要再额外设计一个软件来画图了。 下面是监测面板的效果:     遇到的坑: 这里也顺便分享一下目前为止折腾这个项目遇到的坑。首先是传感器部分,因为这几个传感器也是第一次玩,实际上手后才发现,感觉被描述欺骗了。 比如BME680,虽然手册上生成可以测VOC,但是传感器只能返回气体电阻值,当VOC上升这个值会减小,反之则上升。也就是说这个传感器无法测得实际的VOC。有一个BSEC库倒是能够将气体电阻值转换为标准的空气质量指数 (IAQ) ,但是这个库是闭源的,也没有Circuitpy版本,但发现这个问题的时候几百行代码都写完了,当初立项也说的是用Crcuitpy来做,也不好换Arduino。还有就是MiCS-5524虽然文档说能测各种气体,但实际上只能测这些气体是否存在,而不能准确分辨是哪种气体,只能当一个有害气体警报器用。   还有最大的一个坑是VScode中Circuitpy插件的,git上好久没维护了,现在最新版本的完全用不了,git上也全是在反应这个bug的也没人解决。   换成官方推荐的Mu编辑器虽然能用,但代码补全真的差VScode那个插件太多了,后续再做项目还是考虑Micropy或者Arduino吧   后续计划: 其实主体上项目已经完成了,后续打算为这个点阵屏设计一个底座并3D打印出来。 关于AI部分,主要是想接入一个LLM(大语言模型)。实现让AI助手能读取这些环境信息,给出一些建议之类的,并通过TTS读出来。 此外,有余力的话也想继续用Unity实现一个3D模型,给LLM一个皮囊,放到我之前做的那个全息显示器中。    

  • 2024-10-12
  • 回复了主题帖: 《动手学深度学习PyTorch版》阅读分享四 手写识别小试牛刀(基于CNN)

    保存整个模型(序列化模型和权重,依赖python环境,不灵活) torch.save(model, "model.pth") 加载整个模型 model = torch.load("model.pth")   只保存权重文件(模型在代码里写好,保存和加载模型和优化器权重,更灵活) save_dict = {} save_dict[f'model_state_dict'] = model.state_dict() save_dict[f'optimizer_state_dict'] = optimizer.state_dict() torch.save(save_dict,  "state_dict.pth")   加载权重文件 checkpoint = torch.load("state_dict.pth") model.load_state_dict(checkpoint['model_state_dict']) optimizer.load_state_dict(checkpoint['optimizer_state_dict'])

  • 2024-09-25
  • 加入了学习《【DigiKey“智造万物,快乐不停”】基于LLM大语言模型和VITS文本转语音的全息AI助手演示》,观看 基于LLM大语言模型和VITS文本转语音的全息AI助手演示

  • 加入了学习《【Follow me第二季第1期】全部任务演示》,观看 全部任务演示2.0

统计信息

已有97人来访过

  • 芯积分:482
  • 好友:--
  • 主题:33
  • 回复:24

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言