内容简介:智慧农业就是将物联网技术运用到传统农业中去,运用传感器和软件通过移动平台或者电脑平台对农业生产进行控制,使传统农业更具有“智慧”。除了精准感知、控制与决策管理外,从广泛意义上讲,智慧农业还包括农业电子商务、食品溯源防伪、农业休闲旅游、农业信息服务等方面的内容。智慧农业是农业生产的高级阶段,是集新兴的互联网、移动互联网、云计算和物联网技术为一体,依托部署在农业生产现场的各种传感节点(环境温湿度、土壤水分、二氧化碳、图像等)和无线通信网络实现农业生产环境的智能感知、智能预警、智能决策、智能分析、专家在线指导,为
智慧农业就是将物联网技术运用到传统农业中去,运用传感器和软件通过移动平台或者电脑平台对农业生产进行控制,使传统农业更具有“智慧”。除了精准感知、控制与决策管理外,从广泛意义上讲,智慧农业还包括农业电子商务、食品溯源防伪、农业休闲旅游、农业信息服务等方面的内容。智慧农业是农业生产的高级阶段,是集新兴的互联网、移动互联网、云计算和物联网技术为一体,依托部署在农业生产现场的各种传感节点(环境温湿度、土壤水分、二氧化碳、图像等)和无线通信网络实现农业生产环境的智能感知、智能预警、智能决策、智能分析、专家在线指导,为农业生产提供精准化种植、可视化管理、智能化决策。
我们以大棚监测控制系统为目标,使用TPYBoard v102开发板、光照传感器、温湿度传感器、土壤湿度传感器、电机等,实现一个智能大棚监测控制系统的基础模型。
系统 主要的 技术 特点:
监控功能系统:根据各类传感器来获取植物生长的环境信息,如监测土壤水分、空气温度、空气湿度、光照强度等参数(大家可根据自己的需求,增加其他参数,如二氧化塘、土壤温度等)。
自动 控制系统: TPYBoard v102开发板作为主控板,负责各个环境信息的收集与汇总,并根据以上各类信息的反馈对农业大棚内进行自动灌溉、自动降温、自动卷遮光罩等自动控制。
一、实验器材
展示效果图
| 器件名称 | 数量 |
|---|---|
| TPYB oard v102 开发板 | 1个 |
| USB 数据线 | 1条 |
| DHT11温湿度 模块 | 1个 |
| 土壤湿度检测 模块 | 1个 |
| 光敏 模块 | 1个 |
| 继电器 | 2个 |
| 降压 模块( AMS117-5V ) | 1个 |
| 按键 开关 | 1个 |
| 18650电池 | 2节 |
| 18650电池 盒 | 1个 |
| 步进 电机 +驱动板 | 1套 |
| 迷你 抽水泵( 5V ) | 1个 |
| USB小风扇 ( 5V ) | 1个 |
| USB座,杜邦线 、排针、排母 | 若干 |
| 洞洞板(9*15 cm ) | 2个 |
| PVC软水管 | 1个 |
实物图
二、程序设计原理
(1)获取温湿度数据,当温度高于阈值时,触发继电器,打开排风扇,反之关闭;
(2)获取土壤湿度数据,当湿度低于土壤湿度检测模块的阈值时,土壤湿度检测模块的OUT引脚会输出高电平,这时触发继电器,启动水泵进行灌溉;(3)获取光照强度数据,当光照强度高于阈值时,触发步进电机,卷起遮光罩,反之盖上。
三、硬件接线 连接
先连接电源部分。电源部分主要涉及到降压模块和按键开关。先用万用表,找出按键开关中哪两个引脚是按下导通,弹起不导通的。这里,我们假设为引脚A和引脚B。
| 18650电池盒 | 按键开关 |
|---|---|
| 红线 | 引脚A |
| 18650电池盒 | 降压 模块( AMS1117-5 V) |
|---|---|
| 黑线 | VIN(GND) |
| 按键开关 | 降压 模块( AMS1117-5 V) |
|---|---|
| 引脚B | VIN(+) |
| TPYB oardv102 | 降压 模块( AMS1117-5 V) |
| VIN | VOUT(+) |
| GND | VOUT(GND) |
接下来,我们做开发板与各个传感器、继电器等之间的连线。
| TPYB oard v102 | DHT11温湿度 模块 |
|---|---|
| GND | GND |
| Y12 | DATA |
| VIN | VCC |
| TPYB oard v102 | 土壤 湿度检测模块 |
|---|---|
| Y11 | DO |
| GND | GND |
| 3V3 | VCC |
| TPYB oard v102 | 光敏 模块 |
|---|---|
| X22 | DO |
| GND | GND |
| 3V3 | VCC |
| TPYB oard v102 | 继电器( 排风扇 ) |
|---|---|
| 3V3 | VCC |
| GND | GND |
| X11 | IN |
| VIN | COM |
| USB风扇 | 继电器( 排风扇 ) |
|---|---|
| 正极 | NO |
| USB风扇 | TPYB oardv102 |
|---|---|
| 负极 | GND |
| TPYB oard v102 | 继电器(水泵) |
|---|---|
| 3V3 | VCC |
| GND | GND |
| X12 | IN |
| VIN | COM |
| 水泵 | 继电器(水泵) |
|---|---|
| 正极 | NO |
| 水泵 | TPYB oardv102 |
|---|---|
| 负极 | GND |
| TPYB oard v102 | 步进 电机驱动板 |
|---|---|
| X21 | IN1 |
| X20 | IN2 |
| X19 | IN3 |
| X18 | IN4 |
| VIN | 5V(+) |
| GND | 5V(-) |
我们用步进电机来控制遮光罩的卷起和放开。为了能明显的看到步进电机的转动效果,我们一个小风扇在上面。
降压模块的OUT输出电源要接到开发板上,用于给其供电。整体效果如下图:
四、源程序
接线完毕后,就要将最重要的程序放到开发板上。首先,通过USB数据线将开发板接入电脑,电脑上会出现一个类似U盘的可移动设备,名称为【TPYBFLASH】,把main.py、dht11.py、stepermotor.py拷贝到里面即可。
注意:操作开发板磁盘时,板载的红色LED会亮,说明开发板正在保存操作,需等待红灯熄灭再进行其他操作。
dht11.py源程序
import pyb
from pyb import UART
from pyb import Pin,delay,udelay
import time
class DHT11:
def __init__(self,pin_name):
time.sleep(1)
self.N1 = Pin(pin_name, Pin.OUT_PP)
self.PinName=pin_name
pyb.delay(10)
def read_data(self):
self.__init__(self.PinName)
data=[]
j=0
N1=self.N1
N1.low()
delay(20)
N1.high()
N1 = Pin(self.PinName, Pin.IN)
udelay(30)
if N1.value() != 0:
return [0,0]
while N1.value()==0:
continue
while N1.value()==1:
continue
while j<40:
k=0
while N1.value()==0:
continue
while N1.value()==1:
k+=1
if k>100:break
if k<3:
data.append(0)
else:
data.append(1)
j=j+1
print('Sensor is working')
j=0
humidity_bit=data[0:8]
humidity_point_bit=data[8:16]
temperature_bit=data[16:24]
temperature_point_bit=data[24:32]
check_bit=data[32:40]
humidity=0
humidity_point=0
temperature=0
temperature_point=0
check=0
for i in range(8):
humidity+=humidity_bit[i]*2**(7-i)
humidity_point+=humidity_point_bit[i]*2**(7-i)
temperature+=temperature_bit[i]*2**(7-i)
temperature_point+=temperature_point_bit[i]*2**(7-i)
check+=check_bit[i]*2**(7-i)
tmp=humidity+humidity_point+temperature+temperature_point
if check==tmp:
print('temperature is',temperature,'-wet is',humidity,'%')
else:
print('Error:',humidity,humidity_point,temperature,temperature_point,check)
return [str(temperature),str(humidity)]
main.py源程序
from pyb import Pin
from pyb import ADC
from stepermotor import SteperMotor
from dht11 import DHT11
#0:亮 1:暗
light = Pin('X22',Pin.IN)
#0:湿 1:干
hum = Pin('Y11',Pin.IN)
dht = DHT11('Y12')
#继电器低电平触发
water = Pin('X12',Pin.OUT_PP)
fan = Pin('X11',Pin.OUT_PP)
water.value(1)
fan.value(1)
#步进电机
Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X21','X20','X19','X18']]
#转速(ms) 数值越大转速越慢 最小值2ms
sm = SteperMotor(pin = Pin_All,speed=2)
hood = False #记录遮光罩的状态,默认是关闭
def readTaHData():
DATA = dht.read_data()#读取温湿度的值
print(DATA[0],'℃')
print(DATA[1],'%')
#温度大于25度,打开风扇,进行通风
if int(DATA[0]) > 21:
fan.value(0)
else:
fan.value(1)
if __name__ == '__main__':
while True:
readTaHData()
h_d = hum.value()
print('hum:',h_d)
if h_d:
#土壤较干,打开抽水泵进行浇水
water.value(0)
else:
#土壤较湿,关闭抽水泵停止浇水
water.value(1)
l_d = light.value()
print('light:',l_d)
if l_d:
#光线较暗,启动步进电机,关闭大棚的遮光罩
if hood:
sm.steperRun(-360)
sm.steperRun(-360)
hood = False
else:
#光线较亮,启动步进电机,打开大棚的遮光罩
if not hood:
sm.steperRun(360)
sm.steperRun(360)
hood = True
stepermotor.py源程序
# main.py -- put your code here!
import pyb
from pyb import Pin
Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X1','X2','X3','X4']]
STEPER_ROUND=512 #转动一圈(360度)的周期
ANGLE_PER_ROUND=STEPER_ROUND/360 #转动1度的周期
class SteperMotor():
def __init__(self,pin = None,speed=2):
if pin != None:
self.Pins = pin
else:
self.Pins = Pin_All
self.Speed = speed
#私有方法
def __SteperWriteData(self,data):
count=0
for i in data:
self.Pins[count].value(i)
count+=1
def __SteperFrontTurn(self):
speed = self.Speed
self.__SteperWriteData([1,1,0,0])
pyb.delay(speed)
self.__SteperWriteData([0,1,1,0])
pyb.delay(speed)
self.__SteperWriteData([0,0,1,1])
pyb.delay(speed)
self.__SteperWriteData([1,0,0,1])
pyb.delay(speed)
def __SteperBackTurn(self):
speed = self.Speed
self.__SteperWriteData([1,1,0,0])
pyb.delay(speed)
self.__SteperWriteData([1,0,0,1])
pyb.delay(speed)
self.__SteperWriteData([0,0,1,1])
pyb.delay(speed)
self.__SteperWriteData([0,1,1,0])
pyb.delay(speed)
def __SteperStop(self):
self.__SteperWriteData([0,0,0,0])
def steperRun(self,angle):
val=ANGLE_PER_ROUND*abs(angle)
if(angle>0):
for i in range(0,val):
self.__SteperFrontTurn()
else:
for i in range(0,val):
self.__SteperBackTurn()
angle = 0
self.__SteperStop()
五、演示 效果
程序调试完,拔掉USB数据线。放入18650电池,按下按键开关即可。不同的环境下,土壤湿度和光照模块需要调节灵敏度(转换模块上的蓝色按钮)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 版本控制系统Git笔记
- 给树莓派小车控制系统加上装甲
- 工业控制系统模糊测试研究与应用
- DAGOR:微信微服务过载控制系统
- 工业控制系统危机四伏,安全风险如何应对?
- Apache Subversion 1.10.0 发布,版本控制系统
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
机器学习算法原理与编程实践
郑捷 / 电子工业出版社 / 2015-11 / 88.00
本书是机器学习原理和算法编码实现的基础性读物,内容分为两大主线:单个算法的原理讲解和机器学习理论的发展变迁。算法除包含传统的分类、聚类、预测等常用算法之外,还新增了深度学习、贝叶斯网、隐马尔科夫模型等内容。对于每个算法,均包括提出问题、解决策略、数学推导、编码实现、结果评估几部分。数学推导力图做到由浅入深,深入浅出。结构上数学原理与程序代码一一对照,有助于降低学习门槛,加深公式的理解,起到推广和扩......一起来看看 《机器学习算法原理与编程实践》 这本书的介绍吧!