基于 MT05S 的土壤濕度傳感(接線圖+演示文件+Arduino和樹莓派源碼)


原標(biāo)題:基于 MT05S 的土壤濕度傳感(接線圖+演示文件+Arduino和樹莓派源碼)
一、系統(tǒng)概述
本方案基于MT05S 1-Wire土壤濕度傳感器,通過Arduino和樹莓派實現(xiàn)對土壤濕度、土壤溫度及電導(dǎo)率(EC)的實時測量與數(shù)據(jù)采集,將傳感器探頭直接插入土壤中,借助1-Wire總線協(xié)議將測得的模擬和值轉(zhuǎn)換數(shù)據(jù)傳輸至主控板,然后在串口終端或圖形界面上顯示,并可進一步將數(shù)據(jù)上傳至云平臺或本地數(shù)據(jù)庫進行存儲與分析。由于MT05S采用一體化封裝設(shè)計,具備IP68防護等級,可長期埋入土壤不受損,同時功耗極低(待機電流最大30μA,測量電流僅15mA/100ms),適合對盆栽、小面積苗圃以及大規(guī)模溫室等場景的土壤環(huán)境監(jiān)測,兼具高穩(wěn)定性與高精度,可在-40℃~85℃的溫度范圍內(nèi)正常工作,充分滿足農(nóng)業(yè)種植、智能灌溉、環(huán)境監(jiān)測等應(yīng)用需求 。該方案主要包含傳感器模塊、Arduino主控模塊、樹莓派主控模塊、輔助電路及連接線纜等硬件部分,以及Arduino C/C++開發(fā)環(huán)境和Python開發(fā)環(huán)境下的示例源碼文件。以下內(nèi)容將依次介紹優(yōu)選元器件的選型理由與功能作用、詳細(xì)接線方式、Arduino端與樹莓派端的軟件實現(xiàn)及演示文件說明,旨在為推動“智能農(nóng)業(yè)+物聯(lián)網(wǎng)”應(yīng)用落地提供完整參考。
二、優(yōu)選元器件型號與選用理由
本節(jié)列出實現(xiàn)MT05S土壤濕度傳感系統(tǒng)所需的各類核心元器件,包括傳感器本體、主控板、電源模塊、上拉電阻、連線與輔助配件,并對其型號、作用、優(yōu)勢與選用理由進行詳細(xì)說明,為后續(xù)硬件設(shè)計與采購提供參考依據(jù)。
MT05S-ABB005 1-Wire土壤濕度傳感器
型號/編號:MT05S-ABB005(含土壤濕度、土壤溫度與電導(dǎo)率測量功能,電源2.7~12V DC,5米長測量電纜)。
功能/作用:采用FDR(頻域反射)測量原理,實現(xiàn)土壤體積含水率(VWC)0%~100%測量,并可選配電導(dǎo)率測量,附帶DS18B20兼容的1-Wire協(xié)議接口,同時內(nèi)置溫度測量功能,用戶可根據(jù)訂購選項選擇帶有或不帶電導(dǎo)率測量的版型。
選用理由:MT05S兼具土壤濕度、溫度及可選電導(dǎo)率三種測量參數(shù),減少了多傳感器集成時的線路與編程復(fù)雜度;1-Wire總線僅需一根數(shù)據(jù)線即可與主控板通信,便于布線;超低待機功耗(最大30μA)、較高測量精度(0%~50%:±3%,50%~100%:±5%),且具備IP68防護等級,可直接埋入土壤中長期使用,耐酸堿腐蝕,適應(yīng)農(nóng)業(yè)與溫室應(yīng)用場景需求;外置長達(dá)5m的測量電纜可靈活拓展測量范圍。
Arduino Uno R3開發(fā)板
型號/編號:Arduino Uno R3(ATmega328P主控,14路數(shù)字I/O口,6路ADC口,5V/16MHz工作頻率)。
功能/作用:作為傳感器與下位設(shè)備(PC或串口屏等)的橋梁,讀取MT05S傳感器1-Wire數(shù)據(jù)并解碼,將結(jié)果通過串口或網(wǎng)絡(luò)模塊上傳;可運行演示示例程序,支持即插即用;多路I/O可集成其他傳感器或執(zhí)行器。
選用理由:Arduino Uno R3擁有成熟的社區(qū)與豐富的示例庫,兼容OneWire與DS18B20協(xié)議庫,易于與MT05S配合;板載穩(wěn)壓器支持外接5V電源;成本低廉、學(xué)習(xí)曲線平緩;板上自帶USB轉(zhuǎn)串口模塊,可直接與PC連接進行調(diào)試,適合示范與小規(guī)模部署。
Raspberry Pi 3B+ 單板計算機
型號/編號:Raspberry Pi 3 Model B+(Arm Cortex-A53四核處理器,1GB內(nèi)存,支持Wi-Fi與以太網(wǎng))。
功能/作用:用于運行Python腳本,通過樹莓派的1-Wire接口(GPIO4)直接與MT05S通信,實時采集并處理土壤環(huán)境數(shù)據(jù),可進一步進行圖形化展示、Web服務(wù)器部署或?qū)?shù)據(jù)發(fā)送至云平臺;可接入攝像頭、觸摸屏等進行人機交互擴展。
選用理由:樹莓派3B+具有較高計算資源與網(wǎng)絡(luò)功能,可承載輕量級數(shù)據(jù)庫或可視化界面;官方支持1-Wire總線,通過啟用GPIO4系統(tǒng)可原生掛載MT05S設(shè)備;豐富的Python庫簡化開發(fā);適合后期拓展為邊緣計算節(jié)點,具備更強擴展能力。
4.7kΩ 1/4W 上拉電阻
型號/編號:YAGEO 4.7kΩ ±5% 貼片或插件電阻。
功能/作用:為1-Wire總線提供必要的上拉電平支持,使單總線設(shè)備(MT05S)在Idle(空閑)狀態(tài)下保持高電平,通過開漏或集電極/漏極輸出實現(xiàn)數(shù)據(jù)通信;在單總線通信過程中,保證時序與信號完整性。
選用理由:4.7kΩ為常見的1-Wire總線標(biāo)準(zhǔn)上拉阻值,既能保證通信速度與穩(wěn)定性,又能在低功耗模式下減少待機泄漏電流;1/4W功率足以應(yīng)對5V電平環(huán)境;貼片或插件封裝方便在面包板或PCB設(shè)計中使用。
5V 2A DC 穩(wěn)壓電源模塊
型號/編號:LM2596S/AMS1117-5.0等基于DCDC或LDO穩(wěn)壓模塊,輸入7V~12V DC,輸出5V 2A。
功能/作用:為Arduino Uno、MT05S供電,并可通過5V電源供給其他外設(shè)(如電源指示燈、串口屏、繼電器模塊等);如在樹莓派側(cè)也可使用5V 2.5A或3A電源適配器為樹莓派及MT05S提供穩(wěn)定電壓。
選用理由:穩(wěn)壓模塊體積小、成本低,易于集成到系統(tǒng)箱體中;LM2596S DCDC模塊效率高、發(fā)熱低;AMS1117-5.0線性穩(wěn)壓器輸出噪聲小,可作為MT05S或Arduino板的備用供電。
面包板及杜邦線(公對母/公對公)
型號/編號:MB-102透明大號面包板、20cm杜邦線若干。
功能/作用:用于原型搭建階段將MT05S、Arduino、上拉電阻等模塊進行臨時電路連接,方便快速組裝與調(diào)試;杜邦線可將各引腳對應(yīng)連接至面包板或Arduino GPIO口。
選用理由:面包板無需焊接,可任意組合跳線;杜邦線常見、易采購;適合實驗室或教學(xué)場景;待后期完成原型驗證后可定制PCB或接線更為緊湊可靠的方案。
Micro USB 數(shù)據(jù)線
型號/編號:USB A to Micro B 數(shù)據(jù)線。
功能/作用:為Arduino Uno提供5V電源與程序下載功能,同時可作為串口通信通道;若使用Arduino IDE進行串口打印、調(diào)試,數(shù)據(jù)線必不可少。
選用理由:Micro USB為Arduino Uno標(biāo)準(zhǔn)接口;通用性高、隨處可購;即插即用,配合Arduino IDE快速燒寫代碼與監(jiān)控串口輸出。
Micro SD 卡(16GB或以上)
型號/編號:Sandisk 16GB Class10 Micro SD 卡。
功能/作用:用在樹莓派系統(tǒng)啟動盤,預(yù)裝Raspbian或Raspberry Pi OS,用于存儲操作系統(tǒng)與Python示例程序,以及在本地存儲采集到的土壤數(shù)據(jù)日志。
選用理由:較大的容量可保證操作系統(tǒng)與日志文件空間充足;Class10讀寫速度快,能滿足系統(tǒng)啟動與數(shù)據(jù)存儲需求;品牌卡更穩(wěn)定、不易損壞。
可選擴展:OLED 0.96寸 I2C 顯示模塊
型號/編號:SSD1306 0.96″ 128×64像素 I2C OLED。
功能/作用:在Arduino或樹莓派端可用于本地實時顯示土壤濕度、溫度與電導(dǎo)率數(shù)值,無需串口監(jiān)視器即可直觀查看;如在戶外安裝可省去額外電腦查看。
選用理由:I2C接口僅需兩根引腳;128×64分辨率足以展示多行文本數(shù)據(jù);功耗低、可視性好;適合小型信息顯示;也可后期用作系統(tǒng)調(diào)試輔助。
線材附件與防護殼
型號/編號:PVC線套、熱縮管、電工膠帶、塑料殼體若干。
功能/作用:用于包裹電路,避免短路;保護MT05S與接線不受土壤腐蝕;同時可對整個原型進行一定程度的防水、防塵處理。
選用理由:現(xiàn)場環(huán)境復(fù)雜,土壤濕度高,必須對裸露引腳進行絕緣、密封;熱縮管能緊密包裹杜邦線連接處,防止接觸不良;選配塑料殼體可將Arduino與上拉電阻、電源模塊固定并提供一定防護。
三、硬件接線與接線圖說明
本節(jié)主要詳細(xì)闡述MT05S與Arduino、MT05S與樹莓派兩種主控板之間的硬件連接方式及電路邏輯,確保用戶能依據(jù)接線圖正確搭建系統(tǒng)。
3.1 MT05S與Arduino Uno的連接方式
MT05S采用1-Wire總線接口,與DS18B20兼容,只需單根數(shù)據(jù)線“DATA”連接至Arduino Uno的數(shù)字IO口,同時需要在該總線上加裝上拉電阻至5V,為保證通信穩(wěn)定性,推薦使用4.7kΩ上拉電阻;MT05S還需要連接電源與地線,要求2.7V~12V直流供電,Arduino板輸出的5V可直接供給MT05S的VCC。具體接線如下:
MT05S 紅色線(VCC)→ Arduino Uno 5V 引腳
MT05S 黑色線(GND)→ Arduino Uno GND 引腳
MT05S 黃色線(DATA)→ Arduino Uno 數(shù)字引腳2(D2)(或其他可用數(shù)字I/O)
一端4.7kΩ上拉電阻 → Arduino Uno 5V,另一端 → Arduino Uno 數(shù)字引腳2(D2)
整套電路可在面包板上進行物理連接,如圖3-1所示。示意圖中,MT05S探頭通過5米長電纜連接接頭板,該接頭板再通過杜邦線接入Arduino Uno,同時在數(shù)據(jù)線上并聯(lián)4.7kΩ電阻拉至5V。
MT05S與Arduino Uno接線
MT05S探頭直接插入待測土壤;
接頭板上對應(yīng)標(biāo)注VCC、GND、DQ(數(shù)據(jù))端;
將VCC連接至Arduino Uno的5V,GND連接至Arduino Uno的GND,DQ連接至Arduino Uno數(shù)字口D2;
在D2與5V之間并聯(lián)一只4.7kΩ上拉電阻;
可選OLED模塊的I2C接口(SDA→A4,SCL→A5)連接至Arduino用于本地顯示。
3.2 MT05S與Raspberry Pi 3B+的連接方式
樹莓派的1-Wire總線通常連接至GPIO4(BCM編號),需要在/boot/config.txt文件中啟用1-Wire總線模塊(在文件末尾添加“dtoverlay=w1-gpio,gpiopin=4,pullup=on”),并重啟系統(tǒng);MT05S的數(shù)據(jù)線直接連接至GPIO4,需在該線路并聯(lián)一個4.7kΩ上拉至3.3V電源;同時將MT05S VCC連接至樹莓派的3.3V或5V輸出(建議使用3.3V避免邏輯電平?jīng)_突),將MT05S GND連接至樹莓派GND。具體接線如下:
MT05S 紅色線(VCC)→ Raspberry Pi 3.3V 引腳(Pin1)
MT05S 黑色線(GND)→ Raspberry Pi GND 引腳(Pin6)
MT05S 黃色線(DATA)→ Raspberry Pi GPIO4 引腳(Pin7)
4.7kΩ上拉電阻 → 連接在GPIO4(DATA)與3.3V(Pin1)之間
如圖3-2所示,MT05S探頭的VCC連接至樹莓派的3.3V,因樹莓派的GPIO引腳為3.3V邏輯電平,使用3.3V供電可有效保證1-Wire信號電平匹配并保護GPIO口不被高壓損壞;若選擇5V供電,則需在數(shù)據(jù)線上加裝電平轉(zhuǎn)換電路,或者使用GPIO口的耐受5V保護措施(例如額外保護二極管或電平轉(zhuǎn)換板)。
圖3-2:MT05S與Raspberry Pi 3B+接線示意圖
在樹莓派/boot/config.txt啟用1-Wire總線(dtoverlay=w1-gpio,gpiopin=4,pullup=on);
MT05S VCC → Raspberry Pi 3.3V(Pin1),MT05S GND → Raspberry Pi GND(Pin6);
MT05S DATA → Raspberry Pi GPIO4(Pin7),并在此處并聯(lián)4.7kΩ上拉電阻至3.3V;
若需要OLED顯示,可利用I2C(GPIO2為SDA,GPIO3為SCL)接入SSD1306模塊。
四、Arduino端軟件實現(xiàn)與演示文件說明
本節(jié)圍繞Arduino Uno對MT05S進行讀寫及數(shù)據(jù)處理,提供完整示例代碼、庫引用說明與程序邏輯解讀,以便用戶快速運行并采集土壤參數(shù)數(shù)據(jù)。
4.1 開發(fā)環(huán)境與依賴庫
Arduino IDE版本:Arduino IDE 1.8.x或以上,Windows/Mac/Linux均適用。
依賴庫:
OneWire庫(用于1-Wire總線通信,與MT05S兼容DS18B20協(xié)議),可通過Library Manager安裝。
DallasTemperature庫(若僅需要溫度,可封裝溫度讀取,但MT05S數(shù)據(jù)包第三、四字節(jié)為土壤溫度高低位,此示例不使用DallasTemperature,此處使用OneWire自定義代碼讀?。?/span>
Adafruit_SSD1306與Adafruit_GFX(若使用SSD1306 OLED顯示模塊實現(xiàn)本地顯示)。
在Arduino IDE中依次點擊“工具”→“庫管理”→搜索“OneWire”并安裝最新版;若需要SSD1306顯示,請搜索并安裝“Adafruit SSD1306”與“Adafruit GFX”庫。
4.2 示例代碼結(jié)構(gòu)與功能
以下示例代碼基于OneWire庫實現(xiàn)MT05S的轉(zhuǎn)換指令、數(shù)據(jù)讀取、CRC校驗與數(shù)值解析,并將土壤溫度、濕度與電導(dǎo)率實時打印至串口監(jiān)視器。代碼注釋詳盡,便于理解通信時序與寄存器含義。
#include <OneWire.h>
// 定義MT05S連接引腳
#define MT05S_PIN 2 // 將MT05S數(shù)據(jù)線連接至Arduino數(shù)字引腳2
OneWire oneWire(MT05S_PIN);
void setup() {
Serial.begin(9600); // 初始化串口,波特率9600
delay(1000);
Serial.println("------------ MT05S Soil Sensor Demo ------------");
}
void loop() {
byte scratchpad[9]; // 存放讀出的9字節(jié)數(shù)據(jù)
// 發(fā)送復(fù)位脈沖
if (!oneWire.reset()) {
Serial.println("No response from MT05S sensor. Check wiring!");
delay(1000);
return;
}
// 跳過ROM選擇(Skip ROM),直接對掛接在總線上唯一設(shè)備操作
oneWire.skip();
// 發(fā)送轉(zhuǎn)換溫度及濕度指令(0x44)
oneWire.write(0x44);
// 等待轉(zhuǎn)換完成,MT05S轉(zhuǎn)換周期最大100ms,此處輪詢DQ線狀態(tài)
while (oneWire.read_bit() == 0) {
delay(10);
}
// 再次發(fā)送復(fù)位脈沖以開始讀取Scratchpad
oneWire.reset();
oneWire.skip();
oneWire.write(0xBE); // Read Scratchpad指令
// 讀取9字節(jié)數(shù)據(jù)到scratchpad數(shù)組
for (int i = 0; i < 9; i++) {
scratchpad[i] = oneWire.read();
}
// 驗證CRC:計算前8字節(jié)CRC與第9字節(jié)比對
byte crcCalc = OneWire::crc8(scratchpad, 8);
if (crcCalc != scratchpad[8]) {
Serial.println("CRC ERROR! Data invalid.");
delay(1000);
return;
}
// 將多個字節(jié)拼接成有符號整數(shù)
int16_t tempRaw = (scratchpad[0] & 0xFF) | ((scratchpad[1] & 0xFF) << 8);
int16_t moistRaw = (scratchpad[2] & 0xFF) | ((scratchpad[3] & 0xFF) << 8);
int16_t ecRaw = (scratchpad[4] & 0xFF) | ((scratchpad[5] & 0xFF) << 8);
// 轉(zhuǎn)換為實際物理量
float temperature = tempRaw / 100.0; // 單位:℃,保留兩位小數(shù)
float moisture = moistRaw / 100.0; // 單位:%,保留兩位小數(shù)
float conductivity = ecRaw / 1000.0; // 單位:ms/cm,保留三位小數(shù)
// 串口打印
Serial.print("Temperature(C) = ");
Serial.print(temperature, 2);
Serial.print(" Moisture(%) = ");
Serial.print(moisture, 2);
Serial.print(" EC(ms/cm) = ");
Serial.println(conductivity, 3);
delay(1000); // 每秒鐘讀取一次
}
代碼說明:
OneWire oneWire(MT05S_PIN);
:初始化OneWire對象,使其通過數(shù)字引腳2與MT05S通信;oneWire.reset(); oneWire.skip(); oneWire.write(0x44);
:向總線發(fā)送復(fù)位脈沖后,跳過ROM選擇,直接對唯一掛在總線上的MT05S發(fā)出“轉(zhuǎn)換指令”(0x44),啟動溫度、濕度與EC測量;oneWire.read_bit()
:讀取數(shù)據(jù)線電平,通過輪詢等待MT05S轉(zhuǎn)換完成;oneWire.write(0xBE)
:START讀Scratchpad命令,讀取MT05S寄存器中的9字節(jié)數(shù)據(jù);使用
OneWire::crc8()
函數(shù)對前8字節(jié)進行CRC8校驗,與第9字節(jié)對比,保障數(shù)據(jù)完整性;利用
makeWord
或位拼接方式將高低字節(jié)組合成16位整數(shù),并根據(jù)MT05S數(shù)據(jù)手冊說明分別除以100.0或1000.0還原為含物理意義的數(shù)值;通過串口打印溫度、濕度與電導(dǎo)率,便于在“串口監(jiān)視器”窗口中實時查看測量結(jié)果。
4.3 演示文件說明
MT05S_Arduino_Demo.ino:上述示例代碼文件,可直接在Arduino IDE中打開并上傳;
MT05S_Arduino_OLED.ino(可選):在MT05S_Arduino_Demo基礎(chǔ)上集成SSD1306 OLED顯示,將測量結(jié)果以文本形式在0.96″ OLED屏上實時顯示;需要在代碼開頭添加對SSD1306與GFX庫的引用,示例如下:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
// 初始化OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.println("MT05S Soil Sensor");
display.display();
delay(1000);
}
void loop() {
// 讀取傳感器邏輯同上,只需在串口打印后增加OLED顯示代碼
display.clearDisplay();
display.setCursor(0, 0);
display.print("T: ");
display.print(temperature, 2);
display.println(" C");
display.print("M: ");
display.print(moisture, 2);
display.println(" %");
display.print("EC: ");
display.print(conductivity, 3);
display.println(" mS/cm");
display.display();
delay(1000);
}該文件可在Arduino IDE中編譯,并在OLED模塊與MT05S模塊同時連接的情況下運行,實現(xiàn)本地數(shù)據(jù)顯示,免除串口監(jiān)視器查看步驟;顯示效果為三行數(shù)據(jù)顯示:溫度、濕度與電導(dǎo)率。
4.4 注意事項與調(diào)試建議
上拉電阻應(yīng)與MT05S數(shù)據(jù)線共用,一端連接至MT05S數(shù)據(jù)線(DQ),另一端連接至Arduino 5V,以保證1-Wire總線處于空閑時保持高電平;若上拉電阻值過大可能導(dǎo)致信號上升緩慢,影響通信穩(wěn)定性;若過小則會加大靜態(tài)功耗,一般采用4.7kΩ最為合適;
在不同Arduino板上,若數(shù)字引腳使用了PWM或占用其他外設(shè),需要在代碼中修改
MT05S_PIN
為對應(yīng)引腳,并在連接時確保不與其他模塊沖突;若在測量過程中發(fā)現(xiàn)讀數(shù)異常或CRC錯誤,應(yīng)首先檢查物理接線是否牢固、杜邦線是否接觸不良;其次可調(diào)整數(shù)據(jù)線引腳上的上拉電阻數(shù)值,或者縮短線路長度以減少電容負(fù)載;
MT05S探頭若長期插入土壤會被泥土附著,建議定期拔出清洗探頭表面以保持測量精度;若土壤中鹽分濃度較高,可能對電導(dǎo)率測量造成影響,此時可在軟件層面加入溫度補償或數(shù)據(jù)濾波。
五、樹莓派端軟件實現(xiàn)與演示文件說明
本節(jié)針對Raspberry Pi 3B+系統(tǒng)環(huán)境進行設(shè)置,講解如何在Raspbian(現(xiàn)稱Raspberry Pi OS)系統(tǒng)中啟用1-Wire總線驅(qū)動、讀取MT05S數(shù)據(jù),并提供Python示例腳本以便快速運行。
5.1 系統(tǒng)環(huán)境準(zhǔn)備
操作系統(tǒng):建議使用Raspberry Pi OS(32-bit)最新版本,可從樹莓派官網(wǎng)下載映像并燒錄至Micro SD卡中;
網(wǎng)絡(luò)連接:將樹莓派通過網(wǎng)線或Wi-Fi接入互聯(lián)網(wǎng),以便下載操作系統(tǒng)更新與所需Python庫;
SSH/桌面:可選擇在本地連接顯示器、鍵盤鼠標(biāo)進行調(diào)試,或在另一臺PC通過SSH終端遠(yuǎn)程登錄;
5.2 啟用1-Wire總線驅(qū)動
在樹莓派啟動后,打開終端并執(zhí)行以下命令編輯/boot/config.txt
文件:
sudo nano /boot/config.txt
在文件末尾添加一行:
dtoverlay=w1-gpio,gpiopin=4,pullup=on
該配置表示啟用GPIO4作為1-Wire總線引腳,并開啟內(nèi)部上拉電阻(若使用外部4.7kΩ上拉可將pullup
設(shè)置為off
或直接刪除此參數(shù));保存并退出nano后,執(zhí)行以下命令使更改生效:
sudo reboot
重啟后,檢查/sys/bus/w1/devices/
目錄即可看到以28-
開頭的設(shè)備文件夾,該編號即為MT05S的ROM Code。例如:28-060504030201
。
5.3 Python示例腳本
在終端中創(chuàng)建一個Python腳本用于讀取MT05S數(shù)據(jù)并打印,以下示例代碼可保存為mt05s_read.py
:
#!/usr/bin/python3
import time
# 請根據(jù)實際在/sys/bus/w1/devices/下的設(shè)備編號修改ROMCODE
ROMCODE = '28-060504030201'
device_file = '/sys/bus/w1/devices/' + ROMCODE + '/w1_slave'
def read_raw():
"""
讀取設(shè)備文件的原始內(nèi)容,共兩行
"""
with open(device_file, 'r') as f:
lines = f.readlines()
return lines
def read_mt05s():
"""
解析MT05S數(shù)據(jù),返回溫度、濕度、電導(dǎo)率三元組
"""
lines = read_raw()
# 檢查第一行末尾是否包含"YES"以保證數(shù)據(jù)合法
while lines[0].strip()[-3:] != 'YES':
print("CRC check failed or incorrect data, retrying...")
time.sleep(0.2)
lines = read_raw()
# 第二行中包含3個至少6個16進制數(shù)值,分別對應(yīng)溫度、濕度、EC
parts = lines[1].strip().split(' ')
# 溫度高位與低位
temp_hi = int(parts[0], 16)
temp_lo = int(parts[1], 16)
temp_raw = temp_hi * 256 + temp_lo
# 濕度高位與低位
moist_hi = int(parts[2], 16)
moist_lo = int(parts[3], 16)
moist_raw = moist_hi * 256 + moist_lo
# 電導(dǎo)率高位與低位
ec_hi = int(parts[4], 16)
ec_lo = int(parts[5], 16)
ec_raw = ec_hi * 256 + ec_lo
# 轉(zhuǎn)換為物理量
temperature = temp_raw / 100.0 # 單位:℃
moisture = moist_raw / 100.0 # 單位:%
conductivity = ec_raw / 1000.0 # 單位:ms/cm
return temperature, moisture, conductivity
if __name__ == "__main__":
print("------- MT05S Soil Sensor Reading Demo -------")
print("ROM Code = {}".format(ROMCODE))
print("---------------------------------------------")
while True:
try:
t, m, e = read_mt05s()
print("Temperature(C) = {:.2f} | Moisture(%) = {:.2f} |
EC(ms/cm) = {:.3f}".format(t, m, e))
except FileNotFoundError:
print("Device file not found. Check ROMCODE or wiring!")
except Exception as ex:
print("Error reading MT05S:", ex)
time.sleep(1)
腳本說明:
將
ROMCODE
替換為實際設(shè)備目錄名稱,可通過命令ls /sys/bus/w1/devices/
獲??;read_raw()
函數(shù)負(fù)責(zé)打開并讀取MT05S對應(yīng)的w1_slave設(shè)備文件,共返回兩行文本,第一行末尾的“YES”/“NO”表示CRC校驗結(jié)果;若不為“YES”,則循環(huán)等待并重試;第二行按空格分隔后,前三對字節(jié)分別為溫度、濕度與電導(dǎo)率的高低八位,使用16進制轉(zhuǎn)換后組合成整數(shù),最后通過除以100.0或1000.0轉(zhuǎn)化為實際工程物理量;
在主循環(huán)中,捕獲讀取過程中可能出現(xiàn)的
FileNotFoundError
與其他異常,提示用戶檢查接線或ROMCODE;
將腳本保存至樹莓派,并賦予可執(zhí)行權(quán)限:
chmod +x mt05s_read.py
然后運行:
sudo ./mt05s_read.py
即可在終端中每秒輸出一次MT05S測量的溫度、濕度與電導(dǎo)率數(shù)值。
5.4 演示文件說明
mt05s_read.py:上述Python示例腳本,實現(xiàn)MT05S讀數(shù)解碼與打?。?/span>
mt05s_wiring.pdf:接線說明PDF,可包含文字與箭頭示意圖,建議將MT05S VCC/GND/DATA與Raspberry Pi對應(yīng)引腳連接示意畫出;
requirements.txt(可選):包含Python環(huán)境依賴包(由于示例僅使用標(biāo)準(zhǔn)庫,無額外依賴,可忽略);
README.md:對項目進行簡要說明,包括在項目根目錄進行的操作步驟、注意事項、ROMCODE查找方法等;
以上文件可打包成.zip
或.tar.gz
格式分發(fā),用戶僅需復(fù)制至樹莓派后解壓,并根據(jù)README提示運行即可。若需要在系統(tǒng)啟動時自動運行腳本,可將運行命令插入/etc/rc.local
或創(chuàng)建systemd
服務(wù)。
六、測試與校準(zhǔn)建議
在實際部署中,為保證MT05S的測量精度與穩(wěn)定性,需對傳感器進行初步測試與環(huán)境校準(zhǔn),以適應(yīng)不同土壤類型與溫度環(huán)境的差異。
6.1 出廠測試驗證
將MT05S探頭懸空置于空氣中,讀數(shù)應(yīng)接近0%濕度,且溫度應(yīng)接近環(huán)境溫度;
將探頭插入已知含水量的土壤樣本(可使用標(biāo)準(zhǔn)土壤濕度杯測法獲取真實體積含水率),記錄輸出值并與理論值對比,判斷傳感器誤差;
若需要測量電導(dǎo)率功能,可將探頭放入已知電導(dǎo)率溶液(如50 μS/cm、1000 μS/cm標(biāo)準(zhǔn)溶液)中,驗證EC讀數(shù)準(zhǔn)確性;
6.2 現(xiàn)場校準(zhǔn)方法
溫度校準(zhǔn):可在0℃冰水混合物與25℃室溫水中分別測量MT05S溫度讀數(shù),記錄實際溫度與輸出溫度的偏差,如存在系統(tǒng)性誤差可在軟件端做偏移修正;
濕度校準(zhǔn):選取若干不同比例(如5%、15%、25%~35%)的土壤樣本,將其烘干后按重量補加一定質(zhì)量的水,保證土壤達(dá)到預(yù)期體積含水率,用MT05S測量并對比理論值,擬合線性或曲線回歸系數(shù),用于軟件端換算;
電導(dǎo)率校準(zhǔn):在常見農(nóng)業(yè)土壤肥料環(huán)境下,土壤電導(dǎo)率會受到養(yǎng)分含量與土壤溫度影響,建議用戶自行使用標(biāo)準(zhǔn)KCl溶液做多點校準(zhǔn),獲取對應(yīng)EC讀數(shù);軟件可根據(jù)溫度值使用內(nèi)置溫度補償公式對EC進行校準(zhǔn);
6.3 注意事項
MT05S探頭上的絕緣層需保持清潔,若長時間埋土,泥土黏附會導(dǎo)致導(dǎo)電性能異常,可定期用干凈水沖洗或酒精擦拭探針;
在不同土壤類型(沙土、壤土、黏土等)測量時,土壤顆粒結(jié)構(gòu)與電導(dǎo)率特性存在差異,校準(zhǔn)曲線應(yīng)針對實際現(xiàn)場土壤進行多點采樣;
電導(dǎo)率與濕度并不等價,若土壤含鹽量高可導(dǎo)致EC讀數(shù)偏高,應(yīng)結(jié)合濕度值與溫度值進行綜合分析;
推薦在關(guān)鍵測量節(jié)點設(shè)置軟硬件濾波功能,例如在軟件端對測量值進行移動平均、低通濾波或中位數(shù)濾波,以減少偶發(fā)誤差;
七、演示文件與源碼匯總
以下為本次方案所包含的演示文件與源碼清單,用戶可直接下載后參考運行,并根據(jù)實際需要進行二次開發(fā):
MT05S_Arduino_Demo.ino:Arduino Uno示例代碼,用于讀取MT05S并打印至串口;
MT05S_Arduino_OLED.ino:Arduino Uno示例代碼,集成SSD1306 OLED顯示,實現(xiàn)本地數(shù)據(jù)顯示;
mt05s_read.py:Python腳本,用于Raspberry Pi實時讀取MT05S溫度、濕度與EC數(shù)據(jù);
mt05s_wiring.pdf:接線圖文檔,包含Arduino與樹莓派兩種接線示意圖;
README.md:項目說明文檔,介紹各示例文件作用、運行環(huán)境與步驟;
requirements.txt:Python依賴列表(本示例代碼僅依賴標(biāo)準(zhǔn)庫,無需額外安裝,可不包含該文件);
MT05S_User_Manual.pdf:來自MT05S生產(chǎn)商官方的用戶手冊(包括寄存器說明、命令時序、出廠校準(zhǔn)報告等),可作為參考文檔;
上述文件可統(tǒng)一打包發(fā)布或托管至GitHub、GitLab等代碼倉庫,便于團隊協(xié)作與后續(xù)維護。
八、擴展應(yīng)用與系統(tǒng)優(yōu)化
除基礎(chǔ)數(shù)據(jù)采集功能外,用戶還可根據(jù)需求對系統(tǒng)進行進一步擴展與優(yōu)化,以提升系統(tǒng)的實用性與智能化水平。以下列出若干可選擴展方向,供讀者參考:
8.1 引入無線傳輸模塊,實現(xiàn)遠(yuǎn)程監(jiān)測
LoRa無線模塊:可選RAKWireless RAK811、SX1278或MT05S兼容的LoRa外設(shè),將Arduino或樹莓派側(cè)的采集數(shù)據(jù)通過LoRa網(wǎng)絡(luò)發(fā)送到中心網(wǎng)關(guān),實現(xiàn)遠(yuǎn)距離無線覆蓋;
Wi-Fi模塊:對于具有Wi-Fi信號覆蓋的場景,可在Arduino側(cè)選用ESP8266、ESP32等開發(fā)板,將MT05S數(shù)據(jù)通過MQTT或HTTP協(xié)議推送至云平臺;在Raspberry Pi側(cè)可直接使用內(nèi)置Wi-Fi,運行Python腳本時將數(shù)據(jù)上傳至數(shù)據(jù)庫或Web服務(wù)器。
8.2 本地Web服務(wù)器與圖形化界面
在Raspberry Pi上安裝輕量級Web服務(wù)器(如Flask、Django或Node.js),開發(fā)簡單Web頁面,將MT05S測量值以曲線或表格形式呈現(xiàn),并支持歷史數(shù)據(jù)查詢;
配置樹莓派攝像頭,將土壤區(qū)域環(huán)境情況實時拍照,與濕度數(shù)據(jù)結(jié)合生成可視化報告;
8.3 數(shù)據(jù)庫與遠(yuǎn)程存儲
將MT05S數(shù)據(jù)存儲至SQLite、MySQL或InfluxDB,可以方便后續(xù)數(shù)據(jù)分析與可視化;樹莓派端可編寫Python腳本周期性讀取并寫入數(shù)據(jù)庫,或者通過Python定時任務(wù)(cron)實現(xiàn)自動化;
若部署環(huán)境具備公網(wǎng)或VPN,可搭建Node-RED、ThingSpeak、AWS IoT等云端服務(wù),將數(shù)據(jù)實時上報,實現(xiàn)在線監(jiān)測與預(yù)警推送;
8.4 多路傳感與數(shù)據(jù)融合
在相同1-Wire總線上若需多個MT05S測量不同位置的土壤濕度,可將多只MT05S并聯(lián)至同一數(shù)據(jù)線,利用其唯一的ROM Code區(qū)別不同設(shè)備,并在軟件中循環(huán)查詢;
可結(jié)合其他傳感器(如DS18B20溫度傳感器、DHT22環(huán)境溫濕度傳感器、光照傳感、CO2傳感、PH電極等),實現(xiàn)對環(huán)境參數(shù)的多維度采集與分析;
通過樹莓派或單片機側(cè)算法將不同傳感器數(shù)據(jù)進行關(guān)聯(lián),如在土壤溫度過低時推送加熱或防凍預(yù)警;
8.5 低功耗優(yōu)化與現(xiàn)場供電
若系統(tǒng)需長時間在野外或無電源區(qū)域運行,可采用鋰電池+太陽能板的組合為Arduino或樹莓派供電,并在程序中采用深度睡眠或間隔采樣策略降低功耗;
MT05S本身待機電流極低,結(jié)合低功耗主控板(如ESP32-Low Power或STM32L系列)可進一步延長續(xù)航時間;在節(jié)點與網(wǎng)關(guān)間使用LoRa通信,減少Wi-Fi或GPRS模塊的高功耗;
8.6 系統(tǒng)穩(wěn)定性與防護
在土壤環(huán)境酷熱或嚴(yán)寒的地區(qū),可為MT05S探頭配備防護套(例如聚四氟乙烯涂層或硅膠薄膜)以防止長時間暴露造成傳感失準(zhǔn);
在移動設(shè)備或震動頻繁場所,需對電路進行防震設(shè)計,選用抗拉扯杜邦線或屏蔽線纜,并給電子元器件做好固定;
建議在電源輸入端加入TVS二極管或保險絲,對電源突波與靜電進行保護,避免在雷雨季節(jié)或沙塵天氣損壞設(shè)備。
九、總結(jié)
本方案圍繞MT05S 1-Wire土壤濕度傳感器,集成了Arduino Uno與Raspberry Pi 3B+兩種主控方式,詳細(xì)說明了優(yōu)選元器件型號、作用、選用理由以及功能實現(xiàn),涵蓋硬件接線、Arduino示例代碼、樹莓派Python腳本、演示文件說明與測試校準(zhǔn)建議,滿足了用戶對“基于MT05S的土壤濕度傳感(接線圖+演示文件+Arduino和樹莓派源碼)”的需求。本方案采用模塊化設(shè)計,留有豐富的擴展接口與升級空間,便于在“智能農(nóng)業(yè)+物聯(lián)網(wǎng)”場景中根據(jù)實際需求進行功能拓展與性能優(yōu)化。通過本文,用戶可快速完成土壤參數(shù)采集系統(tǒng)的原型搭建,并在后續(xù)通過數(shù)據(jù)存儲、云平臺對接與智能算法實現(xiàn)精準(zhǔn)灌溉、環(huán)境監(jiān)控與決策支持,最大化發(fā)揮MT05S高精度、低功耗與易集成的優(yōu)勢,為智慧農(nóng)業(yè)與環(huán)境監(jiān)測應(yīng)用提供參考與借鑒。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點,拍明芯城不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對此聲明的最終解釋權(quán)。