×

基于Raspberry Pi Pico的万圣节通话时钟

消耗积分:0 | 格式:zip | 大小:14.68 MB | 2022-12-22

香香技术员

分享资料个

方案介绍

本方案是基于 Rpi Pico 的万圣节通话时钟,是一个万圣节会说话的时钟,每点钟播放一次声音。只需要几个外部组件即可。

概念:
市场上很多音乐挂钟都没有改变原声的可能性。可以使用嵌入式系统构建具有该功能的时钟。但是选择哪一个呢?选择 Raspberry Pi Pico 有以下三个原因:

无需为初始固件下载安装软件
板载内存 2 兆字节的闪存可以存储一定数量的声音,而无需外部存储器
可由 2 节 AA 电池供电,无需额外组件
Rpi Pico 在其最低功耗模式(深度睡眠)下消耗约 1.6 mA。看起来不多,但对于电池供电的威廉希尔官方网站 来说太高了,因为它们会在大约两个月内耗尽。因此,添加了可以完全关闭威廉希尔官方网站 板的外部电源威廉希尔官方网站 。之后,功耗降低到 70 uA,因此电池可以使用一年。

Rpi Pico 充当声音存储和播放器。为了显示时间并产生 O'clock 信号,使用了带触发器的石英钟机芯。结合这两个元素,一个会说话的声音时钟诞生了

主要特点:

  • (几乎)相同应用程序的两个版本:一个在CircuitPython 中开发,另一个在C/C++ SDK 中开发。
  • 与最常见的操作系统兼容。
  • 无需为初始固件下载安装应用程序
  • 无需重新编译代码(在用 CircuitPython 开发的应用程序中)来更改声音
  • 使用一对 AA 电池可在待机模式下使用长达 3 年。
  • 易于采购和焊接组件

软件:
上电后,Rpi Pico 将连接到电源威廉希尔官方网站 的 GPIO 置于低电平以保持其通电,然后决定播放哪个文件,声音结束后,将高电平置于 GPIO 断电皮科。此外,读取光传感器以在黑暗(夜间)时不播放声音。

声音文件按顺序播放,每次开机时一个一个。指向下一个文件的指针存储在非易失性存储器中,请小心修改程序以保持最少写入。

SDK C/C++ 版本的特点:
要播放的声音必须先转换为 WAV 格式 16 位单声道 @ 44100 Hz,然后在编译之前转换为 C arrays[]。该应用程序通过数字输出和中断使用 PWM 来播放声音。

程序在通电后几乎立即开始执行。目前应用程序的主要缺点,它只支持较大的.WAV文件,并且不重新编译代码无法更改

CIRCUITPYTHON 版本的特点:
要播放的声音必须转换为 MP3 单声道格式,该应用程序使用 audiomp3 和 audiopwmio 模块从数字引脚 (PWM) 输出音频。这些文件存储在CP提供的文件系统中,因此修改它们很简单,只需拖放即可。

对于相同的文件大小,MP3 文件可以比 WAV 多存储大约 10 个声音时间,但是 CircuitPython 运行时执行需要超过一秒钟的时间,因此对于任何类型的最终应用程序来说可能都不是一件好事

硬件:
外部组件是三种不同功能之一的一部分:

On/Off : 威廉希尔官方网站 由一个 MOSFET 组成,Drain 端连接到 3V3_EN,Source 端连接到 GND。连接到栅极的是 2 个元件:接地电容器和连接 V+ 的电阻器。该威廉希尔官方网站 按以下方式工作:

  • 步骤 1:电容器充满电,打开 MOSFET 并将 3V3_EN 接地,完全关闭 Rpi Pico 板
  • 步骤 2:通过短暂闭合时钟运动的触点、关闭 MOSFET 并打开 Rpi Pico,使电容器快速放电。上电后要做的第一件事是借助低电平的 GPIO 输出保持电容器放电。
  • 步骤 3:播放声音时,GPIO 保持低电平。一旦声音结束,GPIO 输出变为高电平,因此 MOSFET 再次打开,关闭 Rpi Pico 直到下一次开关闭合

On/Off : 威廉希尔官方网站 由一个 MOSFET 组成,Drain 端连接到 3V3_EN,Source 端连接到 GND。连接到栅极的是 2 个元件:接地电容器和连接 V+ 的电阻器。该威廉希尔官方网站 的工作方式如下:第 1 步:电容器充满电,打开 MOSFET 并将 3V3_EN 接地,完全关闭 Rpi Pico 板第 2 步:通过时钟运动触点的短暂闭合,电容器快速放电,关闭 MOSFET,然后打开 Rpi Pico。上电后要做的第一件事是借助低电平的 GPIO 输出保持电容器放电。步骤 3:播放声音时,GPIO 保持低电平。一旦声音结束,GPIO 输出变为高电平,因此 MOSFET 再次打开,关闭 Rpi Pico 直到下一次开关闭合
音频放大器:单级、单 NPN 晶体管为小型 8 欧姆扬声器供电。还有一个输入 RC 低通滤波器来平滑由 PWM 输出引起的噪声。

日/夜检测:可见光传感器,避免在夜间播放声音。连接到 ADC 引脚
板组装:
Rpi Pico、扬声器、光传感器和时钟触点可以直接焊接到 PCB 上以获得非常小的高度轮廓,或者添加排针和母​​插座以获得更灵活的选择。

单面板可以在家蚀刻。有一些免费的 gpio 垫用于实验以及角落附近的安装孔

要制作挂钟,请选择由塑料或木头制成的盘子或圆盘,其直径足以隐藏时钟机芯和音板。修复所有电子元件,然后是 LED 灯等装饰配件。

对于小时调整,取出所有电池和时钟指针(时、分、秒)。慢慢转动时钟调节旋钮,直到听到“咔嗒”声。将所有时钟指针指向 12 点钟。装上电池。按下板上的瞬时按钮开关可以改变声音。

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

评论(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:'基于Raspberry Pi Pico的万圣节通话时钟',//标题 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);