×

带有ATtiny85的电池供电土壤湿度计

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

笑尽往事

分享资料个

描述

(用 DeepL 翻译)

你有绿拇指吗?即使你这样做了,这个项目也会提醒你给植物浇水。只需将它放在花盆中您最喜欢的植物旁边,然后将其校准到合适的湿度水平。一旦土壤变得太干,LED 就会开始闪烁并提醒您给植物浇水。

对于这个项目,您需要:

  • 阁楼85
  • 湿度传感器
  • 3.3V纽扣电池(CR 2032)
  • 带焊接电缆的电池座
  • 引领
  • 100Ω电阻
  • 跳线
  • 迷你面包板

 

一个好的Plant Guard在植物旁边的花盆里不应该太突出,还应该有独立的电源。为此,ATtiny85 是一个不错的选择,因为您可以使用 3.3V 纽扣电池长时间运行它——前提是您不要让它连续测量,而是在大多数时间将其置于睡眠模式。

使用该项目的代码,您只需每 30 分钟测试一次土壤是否变得太干。其余时间,工厂守卫睡觉,从电池中汲取的电量很少。所以它应该可以持续很长时间没有问题。

要使 Plant Guard 尺寸紧凑,请使用迷你面包板的正面和背面。在背面,您粘贴一些组件,这些组件通过正面的电缆连接到 ATtiny85。完成的植物防护装置的尺寸仅为 40 x 70 x 40 毫米。

 
pYYBAGOYzm-ALqDzAAF8wGbo8XE556.jpg
 
 
pYYBAGOYznKALwKWAAG7YfQ_RmM581.jpg
 

如何对 ATtiny85 进行编程

在开始组装之前,您必须将适当的草图加载到您的 ATtiny85 上。你可以在这个项目的最后找到代码。在此处了解如何在 Arduino Uno 的帮助下将其上传到 ATtiny85。

如何组装植物卫士

该项目的设置大约需要 30 分钟。

首先是背面

方便的是,面包板背面有一个粘性表面,您可以在其中连接一些组件。所以先把背面的保护膜去掉。然后将电池座以及湿度传感器的电路板和探头粘贴到表面上。一开始只轻轻按压所有部件。如果一切都合适,您可以用力按压它们 - 它们会很好地固定在背面。

 
pYYBAGOYznWAb8fMAAHSVO-MlpY283.jpg
Auf die Rückseite geklebte Bauteile
 

将电缆连接到背面

让我们暂时留在后面。在这里,您首先必须将探头连接到电路板。为此,您需要两根电缆(最好 10 厘米长),两端都有插座。按如下方式附加它们:

 
poYBAGOYzneAeIGrAAHJbmGji4c514.jpg
 

将插座插入引脚后,将电缆放在面包板的顶部。这样它们占用的空间最少。

现在是湿度传感器板。上面有四个空闲引脚:VCC(正)、GND(负)、DO(数字输出)和 AO(模拟输出)。但你只需要前三个。所以首先将三根电缆连接到引脚 VCC、GND 和 DO。

 
pYYBAGOYznqAAtQfAAHicHBNBmY757.jpg
 

有了这个,您现在已经完成了植物保护装置的背面 - 面包板正面的时间到了!

将 ATtiny85 放在板上

拿起您的 ATtiny85 仔细查看:在芯片的一个角落,您会发现一个小圆孔。这将其旁边的引脚标记为第一。

现在将面包板放在您面前,使湿度传感器的探头朝下。现在小心地将 ATtiny85 放在面包板的中间,使小凹痕指向右下角。小心,因为芯片的引脚非常敏感。因此,当您再次将其戴上或从面包板上取下时,请特别小心。

最好为您的 ATtiny85 使用插座,以在安装和拆卸过程中保护它。

这是完成后的样子:

 
poYBAGOYznyACLzRAAGkOWIvZQQ159.jpg
 

将湿度传感器连接到 ATtiny85

在将湿度传感器的电缆连接到面包板之前,首先查看 ATtiny85 的引脚数:

 
poYBAGOYzoCAFqzLAAAjvqd-skw102.png
ATtiny85 引脚分配
 

如前所述,小凹痕标志着 ATtiny85 的引脚 1。您可以从这里逆时针计数得到其他引脚的编号。

现在转动你的面包板,使湿度传感器的探头朝上。这样,您的 ATtiny85 指向与上图相同的方向。

现在将电缆从传感器的引脚 DO 直接插入 ATtiny85 的引脚 2 旁边。GND 连接到引脚 4 - 这是负极。传感器的引脚 VCC 连接在 ATtiny85 的引脚 7 旁边。再次在概述中:

用电阻连接 LED

在将电阻器放在面包板上之前,您必须将其弯曲并缩短腿。这是电阻器在治疗后应如何处理:

 
poYBAGOYzoSAYvaSAAJBz-RRQ4U566.jpg
 

现在拿起 LED 并将其短腿(阴极)插入 ATtiny85 引脚 4 的电缆旁边。它的长腿(阳极)旁边有两个孔。

现在将电阻器再插入一排,以便将阳极连接到 ATtiny85 的引脚 3。这应该是这样的:

 
pYYBAGOYzouAC1okAAHuj161_90189.jpg
 

为工厂警卫供电

现在最重要的部分:电源。拿起手中电池座的两根电缆,将 ATtiny85 引脚 8 旁边的红色电缆和黑色电缆插入引脚 4 旁边的最后一个空闲孔:

最后一根电线

现在你需要一个小线桥。您将需要它来校准植物保护装置,以便在其周围的土壤太干时发出警报。

现在在 ATtiny85 的引脚 8 和引脚 6 之间插入此跳线:

 
pYYBAGOYzo2AaAD3AAFsxOe7C70921.jpg
 

就是这样!您的工厂监视器已组装好并可以进行校准。

这就是您校准工厂监视器的方式

开始之前,使用螺丝刀将湿度传感器背面的电位器双向旋转。正确连接所有内容后,LED 应该会打开和关闭,具体取决于您左右转动电位计的距离。

当它这样做时,您可以继续:

将带有探头的 Plant Guard 放在地下植物旁边。最好是这种土壤足够干燥,以至于您现在可以真正给植物浇水。转动背面的电位器,使 LED 即将亮起。就是这样 - 校准完成,警卫知道何时发出警报。

现在取出试验板上引脚 6 和 8 之间的跳线并将其放在一边。如果一切正常,现在 LED 应该每隔几秒钟闪烁几次 - 表示该喷壶的信号了。

然后给植物浇水 - LED 将停止闪烁,直到土壤变得太干,是时候喝一口水了。

工厂守卫代码

原则上,代码由以下部分组成:

  • 校准传感器
  • 测量湿度
  • 如果土壤太干,请发出警报
  • 让 ATtiny85 进入睡眠状态

 

但是,在开始时,必须包含两个库并定义一些引脚:

所需的库

您需要两个用于代码的库,它们已经预先安装:

#include 
#include 

使用库 avr/sleep.h,您可以将 ATtiny85 置于睡眠模式,从而确保其功耗大大降低。由于植物保护装置由电池供电,因此这种睡眠模式尤为重要。

库 avr/wdt.h 是一个所谓的看门狗,您可以使用它在一定时间后唤醒您的 ATtiny85。

定义引脚

总的来说,您必须定义您的 ATtiny85 使用的四个引脚:

#define calibrationPin 1
#define sensorPin 2
#define sensorValuePin 3
#define ledPin 4

请注意,引脚编号与您之前逆时针计数的引脚编号不匹配。如果你想用代码控制你芯片的管脚,你需要其他的数字,你也可以在上面的方案中找到。

您的代码的数字以 PB 开头。例如,如您所见,压痕旁边的第一个引脚对应于“代码引脚”PB5。但是,在代码中,您省略了字母,只写了 5 个。减去加号 (VCC) 和减号 (GND) 后,剩下 6 个引脚。

例如,Plant Guard 的 LED 位于支路编号旁边。ATtiny85 的 3 个 - 在您使用引脚 4 控制它的代码中:

#define ledPin 4

从现在开始,在下面的解释中,总是指代码的引脚号。

在草图的设置中,您现在定义它们是输入(INPUT)还是输出(OUTPUT):

void setup() {
pinMode(calibrationPin, INPUT);
pinMode(sensorPin, OUTPUT);
pinMode(sensorValuePin, INPUT);
pinMode(ledPin, OUTPUT);
}

工厂监视器的校准

让我们进入草图的循环。在这里,您首先检查用于校准传感器的跳线是否已插入。跳线位于正极 (VCC) 和引脚 1 之间 - 这意味着,如果连接了跳线,您的 ATtiny85 会在此引脚处测量电流 (HIGH)。

如果是这种情况,则在循环中只执行校准代码:

if (digitalRead(calibrationPin) == HIGH) {
digitalWrite(sensorPin, HIGH);
if (digitalRead(sensorValuePin) == 1) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}

首先,通过将其电源引脚 (sensorPin) 设置为高电平来打开传感器。在第二个查询中,当传感器传输测量值 1(到 pin sensorValuePin)时,LED 会打开。如果地面潮湿,则 LED 关闭。

什么干什么湿意味着您可以通过转动湿度传感器板上的电位器来确定自己。如前所述,校准植物监视器的最简单方法是将其放在干燥的土壤中并转动电位计,使 LED 亮起。如果你然后给它浇水,它就会消失——直到土壤再次像你校准它时一样干燥。

测量水分

让我们来实际测量湿度。这里只能有两种状态:土壤太干或土壤仍然足够湿润。

首先传感器开启 100 毫秒:

digitalWrite(sensorPin, HIGH);
delay(100);

如果传感器随后测量到 1 并将其传递下去,则意味着地球太干燥了。然后再次关闭传感器以立即节省电量。但为此,LED 会上下闪烁 10 次。

最后,看门狗被武装起来,因此 ATtiny85 进入睡眠状态并在 8 秒后唤醒并使 LED 再次闪烁 - 如果您在此期间没有给植物浇水。

if (digitalRead(sensorValuePin) == 1) {
digitalWrite(sensorPin, LOW);
for (byte i = 0; i < 10; i++) {
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
}
myWatchdogEnable (0b100001);
}

但是,如果您这样做了,植物守卫当然不会再发出警报。它现在测量土壤是否足够潮湿,并将 0 传递给相应的引脚。在这种情况下,LED 和传感器熄灭,看门狗将您的 ATtiny85 置于睡眠模式 30 分钟:

else {
digitalWrite(ledPin, LOW);
digitalWrite(sensorPin, LOW);
for (byte j = 0; j <= 225; j++){
myWatchdogEnable (0b100001);
}
}

这里使用了 myWatchdogEnable() 函数,您也可以在 Sketch 中找到该函数。你给这个函数一个字节 0b100001,它将定时器设置为 8 秒。For-Loop 确保这个 8 秒的计时器被执行 225 次 - 这提供了 30 分钟的睡眠时间。


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

评论(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:'带有ATtiny85的电池供电土壤湿度计',//标题 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);