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

土壌水分の検出

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

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

このレッスンは、Microsoft ReactorIoT 01 for Beginners Project 2 - Digital Agriculture series の一環として教えられました。

土壌水分センサーとデジタル農業

講義前のクイズ

講義前のクイズ

はじめに

前回のレッスンでは、環境の特性を測定し、それを使用して植物の成長を予測する方法を学びました。温度は制御できますが、制御には費用がかかり、制御された環境が必要です。植物にとって最も簡単に制御できる環境の特性は水です。これは、大規模な灌漑システムから庭に水をやる子供たちまで、毎日制御されています。

庭に水をやる子供

このレッスンでは、土壌水分の測定について学び、次のレッスンでは自動灌漑システムの制御方法を学びます。このレッスンでは、3つ目のセンサーを紹介します。すでに光センサーと温度センサーを使用しましたが、このレッスンでは、センサーとアクチュエーターがIoTデバイスとどのように通信するかについても学び、土壌水分センサーがどのようにデータをIoTデバイスに送信できるかを理解します。

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

土壌水分

植物は成長するために水を必要とします。植物は全体を通して水を吸収し、その大部分は根系によって吸収されます。植物は水を3つの目的で使用します:

  • 光合成 - 植物は水、二酸化炭素、光を使って炭水化物と酸素を生成する化学反応を起こします。
  • 蒸散 - 植物は葉の気孔を通じて空気中の二酸化炭素を拡散させるために水を使用します。このプロセスはまた、植物内の栄養素を運び、人間の汗のように植物を冷却します。
  • 構造 - 植物は構造を維持するためにも水を必要とします。植物は90%が水で構成されており(人間は60%)、この水が細胞を硬く保ちます。植物が十分な水を持たないと、しおれて最終的には死んでしまいます。

水は植物の根を通じて吸収され、光合成や植物の構造に使用されます

✅ 調査してみましょう:蒸散によってどれだけの水が失われるか?

根系は植物が成長する土壌の水分から水を供給します。土壌に水が少なすぎると植物は成長するために十分な水を吸収できず、水が多すぎると根が必要な酸素を吸収できずに機能しなくなります。これにより根が死に、植物は生きるために必要な栄養素を得ることができなくなります。

農家が最良の植物成長を得るためには、土壌が湿りすぎず乾きすぎないことが重要です。IoTデバイスは土壌水分を測定することで、農家が必要なときにだけ水をやることができるようにします。

土壌水分を測定する方法

土壌水分を測定するために使用できるさまざまなタイプのセンサーがあります:

  • 抵抗式 - 抵抗式センサーには土壌に挿入する2つのプローブがあります。電流が1つのプローブに送られ、もう1つのプローブで受信されます。センサーは土壌の抵抗を測定し、2つ目のプローブで電流がどれだけ減少するかを測定します。水は電気の良い導体であるため、土壌の水分含有量が高いほど抵抗は低くなります。

    抵抗式土壌水分センサー

    💁 抵抗式土壌水分センサーは、数センチメートル離れた2つの金属片(例えば釘)を使用し、それらの間の抵抗をマルチメーターで測定することで作成できます。

  • 静電容量式 - 静電容量式水分センサーは、正と負の電極板に蓄えられる電荷の量、つまり静電容量を測定します。土壌の静電容量は水分レベルの変化に伴って変化し、これを電圧に変換してIoTデバイスで測定できます。土壌が湿っているほど、出力される電圧は低くなります。

    静電容量式土壌水分センサー

これらはどちらもアナログセンサーであり、土壌水分を示す電圧を返します。この電圧がどのようにしてコードに届くのでしょうか?これらのセンサーをさらに進める前に、センサーとアクチュエーターがIoTデバイスとどのように通信するかを見てみましょう。

センサーがIoTデバイスと通信する方法

これまでのレッスンで、いくつかのセンサーとアクチュエーターについて学びました。これらは物理的なハードウェアラボを行っている場合、IoTデバイスキットと通信していました。しかし、この通信はどのように機能するのでしょうか?土壌水分センサーの抵抗測定がどのようにしてコードで使用できる数値になるのでしょうか?

ほとんどのセンサーとアクチュエーターと通信するには、ハードウェアと通信プロトコルが必要です。これは、データを送受信するための明確に定義された方法です。例えば、静電容量式土壌水分センサーを考えてみましょう:

  • このセンサーはどのようにしてIoTデバイスに接続されるのでしょうか?
  • アナログ信号である電圧を測定する場合、ADCが必要であり、これにより値のデジタル表現が作成されます。この値は0と1を送信するための交互の電圧として送信されますが、各ビットはどのくらいの時間送信されるのでしょうか?
  • センサーがデジタル値を返す場合、それは0と1のストリームになりますが、各ビットはどのくらいの時間送信されるのでしょうか?
  • 電圧が0.1秒間高い場合、それは単一の1ビットでしょうか、それとも連続する2つの1ビットでしょうか、それとも10でしょうか?
  • 数値はどの時点で始まるのでしょうか?00001101は25でしょうか、それとも最初の5ビットは前の値の終わりでしょうか?

ハードウェアはデータが送信される物理的な接続性を提供し、異なる通信プロトコルはデータが正しい方法で送受信されることを保証し、それが解釈できるようにします。

汎用入出力 (GPIO) ピン

GPIOは、ハードウェアをIoTデバイスに接続するために使用できるピンのセットであり、Raspberry PiやWio TerminalなどのIoT開発キットによくあります。このセクションでカバーするさまざまな通信プロトコルをGPIOピンを介して使用できます。一部のGPIOピンは通常3.3Vまたは5Vの電圧を提供し、一部のピンはグランドであり、他のピンはプログラムによって電圧を送信(出力)または受信(入力)するように設定できます。

💁 電気回路は、使用している回路を介して電圧をグランドに接続する必要があります。電圧をバッテリーの正端子(+ve)と考え、グランドを負端子(-ve)と考えることができます。

GPIOピンを使用して、オンまたはオフの値のみを気にするデジタルセンサーやアクチュエーターと直接通信できます。オンは高、オフは低と呼ばれます。いくつかの例を示します:

  • ボタン。ボタンを5Vピンと入力に設定されたピンの間に接続できます。ボタンを押すと、5Vピンからボタンを通じて入力ピンに回路が完成します。コードから入力ピンの電圧を読み取り、電圧が高(5V)であればボタンが押されており、低(0V)であればボタンが押されていないことがわかります。実際の電圧自体は読み取られず、電圧がしきい値を超えているかどうかに応じて1または0のデジタル信号が得られます。

    ボタンに5ボルトが送信されます。押されていないときは0ボルト、または0が返され、押されているときは5ボルト、または1が返されます

  • LED。LEDを出力ピンとグランドピンの間に接続できます(抵抗を使用しないとLEDが焼損します)。コードから出力ピンを高に設定すると、3.3Vが送信され、3.3VピンからLEDを通じてグランドピンに回路が完成します。これによりLEDが点灯します。

    LEDに0(3.3V)の信号が送信され、LEDが点灯します。0(0V)が送信されると、LEDは点灯しません。

より高度なセンサーの場合、GPIOピンを使用してデジタルセンサーやアクチュエーターと直接デジタルデータを送受信したり、ADCやDACを使用してアナログセンサーやアクチュエーターと通信したりできます。

💁 これらのラボでRaspberry Piを使用している場合、Grove Base Hatにはアナログセンサー信号をデジタルに変換してGPIOを介して送信するハードウェアがあります。

✅ GPIOピンを持つIoTデバイスをお持ちの場合、これらのピンを見つけ、どのピンが電圧、グランド、またはプログラム可能であるかを示す図を見つけてください。

アナログピン

Arduinoデバイスなどの一部のデバイスにはアナログピンがあります。これらはGPIOピンと同じですが、デジタル信号のみをサポートするのではなく、電圧範囲を数値に変換するADCを備えています。通常、ADCは10ビットの解像度を持ち、電圧を0〜1,023の値に変換します。

例えば、3.3Vのボードでは、センサーが3.3Vを返す場合、返される値は1,023になります。返される電圧が1.65Vの場合、返される値は511になります。

3.3Vを送信し、1.65Vまたは511の読み取り値を返す土壌水分センサー

💁 ナイトライト - レッスン3では、光センサーは0〜1,023の値を返しました。Wio Terminalを使用している場合、センサーはアナログピンに接続されていました。Raspberry Piを使用している場合、センサーはベースハットのアナログピンに接続されており、ADCが統合されてGPIOピンを介して通信していました。仮想デバイスはアナログピンをシミュレートするために0〜1,023の値を送信するように設定されていました。

土壌水分センサーは電圧に依存しているため、アナログピンを使用し、0〜1,023の値を返します。

インターインテグレーテッドサーキット (I2C)

I2C(アイスクエアードシーと発音)は、複数のコントローラーと複数のペリフェラルを持つプロトコルで、接続されたデバイスはすべてコントローラーまたはペリフェラルとして動作し、I2Cバス(データを転送する通信システムの名前)を介して通信できます。データはアドレス付きパケットとして送信され、各パケットには通信対象の接続デバイスのアドレスが含まれます。

💁 このモデルは以前はマスター/スレーブと呼ばれていましたが、奴隷制との関連性のためにこの用語は廃止されつつあります。Open Source Hardware Associationはコントローラー/ペリフェラルを採用しています、ただし古い用語の参照がまだ見られるかもしれません。

デバイスにはI2Cバスに接続する際に使用されるアドレスがあり、通常はデバイスにハードコードされています。例えば、SeeedのGroveセンサーの各タイプには同じアドレスがあります。すべての光センサーには同じアドレスがあり、すべてのボタンには光センサーのアドレスとは異なるアドレスがあります。一部のデバイスには、ジャンパー設定を変更したりピンをはんだ付けしたりしてアドレスを変更する方法があります。

I2Cには、2本の主なワイヤーと2本の電源ワイヤーがあります:

ワイヤー名前説明
SDAシリアルデータこのワイヤーはデバイス間でデータを送信するためのものです。
SCLシリアルクロックこのワイヤーはコントローラーによって設定された速度でクロック信号を送信します。
VCC電圧共通コレクタデバイスの電源供給。このワイヤーはプルアップ抵抗を介してSDAおよびSCLワイヤーに接続され、どのデバイスもコントローラーでないときに信号をオフにします。
GNDグランド電気回路の共通グランドを提供します。

SDAおよびSCLワイヤーに接続された3つのデバイスを持つI2Cバス、共通のグランドワイヤーを共有

データを送信するには、1つのデバイスがデータを送信する準備ができたことを示すスタート条件を発行します。これによりコントローラーになります。コントローラーは次に、通信したいデバイスのアドレスと、データを読み取るか書き込むかを送信します。データの送信が完了すると、コントローラーはストップ条件を送信して終了を示します。その後、別のデバイスがコントローラーになり、データを送受信できます。

I2Cには速度制限があり、固定速度で動作する3つの異なるモードがあります。最速は最大速度3.4Mbps(メガビット毎秒)の高速モードですが、その速度をサポートするデバイスは非常に少ないです。例えば、Raspberry Piは400Kbps(キロビット毎秒)の高速モードに制限されています。標準モードは100Kbpsで動作します。

💁 IoTハードウェアとしてGrove Base Hatを使用しているRaspberry Piを使用している場合、I2Cセンサーと通信するために使用できる多数のI2Cソケットがボード上にあることがわかります。アナログGroveセンサーもADCを使用してアナログ値をデジタルデータとして送信するためにI2Cを使用するため、使用した光センサーはアナログピンをシミュレートし、値はRaspberry PiがデジタルピンのみをサポートするためI2C経由で送信されました。

ユニバーサル非同期受信送信機 (UART)

UARTは、2つのデバイスが通信できる物理的な回路を含みます。各デバイスには送信(Tx)と受信(Rx)の2つの通信ピンがあり、最初のデバイスのTxピンが2番目のデバイスのRxピンに接続され、2番目のデバイスのTxピンが最初のデバイスのRxピンに接続されています。これにより、データを両方向に送信できます。

  • デバイス1はTxピンからデータを送信し、デバイス2のRxピンで受信します
  • デバイス1はRxピンでデータを受信し、デバイス2のTxピンから送信されます

UARTで、1つのチップのTxピンが別のチップのRxピンに接続され、その逆も同様

🎓 データは1ビットずつ送信され、これをシリアル通信と呼びます。ほとんどのオペレーティングシステムとマイクロコントローラーにはシリアルポートがあり、これはコードで利用可能なシリアルデータを送受信できる接続です。

UARTデバイスにはボーレート(シンボルレートとも呼ばれる)があり、これはデータがビット毎秒で送受信される速度です。一般的なボーレートは9,600で、毎秒9,600ビット(0と1)のデータが送信されます。

UARTはスタートビットとストップビットを使用します。つまり、バイト(8ビット)のデータを送信する前にスタートビットを送信し、8ビットを送信した後にストップビットを送信します。

UARTの速度はハードウェアに依存しますが、最速の実装でも6.5Mbps(メガビット毎秒、または毎秒送信される0または1のビット数)を超えることはありません。

GPIOピンを介してUARTを使用できます。1つのピンをTxとして、もう1つのピンをRxとして設定し、これらを別のデバイスに接続できます。

💁 IoTハードウェアとしてGrove Base Hatを使用しているRaspberry Piを使用している場合、UARTプロトコルを使用するセンサーと通信するために使用できるUARTソケットがボード上にあることがわかります。

シリアルペリフェラルインターフェース (SPI)

SPIは、フラッシュメモリなどのストレージデバイスと通信するために設計された短距離通信用のプロトコルです。これは、単一のコントローラー(通常はIoTデバイスのプロセッサ)が複数のペリフェラルと対話するコントローラー/ペリフェラルモデルに基づいています。コントローラーはペリフェラルを選択し、データを送信または要求することで、すべてを制御します。

💁 I2Cと同様に、コントローラーとペリフェラルの用語は最近の変更であるため、古い用語がまだ使用されている場合があります。

SPIコントローラーは3本のワイヤーを使用し、ペリフェラルごとに1本の追加ワイヤーを使用します。ペリフェラルは4本のワイヤーを使用します。これらのワイヤーは次のとおりです:

ワイヤー名前説明
COPIコントローラー出力、ペリフェラル入力このワイヤーはコントローラーからペリフェラルにデータを送信するためのものです。
CIPOコントローラー入力、ペリフェラル出力このワイヤーはペリフェラルからコントローラーにデータを送信するためのものです。
SCLKシリアルクロックこのワイヤーはコントローラーによって設定された速度でクロック信信号を送信します。
CSチップセレクトコントローラーには複数のワイヤーがあり、各ワイヤーは対応するペリフェラルのCSワイヤーに接続されています。

1つのコントローラーと2つのペリフェラルを持つSPI

CSワイヤーは、COPIおよびCIPOワイヤーを介して1つのペリフェラルを一度にアクティブにして通信するために使用されます。コントローラーがペリフェラルを変更する必要がある場合、現在アクティブなペリフェラルに接続されているCSワイヤーを非アクティブにし、次に通信したいペリフェラルに接続されているワイヤーをアクティブにします。

SPIは全二重であり、コントローラーはCOPIおよびCIPOワイヤーを使用して同じペリフェラルから同時にデータを送受信できます。SPIはSCLKワイヤー上のクロック信号を使用してデバイスを同期させるため、UARTを介して直接送信する場合とは異なり、スタートビットやストップビットは必要ありません。

SPIには定義された速度制限はなく、実装によっては毎秒数メガバイトのデータを送信できることがよくあります。

IoT開発キットは、いくつかのGPIOピンを介してSPIをサポートすることがよくあります。例えば、Raspberry PiではGPIOピン19、21、23、24、および26をSPIに使用できます。

ワイヤレス

一部のセンサーは、Bluetooth(主にBluetooth Low Energy、またはBLE)、LoRaWAN(Long Range低電力ネットワーキングプロトコル)、またはWiFiなどの標準的なワイヤレスプロトコルを介して通信できます。これにより、IoTデバイスに物理的に接続されていないリモートセンサーが可能になります。

商業用土壌水分センサーの一例があります。これらはフィールド内の土壌水分を測定し、LoRaWanを介してハブデバイスにデータを送信します。ハブデバイスはデータを処理するか、インターネット経由で送信します。これにより、センサーがデータを管理するIoTデバイスから離れて配置され、電力消費が削減され、大規模なWiFiネットワークや長いケーブルの必要性がなくなります。

BLEは、リストバンドで動作するフィットネストラッカーなどの高度なセンサーに人気があります。これらは複数のセンサーを組み合わせ、センサーデータをBLEを介して電話などのIoTデバイスに送信します。

✅ あなたの身の回り、家、または学校にBluetoothセンサーがありますか?これらには、温度センサー、占有センサー、デバイストラッカー、フィットネスデバイスなどが含まれるかもしれません。

商業用デバイスが接続するための一般的な方法の1つはZigbeeです。ZigbeeはWiFiを使用してデバイス間にメッシュネットワークを形成し、各デバイスが可能な限り多くの近くのデバイスに接続し、クモの巣のように多数の接続を形成します。1つのデバイスがインターネットにメッセージを送信したい場合、最寄りのデバイスに送信し、それが他の近くのデバイスに転送し続け、最終的にコーディネーターに到達してインターネットに送信されます。

🐝 Zigbeeという名前は、ミツバチが巣に戻った後のワグルダンスに由来します。

土壌の水分レベルを測定する

土壌水分センサー、IoTデバイス、および観葉植物や近くの土壌を使用して、土壌の水分レベルを測定できます。

タスク - 土壌水分を測定する

IoTデバイスを使用して土壌水分を測定するための関連ガイドを参照してください:

センサーのキャリブレーション

センサーは、抵抗や静電容量などの電気的特性を測定します。

🎓 抵抗はオーム(Ω)で測定され、電流が物質を通過する際の抵抗の大きさを示します。電圧が物質に加えられると、通過する電流の量は物質の抵抗に依存します。詳細は電気抵抗のWikipediaページで読むことができます。

🎓 静電容量はファラド(F)で測定され、コンポーネントや回路が電気エネルギーを収集して蓄える能力を示します。詳細は静電容量のWikipediaページで読むことができます。

これらの測定値は常に有用とは限りません。例えば、22.5KΩの測定値を返す温度センサーを想像してみてください。代わりに、測定された値を有用な単位に変換するためにキャリブレーションが必要です。つまり、測定された値を測定された量に一致させ、新しい測定値を適切な単位に変換できるようにすることです。

一部のセンサーは事前にキャリブレーションされています。例えば、前のレッスンで使用した温度センサーはすでにキャリブレーションされており、温度測定値を°Cで返すことができます。工場では、最初に作成されたセンサーが既知の温度範囲にさらされ、抵抗が測定されます。これを使用して、Ω(抵抗の単位)から°Cに変換する計算式が作成されます。

💁 温度から抵抗を計算する公式はSteinhart–Hart方程式と呼ばれます。

土壌水分センサーのキャリブレーション

土壌水分は、重量含水率または体積含水率を使用して測定されます。

  • 重量含水率は、乾燥土壌1キログラムあたりの水のキログラム数として測定されます
  • 体積含水率は、乾燥土壌1立方メートルあたりの水の立方メートル数として測定されます

🇺🇸 アメリカでは、単位の一貫性のために、これらはキログラムの代わりにポンド、立方メートルの代わりに立方フィートで測定できます。

土壌水分センサーは電気抵抗または静電容量を測定します。これは土壌水分だけでなく、土壌の種類によっても変化します。土壌の成分がその電気的特性を変える可能性があるためです。理想的には、センサーはキャリブレーションされるべきです。つまり、センサーからの読み取り値をより科学的な方法で得られた測定値と比較することです。例えば、特定のフィールドのサンプルを年に数回採取し、これらの数値を使用してセンサーをキャリブレーションし、センサーの読み取り値を重量含水率に一致させることができます。

電圧対土壌水分含有量のグラフ

上のグラフはセンサーをキャリブレーションする方法を示しています。電圧は、湿った状態の重量と乾燥状態の重量を比較することによって実験室で測定された土壌サンプルのためにキャプチャされます(湿った状態の重量を測定し、オーブンで乾燥させて乾燥状態の重量を測定します)。いくつかの読み取り値が取得されると、これをグラフにプロットし、点にフィットする線を引くことができます。この線を使用して、IoTデバイスによって取得された土壌水分センサーの読み取り値を実際の土壌水分測定値に変換できます。

💁 抵抗性土壌水分センサーの場合、土壌水分が増加すると電圧が増加します。静電容量性土壌水分センサーの場合、土壌水分が増加すると電圧が減少するため、これらのグラフは上向きではなく下向きに傾斜します。

グラフから補間された土壌水分値

上のグラフは、土壌水分センサーからの電圧読み取り値を示しており、そのグラフの線に従うことで、実際の土壌水分を計算できます。

このアプローチにより、農家はフィールドのいくつかの実験室測定値を取得するだけで済み、その後、IoTデバイスを使用して土壌水分を測定できます。これにより、測定にかかる時間が大幅に短縮されます。


🚀 チャレンジ

抵抗性および静電容量性土壌水分センサーにはいくつかの違いがあります。これらの違いは何ですか?農家が使用するのに最適なタイプはどれですか?この回答は、発展途上国と先進国の間で変わりますか?

講義後のクイズ

講義後のクイズ

レビューと自己学習

センサーとアクチュエーターで使用されるハードウェアとプロトコルについて調べてください:

課題

センサーをキャリブレーションする