×

如何构建一个能够测量空气质量的设备

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

世态薄凉

分享资料个

描述

介绍

在这个项目中,您将学习如何构建一个能够测量空气质量的设备,专为室内使用而设计。它以交互方式在 5 英寸触摸屏上显示措施,并提供有关如何改善空气质量状况的反馈。它使用许多传感器:

这些传感器连接到一台运行 Android Things OS 的小型计算机,带有屏幕和 WiFi 连接。这个项目的制作方式应该很容易根据您的需要进行调整,并添加各种改进,如在线连接或额外的传感器。

为什么要测量室内空气质量?

大多数现代应用都侧重于测量室外空气污染。这确实是非常重要和有用的,然而人一生中的大部分时间都是在室内度过的。这也是一种环境,人们可以使用各种空气净化仪器来影响气候。

室内气候的负面变化往往受到正常人类行为的影响。例如,在通风不良的拥挤空间中,CO2 水平会增加,做饭或吸烟时 PM 水平会增加。

这表明更需要监测这些空气质量水平并能够及时做出反应。

在开始之前

除了硬件组件部分中的列表之外,下面的部分应该更深入地了解我在项目中使用的硬件组件。

传感器

我在硬件组件中提到了 SparkFun 传感器,但为了完美地适应 3-D 设计的外壳,您需要在下图中获得带有分线板的特定传感器。

 
 
 
poYBAGOIKU-Ae_VYAACpmNmEVrw188.jpg
 
1 / 3BME280
 

当您收到传感器时,BME280 和 CCS811 很可能带有与分线板分离的接头,您必须焊接这些接头。这是相当容易的工作,如果您不确定自己在做什么,请按照本教程进行操作确保在传感器朝外的情况下焊接它们(请参见下一节中的图片)。

螺丝

硬件组件部分提到了 M2.5 螺丝。更具体地说,您需要直径为 2.5 毫米、长度为 5 毫米的沉头机用螺钉。

电缆

您必须专门获取硬件组件部分中提到的电缆。这是因为它需要适合 3D 打印的外壳,而在当前设计中几乎没有公差。

跳线

可能有多种不同版本的跳线可供您使用,但请尽量选择末端带有最短黑色塑料保护套的跳线。我有一些有更长和更短的版本,而更长的版本在关闭时似乎对后盖有点太紧。

第 1 步:将传感器连接到主板

我们将从使用跳线开始将所有东西连接在一起。您可以在此处按照威廉希尔官方网站 图进行操作:

pYYBAGOIKVGAI-_RAAHa3IIg5E0105.png
威廉希尔官方网站 图:BME280、CCS811、SDS011接IMX7
 

它显示 Raspberry 而不是 IMX7,但引脚相同。如果您需要有关将传感器连接到正确的 IMX7 引脚的参考资料的帮助,您还可以使用此引出线图和随附的原理图。

这一步应该是最直接的,如果你连接错了,你会在下一步中发现它。要记住的一件重要事情是,您必须将 SDS011 的 RX 线连接到 IMX7 的 TX 线,反之亦然。这是因为当一个设备传输 (TX) 时,另一个设备接收 (RX)。你应该得到这样的结果:

 
 
 
poYBAGOIKVeAczBJAAkacwlGJvM752.jpg
 
1 / 5
 

在下一步中,您将安装软件并测试是否一切正常,因此现在还要连接屏幕和 USB-C 数据线。您稍后需要断开它们,以便能够将所有东西放入 3-D 打印的外壳中。

第 2 步:安装软件

IMX7 计算机预装了开箱即用的 Android Things 操作系统。将 USB 电缆插入 IMX7 和您的计算机。当 IMX7 启动时,您应该会看到一个屏幕,告诉您设备的名称、您所连接的网络等。如果您没有连接到任何网络,您现在可以这样做,但是对于这个项目,互联网连接不需要。

在继续执行后续步骤之前,请确保您的计算机上安装了 Android Studio。

如果 IMX7 机器上安装了任何东西,您需要在继续之前将其卸载。这可以(在 Windows 上)通过访问C:\Users\,\AppData\Local\Android\Sdk\platform-tools>您的 cmd 并键入adb root以获得对您的 IMX7 的根访问权限来完成,然后adb shell,cd data/appls. 然后你会看到机器上安装的所有包。如果有,请复制应用程序名称 - 这是“-”之前的所有内容。输入exit,然后输入adb uninstall 该名称是您之前复制的名称。

转到您的 Android 工作室并从版本控制中检查该项目。您的 Android Studio 应该会自动检测连接的 IMX7,您应该能够通过按“运行”在其上运行项目。当您执行此操作并且项目成功运行时,即使您现在将其从计算机上拔下,它仍将安装在计算机上。

确保当传感器信息显示在屏幕上时,它看起来类似于以下之一:

 
 
 
pYYBAGOIKWKAfHnyAB7bG635en4999.jpg
 
1 / 3
 

CO2 和 TVOC 值可能会跳跃一段时间,但最终它们将开始分别显示高于 400 和 0 的值。

如果某些东西没有按描述工作,请重新连接传感器,重试并观察 Logcat。

在这里,您还可以调整不同空气质量水平通知的阈值。只需Constants.kt在 Android Studio 中更改文件中的值。

确保一切正常后,我们可以在最终组装前对外壳进行 3D 打印。

第 3 步:3-D 打印

对于此步骤,您将需要一个盖子文件和一个来自附件的案例文件。如果你不想编辑任何东西,你可以下载这些文件并将它们导入到你的 3-D 打印机使用的切片程序中。我用 CraftBot 打印过,所以我用他们的CraftWare切片软件制作了一个包含打印机说明的文件。

如果您不确定从哪里获得 3D 打印机,请检查您附近是否有FabLab 我很幸运在我附近有一台 3D 打印机,它们对一切都非常有帮助!

poYBAGOIKWeAHUuLAAcRgJV_5fw326.jpg
完成的 3-D 打印
 

您可能会注意到附件中的 3-D 设计与我打印的略有不同。我最初在设计中犯了一些错误,不得不使用 Dremel 工具磨掉一些多余的塑料。这应该已经在最新的设计中得到修复,因此这个过程对您来说应该会更顺畅。

我还没有打印这个新版本,所以如果你打印了并且发现了更多需要改进的地方,请在评论中分享。我试图改进的一件事是流向 BME280 和 CCS811 传感器的气流,因为它们感知空气质量变化的速度非常慢,而且 IMX7 存在一些不需要的热传递。

如果可以的话,用你喜欢的灯丝颜色 3-D 打印,我只有白色灯丝,所以我后来将打印件喷漆成黑色。

 
 
 
pYYBAGOIPxWAWO_3AAyesnmKb84073.jpg
 
1 / 2彩绘 3-D 打印正面
 

您的印刷品很可能会为悬垂部分提供支撑,因此请清理这些并在需要时打磨掉多余的塑料。现在您应该准备好将所有东西组装在一起。

第 4 步:总装

首先将屏幕放在机箱前部的开口中。使用胶水或胶带将其固定到位(取决于您必须再次拆卸设备的可能性)。现在,放置天线并将其拧入。

poYBAGOIPxyAJDRqAA6UCRvEzRE256.jpg
屏幕和天线
 

插入插入 USB 数据线的 IMX7。屏幕的两个连接器插入起来有点棘手,因此请耐心等待并小心不要弄坏它们。插入屏幕后,用 3 个螺丝固定 IMX7,这就足够了。

将 BME280 和 CCS811 放在机箱角落的指定位置。如果宽度不合适,则需要从侧面打磨一下。把它们拧进去。

pYYBAGOIPyGAbA3dAAtuFsYOahU152.jpg
IMX7、BME280 和 CCS811
 

现在您已准备好放入 SDS011。用 3 个螺丝固定。

poYBAGOIPyiACETsAA0uUTERYHA554.jpg
SDS011
 

盖上盖子并拧紧。

结论

在理想情况下,您现在将设备的 USB 电缆插入电源,一切都应该正常工作。这有可能不会发生,在这种情况下,请尝试回头找出问题所在。仔细检查是否一切都正确连接。

在屏幕上,您可以选择更改测量间隔。默认为 1 秒。您还可以查看有关每个测量值含义的更多信息。

构建此设备后,我鼓励您根据自己的需要和愿望对其进行修改。添加在线连接、更多传感器、图表、空气质量预报……在评论中分享您的体验!


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

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