×

立方体时钟开源分享

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

李晓鹏

分享资料个

描述

最近我偶然发现了Lexon Flip Travel Reversible LCD 闹钟这让我想知道一个时钟总是以相同的方向显示时间,无论时钟本身处于什么方向。我决定在基本上是一个立方体的情况下使用 8x8 矩阵作为显示器。

因为 8x8 LED 矩阵无法将完整的时间显示为文本,所以文本需要滚动。我决定使用水银开关来确定立方体的方向,因为与 MPU-6050 6 轴加速度计/陀螺仪等 MEMS 单元(微机电系统)相比,它们体积小且相对便宜。

设定时间

使用三个按钮配置时钟。它们是 SET、UP 和 DOWN。SET 按钮将逐步执行以下模式:

时间/日期

poYBAGNY4DiAai9qAABHfj-pTO8719.jpg
 

时钟可以只滚动时间或同时滚动时间和日期。日期可以配置为显示为 DMY 或 MDY 格式。UP 和 DOWN 按钮在每个选项之间切换。

12小时/24小时

pYYBAGNY4DyALBiHAAAuAlIaUqQ235.jpg
 

时钟支持 12 小时和 24 小时时间格式。UP 和 DOWN 按钮在每个选项之间切换。

字体

poYBAGNY4D6AHqnDAABI1iXKSTQ672.jpg
 

时钟可以使用 3x5 字体或 5x7 字体显示从右到左滚动的时间。它还可以使用 5x7 字体从下到上滚动时间。UP 和 DOWN 按钮在每个选项之间切换。

亮度

pYYBAGNY4EGAZbnvAABC33W6I8c971.jpg
 

有 8 级亮度。UP 和 DOWN 按钮在每个级别之间切换。亮度设置立即生效,让您判断您想要的显示器有多亮。

小时/分钟

poYBAGNY4ESAKyZ5AAAzw0rJtbI453.jpg
 

即使时钟配置为以 12 小时格式显示时间,当前时间也会输入为 24 小时制。当显示 HOURS 时,UP 和 DOWN 按钮在 0 和 23 之间更改小时。按下 SET 按钮将切换到 MINUTES 显示。UP 和 DOWN 按钮在 0 和 59 之间更改分钟。UP 和 DOWN 按钮具有自动重复功能,按住它们的时间越长,数字分别向上或向下计数的速度越快。

再次按下 SET 按钮将设置时间并使显示返回滚动时间。

 

这个怎么运作

时钟使用水银开关来确定其方向。

pYYBAGNY4EmAP6_LAAMAU6hV8Eo996.jpg
Mercury 开关配置为 NW、NE、SE 和 SW 方向
 

该图显示了 PCB 上四个水银开关的配置。当立方体直立时,所有水银开关都关闭。将时钟顺时针旋转 90 度将打开 NE 和 SW 开关。再次将时钟顺时针旋转 90 度将打开所有水银开关,最后将时钟再次顺时针旋转 90 度将打开 NW 和 SE 开关。

根据水银开关的状态,可以确定立方体的方向,并根据软件调整显示。

示意图

该电路是围绕 ATtiny1614 微处理器设计的。它使用 DS1307 实时时钟来保持时间,即使电源已断开。8x8 LED 矩阵由 MAX7219 LED 矩阵驱动模块控制。

poYBAGNY4E2AQIsfAAKul80mYas483.png
立方体时钟示意图
 

MAX7219 8x8 LED矩阵模块

MAX7219 8x8 LED 矩阵模块有多种变体。虽然它们都以相同的方式执行,但它们的引脚分配有很大不同。

pYYBAGNY4FCAD38eAAD5psRlrlw735.jpg
MAX7219 8x8 LED 矩阵模块均具有不同的引出线
 

PCB 设计用于最右侧的布局。

3D打印

包括 STL 文件。将这些带到 3D 打印店,或者如果您有自己的打印机,请通过切片软件运行它们。我使用了 0.2 毫米的层高。

印刷电路板

为了最大限度地减少所需空间,该板已设计为尽可能使用表面贴装器件 (SMD)。

poYBAGNY4FSAQ3bIAANrGRP6JmQ524.jpg
大部分元件使用SMD元件
 

如果您希望将电路板商业化,或者您可以像我一样自己制作,Eagle 文件已包含在内。我使用了碳粉方法。

组装 - 步骤 1

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

如果您使用的是单面板,请添加链接

pYYBAGNY4FyATbbeAAEt-2sHsiQ649.jpg
添加 SMD 组件和链接
 

组装 - 第 2 步

添加将安装电池的 UPDI 编程引脚接头和两个 Veroboard 引脚。

poYBAGNY4F6AWPZiAAHME0vM-tI276.jpg
添加排针和电池接线柱
 

组装 - 第 3 步

将水银开关和水晶添加到 PCB 的顶部。

添加显示板时,粘贴其中一个 3D 打印支架以保护水银开关。

pYYBAGNY4GGAa6CtAAEVt6LeBqo787.jpg
添加水银开关、水晶和显示支持
 

组装 - 第 4 步

添加 LED 矩阵模块。

将按钮顶部粘到按钮上,确保胶水不会顺着轴流下并进入开关。干燥后,将开关焊接到电路板的铜侧。先做中间开关,再做外侧开关。

pYYBAGNY4GWADpZlAAIP86JyNFA646.jpg
添加矩阵模块和开关
 

组装 - 步骤 5

将一些包装粘到 SMD 电池座的底部。将 Veroboard 引脚切割到正确的高度并焊接在电池座上。

poYBAGNY4GmAIjOeAAQ8Yj6Ogpc107.jpg
将电池座焊接到 Veroboard 引脚上
 

组装 - 步骤 6

在将电线焊接到它并将其固定到外壳上之前,您需要将 DC 面板插座上的引脚剪短。板上有两个 SMD 焊盘,用于将电线的另一端焊接到。确保极性正确。

poYBAGNY4GyAdmZxAAGCVsoznZY221.jpg
添加 DC Panel 插座并连接到 PCB
 

组装 - 步骤 7

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

pYYBAGNY4G6ABsLoAACJEAV9NPQ751.jpg
连接UPDI程序员并上传sketch
 

连接 UPDI 编程器

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

选择芯片(ATtiny1614)、时钟速度(16MHz) 和Arduino Nano 连接的COM 端口。

Programmer 需要设置为jtag2updi (megaTinyCore)

打开草图并将其上传到 ATtiny1614。

结论

当我写这个项目时,我意识到只需要两个水银开关。只要它们彼此成 90 度,相对于立方体的边缘成 45 度,就可以确定立方体的方向。


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

评论(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.lene-v.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:'立方体时钟开源分享',//标题 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.lene-v.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);