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

研究场景需求

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

植物生长需要的条件

环境温湿度条件

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

光照条件

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

空气质量

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

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

硬件电路

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

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

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

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

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

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

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

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

8.面包板和杜邦线。

课程给出的一个电路图,方便了解整个自动浇花器的设备组成。

软件实现

接下来还是使用 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": []
  }

多传感器融合

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

(0)

相关推荐

  • 在SensorTile上使用MicroPython(二)

    LPS22HB 的 Micropython 程序移植 前面介绍了传感器的接口.主要寄存器.参数计算等方面的内容,下面就介绍用MicroPython驱动LPS22HB的方法. 为了让程序具有通用性,以及 ...

  • “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制

    这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信号处理.语音识别.自然语言处理和语音合成等技术,现在一些产品甚至提供了声纹识别 ...

  • “物联网开发实战”学习笔记-(三)根据光线调节亮度

    让智能电灯可以基于环境的明暗来自动地打开和关闭.可以分为两个阶段,第一阶段是打造传感器设备来感知光照的强弱,判断出环境的明暗状态,第二阶段是创建一个场景联动,根据传感器的数值来控制智能电灯的状态. 1 ...

  • “物联网开发实战”学习笔记-(二)手机控制智能电灯

    如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优势: 腾讯云链接: link. 到物联网平台的原因这是因为物联网平台提供 ...

  • “物联网开发实战”学习笔记-(一)硬件开发环境的搭建

    这里的分享是通过自己的整理总结出的一个课程的学习笔记,我想用简洁易懂的步骤来分享一个物联网建立的过程. 这里课程上有四个 4 个产品场景 1.可以手机控制的智能电灯 2.可以基于光线自动调节的智能电灯 ...

  • C# LINQ学习笔记五:LINQ to XML

    本笔记摘抄自:https://www.cnblogs.com/yaozhenfa/p/CSharp_Linq_For_Xml.html,记录一下学习过程以备后续查用. 一.生成xml 1.1创建简单的 ...

  • 《中医基础理论》学习笔记(五)

    五行学说 五行是中国古代哲学的基本范畴之一,是中国上古原始的科学思想."五",是木.火.土.金.水五种物质:"行",四通八达,流行和行用之谓,是行动.运动的古义 ...

  • 学习笔记五

    奋斗的理由是厌恶了之前的圈子.不要自以为是,要让别人为是.认为自己什么都不是,别人才认为你是.过五关中毅力关最难过. 找心一致,行动一致,志同道合的人. 因为一个和字,就可以让你小成功光宗耀祖,大成功 ...

  • 什么是ATT试验?开关型油动机油路学习(上汽学习笔记五)

    润滑油系统学习推荐: 为什么汽轮机润滑油温一般要求控制在38℃-45℃,30℃行不行?50℃行不行? 主机润滑油冷油器切换现场操作展示 为什么25项反措要求主机润滑油系统的阀门门芯必须与地面水平安装? ...

  • 密封油系统停运,先停空侧还是先停氢侧?(学习笔记五))

    昨天学习密封油系统启动操作相关知识,学习笔记如下: 为什么发电机内没有压力,氢侧油箱无法自动排油?(启动学习笔记四)) 前几日学习笔记: 密封油系统启动时,油从哪来?(学习笔记一) 密封油四路备用油源 ...