0、结果
说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是含水量,如果是你想要的,可以接着往下看。
1、外观
说明:虽然土壤湿度传感器形态各异,但是原理和代码都是适用的。
2、连线
说明:只需要连接三根线。
uno————土壤湿度传感器
5V--------------VCC
GND--------------GND
A0--------------A0
3、源程序
说明:采用非阻塞方式编写,一定时间检测一次土壤湿度,并将对应功能进行函数化,方便移植。
/****************************************soil part****************************************/
/*
Note:
It is necessary to test the simulated value of completely dry soil first,
and then measure the simulated value of soaked water.
These two values are the values of 0~100 water content,
and the other water content is within this range.
Because the simulated value is inversely proportional to the water content,
it needs to be looked at backwards.
*/
#define maxSoil 1024 //The maximum value of the soil read
#define minSoil 400 //Minimum value read from the soil
#define soilTimeInterval 1000 //Soil moisture was measured once every 1000 milliseconds
#define soilHumPin A0 //A0 Indicates the original read data
unsigned long soilTimes = 0; //Record the device running time
int soilHumidityData = 0; //Current measured air humidity
int soilWaterContent = 0; //Water content in soil
/***********************************set up and loop part*********************************/
void setup() {
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
Serial.println("Go online!");
}
void loop() {
getSoilHumData(); //Soil moisture acquisition
}
/****************************************soil part****************************************/
/*Soil moisture acquisition*/
void getSoilHumData() {
if (millis() - soilTimes >= soilTimeInterval) {
soilTimes = millis();
soilHumidityData = analogRead(soilHumPin); //Obtain the soil moisture value
soilHumidityData = constrain(soilHumidityData, minSoil, maxSoil); //Limit the fetched values to a range
soilWaterContent = map(soilHumidityData, minSoil, maxSoil, 100, 0); //Map the restricted value to the water content
Serial.print("Original value: ");
Serial.print(soilHumidityData); // The serial port displays the corresponding value
Serial.print(" , ");
Serial.print(" Water content: ");
Serial.print(soilWaterContent); // The serial port displays the corresponding value
Serial.println(" %");
}
}
4、注意事项
说明:程序中的两个值需要特别提示一下,maxSoil 这个值表示土壤检测传感器在空气中的一个模拟值,minSoil这个值表示土壤检测传感器百分之八十在水中的一个模拟值,这两个值来模拟含水量0和含水量100% ,这两个值需要您实际测量得到。
5、基本原理
土壤湿度检测传感器的原理是通过测量土壤中的电导率来判断土壤湿度。
当土壤湿度较低时,土壤内部的电阻很大,电导率很低,反之当土壤湿度较高时,土壤内部的电阻很小,电导率很高。因此,土壤湿度检测传感器通常会在传感器的两个电极之间施加一个微小的电流(通常为几毫安的直流电流),并测量电阻值或电导率,来判断土壤的湿度情况。
一般来说,土壤湿度检测传感器的电极需要插入到土壤深度 10 至 15 厘米的位置,这样可以获得较为准确的湿度信息,因为表层的土壤湿度和根系区的土壤湿度会有一定的差异。