“物聯網開發實戰”學習筆記-(五)根據土壤濕度、環境溫濕度和光照強度自動澆花
研究場景需求
自動澆花這個場景,很明顯是為了自動控制水泵,及時給植物補充水分,同時用戶的目的并不只是澆水而已,他們真正想要的,是看到自己養的植物健康地生長,
植物生長需要的條件

環境溫濕度條件
熱帶的植物無法忍受低溫和干燥的環境條件,而溫帶植物遇到高溫,也可能出現熱衰竭的現象,所以環境的溫度和濕度最好也能監控,
光照條件
植物進行光合作用,所以光照強度需要監控,
空氣質量
對植物的生長來說也很重要,比如二訊訓碳是否充足,有害氣體是否超標等,
所以綜合來看,我們需要監控的指標包括土壤濕度、環境溫濕度和光照強度,
硬體電路
相應的傳感器可以確定是土壤濕度傳感器、環境溫濕度傳感器和光照傳感器,
下面,我總結一下自動澆花器需要用到的材料:
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": []
}
多傳感器融合
在測量程序中,我們可以使用多個土壤傳感器進行測量,然后根據多個測量值來計算出更可靠的土壤水分含量,這個計算程序就是多傳感器融合,
多傳感器融合最關鍵的地方,不是多個傳感器的硬體連接或資料收集,而是融合演算法,也就是怎么進行多個不同維度的引數的處理,從而得到一個相對準確的、有意義的資料資訊,
這個就是物聯網的應用層的作業模塊,根據傳感器反饋回來的大量的資料通過訓練構建模型,這個程序其物體現了人工智能與物聯網的融合點,

學習筆記總結自‘物聯網開發實戰’–郭朝斌
–筆記只用于學習交流,請不要用于商業用途,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260664.html
標籤:其他
