【2023集创赛】Arm杯二等奖作品:基于Arm Cortex-M3的体感节奏音乐游戏机

news2025/5/20 22:53:16

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)安谋科技杯全国二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!

团队介绍

参赛单位:中山大学
队伍名称:一带二
指导老师:黄以华
参赛队员:陈健俊、彭雯璐、赵宝泽
总决赛奖项:二等奖

1、项目简介

近年来,体感游戏和音乐节奏类游戏深受大家喜爱,是健身娱乐两不误的最佳选择,同时也能让对电子游戏无感的人群,依然能够享受健身的乐趣。结合当下热门的话题和游戏,本项目设计了一个智能体感节奏音乐游戏机,该游戏机是全体感的,玩家需要佩戴蓝牙运动传感器,通过手部动作进行游戏的开始、模式的选择以及执行游戏过程中的动作。

2、系统设计

在这里插入图片描述

本次安谋杯的题目为智能游戏机设计,从题目出发,设计一个游戏机我们需要考虑使用什么进行游戏的交互,游戏该如何显示,以及游戏的音乐如何播放,即交互、显示、音效三大部分,有了这三个部分一个游戏机才算完整。因此我们所设计的SOC系统必须考虑如何高效实现这三个部分。

在游戏的交互上,从智能角度出发,我们希望玩家能通过无线传感来实现游戏的交互,即只需要通过在屏幕前通过手部动作即可完成游戏的交互。因此我们使用了蓝牙运动传感器+蓝牙接收芯片的方案,玩家佩戴传感器,在FPGA端通过蓝牙接收芯片接收蓝牙运动传感器的数据,并对玩家的动作进行识别。此外这部分也是最能体现智能的地方,我们在内部实现了K-means聚类算法的硬件加速器用于动作识别。

对于为什么选择K-means聚类算法的原因是这样的,首先我们希望实现的是全体感,在游戏过程中的所有场景下,都只需要通过手部动作进行选择,那么就希望我们使用的动作识别算法,它具有非常高的灵活性,必须是可配置的,能够随意切换从而识别不同的动作。第二点我们的动作本质上并不复杂,以游戏的模式选择来说,我们只需要识别到玩家向左切换游戏,即手往左挥,或向右切换游戏,即手向右挥,因此我们并不需要特别高的精度,而且这两个动作实际上是很容易区分的。基于上述考量,我们就想到了K-means聚类算法,通过预先进行训练,存储不同动作识别时需要的聚类中心信息,从而能够随意切换识别不同的动作,这也使得我们能够只通过一个硬件设计多个不同游戏的动作。K-means聚类算法的硬件加速器如下图所示。

在这里插入图片描述

在游戏的显示上,我们必须有软硬件协同设计的思想,我们的想法是CPU通过给出一个坐标,硬件部分就在显示器的相应位置显示游戏的素材。此外我们还需要考虑游戏素材可能会发生重叠,且游戏背景和游戏素材的重叠问题等,那么这就出现了优先级的问题,因此我们还设计了素材的优先级仲裁电路。同时我们考虑到如果游戏的素材过多,如果靠CPU一个一个地去改写它们的坐标,那么肯定会影响系统的性能,这时候就需要硬件部分来解决这一问题,即提供一些批处理方法,使得CPU可以控制一批的素材。这个做法是很自然的,我们是在进行嵌入式设计的时候发现这一问题,然后再去改SOC系统的底层硬件。

在游戏的音效上,参考日常我们游玩的游戏,音效实际上应该有两种,即背景音乐和触发了特定事件的特效音乐的混叠。因此在音效的处理上,我们设计了一个音效混叠电路,其实就是两者的简单相加。为了提高音效播放的灵活性,我们还设计了相应的寄存器用于对背景音乐与特效音乐进行缩放,这样可以让特效音乐的声音比背景音乐大,反之也是可以的。音效混叠的电路设计如下图所示。

在这里插入图片描述

游戏的三要素至此我们已经有了充足的考量,但是从硬件具体实现上又出现了问题,主要是存储的问题。首先是音乐和游戏素材的存储,尤其是音乐,光靠板子的片上存储资源是远远不能存储一首歌,即我们必须满足游戏对存储资源容量的需求。通过SD卡就可以解决这些问题。而第二个问题就是存储读写速度的问题,我们使用HDMI进行图像传输,越高的分辨率对存储的读写速度要求也更高,SD卡的读写速度远远无法符合游戏素材的实时传输(大家可以手动计算一下吞吐量),因此我们必须使用外部的SDRAM作为显存,因为SDRAM的存取速率相对而言是足够的。基于上述两个问题的解决,我们设计了相应的DMA模块,能够在SD卡、SDRAM、片上存储之间进行数据的传输,极大地提高了灵活性,后期需要添加游戏素材,只需要把游戏素材事先写入SD卡中,再把其在SD内的地址存储在keil内调用即可。而且我们拓宽一下思维,SD卡并不一定只能存音乐和游戏素材,我们还可以写入一些音乐节拍的东西到SD卡中,CPU可以去读出这一信息来实现音游,而不需要实时处理音乐的节奏信息。

3、游戏介绍

本游戏机实现了四个游戏模式,分别为Drum Master、Tennis Master、Double Boxing、Single Boxing。游戏的流程如下图所示,所有步骤均是通过体感实现。

在这里插入图片描述

在Drum Master(击鼓大师)模式下,音符块会跟随音乐的节奏信息出现,玩家需要等待音符块到达目标点后进行击打,不同的音符块需要执行不同的击打动作(即左手击打与右手击打)。这个游戏我们是仿照太鼓达人这个游戏来复现的,我们设计的游戏画面如下图所示。游戏中,音符块会从右边出现,音符块有两种类型,分别对应需要用左手敲还是右手敲。此外游戏画面中还有歌曲的进度条、游戏的得分、游戏的连击得分信息。

在这里插入图片描述

在Tennis Master(网球大师)模式下,音符块会由5个通道根据音乐节奏随机掉落,玩家需要事先将传感器绑在腿上,在游戏中移动到对应的通道下,并挥拍(另一个传感器是绑在手上)进行相应方向的击打。如下图所示。
在这里插入图片描述

在Double Boxing(双人拳击)模式下,此时为双人游戏,共有三种不同的动作音符块(直拳、摆拳、上勾拳),两个玩家需要根据不同的音符块做出相应的动作。而在Single Boxing(单人拳击)模式下,共有六种不同的动作音符块(左直拳、左摆拳、左上勾拳、右直拳、右摆拳、右上勾拳),玩家需要根据不同的音符块做出相应的动作。这个游戏是放着了有氧拳击这个游戏进行复现的,游戏画面如下图所示。

在这里插入图片描述

不管是哪个游戏模式,最后都会有一个玩家评分的总结,该评分是根据游玩过程中玩家的连击数、击中数等因素决定的,如下图所示。

在这里插入图片描述

总结

我们是从三月份开始做集创赛的,真的是遇到了非常的问题,因为Arm杯实际上对基础要求是很高的,从底层的SOC搭建,到使用自己搭建的SOC系统进行软件开发,从硬件描述语言到汇编到C语言,都需要参赛选手掌握。在这个过程中,我们学到了特别多的东西,对整个SOC设计流程也有了更深刻的体会。

此外在本次比赛中,我们的底层硬件开发是使用SpinalHDL进行编写的,相比于Verilog,SpinalHDL在接口例化、参数化设计上极其灵活,能够大大减少开发周期。此外SpinalHDL并不是HLS,其本质上还是硬件描述,且内部具有丰富的库可供设计者使用,可以避免无意义的重复工作,例如总线的实现,甚至还可以自动生成寄存器文档。推荐大家学习SpinalHDL。

参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跑腿系统开发:构建实时任务分配算法的技术挑战

在跑腿系统中,实时任务分配算法是确保任务快速高效完成的关键因素之一。本文将介绍构建实时任务分配算法时可能面临的技术挑战,并提供一个简单的Python示例来解决这些挑战。 技术挑战: 实时数据处理: 跑腿系统需要处理大量的实时任…

Ganache本地测试网+cpolar内网穿透实现公网访问内网

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网:我们通常说的是互联网&am…

K8S:Pod概念、分类及相关的策略

文章目录 一.pod相关概念1.Pod基础概念2.Kubrenetes集群中Pod两种使用方式3.pause容器的Pod中的所有容器共享的资源4.kubernetes中的pause容器主要为每个容器提供功能:5.Kubernetes设计这样的Pod概念和特殊…

本地搭建CFimagehost私人图床——“cpolar内网穿透”

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

7.algorithm2e中while怎么使用

algorithm2e中while怎么使用 在 algorithm2e 宏包中,要使用 while 循环,您可以使用 \While 和 \EndWhile 命令来定义循环的开始和结束。以下是如何使用 while 循环的示例: \documentclass{article} \usepackage[linesnumbered,boxed]{algorit…

Mac电脑音视频播放器: Infuse for Mac中文

Infuse是一款流行的多媒体播放器应用程序,适用于iOS、tvOS和macOS平台。它由Firecore开发,旨在提供出色的媒体播放体验,并支持广泛的视频和音频格式。 以下是Infuse的一些主要功能和特点: 多媒体格式支持:Infuse支持…

ROS2 从头开始​​:第 1 部分 — 机器人操作系统简介

火星上的机器人(AI生成图像) 一、说明 ROS2是机器人的朋友,一个他们所依赖的平台,用于沟通、协调和控制,帮助他们实现目标。ROS2以DDS为核心,帮助机器人探索新世界、新任务、新可能性,是一个方…

代码随想录--链表-反转链表

题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双指针 public class Main {public static class ListNode {int val;ListNode next;ListNode(int x) {val x;}}public ListNode reverseList(L…

涨知识,关于代码签名证书10大常见问题解答

在当今互联网时代,各种软件程序充斥着这个网络世界,大大小小的软件层出不穷,如何让用户信任软件并下载软件,是众多软件开发公司需要解决的问题,由此代码签名证书应运而生,提供了软件程序的身份认证、完整性…

uni-app获取元素具体位置获取失败

场景:想要通过链接跳转传递catid&catid2类别id,商品类别id 跳到这一页左侧对应的类别栏上面,同时跳到右侧列表滚动到对应商品那一块区域。 遇到的问题:在for循环中通过绑定id获取不到商品列表的具体位置。 原因:在onReady函数和mounted函…

【Java】医院智能导诊系统源码:解决患者盲目就诊问题、降低患者挂错号比例

医院智能导诊系统解决患者盲目就诊问题,减轻分诊工作压力。降低患者挂错号比例,优化患者就诊流程,有效提高线上线下医疗机构接诊效率。患者可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。 一、医院智能导诊系统概述…

科锐逆向第二阶段(一)SDK

基本概念 什么是 SDK SDK 是软件开发工具包(Software Development Kit)的缩写。它是一个集成了软件开发所需工具、库文件、示例代码和文档等资源的软件包。 SDK 通常由软件开发公司或平台提供,旨在帮助开发人员构建、测试和部署特定类型的…

Offset Explorer(Kafka消息可视化工具)报invalid hex digit ‘{‘错误解决方法

解决办法: 根据代码的实际情况,设置成对应的值。设置完成后点update、refresh更新。

excel 通过SUMIF关键词统计词频

经常会对句子中含有的某些词汇数量进行统计,excel 也可以实现初级的操作 比如有如下文本 想要统计旅游和好两个词在这些文本中出现了多少次 用如下函数即可 SUMIF(A:A,"*"&C2&"*",B:B) 可以很方便的统计出好出现了3次数据&#xff0…

Python爬虫有哪些库,分别怎么用

目录 Python常用爬虫库 代码示例 requests BeautifulSoup Scrapy Selenium PyQuery Axios requests-html pyppeteer 总结 Python是一种非常流行的编程语言,因其易学易用和广泛的应用而受到开发者的喜爱。在Python中,有许多库可以用于爬虫程序…

“探索前后端分离架构下的Vue.js应用开发“

目录 引言1. 前后端分离2. Vue的简介1. Vue.js是什么?2. 库和框架的区别3. MVVM的介绍 3. Vue的入门数据的双向绑定数据的单项绑定 4. Vue的生命周期总结 引言 在当今互联网时代,前后端分离架构已经成为了Web应用开发的主流趋势。前后端分离架构的核心思…

【二叉树-02】二叉树的最近公共祖先-力扣 236 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

DC系列靶机3通关教程

文章目录 信息收集主机扫描端口扫描目录扫描 漏洞查找Joomscansearchsploit 漏洞利用SQL注入密码爆破反弹shell得到交互shell 提权查看操作系统版本信息搜索操作系统漏洞利用exp提权查找flag 信息收集 主机扫描 arp-scan -l端口扫描 nmap -p- -A 192.168.16.162-A&#xff1…

月木学途开发 5.轮播图模块

概述 效果图 数据库设计 轮播图表 DROP TABLE IF EXISTS banner; CREATE TABLE banner (bannerId int(11) NOT NULL AUTO_INCREMENT,bannerUrl longtext,bannerDesc varchar(255) DEFAULT NULL,bannerTypeId int(11) DEFAULT NULL,PRIMARY KEY (bannerId) ) ENGINEInnoDB AU…

【UE 粒子练习】06——创建条带类型粒子

效果 下图呈现的是一种条带粒子跟随普通粒子移动的效果。其中,条带粒子为下图中蓝色部分,橙色部分为普通粒子 步骤 1. 新建一个材质,命名为“Mat_Ribbon”,将用于条带粒子材质 材质域设置为表面,混合模式设置为半透明…