揣在口袋里的"游戏机"
——基于"Arduboy卡片游戏机"的硬件扩展与重制
偶然在购物软件上看到一款迷你的游戏机,价格也不贵,就下单买回来看了看,如(图2)。用了几天发现除了“俄罗斯方块”之外,没啥经典的,又考虑到下学期转学到新的一所住宿中学,所以就有了这个项目。这里是Li1in13ai,欢迎大家欣赏 这个艺术品,见(图1)。
那么有的朋友问了:“我也想复刻这个,但我是新手,能行吗?”电子开发是可以融入到我们这些普通人的生活的,而且每个人都会创造出无限的可能。当然这过程中会用到如电烙铁、加热台等工具,若不熟练的话,可以请一位有经验的“老师傅“来帮忙,全程请牢记安全第一。
一、 需求
考虑到使用场景,它需要具有极高的的便携性和较长的续航;其次,要想游玩更多的游戏,肯定少不了一颗性能强悍的MCU;但自己是一名中学生,还要考虑成本(虽然嘉立创“星火计划”有减免);还有就是要有不错的使用体验,这其中包括:不错的性能、舒适的按键及握持感等;最后呢,算是个人喜好,一定要精致!美观!
二、 构思
(一) 外观
仍然采用和购买的游戏机类似的设计,长方形,上方屏幕,下方按键。体积也要小一些,毕竟要便携,设计大小是30*50mm。综上呢,我找到了两个感兴趣的开源项目,一个是基于“ATTiny85”的,但无奈这颗MCU性能太差了,即使一些简单游戏玩起来也只有几帧,虽说能“眨眼补帧”,但总归体验不好;另一个就是本文的主角了,基于“ATMega32u4”的“Arduboy”,我在BiliBili看到后找了它的官网,项目开源,但是是海外的,好歹折腾了半天,原理图资料啥的下载下来了,一看难度还好,就它了。根据原版,我决定了按键布局是经典的“左四右二”。
又考虑是否使用3D打印外壳,在其他项目中我发现用两层PCB“夹心”也十分美观,而且更具科技感,虽防护性会差一些,但为了美观,果断放弃防护性。
(二) 元器件
-
主控 及 Flash
经多方位对比,原版的ATMega32u4在性能、功耗、价格上基本平衡,又考虑到我没有能力去给其他MCU单独做适配,最终决定就它了。
考虑到要存储大量的游戏,使用华邦的W25Q128JVSQ,大小为16M。焊接完成如(图三)。
-
电源
首先就是稳压了,主要有两种方案,一种是“低压差线性稳压器(LDO)”,还有就是“开关电源转换器(DC-DC)”了,但是DCDC要搭配一颗电感使用,在这寸土寸金的PCB上,我放弃了后者,选择了LDO。但是在众多LDO中,怎么选择又成了问题,首先想到的是1117,但是因为它体积不小,且这个系统没有大电流需求,更何况还要用钽电容(本人强迫症),价格相对较高,所以放弃。剩下的呢,为方便对比,我把常见几款LDO数据都测试了一遍,因为系统不涉及大电流,且测试设备不支持,故没有测试最大输出电流及温升,(如表1,测试结果为5.0v降压至3.3v)。
但使用锂电池电压不可能全时维持在3.3v及以上,一是可以先升压到5v,再降压到3.3v,可是系统中没有用到5v的设备,所以有些浪费,其次这样效率会大大降低,更何况还有体积问题。
经过多方位考虑,RT9013虽性能不错,但是不满足要求,不过不久,我就看到了一款“RT6150A/B”出现在了树莓派Pico中,这颗IC中有控制部分,可通过控制其中四颗MOS管的通断,从而控制其是升压还是降压,理论上只要输入电压在1.8v~5.5v之间就能稳定输出3.3v的电压,经测试,在输入3v时,最大输出电流为0.5A@3.3v,满足使用,其余参数见下表(表2,输出电压恒设定为3.3v),最终,就决定用它了。
但是后期画PCB时发现价格涨得有些离谱,又是一顿搜索,找到了一颗几乎一模一样的替代料,那就是MP2155,价格只有他的五分之一左右,看了别人的测试,性能也说得过去,果然在价格上低了头,选择了价格便宜的MP2155,也就有了最终的版本(图4)。
再有就是电池部分,为了更长的续航,这里的“续航”是由主观上使用时间和充电时间两部分共同影响着的,所以不能盲目提升电池容量,一是体积重量不允许,其次当达到某一个临界点时,提升就不那么明显了。所以,我选择了一块380mAh的42535的动力电池,有着不错的容量同时,还能以客观的速度充电。一块动力电池也能给系统中的用电器提供更加稳定的电源
锂电池的充电管理IC使用我常用的LTC4054,具有体积小(TSOP-23-5)、效率高、能耗小(待机电流3uA)、电流大、温升小等等的特点。
另外,还看到一颗“EC190707”,一款长按开关机IC,长按3秒,输出脚高低电平转换,可以连接至MP2155的“使能引脚(EN)”上,控制其工作与否。EC190707的待机电流为5uA,MP2155为1uA,就算两颗加起来也可忽觉不计;EC190707的外围部件只有一颗滤波电容;封装SOT-23-6,体积很小;而且价格很美好。所以,在不多出可察觉的变化的同时是其有一种高级感,何乐而不为呢?
-
接口
考虑到体积问题,所以放弃在硬件上保留串口芯片(如CH340C),而采用外置烧录器的方式,在上层版正面预留6个烧录触点(图5),使用烧录
-
屏幕
采用0.96英寸的高亮白色OLED显示屏(图7),分辨率128*64,虽然看着有些可怜,但是由于其尺寸小,所以显示效果还不错,选择高亮的白色版本虽然功耗增加一些,但可以让其在强光条件下更方便浏览,还是要优先满足使用体验的。
-
按键
顶部有一颗侧向的轻触开关(图8),作为长按待机开关,在必要时降低能耗。
操控按键采用与经典GameBoy相同的布局,经多次迭代及换料,现使用稍有些高度的轻触开关,手感极佳。
-
蜂鸣器 与 指示灯
考虑到体积问题,使用板载蜂鸣器做发声装置(同图8),体积小巧带来的问题就是音量小,但是有,本着又不是不能用的原则,还是保留了下来,也可通过下方的拨动开关物理关闭(图9)。
使用TC3838RGB灯珠,展示充电状态,以及开机时提示点亮3秒(同图9)。
三、 设计
(一) 原理图
原理图使用立创EDA绘制,多使用网络接口,直观简洁。但由于要将功能分布于上下两块PCB,因为下层PCB只负责开关,指示灯及电池连接功能,所以设计原理图是将下层的元器件取消“转到PCB”,这样,在原理图转PCB后就直接是上层板的所有原件了,无需再次删除。
(二) PCB制作
因为使用上下两层PCB“夹心”的方式,一个问题也随之而而来“上下PCB应如何连接?”,首先考虑了软排线,但是市面上买不到尺寸小于5cm的排线,需要特殊定制,但是定制的价格和周期就高了;再有就是飞线,飞线不方便连接不说,后期还不利于维修。最后,发现有一种类似智能手环充电的弹簧触点,价格合理,就在底层使用这种方式与上层的空焊盘连接(图10)。另外我还复用了固定用的四根铜柱,使其作为电池的导线,并可以使上下两PCB共地,方便下层的开关走线及控制。
其次就是屏幕,考虑过在焊盘上开一条槽孔(图11),但由于体积问题,改为了正面直接焊接,虽说屏幕会有一些突起,但是更大的面积为布线提供了方便。
为成品美观,正面仅保留操作按钮、复位按钮、屏幕及上传接口,其余原件摆放于上层PCB反面。因PCB反面原件密度过大,本人布线技术差点意思,所以用了四层板,多了两个内层用来布线。本系统不涉及高频信号,所以我就本着布线只要能连上且美观,不过多纠结。
(三) 代码
这里只举自己编译游戏的基本流程,首先要有Arduino IDE的开发环境,有必要的库。正式开始的的第一步,就是对游戏内的事物进行定义,这里以经典的“打砖块”游戏举例,对砖块、弹球以及球的起始位置等等,还要定义硬件的参数,比如刷新率(60Hz),还有分辨率(12864)等等。
四、 制造
(一) 下单
PCB下单于嘉立创,由于星火计划,可选SMT,我将嘉立创基础库有的原件直接小批量SMT了,也因此,板子需改为77cm,四周V割,这里要求布线时要稍远离边框,否则可能锣断线,造成PCB不可用。
(二) 焊接
PCB收到后(图12),将剩下的原件补回,推荐使用焊台进行回流焊,若是用热风枪,焊接带有塑料部分的原件(如轻触开关)时要注意风速温度;以及用热风枪焊接OLED屏幕时,不要用热风直吹屏幕显示区域,会导致屏幕不显示(别问我怎么知道的)。焊接实例如(图13)。
(三) 程序上传
先使用Arduino或USBISP(图14)通过探针连接游戏机上传触点,在Arduino中添加Homemade Arduboy库,更改对应参数及烧录器,烧录Bootloader(图15)。
随后使用软件上传游戏文件,待软件提示成功后就可以开始玩耍了!
当然也可以从官网寻找国内外大神制作的游戏,自己挑选制成组合包,烧录进游戏机(图16)。
成品如封面及(图17)
这个项目也因为我学校住宿的原因,历时一年左右才正式完成,我想说的是,面对你所热爱的事情,不要放弃,坚持下去,总会收获的。也希望这个项目能引起你对硬件开发的兴趣,加入到硬件开发的这个大家庭,做出自己想做的,生活中需要的,有意义的东西,加油!
特别声明:本人同名作品已发表在GitHub、Gitee、Arduboy中文论坛、BiliBili、嘉立创开源平台、中国工信部《无线电-2023年5月刊》、等相关平台,查重时请注意辨认!
1 个赞