×

微时钟开源设计

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

杨火亭

分享资料个

描述

描述

Raspberry Pi 基金会最近推出了他们的第一款基于微控制器的开发板 Raspberry Pi Pico。它比 arduino uno 先进得多,但不如 ESP32。无论如何,当我想用​​它做点什么时,我受到了很大的限制,因为它没有内置 wifi 或蓝牙,所以我不能用它做任何 IOT 项目。所以我决定做一个时钟。我为 Pico 设计了一个屏蔽,它包含一个 128x32 OLED 显示屏、一个 RTC 模块、蜂鸣器和一个电池充电威廉希尔官方网站 。它有5种不同的时钟接口,您可以根据自己的选择进行选择。除此之外,我们还内置了秒表和计时器警报。

细节

这是 PicoClock,一个用于 RPI Pico 的微型数字时钟屏蔽。除了盾牌之外,您还需要一个合适尺寸的电池,这就是制作这个项目所需的硬件。

在这个屏蔽的一侧,我们有 DS3231 实时时钟 IC,然后我们有一个基于 HT4928s 电池管理 IC 的锂离子电池充电威廉希尔官方网站 。以及用于连接电池和蜂鸣器的 JST 连接器。

 

pYYBAGNy3lKAGxNbAAOBqab20kw045.jpg
 

 

在 PCB 的另一侧,我们有一个 0.91 英寸的 oled 显示屏和两个按钮。

 

poYBAGNy3lWANyA4AAI9iPUPxAo080.jpg
 

 

Pico 支持 micropython 和 C。我使用 DS3231 RTC 和 SSD1306 oled 的基本示例代码在 micropython 中制作一个简单的时钟。但是图书馆的功能非常有限,所以我对 microphthon 的了解。所以我无法对其进行太多修改

 

pYYBAGNy3liARGu1AAHsThgwmLc376.jpg
 

 

因为现在我们也有官方的 arduino 支持,所以我切换到 arduino IDE 进行编程。首先,您需要在 IDE 上安装 Raspberry pi pico board 包。代码相当大,所以我会尝试解释它是如何工作的。

 

poYBAGNy3luATyFGAAF4hoVuAaM027.jpg
 

 

因此,当显示屏打开时,我们会看到这个 12 小时格式的时钟。还有 5 个其他时钟接口,您可以选择其中任何一个作为默认值。按右键更改不同的模式。

 

pYYBAGNy3l6AUZ1QAAL9YYlEcaI743.jpg
 

 

如果您按下左侧的按钮,它将转到此模块的其他功能。比如秒表。现在通过单击右侧按钮,它将开始计数。如果再次按下右键,它将显示圈速。按左键重置手表。

 

poYBAGNy3mGAUKSKAAJ5FvBWu-I505.jpg
 

 

下一个功能是定时器时钟。按右键设置定时器。按左键更改光标,按右键更改参数。第一个位置是返回,下一个是设置秒,然后是分钟,然后是小时。最后,当您看到设置计时器的框时。它会开始倒计时。当计时器结束时,您将在屏幕上看到终止消息,并开始响起警报音。

最后一种模式是您可以打开或关闭声音的设置,它将使蜂鸣器静音。您还可以看到电池电压水平。如果您想关闭显示屏,您可以同时按下两个按钮。按下重置按钮将其重新打开。这就是这个项目的大部分内容。

 

pYYBAGNy3mOAY-gmAABLENtXheg196.jpg
 

 

最后,我在 fusion 360 上为这个模块设计并 3D 打印了一个桌面支架。

 

 
 
 
poYBAGNy3mWAEHVzAAGLX0_MUaU231.jpg
 
1 / 2
 

 

这是一个两部分的模型,可以按扣合在一起。这就是我制作自己的便携式数字时钟的方式。您可以在 github 存储库中找到有关此项目的所有详细信息。

 

 

 


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

评论(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:'微时钟开源设计',//标题 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);