# IoTで植物の成長を予測する ![このレッスンの概要を示すスケッチノート](../../../../../translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.ja.jpg) > スケッチノート作成者:[Nitya Narasimhan](https://github.com/nitya)。画像をクリックすると拡大版が表示されます。 ## 講義前のクイズ [講義前のクイズ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/9) ## はじめに 植物が成長するためには、水、二酸化炭素、栄養分、光、そして熱が必要です。このレッスンでは、気温を測定することで植物の成長と成熟速度を計算する方法を学びます。 このレッスンでは以下を学びます: * [デジタル農業](../../../../../2-farm/lessons/1-predict-plant-growth) * [農業において気温が重要な理由](../../../../../2-farm/lessons/1-predict-plant-growth) * [周囲温度の測定](../../../../../2-farm/lessons/1-predict-plant-growth) * [成長度日 (GDD)](../../../../../2-farm/lessons/1-predict-plant-growth) * [温度センサーのデータを使ったGDDの計算](../../../../../2-farm/lessons/1-predict-plant-growth) ## デジタル農業 デジタル農業は、農業の方法を変革し、データを収集、保存、分析するツールを活用しています。現在、世界経済フォーラムによって「第四次産業革命」と呼ばれる時代にあり、デジタル農業の台頭は「第四次農業革命」または「農業4.0」とも呼ばれています。 > 🎓 デジタル農業という用語は、「農業バリューチェーン」全体も含みます。これは、農場から食卓までの全過程を指します。食品の輸送や加工中の品質追跡、倉庫管理やeコマースシステム、さらにはトラクターのレンタルアプリも含まれます! これらの変化により、農家は収穫量を増やし、肥料や農薬の使用量を減らし、水をより効率的に使用することができます。主に裕福な国で使用されていますが、センサーやその他のデバイスの価格が徐々に下がり、発展途上国でも利用可能になりつつあります。 デジタル農業によって可能になる技術の例: * 温度測定 - 温度を測定することで、植物の成長と成熟を予測できます。 * 自動灌漑 - 土壌の湿度を測定し、土壌が乾燥しすぎた場合に灌漑システムを作動させる。タイマー式の灌漑では、暑く乾燥した時期に作物が十分に水を得られない、または雨の時期に過剰に水を与える可能性があります。土壌が必要とする時だけ水を与えることで、農家は水の使用を最適化できます。 * 害虫駆除 - 自動ロボットやドローンに搭載されたカメラを使用して害虫をチェックし、必要な場所だけに農薬を散布することで、農薬の使用量を減らし、地元の水源への農薬流出を減らすことができます。 ✅ 調査してみましょう。農業の収穫量を改善するために使用されている他の技術は何ですか? > 🎓 「精密農業」という用語は、畑単位、さらには畑の一部単位で作物を観察、測定、対応することを指します。これには、水分、栄養分、害虫レベルを測定し、正確に対応することが含まれます。例えば、畑の一部だけに水を与えるなどです。 ## 農業において気温が重要な理由 植物について学ぶ際、多くの学生は水、光、二酸化炭素、栄養分の必要性について教えられます。しかし、植物は成長するために暖かさも必要です。これが、春に気温が上昇すると植物が開花する理由であり、短い暖かい期間の後にスノードロップやスイセンが早く芽を出す理由です。また、温室やハウスが植物の成長を促進するのに優れている理由でもあります。 > 🎓 ハウスと温室は似た役割を果たしますが、重要な違いがあります。ハウスは人工的に加熱され、農家が温度をより正確に制御できるのに対し、温室は太陽の熱に依存し、通常は窓や開口部を使って熱を逃がすだけの制御が行われます。 植物には、基準温度(最低温度)、最適温度、最大温度があり、これらはすべて日平均気温に基づいています。 * 基準温度 - 植物が成長するために必要な最低日平均気温。 * 最適温度 - 最も成長が促進される日平均気温。 * 最大温度 - 植物が耐えられる最大気温。この温度を超えると、植物は水を節約し生き残るために成長を停止します。 > 💁 これらは日中と夜間の気温を平均した値です。植物は効率的に光合成を行い、夜間にエネルギーを節約するために、昼夜で異なる温度が必要です。 植物の種類によって、基準温度、最適温度、最大温度の値は異なります。これが、ある植物が暑い国で繁栄し、別の植物が寒い国で繁栄する理由です。 ✅ 調査してみましょう。庭や学校、近くの公園にある植物について、基準温度を調べてみてください。 ![気温が上昇するにつれて成長率が上がり、気温が高すぎると成長率が下がるグラフ](../../../../../translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.ja.png) 上のグラフは、成長率と気温の関係を示しています。基準温度までは成長がありません。成長率は最適温度まで上昇し、その後ピークを迎えた後に減少します。最大温度では成長が停止します。 このグラフの形状は植物の種類によって異なります。最適温度を超えた後の急激な減少があるものもあれば、基準温度から最適温度までの増加が緩やかなものもあります。 > 💁 農家が最良の成長を得るためには、3つの温度値を知り、育てている植物のグラフの形状を理解する必要があります。 農家が温度を制御できる場合、例えば商業用ハウスでは、植物に最適な条件を整えることができます。例えば、トマトを栽培する商業用ハウスでは、日中の温度を約25°C、夜間の温度を約20°Cに設定して最速の成長を促します。 > 🍅 これらの温度に人工光、肥料、制御された二酸化炭素レベルを組み合わせることで、商業栽培者は一年中栽培と収穫を行うことができます。 ## 周囲温度の測定 温度センサーをIoTデバイスと組み合わせて周囲温度を測定することができます。 ### タスク - 温度を測定する IoTデバイスを使用して温度を監視するための関連ガイドを実行してください: * [Arduino - Wio Terminal](wio-terminal-temp.md) * [シングルボードコンピュータ - Raspberry Pi](pi-temp.md) * [シングルボードコンピュータ - 仮想デバイス](virtual-device-temp.md) ## 成長度日 (GDD) 成長度日(または成長度単位)は、温度に基づいて植物の成長を測定する方法です。植物が十分な水、栄養分、二酸化炭素を持っていると仮定すると、温度が成長率を決定します。 成長度日、またはGDDは、植物の基準温度を超える1日の平均気温として計算されます。各植物は成長、開花、または作物の成熟に必要な一定のGDDを必要とします。1日あたりのGDDが多いほど、植物は速く成長します。 > 🇺🇸 アメリカでは、成長度日は華氏を使用して計算することもできます。摂氏での5 GDDは華氏での9 GDDに相当します。 GDDの完全な公式は少し複雑ですが、よく使われる簡略化された式があります: ![GDD = T max + T min divided by 2, all minus T base](../../../../../translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.ja.png) * **GDD** - これは成長度日の数です * **T max** - これは1日の最高気温(摂氏)です * **T min** - これは1日の最低気温(摂氏)です * **T base** - これは植物の基準温度(摂氏)です > 💁 T maxが30°Cを超える場合やT minがT baseを下回る場合を扱うバリエーションもありますが、ここではそれを無視します。 ### 例 - トウモロコシ 🌽 品種によりますが、トウモロコシ(またはメイズ)は成熟するために800〜2,700 GDDが必要で、基準温度は10°Cです。 基準温度を超えた最初の日に測定された温度は以下の通りです: | 測定値 | 温度 °C | | :---------- | :-----: | | 最高気温 | 16 | | 最低気温 | 12 | これらの数値を計算式に代入すると: * T max = 16 * T min = 12 * T base = 10 計算結果は以下の通りです: ![GDD = 16 + 12 divided by 2, all minus 10, giving an answer of 4](../../../../../translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.ja.png) この日、トウモロコシは4 GDDを受け取りました。成熟に800 GDDが必要な品種の場合、成熟までにさらに796 GDDが必要です。 ✅ 調査してみましょう。庭や学校、近くの公園にある植物について、成熟または作物を生産するために必要なGDDの数を調べてみてください。 ## 温度センサーデータを使ったGDDの計算 植物は固定された日付で成長するわけではありません。例えば、種を植えてから正確に100日後に果実をつけるとは限りません。農家は植物が成長するのにかかるおおよその時間を知り、毎日チェックして作物が準備できているか確認します。 これには大規模な農場では大きな労力がかかり、予期せず早く準備ができた作物を見逃すリスクがあります。温度を測定することで、農家は植物が受け取ったGDDを計算し、成熟に近い時期だけチェックすることができます。 IoTデバイスを使用して温度データを収集することで、植物が成熟に近づいたときに自動的に通知を受け取ることができます。この典型的なアーキテクチャは、IoTデバイスが温度を測定し、MQTTなどを使用してインターネット経由でこのテレメトリデータを送信することです。サーバーコードはこのデータをリッスンして保存し、例えばデータベースに保存します。これにより、後でデータを分析することができます。例えば、毎晩のジョブでその日のGDDを計算し、これまでの各作物のGDDを合計し、植物が成熟に近づいている場合に通知します。 ![テレメトリデータがサーバーに送信され、データベースに保存される](../../../../../translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.ja.png) サーバーコードはデータに追加情報を付加することもできます。例えば、IoTデバイスがどのデバイスであるかを示す識別子を送信し、サーバーコードがこれを使用してデバイスの場所や監視している作物を調べることができます。また、一部のIoTデバイスは正確な時間を追跡するためのハードウェアを持っていないため、現在の時間を追加することもできます。 ✅ 畑ごとに異なる温度がある理由は何だと思いますか? ### タスク - 温度情報を送信する IoTデバイスを使用してMQTT経由で温度データを送信し、後で分析できるようにするための関連ガイドを実行してください: * [Arduino - Wio Terminal](wio-terminal-temp-publish.md) * [シングルボードコンピュータ - Raspberry Pi/仮想IoTデバイス](single-board-computer-temp-publish.md) ### タスク - 温度情報をキャプチャして保存する IoTデバイスがテレメトリを送信し始めたら、サーバーコードを作成してこのデータを購読し保存します。データベースに保存する代わりに、サーバーコードはデータをカンマ区切り値(CSV)ファイルに保存します。CSVファイルは、テキストとして行ごとに値を保存し、各値をカンマで区切り、各レコードを新しい行に記録します。これは、データをファイルとして保存するための便利で人間が読みやすく、広くサポートされている方法です。 CSVファイルには2つの列があります - *date* と *temperature*。*date* 列は、サーバーがメッセージを受信した現在の日付と時刻に設定され、*temperature* はテレメトリメッセージから取得されます。 1. レッスン4の手順を繰り返して、テレメトリを購読するサーバーコードを作成します。コマンドを送信するコードを追加する必要はありません。 この手順は以下の通りです: * Python仮想環境を構成してアクティブ化する * paho-mqtt pipパッケージをインストールする * テレメトリトピックで公開されたMQTTメッセージをリッスンするコードを書く > ⚠️ 必要に応じて、[レッスン4の指示を参照して、MQTTブローカーからテレメトリを受信するPythonアプリを作成してください](../../../1-getting-started/lessons/4-connect-internet/README.md#receive-telemetry-from-the-mqtt-broker)。 このプロジェクトのフォルダー名を `temperature-sensor-server` にしてください。 1. `client_name` がこのプロジェクトを反映していることを確認してください: ```cpp client_name = id + 'temperature_sensor_server' ``` 1. 既存のインポートの下に以下のインポートをファイルの上部に追加してください: ```python from os import path import csv from datetime import datetime ``` これにより、ファイルを読み取るためのライブラリ、CSVファイルと対話するためのライブラリ、日付と時刻を扱うためのライブラリがインポートされます。 1. `handle_telemetry` 関数の前に以下のコードを追加してください: ```python 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ファイルが既に存在するかどうかを確認します。存在しない場合は、列ヘッダーを最初の行に含む形で作成されます。 1. `handle_telemetry` 関数の最後に以下のコードを追加してください: ```python 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形式](https://wikipedia.org/wiki/ISO_8601)で保存されますが、マイクロ秒は含まれません。 1. このコードを以前と同じように実行し、IoTデバイスがデータを送信していることを確認してください。同じフォルダ内に`temperature.csv`という名前のCSVファイルが作成されます。これを開くと、日付/時刻と温度測定値が表示されます: ```output 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 ``` 1. データを収集するためにこのコードをしばらく実行してください。理想的には、GDD計算に十分なデータを収集するために丸一日実行するべきです。 > 💁 仮想IoTデバイスを使用している場合は、ランダムチェックボックスを選択し、範囲を設定して、温度値が毎回同じにならないようにしてください。 ![ランダムチェックボックスを選択し、範囲を設定](../../../../../translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.ja.png) > 💁 丸一日実行したい場合は、サーバーコードが動作しているコンピュータがスリープ状態にならないようにする必要があります。電源設定を変更するか、[このシステムをアクティブに保つPythonスクリプト](https://github.com/jaqsparow/keep-system-active)のようなものを実行してください。 > 💁 このコードは[code-server/temperature-sensor-server](../../../../../2-farm/lessons/1-predict-plant-growth/code-server/temperature-sensor-server)フォルダにあります。 ### タスク - 保存されたデータを使用してGDDを計算する サーバーが温度データを収集したら、植物のGDDを計算できます。 手動でこれを行う手順は以下の通りです: 1. 植物の基準温度を見つけます。例えば、イチゴの場合、基準温度は10°Cです。 1. `temperature.csv`からその日の最高温度と最低温度を見つけます。 1. 以前に示したGDD計算式を使用してGDDを計算します。 例えば、その日の最高温度が25°C、最低温度が12°Cの場合: ![GDD = 25 + 12を2で割り、その結果から10を引くと8.5になる](../../../../../translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.ja.png) * 25 + 12 = 37 * 37 / 2 = 18.5 * 18.5 - 10 = 8.5 したがって、イチゴは**8.5** GDDを受け取ったことになります。イチゴが実をつけるには約250 GDDが必要なので、まだ時間がかかります。 --- ## 🚀 チャレンジ 植物が成長するには熱以外にも必要なものがあります。他に何が必要でしょうか? これらを測定できるセンサーがあるか調べてください。また、これらのレベルを制御するアクチュエータはどうでしょうか?植物の成長を最適化するために、1つ以上のIoTデバイスをどのように組み合わせますか? ## 講義後のクイズ [講義後のクイズ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10) ## 復習と自己学習 * [デジタル農業のWikipediaページ](https://wikipedia.org/wiki/Digital_agriculture)でデジタル農業についてさらに学びましょう。また、[精密農業のWikipediaページ](https://wikipedia.org/wiki/Precision_agriculture)で精密農業についても学びましょう。 * 成長度日数(GDD)の計算は、ここで示した簡略化されたものよりも複雑です。基準温度以下の温度をどのように扱うかについて、[成長度日数のWikipediaページ](https://wikipedia.org/wiki/Growing_degree-day)でさらに詳しく学びましょう。 * 将来、食料が不足する可能性があります。同じ農業方法を使い続ける場合、[未来のハイテク農場に関するYouTube動画](https://www.youtube.com/watch?v=KIEOuKD9KX8)でハイテク農業技術について学びましょう。 ## 課題 [Jupyter Notebookを使用してGDDデータを視覚化する](assignment.md) **免責事項**: この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は責任を負いません。