0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于 MT05S 的土壤湿度传感(接线图+演示文件+Arduino和树莓派源码)

基于 MT05S 的土壤湿度传感(接线图+演示文件+Arduino和树莓派源码)

来源: 电路城
2021-11-22
类别:工业控制
eye 6
文章创建人 拍明

原标题:基于 MT05S 的土壤湿度传感(接线图+演示文件+Arduino和树莓派源码)

一、系统概述
本方案基于MT05S 1-Wire土壤湿度传感器,通过Arduino和树莓派实现对土壤湿度、土壤温度及电导率(EC)的实时测量与数据采集,将传感器探头直接插入土壤中,借助1-Wire总线协议将测得的模拟和值转换数据传输至主控板,然后在串口终端或图形界面上显示,并可进一步将数据上传至云平台或本地数据库进行存储与分析。由于MT05S采用一体化封装设计,具备IP68防护等级,可长期埋入土壤不受损,同时功耗极低(待机电流最大30μA,测量电流仅15mA/100ms),适合对盆栽、小面积苗圃以及大规模温室等场景的土壤环境监测,兼具高稳定性与高精度,可在-40℃~85℃的温度范围内正常工作,充分满足农业种植、智能灌溉、环境监测等应用需求 。该方案主要包含传感器模块、Arduino主控模块、树莓派主控模块、辅助电路及连接线缆等硬件部分,以及Arduino C/C++开发环境和Python开发环境下的示例源码文件。以下内容将依次介绍优选元器件的选型理由与功能作用、详细接线方式、Arduino端与树莓派端的软件实现及演示文件说明,旨在为推动“智能农业+物联网”应用落地提供完整参考。

image.png

二、优选元器件型号与选用理由
本节列出实现MT05S土壤湿度传感系统所需的各类核心元器件,包括传感器本体、主控板、电源模块、上拉电阻、连线与辅助配件,并对其型号、作用、优势与选用理由进行详细说明,为后续硬件设计与采购提供参考依据。

  1. MT05S-ABB005 1-Wire土壤湿度传感器

    • 型号/编号:MT05S-ABB005(含土壤湿度、土壤温度与电导率测量功能,电源2.7~12V DC,5米长测量电缆)。

    • 功能/作用:采用FDR(频域反射)测量原理,实现土壤体积含水率(VWC)0%~100%测量,并可选配电导率测量,附带DS18B20兼容的1-Wire协议接口,同时内置温度测量功能,用户可根据订购选项选择带有或不带电导率测量的版型。

    • 选用理由:MT05S兼具土壤湿度、温度及可选电导率三种测量参数,减少了多传感器集成时的线路与编程复杂度;1-Wire总线仅需一根数据线即可与主控板通信,便于布线;超低待机功耗(最大30μA)、较高测量精度(0%~50%:±3%,50%~100%:±5%),且具备IP68防护等级,可直接埋入土壤中长期使用,耐酸碱腐蚀,适应农业与温室应用场景需求;外置长达5m的测量电缆可灵活拓展测量范围。

  2. Arduino Uno R3开发板

    • 型号/编号:Arduino Uno R3(ATmega328P主控,14路数字I/O口,6路ADC口,5V/16MHz工作频率)。

    • 功能/作用:作为传感器与下位设备(PC或串口屏等)的桥梁,读取MT05S传感器1-Wire数据并解码,将结果通过串口或网络模块上传;可运行演示示例程序,支持即插即用;多路I/O可集成其他传感器或执行器。

    • 选用理由:Arduino Uno R3拥有成熟的社区与丰富的示例库,兼容OneWire与DS18B20协议库,易于与MT05S配合;板载稳压器支持外接5V电源;成本低廉、学习曲线平缓;板上自带USB转串口模块,可直接与PC连接进行调试,适合示范与小规模部署。

  3. Raspberry Pi 3B+ 单板计算机

    • 型号/编号:Raspberry Pi 3 Model B+(Arm Cortex-A53四核处理器,1GB内存,支持Wi-Fi与以太网)。

    • 功能/作用:用于运行Python脚本,通过树莓派的1-Wire接口(GPIO4)直接与MT05S通信,实时采集并处理土壤环境数据,可进一步进行图形化展示、Web服务器部署或将数据发送至云平台;可接入摄像头、触摸屏等进行人机交互扩展。

    • 选用理由:树莓派3B+具有较高计算资源与网络功能,可承载轻量级数据库或可视化界面;官方支持1-Wire总线,通过启用GPIO4系统可原生挂载MT05S设备;丰富的Python库简化开发;适合后期拓展为边缘计算节点,具备更强扩展能力。

  4. 4.7kΩ 1/4W 上拉电阻

    • 型号/编号:YAGEO 4.7kΩ ±5% 贴片或插件电阻。

    • 功能/作用:为1-Wire总线提供必要的上拉电平支持,使单总线设备(MT05S)在Idle(空闲)状态下保持高电平,通过开漏或集电极/漏极输出实现数据通信;在单总线通信过程中,保证时序与信号完整性。

    • 选用理由:4.7kΩ为常见的1-Wire总线标准上拉阻值,既能保证通信速度与稳定性,又能在低功耗模式下减少待机泄漏电流;1/4W功率足以应对5V电平环境;贴片或插件封装方便在面包板或PCB设计中使用。

  5. 5V 2A DC 稳压电源模块

    • 型号/编号:LM2596S/AMS1117-5.0等基于DCDC或LDO稳压模块,输入7V~12V DC,输出5V 2A。

    • 功能/作用:为Arduino Uno、MT05S供电,并可通过5V电源供给其他外设(如电源指示灯、串口屏、继电器模块等);如在树莓派侧也可使用5V 2.5A或3A电源适配器为树莓派及MT05S提供稳定电压。

    • 选用理由:稳压模块体积小、成本低,易于集成到系统箱体中;LM2596S DCDC模块效率高、发热低;AMS1117-5.0线性稳压器输出噪声小,可作为MT05S或Arduino板的备用供电。

  6. 面包板及杜邦线(公对母/公对公)

    • 型号/编号:MB-102透明大号面包板、20cm杜邦线若干。

    • 功能/作用:用于原型搭建阶段将MT05S、Arduino、上拉电阻等模块进行临时电路连接,方便快速组装与调试;杜邦线可将各引脚对应连接至面包板或Arduino GPIO口。

    • 选用理由:面包板无需焊接,可任意组合跳线;杜邦线常见、易采购;适合实验室或教学场景;待后期完成原型验证后可定制PCB或接线更为紧凑可靠的方案。

  7. Micro USB 数据线

    • 型号/编号:USB A to Micro B 数据线。

    • 功能/作用:为Arduino Uno提供5V电源与程序下载功能,同时可作为串口通信通道;若使用Arduino IDE进行串口打印、调试,数据线必不可少。

    • 选用理由:Micro USB为Arduino Uno标准接口;通用性高、随处可购;即插即用,配合Arduino IDE快速烧写代码与监控串口输出。

  8. Micro SD 卡(16GB或以上)

    • 型号/编号:Sandisk 16GB Class10 Micro SD 卡。

    • 功能/作用:用在树莓派系统启动盘,预装Raspbian或Raspberry Pi OS,用于存储操作系统与Python示例程序,以及在本地存储采集到的土壤数据日志。

    • 选用理由:较大的容量可保证操作系统与日志文件空间充足;Class10读写速度快,能满足系统启动与数据存储需求;品牌卡更稳定、不易损坏。

  9. 可选扩展:OLED 0.96寸 I2C 显示模块

    • 型号/编号:SSD1306 0.96″ 128×64像素 I2C OLED。

    • 功能/作用:在Arduino或树莓派端可用于本地实时显示土壤湿度、温度与电导率数值,无需串口监视器即可直观查看;如在户外安装可省去额外电脑查看。

    • 选用理由:I2C接口仅需两根引脚;128×64分辨率足以展示多行文本数据;功耗低、可视性好;适合小型信息显示;也可后期用作系统调试辅助。

  10. 线材附件与防护壳

    • 型号/编号:PVC线套、热缩管、电工胶带、塑料壳体若干。

    • 功能/作用:用于包裹电路,避免短路;保护MT05S与接线不受土壤腐蚀;同时可对整个原型进行一定程度的防水、防尘处理。

    • 选用理由:现场环境复杂,土壤湿度高,必须对裸露引脚进行绝缘、密封;热缩管能紧密包裹杜邦线连接处,防止接触不良;选配塑料壳体可将Arduino与上拉电阻、电源模块固定并提供一定防护。

三、硬件接线与接线图说明
本节主要详细阐述MT05S与Arduino、MT05S与树莓派两种主控板之间的硬件连接方式及电路逻辑,确保用户能依据接线图正确搭建系统。

3.1 MT05S与Arduino Uno的连接方式
MT05S采用1-Wire总线接口,与DS18B20兼容,只需单根数据线“DATA”连接至Arduino Uno的数字IO口,同时需要在该总线上加装上拉电阻至5V,为保证通信稳定性,推荐使用4.7kΩ上拉电阻;MT05S还需要连接电源与地线,要求2.7V~12V直流供电,Arduino板输出的5V可直接供给MT05S的VCC。具体接线如下:

  • MT05S 红色线(VCC)→ Arduino Uno 5V 引脚

  • MT05S 黑色线(GND)→ Arduino Uno GND 引脚

  • MT05S 黄色线(DATA)→ Arduino Uno 数字引脚2(D2)(或其他可用数字I/O)

  • 一端4.7kΩ上拉电阻 → Arduino Uno 5V,另一端 → Arduino Uno 数字引脚2(D2)

整套电路可在面包板上进行物理连接,如图3-1所示。示意图中,MT05S探头通过5米长电缆连接接头板,该接头板再通过杜邦线接入Arduino Uno,同时在数据线上并联4.7kΩ电阻拉至5V。

MT05S与Arduino Uno接线

  1. MT05S探头直接插入待测土壤;

  2. 接头板上对应标注VCC、GND、DQ(数据)端;

  3. 将VCC连接至Arduino Uno的5V,GND连接至Arduino Uno的GND,DQ连接至Arduino Uno数字口D2;

  4. 在D2与5V之间并联一只4.7kΩ上拉电阻;

  5. 可选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”),并重启系统;MT05S的数据线直接连接至GPIO4,需在该线路并联一个4.7kΩ上拉至3.3V电源;同时将MT05S VCC连接至树莓派的3.3V或5V输出(建议使用3.3V避免逻辑电平冲突),将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供电,则需在数据线上加装电平转换电路,或者使用GPIO口的耐受5V保护措施(例如额外保护二极管或电平转换板)。

图3-2:MT05S与Raspberry Pi 3B+接线示意图

  1. 在树莓派/boot/config.txt启用1-Wire总线(dtoverlay=w1-gpio,gpiopin=4,pullup=on);

  2. MT05S VCC → Raspberry Pi 3.3V(Pin1),MT05S GND → Raspberry Pi GND(Pin6);

  3. MT05S DATA → Raspberry Pi GPIO4(Pin7),并在此处并联4.7kΩ上拉电阻至3.3V;

  4. 若需要OLED显示,可利用I2C(GPIO2为SDA,GPIO3为SCL)接入SSD1306模块。

四、Arduino端软件实现与演示文件说明
本节围绕Arduino Uno对MT05S进行读写及数据处理,提供完整示例代码、库引用说明与程序逻辑解读,以便用户快速运行并采集土壤参数数据。

4.1 开发环境与依赖库

  • Arduino IDE版本:Arduino IDE 1.8.x或以上,Windows/Mac/Linux均适用。

  • 依赖库

    1. OneWire库(用于1-Wire总线通信,与MT05S兼容DS18B20协议),可通过Library Manager安装。

    2. DallasTemperature库(若仅需要温度,可封装温度读取,但MT05S数据包第三、四字节为土壤温度高低位,此示例不使用DallasTemperature,此处使用OneWire自定义代码读取)。

    3. Adafruit_SSD1306与Adafruit_GFX(若使用SSD1306 OLED显示模块实现本地显示)。

在Arduino IDE中依次点击“工具”→“库管理”→搜索“OneWire”并安装最新版;若需要SSD1306显示,请搜索并安装“Adafruit SSD1306”与“Adafruit GFX”库。

4.2 示例代码结构与功能
以下示例代码基于OneWire库实现MT05S的转换指令、数据读取、CRC校验与数值解析,并将土壤温度、湿度与电导率实时打印至串口监视器。代码注释详尽,便于理解通信时序与寄存器含义。

#include <OneWire.h>

// 定义MT05S连接引脚
#define MT05S_PIN 2  // 将MT05S数据线连接至Arduino数字引脚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字节数据

 // 发送复位脉冲
 if (!oneWire.reset()) {
   Serial.println("No response from MT05S sensor. Check wiring!");
   delay(1000);
   return;
 }

 // 跳过ROM选择(Skip ROM),直接对挂接在总线上唯一设备操作
 oneWire.skip();

 // 发送转换温度及湿度指令(0x44)
 oneWire.write(0x44);

 // 等待转换完成,MT05S转换周期最大100ms,此处轮询DQ线状态
 while (oneWire.read_bit() == 0) {
   delay(10);
 }

 // 再次发送复位脉冲以开始读取Scratchpad
 oneWire.reset();
 oneWire.skip();
 oneWire.write(0xBE);  // Read Scratchpad指令

 // 读取9字节数据到scratchpad数组
 for (int i = 0; i < 9; i++) {
   scratchpad[i] = oneWire.read();
 }

 // 验证CRC:计算前8字节CRC与第9字节比对
 byte crcCalc = OneWire::crc8(scratchpad, 8);
 if (crcCalc != scratchpad[8]) {
   Serial.println("CRC ERROR! Data invalid.");
   delay(1000);
   return;
 }

 // 将多个字节拼接成有符号整数
 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);

 // 转换为实际物理量
 float temperature = tempRaw / 100.0;    // 单位:℃,保留两位小数
 float moisture = moistRaw / 100.0;      // 单位:%,保留两位小数
 float conductivity = ecRaw / 1000.0;    // 单位:ms/cm,保留三位小数

 // 串口打印
 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对象,使其通过数字引脚2与MT05S通信;

  • oneWire.reset(); oneWire.skip(); oneWire.write(0x44);:向总线发送复位脉冲后,跳过ROM选择,直接对唯一挂在总线上的MT05S发出“转换指令”(0x44),启动温度、湿度与EC测量;

  • oneWire.read_bit():读取数据线电平,通过轮询等待MT05S转换完成;

  • oneWire.write(0xBE):START读Scratchpad命令,读取MT05S寄存器中的9字节数据;

  • 使用OneWire::crc8()函数对前8字节进行CRC8校验,与第9字节对比,保障数据完整性;

  • 利用makeWord或位拼接方式将高低字节组合成16位整数,并根据MT05S数据手册说明分别除以100.0或1000.0还原为含物理意义的数值;

  • 通过串口打印温度、湿度与电导率,便于在“串口监视器”窗口中实时查看测量结果。

4.3 演示文件说明

  • MT05S_Arduino_Demo.ino:上述示例代码文件,可直接在Arduino IDE中打开并上传;

  • MT05S_Arduino_OLED.ino(可选):在MT05S_Arduino_Demo基础上集成SSD1306 OLED显示,将测量结果以文本形式在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模块同时连接的情况下运行,实现本地数据显示,免除串口监视器查看步骤;显示效果为三行数据显示:温度、湿度与电导率。

4.4 注意事项与调试建议

  • 上拉电阻应与MT05S数据线共用,一端连接至MT05S数据线(DQ),另一端连接至Arduino 5V,以保证1-Wire总线处于空闲时保持高电平;若上拉电阻值过大可能导致信号上升缓慢,影响通信稳定性;若过小则会加大静态功耗,一般采用4.7kΩ最为合适;

  • 在不同Arduino板上,若数字引脚使用了PWM或占用其他外设,需要在代码中修改MT05S_PIN为对应引脚,并在连接时确保不与其他模块冲突;

  • 若在测量过程中发现读数异常或CRC错误,应首先检查物理接线是否牢固、杜邦线是否接触不良;其次可调整数据线引脚上的上拉电阻数值,或者缩短线路长度以减少电容负载;

  • MT05S探头若长期插入土壤会被泥土附着,建议定期拔出清洗探头表面以保持测量精度;若土壤中盐分浓度较高,可能对电导率测量造成影响,此时可在软件层面加入温度补偿或数据滤波。

五、树莓派端软件实现与演示文件说明
本节针对Raspberry Pi 3B+系统环境进行设置,讲解如何在Raspbian(现称Raspberry Pi OS)系统中启用1-Wire总线驱动、读取MT05S数据,并提供Python示例脚本以便快速运行。

5.1 系统环境准备

  • 操作系统:建议使用Raspberry Pi OS(32-bit)最新版本,可从树莓派官网下载映像并烧录至Micro SD卡中;

  • 网络连接:将树莓派通过网线或Wi-Fi接入互联网,以便下载操作系统更新与所需Python库;

  • SSH/桌面:可选择在本地连接显示器、键盘鼠标进行调试,或在另一台PC通过SSH终端远程登录;

5.2 启用1-Wire总线驱动
在树莓派启动后,打开终端并执行以下命令编辑
/boot/config.txt文件:

sudo nano /boot/config.txt

在文件末尾添加一行:

dtoverlay=w1-gpio,gpiopin=4,pullup=on

该配置表示启用GPIO4作为1-Wire总线引脚,并开启内部上拉电阻(若使用外部4.7kΩ上拉可将pullup设置为off或直接删除此参数);保存并退出nano后,执行以下命令使更改生效:

sudo reboot

重启后,检查/sys/bus/w1/devices/目录即可看到以28-开头的设备文件夹,该编号即为MT05S的ROM Code。例如:28-060504030201

5.3 Python示例脚本
在终端中创建一个Python脚本用于读取MT05S数据并打印,以下示例代码可保存为
mt05s_read.py

#!/usr/bin/python3
import time

# 请根据实际在/sys/bus/w1/devices/下的设备编号修改ROMCODE
ROMCODE = '28-060504030201'
device_file = '/sys/bus/w1/devices/' + ROMCODE + '/w1_slave'

def read_raw():
   """
   读取设备文件的原始内容,共两行
   """
   with open(device_file, 'r') as f:
       lines = f.readlines()
   return lines

def read_mt05s():
   """
   解析MT05S数据,返回温度、湿度、电导率三元组
   """
   lines = read_raw()
   # 检查第一行末尾是否包含"YES"以保证数据合法
   while lines[0].strip()[-3:] != 'YES':
       print("CRC check failed or incorrect data, retrying...")
       time.sleep(0.2)
       lines = read_raw()

   # 第二行中包含3个至少6个16进制数值,分别对应温度、湿度、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
   # 电导率高位与低位
   ec_hi = int(parts[4], 16)
   ec_lo = int(parts[5], 16)
   ec_raw = ec_hi * 256 + ec_lo

   # 转换为物理量
   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替换为实际设备目录名称,可通过命令ls /sys/bus/w1/devices/获取;

  • read_raw()函数负责打开并读取MT05S对应的w1_slave设备文件,共返回两行文本,第一行末尾的“YES”/“NO”表示CRC校验结果;若不为“YES”,则循环等待并重试;

  • 第二行按空格分隔后,前三对字节分别为温度、湿度与电导率的高低八位,使用16进制转换后组合成整数,最后通过除以100.0或1000.0转化为实际工程物理量;

  • 在主循环中,捕获读取过程中可能出现的FileNotFoundError与其他异常,提示用户检查接线或ROMCODE;

将脚本保存至树莓派,并赋予可执行权限:

chmod +x mt05s_read.py

然后运行:

sudo ./mt05s_read.py

即可在终端中每秒输出一次MT05S测量的温度、湿度与电导率数值。

5.4 演示文件说明

  • mt05s_read.py:上述Python示例脚本,实现MT05S读数解码与打印;

  • mt05s_wiring.pdf:接线说明PDF,可包含文字与箭头示意图,建议将MT05S VCC/GND/DATA与Raspberry Pi对应引脚连接示意画出;

  • requirements.txt(可选):包含Python环境依赖包(由于示例仅使用标准库,无额外依赖,可忽略);

  • README.md:对项目进行简要说明,包括在项目根目录进行的操作步骤、注意事项、ROMCODE查找方法等;

以上文件可打包成.zip.tar.gz格式分发,用户仅需复制至树莓派后解压,并根据README提示运行即可。若需要在系统启动时自动运行脚本,可将运行命令插入/etc/rc.local或创建systemd服务。

六、测试与校准建议
在实际部署中,为保证MT05S的测量精度与稳定性,需对传感器进行初步测试与环境校准,以适应不同土壤类型与温度环境的差异。

6.1 出厂测试验证

  • 将MT05S探头悬空置于空气中,读数应接近0%湿度,且温度应接近环境温度;

  • 将探头插入已知含水量的土壤样本(可使用标准土壤湿度杯测法获取真实体积含水率),记录输出值并与理论值对比,判断传感器误差;

  • 若需要测量电导率功能,可将探头放入已知电导率溶液(如50 μS/cm、1000 μS/cm标准溶液)中,验证EC读数准确性;

6.2 现场校准方法

  • 温度校准:可在0℃冰水混合物与25℃室温水中分别测量MT05S温度读数,记录实际温度与输出温度的偏差,如存在系统性误差可在软件端做偏移修正;

  • 湿度校准:选取若干不同比例(如5%、15%、25%~35%)的土壤样本,将其烘干后按重量补加一定质量的水,保证土壤达到预期体积含水率,用MT05S测量并对比理论值,拟合线性或曲线回归系数,用于软件端换算;

  • 电导率校准:在常见农业土壤肥料环境下,土壤电导率会受到养分含量与土壤温度影响,建议用户自行使用标准KCl溶液做多点校准,获取对应EC读数;软件可根据温度值使用内置温度补偿公式对EC进行校准;

6.3 注意事项

  • MT05S探头上的绝缘层需保持清洁,若长时间埋土,泥土黏附会导致导电性能异常,可定期用干净水冲洗或酒精擦拭探针;

  • 在不同土壤类型(沙土、壤土、黏土等)测量时,土壤颗粒结构与电导率特性存在差异,校准曲线应针对实际现场土壤进行多点采样;

  • 电导率与湿度并不等价,若土壤含盐量高可导致EC读数偏高,应结合湿度值与温度值进行综合分析;

  • 推荐在关键测量节点设置软硬件滤波功能,例如在软件端对测量值进行移动平均、低通滤波或中位数滤波,以减少偶发误差;

七、演示文件与源码汇总
以下为本次方案所包含的演示文件与源码清单,用户可直接下载后参考运行,并根据实际需要进行二次开发:

  1. MT05S_Arduino_Demo.ino:Arduino Uno示例代码,用于读取MT05S并打印至串口;

  2. MT05S_Arduino_OLED.ino:Arduino Uno示例代码,集成SSD1306 OLED显示,实现本地数据显示;

  3. mt05s_read.py:Python脚本,用于Raspberry Pi实时读取MT05S温度、湿度与EC数据;

  4. mt05s_wiring.pdf:接线图文档,包含Arduino与树莓派两种接线示意图;

  5. README.md:项目说明文档,介绍各示例文件作用、运行环境与步骤;

  6. requirements.txt:Python依赖列表(本示例代码仅依赖标准库,无需额外安装,可不包含该文件);

  7. MT05S_User_Manual.pdf:来自MT05S生产商官方的用户手册(包括寄存器说明、命令时序、出厂校准报告等),可作为参考文档;

上述文件可统一打包发布或托管至GitHub、GitLab等代码仓库,便于团队协作与后续维护。

八、扩展应用与系统优化
除基础数据采集功能外,用户还可根据需求对系统进行进一步扩展与优化,以提升系统的实用性与智能化水平。以下列出若干可选扩展方向,供读者参考:

8.1 引入无线传输模块,实现远程监测

  • LoRa无线模块:可选RAKWireless RAK811、SX1278或MT05S兼容的LoRa外设,将Arduino或树莓派侧的采集数据通过LoRa网络发送到中心网关,实现远距离无线覆盖;

  • Wi-Fi模块:对于具有Wi-Fi信号覆盖的场景,可在Arduino侧选用ESP8266、ESP32等开发板,将MT05S数据通过MQTT或HTTP协议推送至云平台;在Raspberry Pi侧可直接使用内置Wi-Fi,运行Python脚本时将数据上传至数据库或Web服务器。

8.2 本地Web服务器与图形化界面

  • 在Raspberry Pi上安装轻量级Web服务器(如Flask、Django或Node.js),开发简单Web页面,将MT05S测量值以曲线或表格形式呈现,并支持历史数据查询;

  • 配置树莓派摄像头,将土壤区域环境情况实时拍照,与湿度数据结合生成可视化报告;

8.3 数据库与远程存储

  • 将MT05S数据存储至SQLite、MySQL或InfluxDB,可以方便后续数据分析与可视化;树莓派端可编写Python脚本周期性读取并写入数据库,或者通过Python定时任务(cron)实现自动化;

  • 若部署环境具备公网或VPN,可搭建Node-RED、ThingSpeak、AWS IoT等云端服务,将数据实时上报,实现在线监测与预警推送;

8.4 多路传感与数据融合

  • 在相同1-Wire总线上若需多个MT05S测量不同位置的土壤湿度,可将多只MT05S并联至同一数据线,利用其唯一的ROM Code区别不同设备,并在软件中循环查询;

  • 可结合其他传感器(如DS18B20温度传感器、DHT22环境温湿度传感器、光照传感、CO2传感、PH电极等),实现对环境参数的多维度采集与分析;

  • 通过树莓派或单片机侧算法将不同传感器数据进行关联,如在土壤温度过低时推送加热或防冻预警;

8.5 低功耗优化与现场供电

  • 若系统需长时间在野外或无电源区域运行,可采用锂电池+太阳能板的组合为Arduino或树莓派供电,并在程序中采用深度睡眠或间隔采样策略降低功耗;

  • MT05S本身待机电流极低,结合低功耗主控板(如ESP32-Low Power或STM32L系列)可进一步延长续航时间;在节点与网关间使用LoRa通信,减少Wi-Fi或GPRS模块的高功耗;

8.6 系统稳定性与防护

  • 在土壤环境酷热或严寒的地区,可为MT05S探头配备防护套(例如聚四氟乙烯涂层或硅胶薄膜)以防止长时间暴露造成传感失准;

  • 在移动设备或震动频繁场所,需对电路进行防震设计,选用抗拉扯杜邦线或屏蔽线缆,并给电子元器件做好固定;

  • 建议在电源输入端加入TVS二极管或保险丝,对电源突波与静电进行保护,避免在雷雨季节或沙尘天气损坏设备。

九、总结
本方案围绕MT05S 1-Wire土壤湿度传感器,集成了Arduino Uno与Raspberry Pi 3B+两种主控方式,详细说明了优选元器件型号、作用、选用理由以及功能实现,涵盖硬件接线、Arduino示例代码、树莓派Python脚本、演示文件说明与测试校准建议,满足了用户对“基于MT05S的土壤湿度传感(接线图+演示文件+Arduino和树莓派源码)”的需求。本方案采用模块化设计,留有丰富的扩展接口与升级空间,便于在“智能农业+物联网”场景中根据实际需求进行功能拓展与性能优化。通过本文,用户可快速完成土壤参数采集系统的原型搭建,并在后续通过数据存储、云平台对接与智能算法实现精准灌溉、环境监控与决策支持,最大化发挥MT05S高精度、低功耗与易集成的优势,为智慧农业与环境监测应用提供参考与借鉴。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告