【第七节】Arduino连接土壤湿度传感器
通过土壤湿度传感器监测土壤中的水含量
目录
Ⅰ 简介
土壤湿度传感器是一种用于测量土壤中水分含量的设备。它可以帮助用户监测植物生长环境的湿度状况,从而在植物需要浇水时提供指示,避免过度或不足灌溉。SparkFun提供的土壤湿度传感器有多种型号,包括基本型、带螺丝端子型和Qwiic接口型,适用于不同的应用场景和用户需求。


Ⅱ 工作原理
土壤湿度传感器是基于土壤的导电性,通过传感器上的两个裸露金属电极片(探针),在土壤中充当可变电阻。当土壤中的水分增加时,导电离子越活跃,导电性增强,导致探针之间的电阻降低。传感器通过测量这种电阻变化来推断土壤的湿度水平。具体来说,传感器输出一个与土壤湿度成比例的模拟信号,该信号可以被微控制器(如Arduino)读取并转换为湿度值。
Ⅲ 传感器特性及应用场景
1.核心特性
- 工作电压:3.3-5V DC,兼容常见单片机系统。
- 尺寸与结构:探针长度约5-10cm,裸露金属片设计,无防护涂层,成本极低(约5−10)。
- 精度与误差:受土壤盐分、温度影响大,误差可达±10%以上,需频繁校准。
- 短期使用:适合干燥或低盐分土壤,长期使用易因电极腐蚀导致精度下降。
- 防护等级:未标注IP防护,需额外封装防水。
2.应用场景
- 自动化园艺:通过阈值触发水泵,当土壤湿度低于设定值时启动灌溉。例如,阳台盆栽监测,结合Arduino实现无人照料。
- 小规模农田低成本监测:在预算有限的情况下,快速部署多个传感器进行湿度粗略监测,指导初步灌溉决策。但需注意盐碱地或长期使用时的误差问题。
- 临时短期环境监测:如植物生长实验中,快速获取土壤湿度趋势数据,无需高精度。
3.优缺点对比
| 特性 | 优点 | 缺点 |
|---|---|---|
| 成本 | 极低(5−10) | 精度低,易受干扰 |
| 易用性 | 插入即用,无需复杂配置 | 需定期清洁电极,防止腐蚀 |
| 适用场景 | 短期、低盐分环境 | 长期户外或盐碱地不适用 |
| 输出方式 | 模拟/数字信号,兼容性强 | 需额外模块处理信号 |
4.典型案例
- 智能花盆
- 配置:SparkFun传感器 + Arduino + 继电器水泵。
- 逻辑:当模拟输出电压低于阈值(对应低湿度)时,触发水泵浇水。
- 问题:在北方硬水地区,钙沉积可能导致电极腐蚀,需每月清理。
- 教学实验
- 配置:SparkFun传感器 + 树莓派数据采集。
- 目标:对比不同土壤类型(黏土、砂土)的湿度变化。
- 结果:学生直观理解电阻与湿度的关系,但需手动校准数据。
Ⅳ 使用方法
-
电路原理图

-
接线说明

以Arduino UNO R3为例,如图所示将SparkFun土壤湿度传感器的VCC和GND引脚依次连接Arduino的5V和GND引脚,将传感器的SIG数据引脚接入Arduino的模拟输入引脚(如A0等)。
详细代码:
1.通过模拟输入引脚读取数值,进而判断土壤中的水含量
/***********************************************
* 作者:会电焊的ESP32
* 项目:使用土壤湿度传感器获取土地水含量
* 难度:@
***********************************************/
#define Soilpin A0
void setup() {
Serial.begin(9600);
}
void loop() {
int SoilValue = analogRead(Soilpin);
Serial.print("Soil Humidity: ");
Serial.println(SoilValue);
delay(500);
}
2.通过通过土壤湿度传感器判断土壤中的水含量,从而实现对连接水泵继电器的自动控制
将继电器的VCC和GND引脚接Arduino的5V和GND引脚,控制IN引脚接Arduino的2号数字引脚。接着,将水泵接入继电器控制端的NO、NC和COM端,详细来说NC常闭端悬挂不接,N0常开端接水泵正极,COM端接12V锂电池负极,水泵负极接12V锂电池正极。(注意:水泵等接入继电器的外接设备需要通过锂电池单独供电,不能直接使用Arduino的5V进行供电,否则可能会少回主板或导致外接设备工作异常)
/***********************************************
* 作者:会电焊的ESP32
* 项目:土壤湿度传感器控制继电器水泵
* 难度:@@
***********************************************/
#define SoilPin A0 // 土壤湿度传感器引脚
#define RelayPin 2 // 继电器控制引脚(接水泵)
#define DryThreshold 75 // 湿润阈值
#define WetThreshold 40 // 干燥阈值
void setup() {
Serial.begin(9600);
pinMode(RelayPin, OUTPUT);
digitalWrite(RelayPin, HIGH); // 初始化阶段关闭继电器(根据实际继电器模块进行调整,这里是低电平触发,若为高电平触发则改为LOW)
}
void loop() {
// 读取土壤湿度值
int SoilValue = analogRead(SoilPin);
// 映射到百分比
int Humidity = map(SoilValue, 1023, 0, 0, 100);
// 串口输出调试信息
Serial.print("Soil Value: ");
Serial.print(SoilValue);
Serial.print(" | Humidity: ");
Serial.print(Humidity);
Serial.println(" %RH");
// 水泵控制逻辑
if (Humidity < WetThreshold) {
Serial.println("Pump ON!");
digitalWrite(RelayPin, LOW); // 启动水泵(根据继电器模块调整电平)
}
else if (Humidity > DryThreshold) {
Serial.println("Pump OFF!");
digitalWrite(RelayPin, HIGH); // 关闭水泵
}
delay(1000); // 每秒检测一次
}
更多推荐



所有评论(0)