本期活动主角是“寒假一起练”pico_game_kit,它的MCU是树莓派的RP2040。在上一个内容中我们实现了st7789屏幕使用TFT_eSPI库与Arduino对接,为后面的应用程序制作铺平了道路,本文主要介绍用game-kit来制作一款精美的水平仪。重点介绍game_kit的Arduino环境下驱动MMA7660加速度传感器,根据各轴数据制作了水平仪,利用TFT_eSPI库显示图片及绘制水平仪表盘,涉及了TFT_eSPI图层的简单应用供大家借鉴参考。
- .(1)MMA7660加速度传感器驱动
由于game_kit加速度传感器的I2C引脚不是连接在rp2040默认I2C引脚上,目前简单粗暴的方法就是修改系统引脚配置,通过查找“RASPBERRY_PI_PICO\pins_arduino.h”关键字找到pico的pins_arduino.h文件,然后修改为加速度的I2C引脚,这样的做法就是,后面如果有其他I2C扩展设备要加入,又需要重新修改配置,而且不能共用。修改好引脚后,使用Seeed公司提供的 MMA7660加速度传感器驱动库就可以简单读取到加速度传感器的数据。
- (2)水平仪工作原理
加速度传感器能够测量由于重力引起的加速度,传感器在加速过程中,通过对质量块所受惯性力的测量,利用牛顿第二定律获得加速度值加速度计可测量加速度,MMA7660加速度传感器能够探测xyz三维方向加速度变化,测量范围为 -1.5g 到 +15g 之间。每个轴的测量值是正数或负数,正轴越趋近重力加速度方向,其数值往正数方向增加,反之往负数方向减小,当读数为 0 时,表示沿着该特定轴“水平”放置。
当检测到X轴和Y轴方向倾斜时,accelemeter.getXYZ函数读数范围-21 至+21g),将X轴、Y轴的偏移值也就是加速度值分别映射在以设定的屏幕中心点为原点的X坐标上的Y坐标(范围80至-80)、X坐标(范围-80至80)上:水平球在X、Y坐标上的移动:水平球在坐标上的移动 = 中心点位置 + 加速度的偏移值。
- (3)实现量角器功能
假设主板参考水平面为桌面,倾斜过程中,Y轴与桌面是平行,其夹角不变(一直是0度),发生变化的是X轴与桌面的夹角以及Z轴与桌面的夹角,而且桌面与X轴Z轴夹角变化度数是一样的。为了方便分析,我们从Y轴的方向俯看下去,那么这个问题就会简化成只有X轴和Z轴的二维关系。假设某一时刻主板处于如下状态:
在这个图中,Y轴已经简化和坐标系的原点O重合在了一起。我们来看看如何计算主板的倾斜角,也就是与桌面的夹角a。g是重力加速度,gx、gz分别是g在X轴和Z轴的分量。根据反余弦定理,计算角b的弧度值(代码实现在上图)。
(4)水平仪表盘的设计
图形界面工作其实占用了本项目很多工作量,Micropython的刷新残影硬伤,在这没有。从简单只有一个小球在屏幕上移动,到有背景图案,刻度线,经过多次修改,最后稍微地看得顺眼了。因为有了背景图片,刻度线反而会看得清,因此加入了一个小功能,按A键可以在有无背景间切换,这样总有一款让你喜欢了吧。
心得总结
时间横跨3个月的game-kit学习就要完结了,收获了小伙伴的相互支持,老师的热心指导,大佬们的成功经验。在这种项目驱动的学习方式下,对rp2040的功能及应用有了较为深入的了解。(准备写3000字的感言的,最后却不知从而说起)。
最后将活动期间自己制作的、移植的小程序后期继续努力整理分享出来。
(计算天天练)
(射击游戏)
(世界大战方块)
(颜色选择器)
在此再次,对本项目提供帮助的小伙伴致敬!!!
祝大家玩的愉快,学业猛进!