×

Arduino智能植物孵化器

消耗积分:2 | 格式:zip | 大小:0.12 MB | 2022-10-28

李微波

分享资料个

描述

为什么要做这个项目?

像许多人一样,我的父母在早春用种子种植植物。当种子发芽时,我的父母把它们放在外面的一个盒子里,上面有玻璃,让幼苗获得所需的阳光,同时保护它们免受寒冷和风的侵袭。

婴儿植物留在盒子里,直到外面足够温暖,它们自己会没事(大约一个月),然后它们被种植在花园里。

问题是植物喜欢相当狭窄的温度范围,并且盒子可以在晚上从 50 摄氏度一直下降到零度以下。所以我的父母经常到外面检查他们并保证他们的安全。

大多数晚上,我的父母都会把所有的植物都带回屋里,以确保它们安全。整个事情是非常劳动密集的

披露:我从 Arduino 收到了一个免费的Arduino Oplà IoT 套件来参加这次比赛。

我的解决方案

我的计划是拿一个带玻璃盖的“哑”木箱,让它调节自己的温度。

我还希望我的父母能够知道这些植物是好的,而不必外出。Arduino 云(带有随附的应用程序)和 MKR IOT Carrier 为我提供了很多选择,让他们知道植物没有外出就可以了。

最后,因为我的父母住在离我超过 100 公里的地方,如果在他们开始使用系统后需要调整系统,我很高兴能够执行远程代码更改。

这是智能植物孵化器功能的演示:

系统总览

我使用两个温度传感器,一个在盒子里,一个在盒子外面。这些是我的输入。

我的 Arduino 会查看这些值,并可以根据需要打开连接到风扇的继电器或连接到电热源的继电器。

温度读数确定系统如何响应:

  • 热量箱内低温,外低温
  • 风扇箱内温度,外温度
  • 风扇箱内温度,外温度
  • off :箱内温度高,温度
  • off : 箱内温度正常

这是整个项目的样子:

poYBAGNYvHuAekvqAADPahcaxOc376.jpg
 

(注意:我使用纸板来加速原型制作,但这不会持续到外面。所以我计划将显示器和其他硬件移动到耐候性外壳中。)

用户界面

当我构思这个项目时,我想到了一个非常精致的用户界面,但我决定做一个最简单的东西,让我的非技术父母尽可能容易地使用它。

设计目标:

  • 尽可能简单
  • 可以从至少 10 米的距离看到孵化器的状态(所以我的父母可以从屋内的窗户检查它)
  • 显示知道系统正常运行所需的最少信息
  • 没有模式或关闭按钮。它要么打开并自动调节盒子内的温度,要么你拔掉它(我不希望我的父母让系统进入不同的模式,然后植物因为没有达到他们的预期而死亡)

用户界面如下所示:

poYBAGNYvH6Aer0RAANgPRcKCKA084.jpg
 

LED 指示灯:

我在 IOT 载体上使用了两个多色 LED。它们指示盒子内的温度以及系统为管理该温度而采取的措施。我的父母将使用这些 LED 在不出门的情况下检查盒子。

温度指示灯 LED (左侧 LED)

显示盒子的内部温度:

  • 错误 - 粉红色(如果温度传感器返回无效值可能会发生)
  • 太冷了 - 蓝色,闪烁
  • 冷,但不危险 - 蓝色
  • 好的 - 绿色
  • 温暖但不危险——红色
  • 太暖和 - 红色,闪烁

动作指示灯 LED (右侧 LED):

显示系统试图采取什么措施来调节盒子内的温度:

  • 错误(无操作)- 粉红色(如果温度传感器返回无效值可能会出现)
  • 冷却 - 蓝色
  • 加热(通过风扇或电阻加热) - 红色
  • 无动作 - 绿色

展示:

显示屏显示以下信息:

  • 内部温度
  • 室外温度
  • 当前动作
  • 重新计算动作之前的时间(以秒为单位)(动态调整以防止超过目标温度)

Arduino物联网云仪表板:

同样,我的目标是让一切尽可能简单。

这是它的样子:

pYYBAGNYvIGAflKYAADNkkjgeVQ135.png
 

当前的内部和外部温度显示在仪表上。

历史温度显示在时间序列图上。如您所见,尽管外面的温度波动,但内部温度被加热器保持在 22C 左右。

另一个小部件显示了我可能需要远程诊断问题的调试信息。

演示模式

您可以使用串行监视器将系统置于“演示模式”,您可以在其中覆盖来自传感器的温度。

这使您可以使系统进入实际传感器难以做到的状态(如内部 -50C 和外部 +50C)并查看它的作用。

此模式仅用于开发和调试。

建造

MKR-1010 和物联网载体:

IOT Carrier 使用了 MKR-1010 上的大部分引脚。我唯一可以确定载体不会干扰该项目所需的 I/OI 的唯一方法是将 MKR-1010 引脚上需要的引脚与载体隔离。

我在 MKR-1010 和我想在板之间连接的引脚的载体之间插入了母头。板之间没有母头的引脚是隔离的。您可以在下图中看到引脚 A2-A6 被隔离:

pYYBAGNYvIOAbbejAAFWyxJCPyM633.jpg
 

D7 在电路板的这一侧被隔离(在下面的照片中看不到,但我在这一侧的 D7 处从母头上折断了引脚)。

pYYBAGNYvIqAQYkMAAFhdBEPJzg307.jpg
 

我将控制项目所需的电线焊接到公头上,然后将它们插入 MKR-1010。

电源、继电器和接线端子:

我整理了应该在盒子外面的设备,如下图所示:

poYBAGNYvI2AKLEUAAHR3QlCxqw173.jpg
 

接线端子

MKR-1010 的电线连接到接线盒,这样我就可以将系统拆开进行运输和存储。

原理图部分向您展示了如何构建此部件。

这是所有电线的作用:

pYYBAGNYvI-AZwo1AAGjJb16rZU538.jpg
 

(注意:电路板背面有从左到右的走线,将接线端子连接在一起。有关更多信息,请参见原理图。)

温度传感器:

盒子里面有一个温度传感器,盒子外面有一个。它们的位置使太阳永远不会直接照射在它们上并歪曲读数。

这是其中一个温度传感器的外观:

poYBAGNYvJKAME9qAAEY8LG_fRY324.jpg
 

我更喜欢将温度传感器安装在我制作的小板上,这样我就可以轻松更换它们或恢复它们以用于另一个项目。但是将它们直接焊接到线束上就很好了(只是不要过热)。

(注意:虽然这些传感器非常好用,但它们并不总是给出相同的读数。所以,我在面包板上设置了 6 个,并为这个项目选择了两个在一定范围内读数最接近的温度。)

冷却系统:

风扇位于盒子的长端。这是它的样子:

pYYBAGNYvJWAfh55AAETVgrRdRs188.jpg
 

风扇将空气吹出盒子。

我可以在盒子外面的风扇上加一条柔性塑料条,以防止风扇关闭时空气进出盒子。风扇打开时会将塑料推开。

(注意:我还没有在盒子的另一端添加通风孔。在我在盒子上打更多孔之前,我想看看它在实际操作条件下的性能如何。可能是盒子周围和之间漏气盒子和玻璃本身可以提供足够的通风。)


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

评论(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:'Arduino智能植物孵化器',//标题 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);