×

如何设计和操作声级计

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-27

胡秋阳

分享资料个

描述

声级计是一种能够表示在给定时间出现在某个地方的“噪音水平”的设备。它由一个麦克风和一个将声波压力转换为电信号的电子换能器组成。然后将电信号的电平转换为特定的标准值,即分贝。在目前的标准中,20 dB 对应耳语,30 dB 对应乡村背景噪音,45 dB 对应谈话,60 dB 对应繁忙公共场所的噪音等等。

现在,我们的 Seeeduino Wio 终端具有内置麦克风、模拟输入、ADC 转换器、显示器和编译器作为标准:那么为什么不尝试构建自己的声级计呢?

该项目

带有 Seeeduino Wio 的声级计通过使用 USB-C 电缆将 Wio 连接到电源完美工作,但显然需要便携式电源系统才能在现场操作。

SeeedStudio 生产的 Wio 终端有一个集成麦克风,连接到威廉希尔官方网站 板的模拟引脚,定义为 WIO_MIC。此引脚上的值可通过命令访问

值 = 模拟读取(WIO_MIC);

并给出 0 到 1023 之间的整数答案。

然后可以使用经典命令将此响应转换为分贝 (dB):

dB = 地图(值,0, 1023, 0, 100);

显然,WIO 随附的麦克风不具有高保真灵敏度,在获得有效读数之前,我们必须执行适当的校准,本文稍后将对此进行描述。

读数是通过移动平均系统获取的,它允许丢弃峰值并使返回的值更加均匀。

此时,将转换为分贝的计算值传递给下一段中描述的图形表示例程就足够了。

该软件

该软件可通过 GitHub 免费下载,需要 SPI 库与集成显示交互。

我们首先定义相对于窗口大小的常数,用于计算移动平均值,以及图形例程所需的一些变量。

该程序广泛使用了 Wio终端提供的 TFT_Meters 示例代码我们将仪器的图像旋转了 90 度并修改了它的测量值,然后我们消除了线性仪器,并在底部添加了一个精灵,表示计算的 dB 的浮点值。

setup() 部分初始化显示,定义景观表示,初始化与计算的声压值相关的精灵,第一次绘制仪器并更新计时器。

loop() 部分只是调用委派的函数来更新显示。

仪器校准

如上所述,集成在 Wio 终端中的麦克风没有出色的灵敏度。因此,有必要设计和应用基本程序的一系列校正测试以获得更接近现实的结果,通过将 map() 函数中存在的值范围从 0..1023 减小到范围更窄。从后续测量我们发现ADC读取的值一直高于150,低于850。因此我们使用了专业的声级计,测量了不同情况下存在的噪声(dB)和转换器报告的电平我们的Wio。最后,我们在数据之间创建了一条线性回归线,并应用了映射公式的下游系数。

结果令人兴奋:仪器的指针非常忠实地再现了专业仪器发现的峰值,而数值读数则表示移动平均值。由于插值,较低的精度保持在 30 dB 以下和 70 以上。需要补充的是,仪器还受到热漂移问题的影响:WIO_MIC 端口读取的值随着时间的推移而趋于减小。

项目扩展

Seeeduino Wio 终端具有 3 个软件可编程按钮。因此,如果您想添加不同的数据收集系统(例如,通过扩大计算移动平均值的窗口,或通过作用于调节两次连续读数之间的间隔的计时器),在该程序:

pYYBAGNtoC6ATqKJAAEDcu97LBs146.png
用户键的定义
 

最后的考虑

一旦你吸收了创建图形界面的功能,项目就显得非常简单:

  • 获取模拟值,
  • 将值转换为适当的格式
  • 将值传递给图形例程。它是意大利语和英语的隐藏字幕

     

     

     


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

评论(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);