メインコンテンツまでスキップ

IoTを使って植物の成長を予測する

このレッスンの概要を示すスケッチノート

スケッチノート: Nitya Narasimhan. 画像をクリックすると大きなバージョンが表示されます。

講義前のクイズ

講義前のクイズ

はじめに

植物が成長するためには、水、二酸化炭素、栄養素、光、熱が必要です。このレッスンでは、気温を測定して植物の成長と成熟の速度を計算する方法を学びます。

このレッスンでは以下の内容をカバーします:

デジタル農業

デジタル農業は、農業からデータを収集、保存、分析するためのツールを使用して、農業の方法を変革しています。現在、私たちは世界経済フォーラムによって「第四次産業革命」と呼ばれる時代にあり、デジタル農業の台頭は「第四次農業革命」または「農業4.0」とも呼ばれています。

🎓 デジタル農業という用語には、「農業バリューチェーン」全体が含まれます。これは、農場から食卓までの全旅程を指します。食品が出荷および加工される際の品質追跡、倉庫およびeコマースシステム、さらにはトラクターのレンタルアプリも含まれます!

これらの変化により、農家は収穫量を増やし、肥料や農薬の使用量を減らし、水をより効率的に使用することができます。主に裕福な国で使用されていますが、センサーやその他のデバイスの価格が徐々に下がり、発展途上国でも利用しやすくなっています。

デジタル農業によって可能になった技術のいくつかは次のとおりです:

  • 温度測定 - 温度を測定することで、農家は植物の成長と成熟を予測できます。
  • 自動灌漑 - 土壌の湿度を測定し、土壌が乾燥しすぎたときに灌漑システムをオンにすることで、タイマーによる灌漑を避けます。タイマーによる灌漑は、暑く乾燥した時期に作物が十分に水を得られなかったり、雨の時期に過剰に水を与えたりする可能性があります。土壌が必要とする時にのみ水を与えることで、農家は水の使用を最適化できます。
  • 害虫駆除 - 農家は自動ロボットやドローンにカメラを搭載して害虫をチェックし、必要な場所にのみ農薬を適用することで、使用する農薬の量を減らし、地元の水供給への農薬の流出を減らすことができます。

✅ 調査を行ってください。農業の収穫量を改善するために使用されている他の技術は何ですか?

🎓 「精密農業」という用語は、フィールドごと、さらにはフィールドの一部ごとに作物を観察、測定、対応することを定義するために使用されます。これには、水、栄養素、害虫のレベルを測定し、正確に対応することが含まれます。例えば、フィールドの一部にのみ水を与えることです。

農業において温度が重要な理由

植物について学ぶとき、ほとんどの学生は水、光、二酸化炭素(CO2)、栄養素の必要性について教えられます。植物は成長するために温かさも必要です。これは、春に気温が上がると植物が開花する理由であり、短い暖かい期間のためにスノードロップや水仙が早く芽を出す理由であり、温室や温室が植物を成長させるのに非常に効果的である理由です。

🎓 温室と温室は似たような仕事をしますが、重要な違いがあります。温室は人工的に加熱され、農家が温度をより正確に制御できるようにしますが、温室は太陽の熱に依存し、通常、熱を逃がすための窓や他の開口部のみが制御手段です。

植物には、日平均温度に基づいた基準温度、最適温度、最大温度があります。

  • 基準温度 - これは植物が成長するために必要な最低日平均温度です。
  • 最適温度 - これは最大の成長を得るための最良の日平均温度です。
  • 最大温度 - これは植物が耐えられる最大温度です。これを超えると、植物は水を節約し生き残るために成長を停止します。

💁 これらは日中と夜間の温度を平均した平均温度です。植物は、より効率的に光合成を行い、夜間にエネルギーを節約するために、昼と夜で異なる温度が必要です。

各植物種には、基準、最適、最大の異なる値があります。これが、一部の植物が暑い国で繁栄し、他の植物が寒い国で繁栄する理由です。

✅ 調査を行ってください。あなたの庭、学校、または地元の公園にある植物について、基準温度を見つけることができるかどうかを確認してください。

温度が上がるにつれて成長率が上がり、温度が高すぎると成長率が下がるグラフ

上のグラフは、成長率と温度の関係を示す例です。基準温度までは成長がありません。成長率は最適温度まで上昇し、その後ピークに達した後に低下します。最大温度では成長が停止します。

このグラフの形状は植物種によって異なります。最適温度を超えると急激に低下するものもあれば、基準から最適までゆっくりと上昇するものもあります。

💁 農家が最良の成長を得るためには、3つの温度値を知り、育てている植物のグラフの形状を理解する必要があります。

農家が温度を制御できる場合、例えば商業用温室では、植物に最適化することができます。例えば、トマトを栽培する商業用温室では、日中の温度を約25°C、夜間の温度を約20°Cに設定して最速の成長を得ることができます。

🍅 これらの温度を人工照明、肥料、制御されたCO2レベルと組み合わせることで、商業栽培者は一年中栽培と収穫を行うことができます。

周囲温度の測定

温度センサーを使用して、IoTデバイスで周囲温度を測定できます。

タスク - 温度を測定する

IoTデバイスを使用して温度を監視するための関連ガイドを実行してください:

成長度日

成長度日(または成長度単位)は、温度に基づいて植物の成長を測定する方法です。植物が十分な水、栄養素、二酸化炭素(CO2)を持っていると仮定すると、温度が成長率を決定します。

成長度日、またはGDDは、植物の基準温度を超える1日の平均温度として1日ごとに計算されます。各植物は成長、開花、作物の生産と成熟のために特定の数のGDDを必要とします。毎日のGDDが多いほど、植物は速く成長します。

🇺🇸 アメリカ人のために、成長度日は華氏を使用して計算することもできます。5 GDDC(摂氏の成長度日)は9 GDDF(華氏の成長度日)に相当します。

GDDの完全な公式は少し複雑ですが、よく使われる簡略化された方程式があります:

GDD = T max + T min を2で割り、すべてをT baseから引く

  • GDD - これは成長度日の数です
  • Tmax - これは1日の最高温度(摂氏)です
  • Tmin - これは1日の最低温度(摂氏)です
  • Tbase - これは植物の基準温度(摂氏)です

💁 30°Cを超えるTmaxやTbaseを下回るTminに対処するバリエーションもありますが、ここでは無視します。

例 - トウモロコシ/トウモロコシ 🌽

品種によって異なりますが、トウモロコシ(またはトウモロコシ)は成熟するために800から2,700 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を計算し、成熟に近いときにのみチェックすることができます。

IoTデバイスを使用して温度データを収集することで、植物が成熟に近づいたときに自動的に通知されるようにすることができます。これの典型的なアーキテクチャは、IoTデバイスが温度を測定し、MQTTのようなものを使用してインターネット経由でこのテレメトリーデータを公開することです。サーバーコードはこのデータをリッスンし、データをデータベースなどの場所に保存します。これにより、データを後で分析できるようになります。例えば、毎晩のジョブでその日のGDDを計算し、これまでの各作物のGDDを合計し、植物が成熟に近づいた場合にアラートを出すことができます。

テレメトリーデータがサーバーに送信され、データベースに保存される

サーバーコードは、追加情報を追加することでデータを補完することもできます。例えば、IoTデバイスはデバイスの識別子を公開し、サーバーコードはこれを使用してデバイスの場所と監視している作物を照会できます。また、一部のIoTデバイスには正確な時間を追跡するためのハードウェアがないか、インターネット経由で現在の時間を読み取るための追加コードが必要なため、現在の時間などの基本データを追加することもできます。

✅ なぜ異なるフィールドが異なる温度を持つと思いますか?

タスク - 温度情報を公開する

IoTデバイスを使用して温度データをMQTT経由で公開し、後で分析できるようにするための関連ガイドを実行してください:

タスク - 温度情報をキャプチャして保存する

IoTデバイスがテレメトリを公開したら、サーバーコードを作成してこのデータを購読し、保存します。データベースに保存するのではなく、サーバーコードはデータをカンマ区切り値(CSV)ファイルに保存します。CSVファイルは、各値がカンマで区切られ、各レコードが新しい行にあるテキストとしてデータを行として保存します。これは、データをファイルとして保存するための便利で人間が読みやすく、広くサポートされている方法です。

CSVファイルには、日付温度の2つの列があります。日付列は、サーバーがメッセージを受信した現在の日付と時刻に設定され、温度はテレメトリメッセージから取得されます。

  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ファイルを開き、最後に新しい行を追加します。行には、人間が読みやすい形式にフォーマットされた現在の日付と時刻、およびIoTデバイスから受信した温度が含まれます。データは、マイクロ秒を含まないタイムゾーン付きのISO 8601形式で保存されます。

  6. 前と同じ方法でこのコードを実行し、IoTデバイスがデータを送信していることを確認します。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計算のために十分なデータを収集するために、これを1日中実行する必要があります。

    💁 仮想IoTデバイスを使用している場合は、ランダムチェックボックスを選択し、温度値が返されるたびに同じ温度を取得しないように範囲を設定します。 ランダムチェックボックスを選択し、範囲を設定する

    💁 これを1日中実行する場合は、サーバーコードが実行されているコンピューターがスリープしないようにする必要があります。電源設定を変更するか、このシステムをアクティブに保つ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を必要とするため、まだしばらく時間がかかります。


🚀 チャレンジ

植物は成長するために熱以外にも多くのものが必要です。他に何が必要ですか?

これらについて、測定できるセンサーがあるかどうかを調べてください。これらのレベルを制御するアクチュエータはどうですか?植物の成長を最適化するために、1つ以上のIoTデバイスをどのように組み合わせますか?

講義後のクイズ

講義後のクイズ

レビューと自己学習

課題

Jupyter Notebookを使用してGDDデータを視覚化する