“物联网开发实战”学习笔记-(五)根据土壤湿度、环境温湿度和光照强度自动浇花

“物联网开发实战”学习笔记-(五)根据土壤湿度、环境温湿度和光照强度自动浇花

研究场景需求

自动浇花这个场景,很明显是为了自动控制水泵,及时给植物补充水分。同时用户的目的并不只是浇水而已,他们真正想要的,是看到自己养的植物健康地生长。

植物生长需要的条件

“物联网开发实战”学习笔记-(五)根据土壤湿度、环境温湿度和光照强度自动浇花_第1张图片

环境温湿度条件

热带的植物无法忍受低温和干燥的环境条件,而温带植物遇到高温,也可能出现热衰竭的现象,所以环境的温度和湿度最好也能监控。

光照条件

植物进行光合作用,所以光照强度需要监控。

空气质量

对植物的生长来说也很重要,比如二氧化碳是否充足,有害气体是否超标等。

所以综合来看,我们需要监控的指标包括土壤湿度、环境温湿度和光照强度。

硬件电路

相应的传感器可以确定是土壤湿度传感器、环境温湿度传感器和光照传感器。

下面,我总结一下自动浇花器需要用到的材料:
1.NodeMCU ESP32 开发板(用WI-FI)

2.继电器,用于控制水泵的供电电路的通断。

3.水泵,用于从水箱中抽水,并送到花盆中。

4.电池盒,用于给水泵供电。

5.土壤湿度传感器
它可以测量花盆土壤的湿度,然后输出模拟信号。

6.环境温湿度传感器
它基于 DHT11 传感器,用于测量房屋中的温度和湿度,并且输出数字信号。它采用单总线(1-wire)接口与 NodeMCU 连接。

7.光照传感器,它可以测量花盆位置接收到的光照条件。

8.面包板和杜邦线。

课程给出的一个电路图,方便了解整个自动浇花器的设备组成。
“物联网开发实战”学习笔记-(五)根据土壤湿度、环境温湿度和光照强度自动浇花_第2张图片

软件实现

接下来还是使用 Python 语言来完成软件的开发工作。

继电器

继电器的控制。主要是改变了连接的 GPIO 管脚。根据硬件电路的连线,这里使用的是 GPIO23 管脚。
参考代码它连接的管脚是 GPIO23):

## !!!本文件采用商城的继电器模块FL-3FF-S-Z
## !!!on(), off()状态相反。
## !!!初始化中需要调用on()先关闭水泵电路
from machine import Pin

class Relay():
    ON = 0
    OFF = 1

    def __init__(self, pin):
        self.relaypin = Pin(pin, Pin.OUT)
        self.relaypin.on()
        self.last_status = self.OFF

    def set_state(self, state):
        tmp_state = self.ON if state==1 else self.OFF
        self.relaypin.value(tmp_state)
        self.last_status = tmp_state

    def state(self):
        return self.last_status
    def on(self):
        self.relaypin.value(self.ON)
        self.last_status = self.ON

    def off(self):
        self.relaypin.value(self.OFF)
        self.last_status = self.OFF

土壤湿度传感器

土壤湿度传感器。它会根据不同的电阻值,输出变化的模拟信息,数值越小,说明越干燥。使用的时候,你需要把它完全插入花盆的土壤中。

参考代码(它连接的管脚是 GPIO34):

from machine import ADC
from machine import Pin

class SoilSensor():

    def __init__(self, pin):
        self.sensor = ADC(Pin(pin))

    def value(self):
        value = self.sensor.read()
        print("Sensor ADC value:",value)
        return int(value*100/4095)

环境温湿度传感器

环境温湿度传感器是基于 DHT11 实现的,并且使用的是单总线的连接方式,我们可以直接使用。

参考代码(它连接的管脚是 GPIO14):

import dht
from machine import Pin

class EnvSensor():

    def __init__(self, pin):
        self.sensor = dht.DHT11(Pin(pin))

    def value(self):
        self.sensor.measure()
        return (self.sensor.temperature(), self.sensor.humidity())

光照传感器

光照传感器
参考代码(它连接的管脚是 GPIO36):

from machine import ADC
from machine import Pin

class IllumSensor():

    def __init__(self, pin):
        self.sensor = ADC(Pin(pin))

    def value(self):
        value = self.sensor.read()
        print("Sensor ADC value:",value)
        return int(value/4095*600

完成联网开发

将设备接入腾讯云物联网平台。可以参考前面的分享。
自动浇花器的物模型 JSON 文件,提供参考。

{
     
    "version": "1.0",
    "profile": {
     
      "ProductId": "你的ProductID",
      "CategoryId": "909"
    },
    "properties": [
      {
     
        "id": "power_switch",
        "name": "水泵开关",
        "desc": "控制水泵启动关闭",
        "mode": "rw",
        "define": {
     
          "type": "bool",
          "mapping": {
     
            "0": "关",
            "1": "开"
          }
        }
      },
      {
     
        "id": "water_shortage",
        "name": "缺水状态",
        "desc": "水箱是否缺水",
        "mode": "r",
        "define": {
     
          "type": "bool",
          "mapping": {
     
            "0": "否",
            "1": "是"
          }
        }
      },
      {
     
        "id": "humidity",
        "name": "土壤湿度",
        "desc": "当前的土壤湿度",
        "mode": "r",
        "define": {
     
          "type": "int",
          "min": "0",
          "max": "100",
          "start": "0",
          "step": "1",
          "unit": "%"
        }
      },
      {
     
        "id": "env_temp",
        "name": "环境温度",
        "desc": "空间环境的温度",
        "mode": "r",
        "define": {
     
          "type": "float",
          "min": "-40",
          "max": "100",
          "start": "0",
          "step": "0.1",
          "unit": "℃"
        },
        "required": false
      },
      {
     
        "id": "env_hum",
        "name": "环境湿度",
        "desc": "周围环境的湿度",
        "mode": "r",
        "define": {
     
          "type": "int",
          "min": "0",
          "max": "100",
          "start": "0",
          "step": "1",
          "unit": "%"
        },
        "required": false
      },
      {
     
        "id": "env_illum",
        "name": "环境光照度",
        "desc": "周围环境的光照度",
        "mode": "r",
        "define": {
     
          "type": "int",
          "min": "0",
          "max": "6000",
          "start": "0",
          "step": "1",
          "unit": "lux"
        },
        "required": false
      }
    ],
    "events": [],
    "actions": []
  }

多传感器融合

在测量过程中,我们可以使用多个土壤传感器进行测量,然后根据多个测量值来计算出更可靠的土壤水分含量。这个计算过程就是多传感器融合。
多传感器融合最关键的地方,不是多个传感器的硬件连接或数据收集,而是融合算法,也就是怎么进行多个不同维度的参数的处理,从而得到一个相对准确的、有意义的数据信息。
这个就是物联网的应用层的工作模块,根据传感器反馈回来的大量的数据通过训练构建模型,这个过程其实体现了人工智能与物联网的融合点。

“物联网开发实战”学习笔记-(五)根据土壤湿度、环境温湿度和光照强度自动浇花_第3张图片

学习笔记总结自‘物联网开发实战’–郭朝斌
–笔记只用于学习交流,请不要用于商业用途。

你可能感兴趣的:(笔记,python,物联网)