×

土壤湿度传感器开源项目

消耗积分:2 | 格式:zip | 大小:0.01 MB | 2022-12-27

刘杰

分享资料个

描述

描述

谁没做过?好吧,我确实试过一段时间了,但我不喜欢和没有回答的人/事交谈......

哦,不要忘记每年离开几周的困境。谁在照顾植物?

那么好吧,Snips,植物,水,智能花盆的创意诞生了!我决定不只做一个会说话的花盆,而是将水泵、水位传感器、湿度/温度传感器、紫外线传感器集成为土壤湿度传感器。

这个想法很简单。在水箱中放一些水,盖上盖子,将植物放入其中,将土壤湿度传感器插入土壤并放置水管。将您的锅插入其中一个插座,让魔法开始。植物会对你的“嘿植物”唤醒词做出回应,起初,作为一个新生儿,它会问你一些关于她自己的细节,主要是她是什么。这些信息将使花盆独立,但也会让植物在口渴、需要或多或少的阳光、寒冷和温暖时提醒你。

我决定在锅中集成 5 个分立的 LED,这样询问水位时不仅可以通过声音而且可以通过视觉来回答。RGB LED 最好的部分是它还会显示温度、湿度和光照水平!

该项目旨在成为 Snips 主单元的卫星,以降低成本和让多个罐都运行 Snips 全引擎的麻烦。作为卫星,您可以轻松地将它们连接到您的主设备以建立集中式工厂数据中心!

我们走吧!

为此,您需要一个主单元和您想要的任意数量的卫星,一个用于您想要连接到系统的每个植物。

让我们从简单的开始,即主机。你甚至不需要扬声器或麦克风,它只是用来计算一些东西。在你的 SD 卡上刷入最新的 raspbian,您知道如何在没有键盘和屏幕的情况下配置 Raspbian,不是吗?

在 Snips 上创建一个帐户:

创建一个新的助手。选择名称,但保留与该项目相关的名称:“我的花”、“我的植物”或类似的名称是个好主意。

选择一种语言。请注意,目前该项目仅完全支持英语,并预先实现了法语。

点击添加应用,搜索我的“剪我的花”。就这样!哇,用 Snips 创建助手这么简单!

您将需要 SAM 来配置您的树莓派,但别担心,这很容易。有许多不同的操作系统,所以我不会完成这个工具的安装,按照本指南执行第 6 点,您应该已经配置好树莓派和助手,可以开始使用了!在进行工厂安装之前,我们需要配置一些东西。

在主机上配置 Snips

使用您选择的工具(在 Windows 上, Kitty.exe是个好主意...),通过 ssh 连接到您的树莓派主机。如果你没有配置你的 raspberry pi headless 我希望你没有忘记在启动分区上添加一个名为“ssh”的空文件?

sudo nano /etc/snips.toml

如果你的主机只用于你的花并且没有任何麦克风和声音,你可以在“[snips-audio-server]”下禁用它们的输入

disable_playback = True
disable_capture = True

更重要的是现在配置卫星。“[snips-asr]”“[snips-hotword]”下你应该有一行写着“#audio = [”+@mqtt“]” 这是我们为主要单位声明卫星的地方。这是我们要添加植物的地方!因此,假设您要监控一棵“龙树”。这颗卫星按道理应该叫做“龙树”,所以你可以直呼其名吧?我们开工吧!哦,还有,如果植物名称中包含空格,请将其替换为下划线!

audio = ["dragon_tree@mqtt"]

不要忘记删除行前面的#!现在我只实现了龙树支持。您可以在plantsData.json文件中添加自己的植物

好的,我们完成了主机的配置。按 CTRL+X 并按 Y 表示是,然后输入以确认要保存的文件名。重启剪辑:

sudo systemctl restart snips-*

您需要我的应用程序才能在主机上运行,

使用 sam 将其部署到您的主单元。

配置我们的工厂

我们有了主单元,现在我们需要为我们的工厂安装更基本的 Snips!

遵循与主机完全相同的 raspbian 安装。一旦闪烁,连接你的树莓派并通过 ssh 连接到它。

我已经让你成为一个自动安装程序,它将负责更新你的安装,下载并安装 snips-audio-server,安装你的扬声器(或 4 或 6),下载并安装 flower 软件并配置 Snips!

wget http://bit.ly/snipsFlower -O snipsMyFlower_download.sh

这将下载安装程序。你需要执行它。它会问你主要单位的IP地址以及工厂的名称。还记得安装主机时使用的那个吗?

sudo chmod +x snipsMyFlower_download.sh
sudo ./snipsMyFlower_download.sh 

如果一切按计划进行,它应该下载所需的文件、安装所需的库并为服务创建一个链接以自行启动。

让我们检查一下是否一切正常:

sudo systemctl status snips-*
sudo systemctl status snipsMyFlower

这两个命令现在应该以绿色返回你的运行状态,没有错误。

很好,我们已经启动并运行了,软件方面!如果您通过说“Hey Snips”来呼叫您的植物,它应该会播放一点检测声音。拔掉你的树莓派零。硬件时间?

五金部分

我想当你试图让软件部件运行时,你的 3D 部件打印对了吗?我不能告诉你太多关于它们的信息,打印机是如此不同。我可以告诉你的是,我在 0.2 毫米层打印了所有东西,你希望水箱是防水的。一种解决方案是使用一些 X3C 3D 打印环氧树脂涂层,但这取决于您。

 
pYYBAGOpeFiALI0dAAnfgpgfr-Q724.jpg
这部分的高度超出了我的打印机规格 5 毫米!
 

 

关于 PB 部分,我已经包含了 gerber 文件。这取决于你,自己制作它们,使用迷你数控或用化学品蚀刻,甚至订购它们和最后的解决方案,让我为你制作它们来对抗一些东西。基本上有两个迷你PCB。所有接线的接口和一个用于打开和关闭泵的小 mosfet 以及用于水位的 PCB。你可以不用第一个,但你需要读取水箱中的水位。

 

 
pYYBAGOpeG-AStGbAAYelInI4xY168.jpg
 

 

 
poYBAGOpeJSAcXS1AAniZmJdiW4427.jpg
你想用一些环氧塑料填充蚀刻线,这样水就不会停留在痕迹之间
 

 

打印和蚀刻完所有内容后,开始组装电子部件:

 

 
 
 
 
pYYBAGOpeLuAQc1yAAcEISqRIlc565.jpg
 
1 / 6
 

我有一个没有标题的 pi 零(太好了,请告诉我你在哪里买的!),这是扬声器 2 所需的引脚: https ://fr.pinout.xyz/pinout/respeaker_2_mics_phat

  • 对于水传感器,您需要在引脚 [13、15、16、22、29、36] 上连接一些电线
  • 对于泵,您需要销 [37]
  • 对于 LED,我们需要 [19. 23] (SPI)
  • 对于传感器,我们需要 [3, 5] (I2C)
  • 对于整体,我们需要电源和接地:[1, 2, 6]

在陷入混乱之前:

 
pYYBAGOpeOmAA8zIAAmSchLfb8Y313.jpg
 

清洁一点……相信我,这对您与伴侣的关系更好……

取下您的微型 USB 电源并切断 USB 端口。用电线穿过锅底并剥去电线,这样你就可以压接它们并添加杜邦外壳。将电源连接到 PCB 并将整个结构放入锅中。

 

 
 
 
 
pYYBAGOpeP2AVVa1AAdl3LKDHvM775.jpg
 
1 / 3
 

我们需要构建一个灵活的 LED 条纹,这就是为什么我使用 DotStar LED 并将它们焊接在一起的原因:

 
 
 
 
poYBAGOpeQqAQLo9AAU5rYSLhs0772.jpg
 
1 / 2
 

它基本上是将它们菊花链在一起,并使用一些小金属线沿着它们运行接地和电流。以下是这些 LED 的原理图:

https://www.play-zone.ch/media/catalog/product/cache/3/image/650x/0ae87949542eeaf1748dd8a48e1c5f15/a/p/apa102c.jpg

将 LED 放在 LED 支架内并将它们粘在您认为合适的任何地方,但在锅内,LED 穿过锅壁!是的,我正在使用胶带,因为我无法为这种 LED 结构想出一个好的解决方案……

 
pYYBAGOpeRiAMjLJAAVw5iqFKLs798.jpg
 

 

它不是在所有图片上,因为只是在之后才发现,而是将 LED 线绞在一起并绞合泵线并使它们彼此尽可能远!泵会产生大量干扰 LED 的电噪声!我最终在泵线上添加了 470uf 电容器和电阻器:

 

 
 
 
 
pYYBAGOpeSqAcmQnAAYAkx2TtBE365.jpg
 
1 / 2电阻在+ 侧。如前所述,将这些电线尽可能多地拧在一起
 

 

将水的塑料管穿过印刷管并穿过支撑孔。传感器线也穿过该管。其他电缆没有……因为……他们给我发了一根粗的 i2c 线,其他线没有地方了。有待改进的地方!

 

 
pYYBAGOpeUCAfJfYAAdR_ol5pg8574.jpg
 

 

将水箱放入锅中

 
pYYBAGOpeV-AUq3pAAb73j06-Cw065.jpg
 

将支架放在水箱上方

 

 
pYYBAGOpeW2ANLzTAAYA96woXbI670.jpg
 

好的,停下来,我们就到这里为止。在放置植物之前,我们应该添加一些水。但是为此,该程序可以为您提供帮助!

第一次开始

确保你的主机已插入并且 snips 正在运行它以及我的应用程序。

现在插上花盆,等待它开机。罐子应该播放一点 led 动画,一个蓝色的条被填满。

 

 
pYYBAGOpeYeAfWbuAAjRkxUTcb0039.jpg
 

 

紧随其后的是一个蓝色 LED 指示灯,您的植物会告诉您它缺水了!

 

 
pYYBAGOpeZuAfZwNAAYyRiSf2M0811.jpg
 

 

告诉你的植物你想给它的水箱加满水,然后按照她的指示去做。确保来自水泵的水管实际上对准了支架!当它得到水时,植物会尝试给自己浇水!此时,工厂将开始记录数据并在超出范围时提醒您:

  • 水分:太高/太低
  • 温度:太高/太低
  • 光:太高/太低(过去 24 小时内)
  • 水:水箱空了

植物只会发出一次警报,但会保持 LED 条处于警报状态

 

 

 

把你的植物放在上面。放置并连接饮水机并放置土壤传感器!你成功了!完成了!

 

 
 
 
 
pYYBAGOpecCAD3ynAAt6U59l1Dg998.jpg
 
1 / 2
 

支持的意图

  • 这是怎么回事?如果您的工厂正在显示状态 LED,您可以随时询问她出了什么问题。
  • 告诉我你昨天的土壤湿度。询问记录的数据。
  • 你的水分怎么样?请求即时遥测数据。
  • 我想给你的水箱加满油。如果你想给水箱加水,你最好先问她,然后按照她的指示去做!
  • 清空你的坦克!确保您已断开饮水机,并且水管对准锅外,最好是水槽内。
  • 喝点东西告诉你的植物自己浇水。她会自动完成,但您可以随时要求更多 :) 小心不要吸引她!

下一步是什么?

好吧,这只是一个概念,如果给予更多的爱和关怀,它会变得更大。如果您有想法,请随时与我联系。如果您对代码有改进,请随时在 github 上进行分叉。尽情享受吧!

追溯

现在截止日期到了,这是我对项目本身的小回顾。

  • 我会做些什么不同的事情?我肯定会花更多的时间。我只允许自己整整一个月。我可能会组队,不确定,我有点像一只孤独的狼
  • 我会重新设计吗?是的,绝对是。没有足够的地方放整个电子设备。是的,有几毫米的空间也没什么坏处。我肯定会重新考虑布线
  • 多氯联苯呢?我会让他们完全不同。这只是从想法到概念/原型的演变。它们需要与设计一起重新绘制
  • 代码?好吧,代码在不断发展,有些部分由于一些随机和奇怪的错误而停滞不前。所有主要功能都运行,不要害怕,但一些较重的功能不会返回正确的结果。
  • 找虫子?我知道并排加载 i2c 和 spi 设备(以及与电机一起!)并不是最佳选择,因此会发生一些随机的怪异现象。如果我要继续这个项目,我只会使用 i2c。respeaker 2 有时也会遇到一些 i2c 错误。

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

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