【PlantSaver】电容式土壤湿度传感器使用及原理(并以Arduino进行校准实验)
1.湿度检测原理
关于这个传感器检测的原理,网上找的资料不多。类似传感器经典的设计是美国DECAGON 公司生产的ECH2O 系列传感器。其结构如下:
式中:
ε0 = 8.854×10-12 为真空介电常数,单位 F/m;
S 为板间遮盖面积,单位 m2 ;
C 为板间电容量,单位F;
δ 为板件厚度,m;
ε 为含高湿敏性基材板件聚合物外膜介电常数,F/m。
测量原理为:薄膜聚合物由于周围湿度条件改变,引发板件聚合物外膜相对介电常数(ε)与电容量变化。(等式右边在使用中是定值)
这个看起来很像我们传感器的原理,但我们买的传感器太便宜了,与是我用砂纸打磨掉,传感器PCB的覆油,如下图:
仔细观察我们发现,该模块并不是上面所讲的结构,也没有薄膜聚合物,没有上下电极之分。该模块的结构应该是这样:
其实它就是把两个电容的极板插到了土壤里,只是这个两个极板在同一水平面。土壤加板子上的漆构成了电容的介质层.
2.常见的电容式土壤湿度传感
世面上常见的电容式土壤湿度传感器模块基本都是capactive soil moisture sensor系列的。现在常见的有三个版本v1.0,v1.2(最便宜),v2.0。
v1.0
v1.2
v2.0
以上就是常见的电容式土壤湿度传感器。他们看起来都差不多,其实这些版本都是从v1.0版本改进的。
3.对该模块的电路进行分析
V1.0的原理图
这个电路是所有该类型传感器的基础,剩下的所有版本都是在这个基础上修修改改。V1.2在V1.0的基础上用普通的NE555换了TI的555芯片,删除了5V转3V电路(用0欧电阻跳线如下图)。删除了555第5脚的旁路电容。所以其只要3,4块的售价。
V1.2的电路原理图如下:
V1.2与V1.0电路的核心一致,V2.0在V1.2的基础上加回了5V转3V的芯片。所以V1.2版本的模拟口输出是大于3V的,而且需要5V供电。这个许多买家描述的不一样。
这电路的核心是用555芯片构成的多谐振荡器,其原理如下(数电课本上的):
所以这个震荡器的频率主要由电容C(v1.0电路中的C5)决定,v1.0电路中圈1部分的电阻,决定其输出方波的占空比。在V1.2的原理图中标出土壤等效电容的位置,这与V1.0板的位置一样。该脉冲信号由555的三脚送到电容的等效电容中。
在V1.2原理图中,B点波形为:
A点波形为:
用的示波器太老了。我们可以看到这方波的占空比很小,频率在2MHZ左右。脉冲信号不断给电容(土壤)充放电,就有了A点的波形。
随着土壤湿度的变化,(土壤的等效)电容发生变化,其充放电时间常数发生改变。其波形的峰值会改变。类似下图:
再通过峰值检波电路如下图,输出电压信号给单片机采样。
4.Arduino实验
用arduino读取v1.2版本(输出不是3V)传感器数值,在空气中采样值为900多,在水中,采样值为700多,其测量范围不如电阻式的宽。代码如下:
void setup() {
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
// analogReference(EXTERNAL);
}
void loop() {
int n = analogRead(A0);
Serial.println(n); //connect sensor and print the value to serial
delay(1000);
}
用读取v2.0(这个一般比较贵)版本,读取数据如下:
注:如果要获得准确的土壤含水量需要做标定。
5. 电容式土壤湿度传感器的校准测试
电容式土壤湿度传感器规格:
工作电压:DC 3.3-5.5V
输出电压:DC 0-3.0V(模拟输出)
首先请将该传感器放置在空气中读取模拟值,代表干燥时的读数。然后拿一杯水,把传感器插入水中一定深度(做一下标记(红虚线),此深度为你将要插入泥土的深度),一定不能超过红色警戒线(红实线)!并记录此时读到的模拟值,代表100%湿度。(输出数据与湿度成反比,在水中的输出量最小)插入深度如图推荐(红虚线处)。
传感器上部零件区最好能做些防水处理,比如防水漆,热胶等。
区间设定
由于传感器数值会受到入土深度、土壤松紧度的影响,只能检测到土壤的相对湿度,我们把湿度的范围分为三等分,分别表示干燥、湿润、非常潮湿。之前记入的两个数据为湿度区间。例如:空气中读数为620,水中读数为308,这样就可以分为【620,516】,【516,412】,【412,308】这三个区间分别代表干燥、湿润、非常潮湿。
注意:由于此传感器会根据电容感应原理来监测土壤湿度,所以放到土壤湿度不同、松紧度不同、插入深度不同的地方,会体现出不同的湿度,即使在同一个地方,同样的深度,在第二次插入时,由于第一次拔出时已经造成了泥土的松动,可能读到的湿度会比第一次低。
备注:湿度与读数是成反比的。
/*
实验七十:电容式土壤湿度传感器模块不易腐蚀宽电压工作(TL555I)
土壤湿度测试实验
三个区间分别为干燥、湿润、非常潮湿
*/
const int AirValue = 620;
const int WaterValue = 308;
int intervals = (AirValue - WaterValue)/3;
int soilMoistureValue = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
soilMoistureValue = analogRead(A0);
if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals))
{
Serial.println("非常潮湿");
}
else if(soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
{
Serial.println("湿润");
}
else if(soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals))
{
Serial.println("干燥");
}
delay(2000);
}
参考文章
1.
CSDN 《Arduino--电容式土壤湿度传感器使用及原理》
作者:知之至知
链接:https://blog.csdn.net/weixin_41866783/article/details/109292153
2.
【雕爷学编程】Arduino动手做(70)---土壤湿度传感器
作者:雕爷学编程
链接:https://www.sohu.com/a/436451512_120248280