土壌pHと水分量の監視方法
DigiKeyの北米担当編集者の提供
2018-03-29
大規模農業でも、簡易な家庭菜園でも、適切な土壌水分とpHを維持することは植物衛生の基本要件です。しかし、これらの土壌特性を測定するために、開発者は、未加工データを特定の土壌測定アプリケーションに必要な有用な情報に変換できる、コスト効果の良い高精度アナログ信号チェーンを設計する必要があります。
これらの精度の目標を実現するための1つのアプローチは、柔軟性に優れたソフトウェアで参照設計を使用することです。このようなソリューションの良い例として、Analog Devicesが提供しているEVAL-CN0398-ARDZボードとソフトウェアパッケージがあります。
この記事では、Analog Devices CN0398ボードと参照設計について紹介する前に、土壌水分とpHの監視に関連するアプリケーションと要件について説明します。また、CN0398設計で使用されている主要コンポーネントによって重要な設計要件に対応する方法を説明し、アプリケーション全体における役割を確認します。最後に、開発者がCN0398ボードと関連のソフトウェアパッケージを使用して土壌監視アプリケーションを迅速に評価およびカスタマイズする方法を説明します。
正確な土壌測定の必要性
土壌水分量とpH値を維持する必要性は、生産規模に関わらず、植物栽培者にとっての基本要件です。土壌の水分が不足すると、どの植物でも光合成が低下し、大豆など重要なマメ科穀物の窒素固定など、他の生物学的過程も低下します。
同様に、受精や自然現象による土壌の変化は、土壌のpH値に大きく影響し、欠かすことができない微生物や土壌養分の減少につながります。穀物によっては、初期の成長段階に土壌のpH値が不適切であると、成長速度と最終的な生産高が下がる場合があります。
適切な土壌監視システムを使用しない場合、土壌水分とpH値は好ましくない値に移行して、結果的に植物衛生が損なわれることになります。Analog Devices EVAL-CN0398-ARDZボードとソフトウェアパッケージは、開発者が独自の要件に合わせて直接採用または変更できる完全な土壌監視設計を提供します。
Analog DeviceのCN0398ボードと参照設計は、土壌測定アプリケーションの外部水分センサ、pHセンサ、および温度センサ専用に作成されています。そのオンボード回路は、シリアルインターフェース経由でアクセスできる水分およびpH出力データの生成に必要な完全なマルチセンサ設計で構成されています。その幅広い機能にも関わらず、設計の消費電力は最大でもわずか1.95ミリアンペア(mA)で、パルス幅変調(PWM)を使用した外部センサへの電力供給などの節電機能を備えています。
開発者はCN0398を使用して、カスタムのハードウェア設計をジャンプスタートするか、Analog Devices EVAL-ADICUP360のArduinoと互換性のあるベースボードを使用できます。Arduinoシールドとして設計されたCN0398をベースボードに直接プラグインすると、迅速なアプリケーション開発を可能にするプラットフォームが提供されます。
エンジニアは、CN0398センサボード、ADICUP360ベースボードおよびAnalog DeviceのCrossCore Embedded Studioと併用できるAnalog DeviceのADuCM360_demo_cn0398オープンソースソフトウェアパッケージを利用して、ソフトウェア開発を迅速に行うことができます。基本のドライバとシステムサポートユーティリティに加え、ソフトウェアパッケージには完全な土壌測定ソフトウェアアプリケーションを含む、完全なC++ソースファイルとヘッダファイルが含まれています。
Analog Devicesボードセットとソフトウェアパッケージを組み合わせることで、開発者は完全なハードウェア設計とソフトウェアアプリケーションを土壌測定アプリケーションにすぐに利用することができます。同様に重要なのは、CN0398ハードウェア参照設計とサンプルソフトウェアによって、これらのアプリケーション固有の要件を満たすカスタムの土壌測定システムの迅速な開発を実現する青写真が提供されることです。
センサ信号処理
CN0398ハードウェア設計には、外部水分センサ、pHおよび温度センサ用に3つの個別の分岐回路が含まれています。各分岐回路には、各センサタイプと連動するために必要なすべての回路が備わっています。これにより、開発者は各センサをCN0398ボード上の対応するコネクタにプラグインし、電力を供給するだけで、センサの稼動を開始できます。この機能はAnalog Devices AD7124-8を中心に作成されています。この製品には、広範な信号調整フロントエンドと24ビットのシグマデルタ(Σ-Δ)アナログ-デジタル変換回路(ADC)が結合されています(図1)。
図1:信号チェーンとADCが統合されているAnalog Devices AD7124-8は、土壌測定に必要なマルチセンサシステムの設計を簡素化します。(画像提供:Analog Devices)
AD7124-8の信号マルチプレクサは、8個の差動入力または15個のシングルエンド入力を、その統合されたプログラム可能な信号チェーン経由でオンチップΣ-Δ ADCとデジタルフィルタに配線し、変換と調整に対応できます。開発者はAD7124-8のシリアルインターフェースを使用して機器のMCUホストに接続し、機器のコントロールとデータ変換を行います。
その広範囲な機能により、開発者は、センサ回路を超えるいくつかの追加コンポーネントと安定した電圧源で幅広い設計要件に対応できます。CN0398参照設計で、Analog DevicesはそのADR3433基準電圧をアナログ供給(AVDD)と基準電圧(REFIN1)として使用しています(図2)。以下で説明するように、3つのセンサ回路それぞれの設計に、いくつかの追加コンポーネントが必要です。
図2:Analog Devices Ad7124-8を使用すると、開発者は特定のセンサ入力回路の他にいくつかの追加コンポーネントと、Analog Devices ADR3433など高精度の基準電圧でセンサ設計を実装できます。(画像提供:Analog Devices)
水分測定
通常、土壌水分システムでは水(80)対空気(1)の誘電率の差を利用して水分量を決定します。これらのシステムでは、開発者はTE Connectivity Measurement Specialties HPP809A033センサなどのシンプルな3線式センサを励起電圧で駆動して、土壌水分量に比例する出力電圧を生成します。
CN0398の設計で、土壌水分フロントエンドは、Analog Devices ADP7118-2.5低ドロップアウト(LDO)線形レギュレータを使用して安定した励起電圧(Vsensor)をセンサに提供しています(図3)。LDOを供給するために、開発者はADICUP360ベースボードまたはカスタム設計から電力を取得できます。
図3:Analog Devices CN0398設計では、同社のADP7118-2.5低ドロップアウト(LDO)レギュレータを使用して、容量性水分センサに安定したVセンサ電圧源を提供します。(画像提供:Analog Devices)
ADP7118は、連続するセンサ電圧レベルを提供できますが、消費電力の問題や一部の水分センサに固有の要件は、センサを動かすパルス源の使用に影響します。これらの要件に対応するために、開発者はLDOの有効(EN)ポートをMCU PWM出力で駆動して、センサに電圧パルスを供給できます。
統合された信号調整回路とADCを使用して、AD7124-8は水分センサの電圧出力を確実にサンプリングおよび変換できます。ただし、土壌測定アプリケーションの場合、変換されたセンサデータと土壌水分の関係が複雑になる場合があります。
土壌水分を評価する際、土壌状態の専門家は、土壌の体積含水率(VWC)で土壌の水分量を比較するのが一般的です。VWCは土量の合計に対する水分量の比率です。通常、水分センサのメーカーはセンサの出力をVWCに変換する式を提供しています。しかし、土壌の状況やアプリケーションそのものの性質により、その固有の状況に適した変換式の使用が必要になる場合があります。
Analog Devicesでは、サンプルのソフトウェアパッケージでいずれかのアプローチの使用を示しています。CN0398.h
ヘッダファイルで定義するUSE_MANUFACTURER_MOISTURE_EQ
を有効にすると、開発者はメーカー推奨の区分的な変換式か、ソフトウェアで提供されている標準の変換式のどちらかを選択できます。ここに示すサンプルのread_moisture()
ルーチンでは、USE_MANUFACTURER_MOISTURE_EQ
が定義されている場合のセンサ出力電圧範囲に応じて水分出力を生成しています(リスト1)。定義がCN0398.h
ヘッダでコメントアウトされている場合、ルーチンでは提供されている数式を使用して電圧を水分に変換できます。
float CN0398::read_moisture()
{
float moisture = 0;
#ifdef MOISTURE_SENSOR_PRESENT
DioSet(ADP7118_PORT, ADP7118_PIN);
set_digital_output(P3, true);
timer.sleep(SENSOR_SETTLING_TIME);
int32_t data = adcValue[MOISTURE_CHANNEL]= read_channel(MOISTURE_CHANNEL);
DioClr(ADP7118_PORT, ADP7118_PIN);
float volt = voltage[MOISTURE_CHANNEL - 1] = data_to_voltage_bipolar(data, 1, 3.3);
#ifdef USE_MANUFACTURER_MOISTURE_EQ
if(volt <= 1.1) {
moisture = 10 * volt - 1;
} else if(volt > 1.1 && volt <= 1.3) {
moisture = 25 * volt - 17.5;
} else if(volt > 1.3 && volt <= 1.82) {
moisture = 48.08 * volt - 47.5;
} else if(volt > 1.82) {
moisture = 26.32 * volt - 7.89;
}
#else
moisture = -1.18467 + 21.5371 * volt - 110.996 * (pow(volt, 2)) + 397.025 * (pow(volt, 3)) - 666.986 * (pow(volt, 4)) + 569.236 * (pow(volt, 5)) - 246.005 * (pow(volt, 6)) + 49.4867 * (pow(volt, 7)) - 3.37077 * (pow(volt, 8));
#endif
if(moisture > 100) moisture = 100;
if(moisture < 0 ) moisture = 0;
#endif
set_digital_output(P3, false);
return moisture;
}
リスト1:Analog Devices CN0398ソフトウェアパッケージでは、水分ルーチンのサンプルを提供しています。このサンプルでは、開発者がメーカーの変換式または式を使用して、水分センサの電圧を有用な水分データに変換する方法を示します。(コード提供元:Analog Devices)
pH測定
SparkFun Electronics SEN-10972 pHキット内にあるような一般的なpHセンサは、高インピーダンス電圧源で特徴付けられる等価の回路を示しています。統合された信号調整フロントエンドを備えたADCを使用する場合でも、経験豊富な開発者は通常このような状況でセンサ出力とADC入力の間にバッファを追加します。
したがって、CN0398設計のpHセンサ回路にはAnalog Devices ADA4661-2オペアンプが含まれています(図4)。センサ回路などの低電力用途に適したADA4661-2は、単電源動作、低消費電力、およびその完全な動作電圧範囲での低オフセット電圧を備えた高精度のオペアンプです。
図4:Analog Devices CN0398設計で、Analog Devices ADA4661-2オペアンプは、一般的な高インピーダンスpHセンサとAnalog Devices AD7124-8アナログ入力の間にバッファを提供します。(画像提供:Analog Devices)
設計は単電圧に依存しますが、pHセンサは通常バイポーラ電圧出力を生成します。ただしこの例では、AD7124-8はシンプルな方法でセンサを地上の最適なレベルに偏らせています。AD7124-8には、チャンネルのコモンモード電圧電圧をAVDD/2に設定する内部バイアス電圧発生器が統合されています。この例に示されているように、設計者はAD7124-8出力ピンを使用してこのバイアス電圧をpHセンサ(図4のVBIAS)のローサイドに供給できます。開発者はバイアス入力をソフトウェアのバイポーラデジタル結果に簡単に戻すことができます。
ADuCM360_demo_cn0398オープンソースソフトウェアパッケージには、pHセンサ出力電圧をpH値に変換するプロセスを示すread_ph()
ルーチンのサンプルが含まれます。土壌水分ルーチンと同様に、pHサンプルルーチンでは、pH値を生成するための2つの異なるアプローチの使い方を示しています(リスト2)。
float CN0398::read_ph(float temperature)
{
float ph = 0;
#ifdef PH_SENSOR_PRESENT
int32_t data;
set_digital_output(P2, true);
adcValue[PH_CHANNEL] = data = read_channel(PH_CHANNEL);
float volt = voltage[PH_CHANNEL - 1] = data_to_voltage_bipolar(data, 1, 3.3);
if(use_nernst)
{
ph = PH_ISO -((volt - ZERO_POINT_TOLERANCE) / ((2.303 * AVOGADRO * (temperature + KELVIN_OFFSET)) / FARADAY_CONSTANT) );
}
else
{
float m = (calibration_ph[1][0] - calibration_ph[0][0]) / (calibration_ph[1][1] - calibration_ph[0][1]);
ph = m * (volt - calibration_ph[1][1] + offset_voltage) + calibration_ph[1][0];
}
set_digital_output(P2, false);
#endif
return ph;
}
リスト2:pHセンサ値を読み取るためのAnalog Deviceのサンプルルーチンでは、標準のネルンスト式または組み込みの較正値を使用してpHセンサ電圧出力をpH値に変換する例を示しています。(コード提供元:Analog Devices)
サンプルパッケージで変数use_nernst
をtrueに設定すると、開発者は標準のネルストン式を使用してpHを生成できます。falseに設定すると、ルーチンでは2点較正手順時に作成された値が使用されます。通常、この手順はSparkFun SEN-10972 pHキットに含まれるような参照pHバッファソリューションを使用して実行されます。サンプルのソフトウェアルーチンには、さまざまなpHバッファソリューションのNIST参照テーブルと0°C~95°Cの温度補正されたpH値を使用して設定されたデフォルトの較正値が付属しています。開発者はデフォルト値を独自のカスタム較正値に置き換えたり、コードを修正してデフォルト値とカスタム値の両方をサポートすることができます。
温度測定
上記リスト2に示しているように、pHは、明示的にはネルンスト式として、暗黙的にはカスタムの較正値で温度に依存します。また、温度はセンサの感度や信号チェーンに影響します。AD7124-8に統合されている温度センサ(図1を参照)でもこれらの問題のいくつかを解決できますが、信頼できる土壌測定は正確な温度値に依存します。したがって、CN0398温度センサチャンネルは、Adafruit Industries 3290などの外部3線式PT100測温抵抗体(RTD)からの正確な値を確保するよう設計されれています。
抵抗センサと同様、RTDは温度依存電圧の変化を測定するためには励起電流が必要です。通常、抵抗センサを使用している開発者はセンサ設計を外部ドライバ、レギュレータ、電流センサで拡張して、励起電流を精度レベルで維持する必要があります。ただし、D7124-8を使用すれば、開発者は3線式構成をサポートするために必要な適切な受動ネットワークを追加するだけで済みます(図5)。
図5:3線式測温抵抗体(RTD)を駆動するために、Analog Devices CN0398設計は、Analog Devices AD7124-8に統合されたプログラム可能な定電流源を使用しています。(画像提供:Analog Devices)
AD7124-8に統合された定電流発生器のペアは、CN0398設計で使用される500μAレベルを含む、50~1000µAの各種固定レベルで励起を提供します。開発者は、機器のIO_CONTROL構成レジスタでIOUTxビットとIOUTx_CHビットをそれぞれプログラミングして、電流レベルと出力ピンを設定します。その初期化ルーチンの一部として、N0398ソフトウェアパッケージはADCチャンネルAIN11とAIN12を2つの励起電流IOUT1およびIOUT2の出力ピンとして設定します。
定電流発生器は多くのアプリケーションで十分な精度ですが、開発者はレシオメトリック測定手法を使って電流変化の影響を容易に排除できます。図5に表示されているCN0398温度ハードウェアセンサ回路では、このアプローチを使用しています。ここでは、同じIOUT1電流がRTDと精度基準レジスタRREFを通過し、その結果レシオメトリック測定になります。同時に、IOUT2では、RTD+リード線抵抗での電圧降下を取り消すRTDのRTD SENSEリード線抵抗で電圧降下が発生します。
水分センサおよびpHセンサと同様に、抵抗値を温度に変換するには適切な伝達関数が必要です。標準のRTDの場合、温度と抵抗間の関係は数学的に表すことができます。その場合でも、0°Cより上または下の温度には2つの異なる数式を使用する必要があります。ADuCM360_demo_cn0398オープンソースソフトウェアパッケージは、両方の方式に加え、シンプルな線形変換をサポートしています(リスト3)。
float CN0398::read_rtd()
{
float temperature = 0;
int32_t data;
adcValue[RTD_CHANNEL] = data = read_channel(RTD_CHANNEL);
float resistance = ((static_cast<float>(data) - _2_23) * RREF) / (TEMP_GAIN * _2_23);
#ifdef USE_LINEAR_TEMP_EQ
temperature = PT100_RESISTANCE_TO_TEMP(resistance);
#else
#define A (3.9083*pow(10,-3))
#define B (-5.775*pow(10,-7))
if(resistance < R0)
temperature = -242.02 + 2.228 * resistance + (2.5859 * pow(10, -3)) * pow(resistance, 2) - (48260.0 * pow(10, -6)) * pow(resistance, 3) - (2.8183 * pow(10, -3)) * pow(resistance, 4) + (1.5243 * pow(10, -10)) * pow(resistance, 5);
else
temperature = ((-A + sqrt(double(pow(A, 2) - 4 * B * (1 - resistance / R0))) ) / (2 * B));
#endif
return temperature;
}
リスト3:抵抗値を温度に変換する場合、Analog Devicesのサンプルルーチンでは、静的な定義(USE_LINEAR_TEMP_EQ)
または動的な値(resistance < R0
)に基づいて適切な方法を選択するための基本設計パターンを示します。(コード提供元:Analog Devices)
リスト3に示されているように、サンプルのread_rtd()ルーチンでは、開発者はCN0398.cpp
モジュールで定義されているシンプルな線形変換マクロPT100_RESISTANCE_TO_TEMP
を選択できます。または、read_rtd()
サンプルルーチンで提供されているさらに複雑な数式を使用することができます。この例では、適切な式を選択するための0°C変曲点が、R0
(0°CにおけるRTD抵抗)に内在します。
まとめ
土壌測定システムを構築する場合、エンジニアはハードウェアとソフトウェアの両方でさままざな問題に直面します。ハードウェア設計はセンサインターフェース要件に対応する必要があり、ソフトウェアは未加工データを有用な情報に変換するためのさまざまなアプローチに対応する必要があります。
Analog Devices CN0398ボードおよびADuCM360_demo_cn0398オープンソースソフトウェアパッケージは、土壌測定システム設計の両面に対応します。Analog DeviceのArduinoと互換するADICUP360ベースボードと組み合わせて使用することで、CN0398ボードとソフトウェアは完全な土壌測定ソリューションを提供します。
開発者はこのターンキーソリューションを使用して土壌測定アプリケーションを作成したり、関連の参照設計やサンプルソフトウェアを拡張してカスタムソリューションを構築できます。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。