2026寒假练 - 基于RP2040实现重力迷宫滚球小游戏设计
该项目使用了thonny软件,MicroPython语言,实现了一个RP2040系统板的设计的设计,它的主要功能为:基于RP2040,将imu上的数据进行分析,设计了一个重力迷宫滚球小游戏。
标签
嵌入式系统
开发板
王佐星
更新2026-03-27
北京理工大学
15

项目总结报告

一、所选任务介绍

任务名称:

RP2040游戏机】重力迷宫滚球小游戏

任务要求:

1.使用姿态传感器(IMU)俯仰和横滚控制小球在迷宫中移动,LCD实时显示。  

2.设计至少3关固定迷宫;按键实现开始、暂停、重开与关卡切换。  

3.计时与得分显示在屏幕;蜂鸣器提示碰壁与通关。    

二、项目介绍

这次寒假我参加硬禾学习平台电子森林活动,选择的项目“RP2040游戏机方向下的重力迷宫滚球小游戏。该项目聚焦于嵌入式系统的输入处理输出完整链路:通过姿态传感器(IMU)采集俯仰/横滚数据作为输入信号,经单片机处理后映射为游戏逻辑中的移动方向,再通过LCD实时显示迷宫、球的位置、计时与关卡信息,并通过蜂鸣器对碰壁、通关等事件做声音反馈。同时任务还要求加入按键交互,实现开始/暂停/重开/切关等功能,至少设计三关固定迷宫。

三、硬件简介

本次项目基于硬禾的RP2040学习平台板卡。平台核心芯片为 RP2040,并搭配屏幕、传感器与多种输入/输出外设。

本项目实际用到的硬件模块主要包括:

1.树莓派Pico核心芯片RP2040

主要特点及组成为双核Arm Cortex M0+内核,可以运行到133MHz具有264KB内存性能强大、高度灵活的可编程IO可用于高速数字接口片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps12位精度支持MicroPythonCC++编程

2.相关的板上功能:

(1)240*240分辨率的彩色IPS LCDSPI接口,控制器为ST7789

(2)四向摇杆+ 2个轻触按键+一个三轴姿态传感器MMA7660用做输入控制

(3)板上外扩2MB Flash,预刷MicroPythonUF2固件

(4)一个红外接收管+一个红外发射管

(5)一个三轴姿态传感器MMA7660

(6)一个蜂鸣器

(7)双排16Pin连接器,有SPII2C以及2路模拟信号输入

(8)可以使用MicroPythonCC++编程

(9)USB Type C连接器用于供电、程序下载

 

四、方案框图与设计思路

方案框图为:

设计思路上,我把项目当成一个小型游戏系统来做,重点不是把功能堆上去,而是保证交互顺畅:倾斜控制要稳定、按键响应要可靠、屏幕刷新不能闪烁核心是状态机+数据驱动地图+局部刷新 这几个点




五、软件说明

1)开发环境与语言选择

本项目采用MicroPython 开发编程语言选择为python语言

2)软件流程
 

3)关键代码模块说明

1.状态机设计STATE_MENU / STATE_PLAYING / STATE_PAUSED三态,按键触发状态切换。

  2.迷宫数据结构每关一个15×15二维数组,0表示路,1表示墙,3表示出口;起点单独配置,加载关卡时统一重置。这样的数据驱动方式便于扩展更多关卡。

 

3.坐标映射滤波imu逻辑IMU原始数据先做轴交换与正负方向修正,再做简单一阶低通滤波(ALPHA)。
 

 

4.屏幕刷新优化采用局部擦除上一格+绘制新位置方式HUD也采用缓存对比+时间间隔刷新,避免闪烁。

5.异常保护IMU初始化与读取都try/except,确保硬件偶发异常时程序仍可运行,最多失去重力控制但不死机。


六、功能展示说明

1.开始界面黑底标题“Gravity Maze”,提示“Press START”,并说明倾斜移动红色方块

2.关卡界面

(1)上方为迷宫区域:白色为道路,黑色为墙,绿色为出口,红色为玩家方块
(2)下方HUD:显示计时(MM:SS)、关卡(Lv.x/3)、当前位置坐标
(3)暂停效果START暂停后,小球停止响应倾斜输入,HUD时间保持在暂停时刻不再增长;再次按START继续并校正计时。
(4)碰壁反馈当玩家试图进入墙格,蜂鸣器短促一声,同时位置不改变。
(5)通关流程进入出口格后蜂鸣器发出更高音提示,并自动加载下一关;第三关通关后显示“You Win!”并回到菜单等待再次开始。

 

七、项目中遇到的难题与解决方法

1.IMU数据抖动导致移动不稳定

(1)问题:传感器原始数据波动较明显,轻微晃动也会触发方向变化,小球乱飘

(2)解决:加入一阶低通滤波(ALPHA)对ax/ay平滑;同时引入TILT_THRESHOLD(倾斜阈值),只有超过阈值才移动。这样既稳定又保留灵敏度。

2.移动过快影响可玩性

(1)问题:循环频率高时,小球会连续移动,玩家难以控制,像滑行失控

(2)解决:加入MOVE_COOLDOWN_MS限制连续移动的最短间隔,让移动呈现格子步进,更符合迷宫玩法。

3.屏幕刷新闪烁与性能压力

(1)问题:若每次移动都全屏重绘,MicroPython下会明显闪烁且耗时。

(2)解决:采用局部刷新策略:只重绘旧位置的背景格子,再绘制新位置的球;HUD也做缓存比较,只有时间/关卡/坐标变化时才刷新,并设置HUD_UPDATE_MS。体验明显提升。

八、心得体会与收获

说到心得与体会,这次寒假项目最大的收获是第一次把多个外设+游戏逻辑+ UI展示真正做成一个完整作品。以前做嵌入式练习常常是单点式的:点亮屏幕、读一个传感器、按键控制LED……而这次需要把它们串起来,才会发现工程里最关键的是系统性思维:输入如何可靠、处理如何清晰、输出如何高效、体验如何稳定。

在技术层面,我对SPI/I2C/PWM/GPIO的使用更熟练了,也真正理解了数据采集滤波阈值决策控制输出的闭环流程。尤其是IMU的处理,让我意识到传感器数据不是读出来就能用,必须结合滤波、阈值与节奏控制,否则交互会很糟糕。

这个小游戏开发也让我对以后的项目设计更有信心未来如果继续深入,我希望尝试加入更多关卡编辑机制、加入积分规则(碰壁扣分/用时评分)、甚至利用红外或更多外设实现双人互动。总之,这次电子森林项目让我真正体会到从零到一做出能玩的东西的成就感,也让我对嵌入式学习的兴趣更强了。

 

附件下载
重力迷宫滚球小游戏代码_王佐星.rar
团队介绍
由本人独自完成
团队成员
王佐星
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号