土壤湿度传感器

简介

新款土壤湿度传感器来了!这款电容式土壤湿度传感器区别于常见的其它电阻式传感器,采用电容感应原理来检测土壤湿度,电路在绝缘漆的保护下不直接接触潮湿的土壤,解决了电阻式传感器容易被腐蚀的问题,相比之下工作寿命更长。
传感器内置稳压芯片,支持3.3~5.5V宽电压工作环境,在Arduino、ESP32、micro:bit、掌控板等平台上都可以直接使用。标准设计的DFRobot-Gravity接口可以直接与Gavity IO扩展板相连接。树莓派之类的微型PC,需要外接一个ADC(模拟信号转数字信号)模块就可以工作。

产品参数

  • 工作电压: 3.3 ~ 5.5 VDC
  • 输出电压: 0 ~ 3.0 VDC
  • 接口: PH2.0-3P
  • 尺寸: 98 x 23mm (LxW)

使用教程

准备

接线图

  1. 按图连接传感器和主控板

SEN0193-line.png

校准代码

  1. 在正式检测土壤湿度前,需要有一个校准过程。
  2. 烧入校准代码至Arduino主控板
  3. 打开串口监视助手
void setup() {
  Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop() {
  Serial.println(analogRead(A0)); //connect sensor and print the value to serial
  delay(100);
}

图形化代码

  • Arduino

  • Python行空板

校准步骤

干湿度校准

校准说明:通过分别读取传感器在空气中和水中的数值来限定一个测量范围
打开串口监视器,将波特率根据程序设置为9600。
首先请将该传感器放置在空气中读取模拟值,代表干燥时的读数。然后拿一杯水,把传感器插入水中一定深度(做一下标记,此深度为你将要插入泥土的深度),一定不能超过红色警戒线!并记录此时读到的模拟值,代表100%湿度。(输出数据与湿度成反比,在水中的输出量最小)插入深度如图推荐。
SEN0193-Test.png

区间设定

由于传感器数值会受到入土深度、土壤松紧度的影响,只能检测到土壤的相对湿度,我们把湿度的范围分为三等分,分别表示干燥、湿润、非常潮湿。之前记入的两个数据为湿度区间。例如:空气中读数为520,水中读数为260,这样就可以分为(520,430],(430,350],(350,260]这三个区间分别代表干燥、湿润、非常潮湿。

注意:由于此传感器会根据电容感应原理来监测土壤湿度,所以放到土壤湿度不同、松紧度不同、插入深度不同的地方,会体现出不同的湿度,即使在同一个地方,同样的深度,在第二次插入时,由于第一次拔出时已经造成了泥土的松动,可能读到的湿度会比第一次低。
注意:湿度与读数是成反比的。
注意:不同主板的ADC精度不同,因此最大值范围也不同,例如Arduino uno的模拟输入最大值1023,行空板模拟输入最大值4095。

测试代码

把刚才记录的两组数据带入到你的测试代码中。

/***************************************************
  This example reads Capacitive Soil Moisture Sensor.

  Created 2015-10-21
  By berinie Chen <bernie.chen@dfrobot.com>

  GNU Lesser General Public License.
  See <https://www.gnu.org/licenses/> for details.
  All above must be included in any redistribution
 ****************************************************/

/***********Notice and Trouble shooting***************
  1.Connection and Diagram can be found here
  2.This code is tested on Arduino Uno.
 ****************************************************/

const int AirValue = 520;   //you need to change this value that you had recorded in the air
const int WaterValue = 260;  //you need to change this value that you had recorded in the water
int intervals = (AirValue - WaterValue) / 3;
int soilMoistureValue = 0;
void setup() {
  Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop() {
  soilMoistureValue = analogRead(A0);  //put Sensor insert into soil
  if (soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals))
  {
    Serial.println("Very Wet");
  }
  else if (soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
  {
    Serial.println("Wet");
  }
  else if (soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals))
  {
    Serial.println("Dry");
  }
  delay(100);
}

疑难解答

Q 1. 为什么我的读数和实际值差异很大,我用的是你们的Romeo?

A: 您好!由于Romeo的模拟口A0口上外接有按钮,所以请将按钮旁边的开关拨到 Off 的位置,或者使用其他模拟口。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!

更多

原理图

更多问题及有趣的应用,请访问论坛(链接

<File:nextredirectltr.png>DFRobot商城购买链接