关于MciroPython的智慧农业检测控制系统

栏目: IT技术 · 发布时间: 4年前

内容简介:智慧农业就是将物联网技术运用到传统农业中去,运用传感器和软件通过移动平台或者电脑平台对农业生产进行控制,使传统农业更具有“智慧”。除了精准感知、控制与决策管理外,从广泛意义上讲,智慧农业还包括农业电子商务、食品溯源防伪、农业休闲旅游、农业信息服务等方面的内容。智慧农业是农业生产的高级阶段,是集新兴的互联网、移动互联网、云计算和物联网技术为一体,依托部署在农业生产现场的各种传感节点(环境温湿度、土壤水分、二氧化碳、图像等)和无线通信网络实现农业生产环境的智能感知、智能预警、智能决策、智能分析、专家在线指导,为

智慧农业就是将物联网技术运用到传统农业中去,运用传感器和软件通过移动平台或者电脑平台对农业生产进行控制,使传统农业更具有“智慧”。除了精准感知、控制与决策管理外,从广泛意义上讲,智慧农业还包括农业电子商务、食品溯源防伪、农业休闲旅游、农业信息服务等方面的内容。智慧农业是农业生产的高级阶段,是集新兴的互联网、移动互联网、云计算和物联网技术为一体,依托部署在农业生产现场的各种传感节点(环境温湿度、土壤水分、二氧化碳、图像等)和无线通信网络实现农业生产环境的智能感知、智能预警、智能决策、智能分析、专家在线指导,为农业生产提供精准化种植、可视化管理、智能化决策。

我们以大棚监测控制系统为目标,使用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个

实物图

关于MciroPython的智慧农业检测控制系统

二、程序设计原理

(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(-)

我们用步进电机来控制遮光罩的卷起和放开。为了能明显的看到步进电机的转动效果,我们一个小风扇在上面。

关于MciroPython的智慧农业检测控制系统

降压模块的OUT输出电源要接到开发板上,用于给其供电。整体效果如下图: 关于MciroPython的智慧农业检测控制系统

四、源程序

接线完毕后,就要将最重要的程序放到开发板上。首先,通过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电池,按下按键开关即可。不同的环境下,土壤湿度和光照模块需要调节灵敏度(转换模块上的蓝色按钮)。

关于MciroPython的智慧农业检测控制系统


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rapid Web Applications with TurboGears

Rapid Web Applications with TurboGears

Mark Ramm、Kevin Dangoor、Gigi Sayfan / Prentice Hall PTR / 2006-11-07 / USD 44.99

"Dear PHP, It's over between us. You can keep the kitchen sink, but I want my MVC. With TurboGears, I was able to shed the most heinous FileMaker Pro legacy 'solu-tion' imaginable. It has relationshi......一起来看看 《Rapid Web Applications with TurboGears》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具