如何監測土壤 pH 值和濕度
資料提供者:DigiKey 北美編輯群
2018-03-29
無論是大規模農作或簡易型家庭園藝,維持適當的土壤濕度與 pH 值是維持植物健康的基本要求。然而,為了量測這些土壤特性,開發人員必須設計符合成本效益的精密類比訊號鏈,才可將原始資料轉換成特定土壤量測應用所需的實用資訊。
達成這些精準目標的方法之一是使用公版設計並搭配靈活的軟體。Analog Devices 的 EVAL-CN0398-ARDZ 評估板及軟體套件就是這類解決方案的良好範例。
本文將探討與土壤濕度和 pH 值監測相關的應用和要求,然後再介紹 Analog Devices 的 CN0398 板件與公版設計。本文將說明 CN0398 設計所用的主要元件如何因應關鍵的設計要求,並探討這些元件在整體應用中的角色。最後會展示開發人員如何使用 CN0398 板件與相關軟體套件,以便快速評估並客製化土壤監測應用。
精準量測土壤的必要性
對植物栽種者而言,無論生產規模為何,維持適當的土壤含水量與酸鹼值是最基礎的要求。土壤缺水會直接降低植物的光合作用,在其他生物機制中也會導致衰退,如大豆等重要豆類作物的固氮作用。
同樣地,施肥或自然現象所造成的土壤變化會大幅影響土壤的 pH 值,導致必要微生物與土壤養分減少。在某些作物的初期生長階段,土壤 pH 值若不正確,會導致生長速率減緩,而影響最終收成。
若沒有適當的土壤監測系統,土壤濕度與 pH 值可能會偏離理想情況,最終導致植物健康狀況惡化。Analog Devices 的 EVAL-CN0398-ARDZ 板件與軟體套件提供完整的土壤監測設計,能讓開發人員直接運用或進行修改,以滿足其獨特的要求。
Analog Device 的 CN0398 板件和公版設計是專為搭配土壤量測應用中的外部濕度、pH 值與溫度感測器而打造。其板載電路包含完整的多重感測器設計,可產生濕度與 pH 值輸出資料,透過序列介面即可存取。即使具備豐富的功能性,此設計最多僅消耗 1.95 毫安培 (mA) 的電力,並提供省電功能,包括使用脈寬調變 (PWM) 為外部感測器供電。
開發人員可使用 CN0398 快速開始自訂硬體設計,或使用板件搭配 Analog Devices 的 EVAL-ADICUP360 Arduino 相容基板使用。CN0398 的設計可當作 Arduino 擴充板,可直接插入基板,當作快速開發應用的平台。
為了加速軟體開發,工程師可以善用 Analog Device 的 ADuCM360_demo_cn0398 開放原始碼軟體套件。此套件可搭配 CN0398 感測器板、ADICUP360 基板,以及 Analog Device 的 CrossCore Embedded Studio 使用。除了基本的驅動程式與系統支援公用程式外,此軟體套件還包含完整的 C++ 原始檔案與標頭檔案,更包括完整的土壤量測軟體應用程式。
Analog Devices 板件組合加上軟體套件,能讓開發人員取得完整的硬體設計與軟體應用程式,可立即使用於土壤量測應用。同樣重要的是,CN0398 硬體公版設計與範例軟體提供客製化土壤量測系統的快速開發藍圖,能滿足這些應用的獨特需求。
感測器訊號處理
CN0398 的硬體設計包括三個不同的子電路,分別用於外部濕度、pH 值及溫度感測器。每個子電路都有提供必要的電路,能與各種感測器介接。因此,開發人員僅需將各個感測器插入 CN0398 板上對應的連接器然後提供電力,即可開始感測器運作。此功能以 Analog Devices 的 AD7124-8 為基礎打造,其結合多功能訊號調節前以及 24 位元三角積分 (Σ-Δ) 類比數位轉換器 (ADC) (圖 1)。
圖 1:Analog Devices 的 AD7124-8 具有整合式訊號鏈和 ADC,可簡化土壤量測所需的多重感測器系統設計。(圖片來源:Analog Devices)
AD7124-8 的訊號多工器可透過整合式可編程訊號鏈,將 8 個差動輸入或 15 個單端輸入佈線到晶片上 Σ-Δ ADC 與數位濾波器,以便進行轉換及調節。開發人員可使用 AD7124-8 的序列介面將裝置接到 MCU 主機,以便進行裝置控制和資料轉換。
由於具備豐富功能性,開發人員僅需在感測器電路與穩定的電壓源之外再加上少數幾個元件,就能滿足多種設計要求。針對 CN0398 公版設計,Analog Devices 採用 ADR3433 參考電壓作為類比電源 (AVDD) 與參考電壓 (REFIN1) (圖 2)。如下所述,三個感測器電路的設計都只需要少許額外元件。
圖 2:透過 Analog Devices 的 AD7124-8,開發人員僅需在特定感測器輸入電路以及精確參考電壓 (如 Analog Devices ADR3433) 之外,再加上少許元件即可完成感測器設計的實作。(圖片來源:Analog Devices)
濕度量測
土壤濕度系統一般會利用水 (80) 與空氣 (1) 的介電常數差異來測定水含量。對於這些系統,開發人員使用激磁電壓驅動簡易型三線感測器,如 TE Connectivity Measurement Specialties HPP809A033 感測器,以產生與土壤含水量成正比的輸出電壓。
在 CN0398 設計中,土壤濕度前端使用 Analog Devices ADP7118-2.5 低壓降 (LDO) 線性穩壓器,為感測器提供穩定的激磁電壓 (Vsensor) (圖 3)。為了供電給 LDO,開發人員可從 ADICUP360 基板或自訂設計取得電力。
圖 3:Analog Devices 的 CN0398 設計採用該公司的 ADP7118-2.5 低壓降 (LDO) 穩壓器為電容式濕度感測器提供穩定的 Vsensor 電壓源。(圖片來源:Analog Devices)
雖然 ADP7118 可提供連續的感測器電壓位準,但基於功耗考量與某些濕度感測器的特定需求,必須使用脈衝源來驅動感測器。為了因應這些要求,開發人員可用 MCU PWM 輸出來驅動 LDO 的致能 (EN) 埠,以電壓脈衝為感測器供電。
AD7124-8 運用整合式訊號調整電路和 ADC,能可靠地對濕度感測器的電壓輸出進行採樣和轉換。然而,在土壤量測應用中,轉換的感測器數據與土壤濕度之間的關係可能相當複雜。
土壤健康專家在評估土壤濕度時,通常是根據土壤體積水含量 (VWC) (即水體積與總土壤體積的比值) 來比較土壤濕度。濕度感測器製造商通常會提供方程式,以便將感測器的輸出轉換成 VWC。不過,基於土壤條件或是應用本身的本質,可能還是需要使用更適合其本身獨特情況的轉換方程式。
Analog Devices 在其範例軟體套件中展示了兩種方法的使用情況。在 CN0398.h
標頭檔案中啟用 USE_MANUFACTURER_MOISTURE_EQ
定義,開發人員即可選擇使用製造商建議的分段轉換公式,或軟體所提供的標準轉換方程式。在此,如果已經定義 USE_MANUFACTURER_MOISTURE_EQ
,則範例 read_moisture()
常式會根據感測器的輸出電壓範圍產生濕度輸出 (清單 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 值量測
典型的 pH 值感測器,如 SparkFun Electronics SEN-10972 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 開放原始碼軟體套件內含一個範例 read_ph()
常式,展示出 pH 值感測器輸出電壓轉換成 pH 值的過程。至於土壤濕度常式,pH 值範例常式展示了產生 pH 值的兩種不同方法 (清單 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:Analog Devices 用於讀取 pH 值感測器數值的範例常式,說明如何使用標準 Nernst 方程式或內建的校正值,將 pH 值感測器電壓輸出轉換為 pH 值。(程式碼來源:Analog Devices)
在範例軟體套件中將變數 use_nernst
設定為 true,開發人員就可利用標準 Nernst 方程式產生 pH 值。設定為 false 的話,該變數會促使常式使用兩點校正程序中所建立的值,而此校正程序通常是利用基準 pH 值緩衝器方案來執行,例如 SparkFun SEN-10972 pH 值套件中的緩衝器方案。範例軟體常式隨附已設定的預設校正值,採用 NIST 查找表以查詢不同的 pH 值緩衝器方案與經過溫度修正的 pH 值 (範圍介於 0°C 至 95°C)。開發人員可用自訂的校正數據取代預設值,或輕鬆修改程式碼來支援預設值與自訂值。
溫度量測
如上述清單 2 所示,pH 值取決於溫度,如同 Nernst 公式所明示,或自訂校正值所暗示的一樣。此外,溫度會影響感測器靈敏度和訊號鏈。雖然 AD7124-8 的整合式溫度感測器 (參見圖 1) 能解決一些問題,但要可靠進行土壤量測,仍仰賴準確的溫度讀數。因此,CN0398 溫度感測器通道的設計,就是為了確保可從 Adafruit Industries 3290 等外部三線 PT100 阻抗溫度偵測器 (RTD) 取得準確讀數。
如同任何電阻感測器一樣,RTD 需要激磁電流才能量測隨著溫度變化的電壓。通常,使用電阻感測器的開發人員需要使用外部驅動器、穩壓器及電流感測器,將激磁電流維持在精密水準,以加強其感測器設計。若使用 AD7124-8,開發人員則僅需添加適當的被動網路,即可支援三線配置 (圖 5)。
圖 5:為了驅動三線電阻溫度偵測器 (RTD),Analog Devices 的 CN0398 設計採用整合在 Analog Devices AD7124-8 中的可編程恆定電流源。(圖片來源:Analog Devices)
AD7124-8 中整合了一對恆定電流產生器,可提供 50 至 1000 微安培 (µA) 的多種固定位準,包括 CN0398 設計使用的 500 µA。開發人員可設定電流位準和輸出引腳,只需在裝置的 IO_CONTROL 組態暫存器中分別編程 IOUTx 和 IOUTx_CH 位元即可。CN0398 軟體套件可在其初始化常式中,將 ADC 通道 AIN11 和 AIN12 設定為輸出引腳,可用於兩個 500 µA 激磁電流 (IOUT1 和 IOUT2)。
雖然電流產生器對許多應用來說已具有足夠的準確度,但開發人員可使用比例式量測技術,輕鬆消除電流變化的影響。圖 5 所示的 CN0398 硬體式溫度感測器電路便是使用這種方法。在此例中,相同的 IOUT1 電流通過 RTD 和精密參考電阻 RREF,因而可得到比例式量測結果。同時,IOUT2 會在 RTD 的 RTD SENSE 引線電阻產生壓降,因此可消除 RTD+ 引線電阻的壓降。
如同濕度與 pH 值感測器一樣,將阻抗值轉換成溫度需要適當的轉換函數。對典型的 RTD 而言,溫度與阻抗之間的關係能以數學公式可靠地表示。儘管如此,對於 0°C 以上和以下的溫度,則需採用兩種不同的數學表式。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)
或動態值 (電阻 < R0
),選擇適當的方法。(程式碼來源:Analog Devices)
如清單 3 中所示,範例 read_rtd() 常式能讓開發人員選擇 CN0398.cpp
模組中定義的簡易線性轉換巨集 PT100_RESISTANCE_TO_TEMP
。或者,開發人員可使用 read_rtd()
範例常式提供的更複雜數學表式。在此例中,用以選擇適當表式的 0°C 反曲點隱含在 0°C 的 RTD 電阻 R0
中。
結論
為了打造土壤量測系統,工程人員面臨一系列硬體與軟體方面的挑戰。硬體設計必須滿足感測器介面要求,而軟體必須因應不同的方法,將原始數據轉換成有用的資訊。
Analog Devices 的 CN0398 板件和 ADuCM360_demo_cn0398 開放原始碼軟體套件能因應土壤量測系統設計這兩個層面的要求。CN0398 板件和軟體搭配 Analog Devices 的 Arduino 相容 ADICUP360 基板使用後,就可提供完整的土壤量測解決方案。
開發人員可透過此立即可用的解決方案建立土壤量測應用,或延伸相關的公版設計和範例軟體,以打造客製化解決方案。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。