×

温室温度监测系统

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

李丽华

分享资料个

描述

我们喜欢能够全年种植我们最喜欢的植物,但由于每种植物都有温度要求,因此不可能在室外种植;然而,可以在温室中种植它们。温室的最佳温度是 27°C。大多数植物和蔬菜在此温度下会健康生长。即使在淡季,温室温度控制对于保持植物生长也很重要。

必须保持温室的理想温度,因为您在人工条件下种植植物,如果您没有正确管理温室,您的计划就会失败。如果温室中有很多植物,温室温度会迅速升高,因此采取一些措施来控制它很重要。为您的温室配备温度控制装置是一个很好的步骤。

蔬菜的温室温度取决于作物的类型。但通常最佳温室温度保持在 32°C (90°F) 和 24°C (75°F) 之间。

因此,在 Bolt WiFi 模块的帮助下,开发了一个温度监控系统,以跟踪温室内的温度。该系统以 5 分钟的间隔连续监测温度。它还可以向指定的手机号码发送短信提醒当前温度,并在温室内温度超出指定范围时要求采取必要的措施。同样在 Bolt Cloud 的帮助下,我们可以以折线图的形式分析数据。

poYBAGOAMSOANDsiAAcDf5cdyLs797.jpg
 

硬件连接

第一步是将LM35温度传感器连接到Bolt WiFi模块。

第 1 步:握住传感器,以便您可以读取上面写的 LM35。

第 2 步:在此位置,将传感器的引脚从左到右识别为 VCC、输出和接地。

第 3 步:使用公对母跳线将 LM35 的 3 个引脚连接到 Bolt Wifi 模块,如下所示:

  • LM35 的 VCC 引脚连接到 Bolt Wifi 模块的 5v。
  • LM35 的输出引脚连接到 Bolt Wifi 模块的 A0(模拟输入引脚)。
  • LM35 的 Gnd 引脚连接到 Gnd。

第 4 步:现在使用微型 USB 电缆为 Bolt WiFi 模块通电。它既可以连接到 PC/Lap 的 USB 端口,也可以连接到 5V 移动适配器。

配置 Bolt WiFi 模块

  • 使用 Play 商店中的 Bolt IOT 应用程序,让我们设置与 Bolt WiFi 模块的互联网连接。在应用程序中,单击“添加设备”按钮,然后按照说明将 Bolt WiFi 模块连接到 WiFi 网络/移动热点的步骤。
pYYBAGOAMSiAHk8tAAbukiBkCSk551.jpg
 

螺栓云

现在转到https://cloud.boltiot.com并使用您的凭据登录。然后使用“添加新设备”按钮添加您的设备。

下一步是添加产品。单击“添加产品”选项并将产品配置为输入设备,GPIO。然后在硬件部分,选择“A0”引脚并添加变量名称。在代码/软件部分,代码如下所示,以便从测量数据中获得折线图。

setChartLibrary('google-chart');
setChartTitle('Temperature Monitor Graph');
setChartType('lineGraph');
setAnimation(true);
setAxisName('Time','Temperature');
mul(1/10.24);
plotChart("time_stamp","tem");

注意:使用的语言是 JavaScript,'A0' 引脚的变量名称为“tem”。

您将获得 API 密钥和设备 ID。确保记下相同的内容以供进一步使用。

Twilio 帐户

为了发送 SMS,我们将使用第三方应用程序 Twilio。转到https://www.twilio.com/并创建一个帐户。从那里得到一个试用号码。记下分配给您的 SSID、身份验证令牌、发件人号码和收件人号码。

编码

对于编码部分,我们将使用虚拟 Linux 系统。使用 VirtualBox 和 Ubuntu Server 设置虚拟系统。然后登录到您的机器。

现在创建一个 python 文件 conf.py 并保存凭据,例如:

API 密钥、设备 ID(来自 Bolt 云)

SSID、身份验证令牌、From Number 和 To Number(来自 Twilio)

SID='ACXXXXXXXXXXcd43XXXXXXXXXXec65dc4'
AUTH_TOKEN='53XXXXXXXXXXXXXXXXXXXX92018e'
FROM_NUMBER='+19XXXXXXXXX1'
TO_NUMBER='+918XXXXXXXX6'

API_KEY='08XXXXX1-8XX6-4XX8-aXX5-5XXXXXXce20'
DEVICE_ID='BOLTXXXXXXX'

接下来,在一个单独的 python 文件中编写主要代码:

import conf
from boltiot import Sms, Bolt
import json, time

在这里,所需的库与我们之前创建的 conf 文件一起被导入。

max_limit=32
min_limit=24
mybolt=Bolt(conf.API_KEY, conf.DEVICE_ID)
sms=Sms(conf.SID, conf.AUTH_TOKEN, conf.TO_NUMBER, conf.FROM_NUMBER)

然后将最高和最低温度限制分别设置为 32 和 24 摄氏度,并分别为 Bolt 和 Sms 创建 2 个对象。

while True:
	print("Reading temperature")
	response=mybolt.analogRead('A0')
	data=json.loads(response)
	print("Greenhouse is : "+str(round(int(data['value'])/10.24,2))+" degree celsius")
	try:
		sensor_value=int(data['value'])
		temperature=round(sensor_value/10.24,2)
		if temperature>max_limit:
			print("Making   request to Twilio")
			respons=sms.send_sms("Greenhouse temperature is "+ str(temperature)+" degree celsius. Temperature exceeded maximum limit. Deploy cooling measures ")
			print("Response received from Twilio is: "+str(respons))
			print("Status of sms is: "+ str(respons.status))
		elif temperature<>
			print("Making   request to Twilio")
			respons=sms.send_sms("Greenhouse temperature is "+ str(temperature)+" degree celsius. Temperature exceeded minimum limit. Deploy heating measures ")
			print("Response received from Twilio is: "+str(respons))
			print("Status of sms is: "+ str(respons.status))
	except Exception as e:
		print("Error: Details")
		print(e)
	time.sleep(300)

在 while 语句中:

  • 首先从传感器读取数据,然后打印。在打印传感器值时,将其除以 10.24 以获取以摄氏度为单位的温度。
  • round() 用于四舍五入到小数点后 2 位。
  • 接下来在 try 块中,提供了一个 if 语句。如果温度超过最高限制,则会向 Twilio 发出请求,以发送一条 SMS 指示当前温度并指示部署冷却措施。
  • 同样,如果温度降至最低限度以下,则会向 Twilio 发出请求,以发送一条 SMS 指示当前温度并指示部署加热措施。
  • 此外,异常块用于在可能发生的任何情况下打印错误。
  • 最后,提供 5 分钟(300 秒)的时间延迟来测量间隔内的温度。

输出

poYBAGOAMSqASohxAAD8kEmHPGQ878.jpg
在正常条件下获取温度读数。
 
poYBAGOX3c6AVIkOAAFHrg7ApNg810.jpg
当温度低于最低限制(24 摄氏度)时发送短信警报
 
pYYBAGOX3dmAD0AlAAFj9LHEcV8740.jpg
当温度超过最高限制(32 摄氏度)时发送短信警报
 

注意:我在钢制容器中使用热水和冷水分别将温度刺激到 32 度以上和 24 度以下。

poYBAGOX3lSAdjLyAAETpIqB-JY641.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:'温室温度监测系统',//标题 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);