×

开源硬件ATtiny1614西蒙克隆

消耗积分:2 | 格式:zip | 大小:0.33 MB | 2022-10-28

李麒铭

分享资料个

描述

多年来,我已经构建了几个基于 Arduino 的 Simon 游戏克隆。

poYBAGNYvxOAK2PPAACY9zXTKzc969.jpg
我以前基于 Arduino 的 Simon 游戏克隆
 

最近,Hackster 的同事 giobbino 上传了一个西蒙游戏克隆的 3D 打印版本我喜欢这个设计中的外壳,因为它更接近于最初的西蒙游戏。不幸的是,3D 打印机文件不包括在内,所以我不得不自己设计。此外,我一直认为游戏应该显示运行序列计数的反馈,因此我的构建总是显示游戏中迄今为止达到的序列长度的原因。

演示视频

 

设计

虽然我之前的构建使用的是 Arduino Pro Mini,但这次我想使用更现代的 CPU,并且具有非常低功耗的睡眠模式。所以这个版本被设计为使用 ATtiny1614 处理器。我还使用了 TM1650 显示驱动程序来驱动 2 位 7 段显示器。由于 TM1650 在所有段关闭时仍消耗大约 5mA 电流,因此芯片的电源线通过 CPU 使用 P 沟道 MOSFET 作为开关来控制。

poYBAGNYvxeAKLKiAANeLnkYDAw116.png
我的西蒙游戏克隆示意图
 

由于该设计包括一个 7 段显示器,因此该单元本身需要比 giobbino 的版本更大。这意味着游戏按钮更长。在单个物理开关上旋转的长按钮顶部意味着当在外边缘按下游戏按钮时,它可能无法实际激活单个物理开关。所以我的设计使用单个 LED 和每个按钮两个按钮开关。这允许游戏按钮可靠地激活开关,无论用户在何处按下它。

pYYBAGNYvxqAG3FWAABuNp-d-Ic498.jpg
giobbino 的单按钮和 2 个 LED 设计在左侧,我的双按钮和 1 个 LED 设计在右侧
 

PCB布局

由于 ATtiny1614 微处理器仅在 SMD 外壳中可用,因此我决定在此构建中尽可能坚持使用 SMD 组件。

poYBAGNYvx6AEdMqAAO8YzfppgM623.jpg
PCB布局
 

如果您希望将 PCB 商业化制造或像我一样自己制造,请附上 Eagle 文件。我使用了碳粉方法。

3D打印外壳

附上 3D 打印所需的 STL 文件。最初我没有任何红色或绿色灯丝,因此使用白色灯丝打印按钮并使用彩色 LED。我的更新版本使用彩色灯丝作为按钮。我没有将 LED 更改为白色,因为我测试它时似乎没有必要,但如果你沿着这条路线走,你将需要调整与 LED 串联的限流电阻的值。

Simon V3 - Top.stl ,Simon V3 - Bottom.stl - 0.2mm 层高,无支撑,黑色

Simon V3 - Display.stl - 0.1mm 层高,无支撑,任何颜色

任何一个:

Simon V3 - Button.stl - 层高0.2mm,支持触控构建板,一红一黄一绿一蓝。

或者:

Simon V3 - Buttons.stl - 0.2mm 层高,支持触控构建板,白色

组装 - 第 1 部分

首先添加 SMD 组件。我发现在焊接 SMD 元件时使用焊膏比使用卷盘中的焊料更容易。

如果您的威廉希尔官方网站 板是单面的,请添加链接。

poYBAGNYvyeAcX8DAAGJvH0p-kk772.jpg
添加 SMD 组件和链接
 

组装 - 第 2 部分

为 UPDI 编程器添加一个 3 针接头,并为电池连接到威廉希尔官方网站 板的铜侧添加一个 JST 直角公连接器。

将两个“Simon V3 - Display.stl ”垫片粘贴到 PCB 上并添加 7 段显示器。

pYYBAGNYvyqAGJrMAAFLvSixIZE597.jpg
添加排针并显示
 

组装 - 第 3 部分

将 8 个 9mm 6x6 轻触开关、1 个 12mm 6x6 轻触开关、无源蜂鸣器和四个彩色 LED 添加到 PCB 的组件侧。

poYBAGNYvy6Ab-ehAAGKjUuwsfw324.jpg
添加 8 x 9mm 开关、1 x 12mm 开关和 LED
 

组装 - 第 4 部分

将按钮帽粘到 12 毫米 6x6 轻触开关上。确保胶水不会顺着轴流下并进入开关。

使用 2.5 毫米钻头钻出 PCB 安装座,并使用 3 毫米丝锥创建螺纹。

将四个按钮盖添加到外壳顶部,并使用 4 x 6mm M3 螺钉将 PCB 拧紧。

外壳底部拧到外壳顶部。在您对 ATtiny1614 微处理器进行编程后执行此操作。

pYYBAGNYvzGAJfg0AAI_Qep816I083.jpg
添加按钮帽并拧入板
 

编程

与早期的 ATtiny 系列(如 ATtiny85)不同,ATtiny1614 使用 RESET 引脚对 CPU 进行编程。要对其进行编程,您需要一个 UPDI 程序员。我用 Arduino Nano 做了一个。您可以在Create Your Own UPDI Programmer中找到完整的构建说明。它还包含将 megaTinyCore 板添加到 IDE 的说明。

poYBAGNYvzWALf3EAABYr-HnWL8156.png
我的自制UPDI程序员
 

在 IDE 中安装板后,从“工具”菜单中选择它。

pYYBAGNYvzeAI3uGAABsHC1kYQs138.png
在 IDE 中选择 Attiny1614 板
 
  • 在 IDE 中选择 ATtiny1614 板
  • 选择板、芯片、时钟速度、Arduino Nano 连接的 COM 端口和编程器
  • Programmer 需要设置为jtag2updi (megaTinyCore)
  • 打开草图并将其上传到 ATtiny1614。

结论

我希望我有灯丝来制作各自颜色的游戏按钮,因为我认为这会使游戏看起来更具视觉吸引力。就可玩性而言,它满足了原始游戏的所有要求。

更新

我设法弄到了一些彩色灯丝,并以各自的颜色重新打印了按钮。它让游戏看起来好多了。

poYBAGNYvzmALGbHAAGFewciKgY211.jpg
使用彩色灯丝使装置看起来更好
 

 


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

评论(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:'开源硬件ATtiny1614西蒙克隆',//标题 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);