×

使用Arduino(Arduboy)DIY手持游戏机

消耗积分:0 | 格式:zip | 大小:0.06 MB | 2022-11-10

分享资料个

描述

几年前,我在这里创建了第一个 Arduboy 克隆教程

它很受欢迎,从那时起发布了许多很棒的教程,这是我原始教程的转贴,为Hackster.io添加了一些内容

有一个名为 Arduboy 的 8 位信用卡大小的游戏平台,它使开源游戏易于学习、分享和玩。

您可以在此设备上享受他人制作的 8 位游戏,也可以制作自己的游戏。由于它是一个开源项目并使用 Arduino,因此我决定制作自己的版本。

我的目标是设计一个易于使用墨粉转移方法制作的 PCB。所以我把轨道和垫子做得尽可能大。如果您不想蚀刻 PCB,可以在面包板或 Perfboard 上制作一个。

收集组件

你会需要:

  • Arduino pro micro (不是 Pro Mini。带有ATmega32u4芯片的 Pro micro)
  • 7 针 SPI OLED 显示屏
  • 4 针瞬时按钮 (12x12x7.3mm)
  • 覆铜板(如果您正在制作 PCB)或者您可以使用面包板/预制板。
  • 滑动开关
  • 3v纽扣电池和支架
  • 母头针
  • 压电蜂鸣器板

警告:您必须确保您拥有基于ATmega32u4 的 pro micro和 7旧显示器,否则该项目将无法运行。

完成这个项目后,我意识到 3v 纽扣电池只能为游戏供电不到一分钟。由于我使用 USB 电缆为我的电源供电,因此我没有费心重新创建 PCB 文件。因此,如果您想要完全的移动性,请考虑使用功能更强大的电池。

连接组件并测试威廉希尔官方网站 (可选)

这是一个可选步骤,因为我已经测试并验证了威廉希尔官方网站 。

我想在构建 PCB 之前检查威廉希尔官方网站 是否正确,所以我将威廉希尔官方网站 组装在面包板上。并在原型PCB上制作了一个键盘

poYBAGNr16KACAJpABS41SvXdZc022.jpg
 

它工作正常,所以我设计了一个 PCB。

制作PCB

您可以使用碳粉转移方法蚀刻定制 PCB,或使用原理图将组件焊接到穿孔板上。

 

poYBAGNr16WAXb73AAG_F4Pz8Mc665.png
 

从这里下载PCB 文件并蚀刻它。

我试图让这个 PCB 尽可能地对 DIY 友好。它有大迹线和宽焊盘。这将使蚀刻过程和焊接更容易。如果您之前没有 PCB 蚀刻经验,请按照这些教程进行操作

 

 
 
 
pYYBAGNr17GAfVMAAAWVz9r3uaw150.jpg
 
1 / 3
 

 

poYBAGNr18uASOkwAAeM2huRau8083.jpg
 

焊接组件

将 6 个按钮、滑动开关和电池座焊接到 PCB。

 

 
 
 
poYBAGNr1_SAXmM1AAu0Gp_f_FQ648.jpg
 
1 / 2
 

 

(如果您要使用 USB 电缆为游戏供电,则不需要电池。)

更新:cr2032 电池对于这个项目来说不够强大,在建造后实现。

我们不会将 Arduino 和 OLED 显示器直接焊接到 PCB 上,因为我们将来可以将它们用于其他项目。首先将母头引脚焊接到 PCB 上,然后将 OLED 显示器和 Arduino 连接到接头上。这将增加我们 arduboy 的厚度,但如果我们愿意,我们可以移除这些部分。

有一根跳线连接到扬声器。它在 PCB 文件中以红色表示。使用一根电线进行此连接。

要连接压电蜂鸣器,请将两根电线焊接到蜂鸣器板上,然后将那根电线焊接到 PCB 上。使用双面胶带将蜂鸣器板连接到 PCB。

将 Arduino 和 OLED 显示器连接到相应的插头引脚。

 

pYYBAGNr2BCASMumAAiraFPfi0Y927.jpg
 

 

如果您在面包板上制作这个项目,那么您只需按照示意图中指定的方式连接组件即可。在这里,我使用 6 个按钮制作了一个单独的操纵杆并将它们连接到面包板上。

连接是:

  • Connect All buttons to GND of Arduino.
  • BUTTON_UP -> Pin A0 of Arduino
  • BUTTON_DOWN -> Pin A3 of Arduino
  • BUTTON_LEFT -> Pin A2 of Arduino
  • BUTTON_RIGHT -> Pin A1 of Arduino
  • BUTTON_A -> Pin 7 of Arduino
  • BUTTON_B -> Pin 8 of Arduino
  • Speaker -> Pin 5 of Arduino
  • OLED pin GND and CS -> GND pin of Arduino
  • OLED pin VCC -> VCC of Arduino
  • OLED pin SCK -> Digital pin 15 of Arduino
  • OLED pin SDA -> Digital pin 16 of Arduino
  • OLED pin RES -> Digital pin 6 of Arduino
  • OLED pin DC -> Digital pin 4 of Arduino

安装必要的软件

您必须下载并安装 Arduino IDE 才能上传游戏。

您可以从链接下载 Arduino IDE

要编译并将游戏上传到您的 arduboy,您必须安装一些库。

我在下面列出了一些重要的。

单击克隆或下载按钮,然后单击下载 ZIP

转到这些链接并单击克隆或下载并下载 zip。打开 Arduino IDE 并点击

 

poYBAGNr2BeAeq-wAAExyAlpqPA416.png
 

 

草图 > 包含库 > 添加.ZIP 库

并选择下载的 zip 文件。对所有文件重复此操作。

pYYBAGNr2BqAOTU3AACbGBsdI1k674.png
 

 

替代方法

除了下载和安装 .zip 文件,您还可以使用 Arduino IDE 库管理器安装库:

草图 > 包括库 > 管理库

然后在过滤您的搜索字段中输入库名称。

上传游戏

要检查硬件是否正常工作,请转到:

文件 -> 示例 -> Arduboy -> ArduBreakout

并点击上传。如果一切正常,您可以在您的 arduboy 上玩突围游戏。

确保您已将开发板选择为 Arduino Leonardo 或 Arduino/Genuino Micro

 

pYYBAGNr2CCAdK79AACxYdF3lzM103.png
 

 

poYBAGNr2CKAbO4pAAEFJVBpMt4013.png
 

有时您可能会遇到如下错误:

致命错误:ArduboyPlaytune0.h:没有这样的文件或目录
#包括
^
编译终止。
退出状态 1 为板 Arduino/Genuino Micro 编译错误。

上传游戏时。

要修复此错误,请在http://github.com/上搜索缺少的库名称。

像我们之前所做的那样下载并安装库。

从晶圆厂制造 PCB

上面的 PCB 非常适合在家制作。但是有点笨重,所以我后来设计了一个双面PCB,并从JLCPCB.com订购。

 

 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用Arduino(Arduboy)DIY手持游戏机',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);