跳至主要内容

使用物聯網預測植物生長

本課程概述的手繪筆記

手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看大圖。

課前測驗

課前測驗

簡介

植物需要某些條件才能生長——水、二氧化碳、養分、光和熱。在本課程中,您將學習如何通過測量空氣溫度來計算植物的生長和成熟率。

在本課程中,我們將涵蓋:

數位農業

數位農業正在改變我們的耕作方式,使用工具來收集、存儲和分析農業數據。我們目前正處於世界經濟論壇所描述的“第四次工業革命”時期,數位農業的興起被稱為“第四次農業革命”或“農業4.0”。

🎓 數位農業這個術語還包括整個“農業價值鏈”,即從農場到餐桌的整個過程。它包括在食品運輸和加工過程中跟踪產品質量、倉庫和電子商務系統,甚至是拖拉機租賃應用程序!

這些變化使農民能夠提高產量,減少化肥和農藥的使用,更有效地利用水資源。雖然主要在富裕國家使用,但傳感器和其他設備的價格正在逐漸降低,使其在發展中國家也變得更加可及。

數位農業啟用的一些技術包括:

  • 溫度測量——測量溫度可以讓農民預測植物的生長和成熟。
  • 自動灌溉——測量土壤濕度並在土壤過於乾燥時打開灌溉系統,而不是定時灌溉。定時灌溉可能導致在炎熱乾燥的時期作物缺水,或在下雨時過度灌溉。通過僅在土壤需要時進行灌溉,農民可以優化用水。
  • 害蟲控制——農民可以使用自動機器人或無人機上的攝像頭檢查害蟲,然後僅在需要的地方施用農藥,減少農藥的使用量並減少農藥流入當地水源的情況。

✅ 做一些研究。還有哪些技術可以用來提高農業產量?

🎓 “精準農業”這個術語用來定義基於每個田地甚至田地的一部分進行觀察、測量和響應。這包括測量水、養分和害蟲水平並準確響應,例如僅灌溉田地的一小部分。

為什麼溫度在農業中很重要?

在學習植物時,大多數學生都被教導水、光、二氧化碳 (CO2) 和養分的必要性。植物還需要溫暖才能生長——這就是為什麼植物在春天隨著溫度上升而開花,為什麼雪花蓮或水仙花會因為短暫的溫暖而早早發芽,以及為什麼溫室和暖房能夠很好地促進植物生長。

🎓 溫室和暖房的作用相似,但有一個重要的區別。暖房是人工加熱的,允許農民更準確地控制溫度,而溫室依賴於太陽的溫暖,通常唯一的控制是打開窗戶或其他開口以釋放熱量。

植物有一個基礎或最低溫度、最佳溫度和最高溫度,這些都是基於每日平均溫度。

  • 基礎溫度——這是植物生長所需的最低每日平均溫度。
  • 最佳溫度——這是獲得最大生長的最佳每日平均溫度。
  • 最高溫度——這是植物能夠承受的最高溫度。超過這個溫度,植物將停止生長以節約水分並保持生命。

💁 這些是平均溫度,平均每日和夜間溫度。植物還需要不同的日夜溫度來幫助它們更有效地進行光合作用並在夜間節省能量。

每種植物的基礎、最佳和最高溫度值都不同。這就是為什麼有些植物在熱帶國家茁壯成長,而有些植物在寒冷國家茁壯成長。

✅ 做一些研究。對於您花園、學校或當地公園中的任何植物,看看您是否能找到它們的基礎溫度。

顯示隨著溫度上升生長率上升,然後隨著溫度過高而下降的圖表

上圖顯示了一個生長率與溫度的示例圖表。到達基礎溫度之前沒有生長。生長率隨著溫度上升到達最佳溫度,然後在達到峰值後下降。在最高溫度下,生長停止。

這個圖表的形狀因植物種類而異。有些在最佳溫度以上急劇下降,有些從基礎到最佳溫度的上升較慢。

💁 農民要獲得最佳生長,他們需要知道三個溫度值並了解他們所種植植物的圖表形狀。

如果農民能夠控制溫度,例如在商業暖房中,那麼他們可以為他們的植物進行優化。例如,商業暖房中種植的番茄白天的溫度設置在約25°C,夜間設置在約20°C,以獲得最快的生長。

🍅 將這些溫度與人工光、化肥和控制的CO2水平結合起來,商業種植者可以全年種植和收穫。

測量環境溫度

溫度傳感器可以與物聯網設備一起使用來測量環境溫度。

任務 - 測量溫度

按照相關指南使用您的物聯網設備監測溫度:

生長度日數

生長度日數(也稱為生長度日單位)是一種基於溫度測量植物生長的方法。假設植物有足夠的水、養分和二氧化碳 (CO2),溫度決定了生長速度。

生長度日數,或GDD,每天計算為高於植物基礎溫度的每日平均溫度。每種植物需要一定數量的GDD才能生長、開花或產生和成熟作物。每天的GDD越多,植物生長得越快。

🇺🇸 對於美國人來說,生長度日數也可以使用華氏溫度計算。5 GDDC(攝氏生長度日數)相當於9 GDDF(華氏生長度日數)。

完整的GDD公式有點複雜,但有一個簡化的方程式通常用作良好的近似值:

GDD = T max + T min 除以 2,全部減去 T base

  • GDD - 這是生長度日數
  • Tmax - 這是每日最高溫度(攝氏)
  • Tmin - 這是每日最低溫度(攝氏)
  • Tbase - 這是植物的基礎溫度(攝氏)

💁 有些變體處理Tmax超過30°C或Tmin低於Tbase的情況,但我們現在忽略這些。

示例 - 玉米/玉蜀黍 🌽

根據品種不同,玉米(或玉蜀黍)需要800到2700 GDD才能成熟,基礎溫度為10°C。

在基礎溫度以上的第一天,測量到以下溫度:

測量溫度 °C
最高16
最低12

將這些數字插入我們的計算中:

  • Tmax = 16
  • Tmin = 12
  • Tbase = 10

這給出了以下計算結果:

GDD = 16 + 12 除以 2,全部減去 10,結果為 4

玉米在那天獲得了4 GDD。假設一種需要800 GDD天數才能成熟的玉米品種,它還需要另外796 GDD才能達到成熟。

✅ 做一些研究。對於您花園、學校或當地公園中的任何植物,看看您是否能找到它們達到成熟或產生作物所需的GDD數量。

使用溫度傳感器數據計算GDD

植物不會在固定日期生長——例如,您不能種下一顆種子並知道該植物會在確切的100天後結果。相反,作為農民,您可以大致了解植物需要多長時間才能生長,然後每天檢查以確定作物何時準備好。

這對於大農場來說有巨大的勞動力影響,並且風險在於農民可能會錯過意外提前準備好的作物。通過測量溫度,農民可以計算植物獲得的GDD,從而只需在接近預期成熟時進行檢查。

通過使用物聯網設備收集溫度數據,農民可以自動接收到植物接近成熟的通知。典型的架構是讓物聯網設備測量溫度,然後使用類似MQTT的方式通過互聯網發布這些遙測數據。服務器代碼然後監聽這些數據並將其保存到某個地方,例如數據庫。這意味著數據可以稍後進行分析,例如每晚計算當天的GDD,累計每個作物的GDD總數,並在植物接近成熟時發出警報。

遙測數據被發送到服務器,然後保存到數據庫

服務器代碼還可以通過添加額外信息來增強數據。例如,物聯網設備可以發布一個標識符來指示是哪個設備,服務器代碼可以使用這個標識符來查找設備的位置以及它正在監測的作物。它還可以添加基本數據,如當前時間,因為某些物聯網設備沒有必要的硬件來跟踪準確的時間,或者需要額外的代碼來通過互聯網讀取當前時間。

✅ 您認為不同的田地為什麼會有不同的溫度?

任務 - 發布溫度信息

按照相關指南使用您的物聯網設備通過MQTT發布溫度數據,以便稍後進行分析:

任務 - 捕獲和存儲溫度信息

一旦物聯網設備開始發布遙測數據,服務器代碼可以編寫以訂閱這些數據並存儲它們。與其將其保存到數據庫,不如將其保存到逗號分隔值 (CSV) 文件中。CSV文件將數據存儲為文本的行,每個值由逗號分隔,每條記錄在新行上。它們是一種方便的、可讀的並且得到良好支持的方式來將數據保存為文件。

CSV文件將有兩列——日期溫度日期列設置為服務器接收到消息的當前日期和時間,溫度來自遙測消息。

  1. 重複第4課中的步驟創建服務器代碼以訂閱遙測數據。您不需要添加發布命令的代碼。

    這些步驟是:

    將此項目的文件夾命名為temperature-sensor-server

  2. 確保client_name反映此項目:

    client_name = id + 'temperature_sensor_server'
  3. 在文件頂部的現有導入語句下添加以下導入語句:

    from os import path
    import csv
    from datetime import datetime

    這將導入一個讀取文件的庫、一個與CSV文件交互的庫以及一個幫助處理日期和時間的庫。

  4. handle_telemetry函數之前添加以下代碼:

    temperature_file_name = 'temperature.csv'
    fieldnames = ['date', 'temperature']

    if not path.exists(temperature_file_name):
    with open(temperature_file_name, mode='w') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()

    此代碼聲明了一些常量,用於要寫入的文件名和CSV文件的列標題名稱。CSV文件的第一行傳統上包含用逗號分隔的列標題。

    然後代碼檢查CSV文件是否已經存在。如果不存在,則創建它並在第一行添加列標題。

  5. handle_telemetry函數的末尾添加以下代碼:

    with open(temperature_file_name, mode='a') as temperature_file:        
    temperature_writer = csv.DictWriter(temperature_file, fieldnames=fieldnames)
    temperature_writer.writerow({'date' : datetime.now().astimezone().replace(microsecond=0).isoformat(), 'temperature' : payload['temperature']})

    此代碼打開CSV文件,然後在末尾附加一行新行。該行包含當前日期和時間,格式為人類可讀的格式,後跟從物聯網設備接收到的溫度。數據以ISO 8601格式存儲,帶有時區,但不包括微秒。

  6. 以與之前相同的方式運行此代碼,確保您的物聯網設備正在發送數據。將在同一文件夾中創建一個名為temperature.csv的CSV文件。如果您查看它,您將看到日期/時間和溫度測量值:

    date,temperature
    2021-04-19T17:21:36-07:00,25
    2021-04-19T17:31:36-07:00,24
    2021-04-19T17:41:36-07:00,25
  7. 運行此代碼一段時間以捕獲數據。理想情況下,您應該運行這個程序一整天,以收集足夠的數據進行GDD計算。

    💁 如果您使用的是虛擬物聯網設備,請選擇隨機複選框並設置範圍,以避免每次返回相同的溫度值。 選擇隨機複選框並設置範圍

    💁 如果您想運行這個程序一整天,那麼您需要確保運行服務器代碼的計算機不會進入睡眠狀態,無論是通過更改電源設置,還是運行類似這個保持系統活躍的Python腳本

💁 您可以在code-server/temperature-sensor-server文件夾中找到此代碼。

任務 - 使用存儲的數據計算GDD

一旦服務器捕獲了溫度數據,就可以計算植物的GDD。

手動執行此操作的步驟如下:

  1. 找到植物的基礎溫度。例如,草莓的基礎溫度為10°C。

  2. temperature.csv中找到當天的最高和最低溫度

  3. 使用前面給出的GDD計算公式計算GDD

例如,如果當天的最高溫度為25°C,最低溫度為12°C:

GDD = 25 + 12 除以 2,然後從結果中減去 10,得到 8.5

  • 25 + 12 = 37
  • 37 / 2 = 18.5
  • 18.5 - 10 = 8.5

因此,草莓獲得了8.5 GDD。草莓需要大約250 GDD才能結果,所以還有一段時間。


🚀 挑戰

植物需要的不僅僅是熱量才能生長。還需要哪些其他條件?

對於這些條件,找找看是否有傳感器可以測量它們。有沒有執行器可以控制這些水平?您將如何組合一個或多個物聯網設備來優化植物生長?

課後測驗

課後測驗

回顧與自學

作業

使用Jupyter Notebook可視化GDD數據