【Arduino土壤湿度传感器教程 (Arduino Soil Moisture Sensor Tutorial)】

图一:土壤湿度传感器 FC28
教程介绍
土壤湿度传感器一般用于检测土壤中的水分含量。常用的有两种类型:电阻式和电容式。
电阻式土壤湿度传感器:通过测量土壤的电阻值来确定土壤的湿度。湿度较高时,土壤的电阻较低;反之,湿度较低时,土壤的电阻较高。这种传感器的代表是 FC-28。
电容式土壤湿度传感器:通过测量土壤的介电常数来确定土壤的湿度。相比电阻式传感器,电容式传感器对腐蚀和污染的抵抗力更强。这种传感器的代表是 SoilWatch 10 和 CapaSense。
电阻式土壤湿度传感器
1. 两个裸导体的叉形探头作为变阻器(类似于电位计),其电阻会随着土壤含水量而变化。
2. 一个电子模块,用于将探头连接到Arduino的开发板。电子模块通常包括以下引脚:
VCC:该引脚用于为传感器供电,通常连接到微控制器板上的3.3V或5V引脚。
GND:该引脚用于接地,应该连接到微控制器板上的GND引脚。
AO:该引脚输出表示土壤湿度水平的模拟电压信号。此引脚通常连接到微控制器板上的模拟输入引脚。
DO:一些土壤湿度传感器还可能具有DO(数字输出)引脚,用于指示湿度水平是否超过一定阈值的数字信号。LM393比较器可以将信号进行数字化处理。
该模块也包括一个电位器,用于调整数字输出(DO)的灵敏度。我们可以用它来设置阈值,当土壤电阻低过(土壤湿度水平超过)阈值时,模块输出LOW(0),否则为HIGH(1)。这个阈值可以用来激活继电器,启动灌溉系统。
该模块还包括两个LED灯。电源LED灯在模块开启时亮起,状态LED灯在土壤电阻低过(土壤湿度水平超过)阈值时亮起。

图二:工作原理
传感器的电阻与土壤含水量呈反比关系:
· 土壤中含水量越多,导电性越好,输出的电阻越低。
· 土壤中含水量越少,导电性越差,输出的电阻越高。
材料清单
- 土壤湿度传感器 x1
- 双公头面包线 x2 (黑线x1, 红线x1,): 颜色不重要,但有助于理解教程。
- 公母头面包线 x4 (黑线x1, 红线x1, 黄x1, 橘x1): 颜色不重要,但有助于理解教程
- Arduino Uno 开发板 x1
- UBS接线 x1
**双公头用于连接探头和电子模块。公母头用于连接电子模块和开发板。
电路图

电路图
代码
/**定义引脚 **/
#define pin_ao A0 //传感器的AO(模拟信号引脚)连接到开发板上的A0
#define pin_do 7 //传感器的DO(数字信号引脚)连接到开发板上的7
/**初始化设置**/
void setup() {
Serial.begin(9600); //用于初始化 Arduino 的串口通信函数。Arduino 将以每秒9600位的速度同传感器交换数据
delay(1000); //延迟1000毫秒=1秒,让设置稳定下来
}
/**循环设置**/
void loop() {
int analog_val = analogRead(pin_ao); // 读取模拟信号(电阻)
int digital_val = digitalRead(pin_do); //读取数字信号
//打印模拟信号和数字信号
Serial.println("模拟信号输出: " + (String)analog_val + "; 数字信号输出: " + (String)digital_val);
/**可以根据模拟输出判断是不是该浇水了。大家可以根据自己需求,改变阈值**/
if (analog_val >500) { // 如果电阻高于500,代表土壤湿度太低,就浇水
Serial.println("模拟信号: 给我浇水~"); // 在串口监视器打印信息
} else { // 如果电阻低于或等于500,代表土壤湿度可接受,不用浇水
Serial.println("模拟信号: 我喝够水啦~"); // 在串口监视器打印信息
}
/**也可以根据数字输出,判断是不是该浇水了**/
// if (digital_val) { // 如果数字输出是1,代表电阻高于阈值,就浇水
// Serial.println("数字信号: 给我浇水~"); // 在串口监视器打印信息
// } else { // 如果数字输出是0,代表电阻低于阈值,不用浇水
// Serial.println("数字信号: 我喝够水啦~"); //在串口监视器打印信息
// }
delay(1000); //延迟1000毫秒=1秒,让设置稳定下来,再开始另一个循环
}
上传代码的步骤
a) 点击Arduino图标, 打开编程IDE。一个Sketch会跳出来。
b) 点击文件(F) >> 新建项目, 打开一个新的Sketch。
c) 复制并粘贴上面的代码进IDE。
d) 点击工具 >> 开发板 >> Arduino AVR Boards >> 选择你现在用的开发板。
e) 点击工具 >> 选择端口。(端口不一定是6,由电脑分配。)
f) 点击打勾图标检查代码。
g) 如果IDE没有报错,点击右箭头图标上传代码。
h) 点击工具 >> 打开串口监视器, 看传感器被触碰时是否有正确的信息打印出来。
延长传感器寿命的小贴士
这些传感器本来就不断暴露在水分中,如果再将传感器埋在土壤中并不断地为其供电会显著加速腐蚀速度。为避免这种情况,建议只在读取数据时打开传感器。
可用以下代码控制电源输出:
const int powerPin = 0; // 定义电源引脚
void setup() {
pinMode(powerPin, OUTPUT); // 把电源引脚设置为输出
}
void loop() {
digitalWrite(powerPin, HIGH); // 打开电源输出
delay(100); // 等100毫秒让电源稳定
/**跑要跑的程序**/
digitalWrite(powerPin, LOW); // 关掉电源输出
delay(powerDelay); // 根据需求决定关掉电源输出
}
参考资料
How Soil Moisture Sensor Works and Interface it with Arduino: https://lastminuteengineers.com/soil-moisture-sensor-arduino-tutorial/
Arduino Soil Moisture Sensor:https://arduinogetstarted.com/tutorials/arduino-soil-moisture-sensor
背景图: 来自Canva和Clipchamp
电路图:用virtual Breadboard制作
音乐:A Day to Remember, provided by Storyblocks