第四篇、基于Arduino uno,获取土壤湿度传感器的原始值和含水量——结果导向

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 厘米的位置,这样可以获得较为准确的湿度信息,因为表层的土壤湿度和根系区的土壤湿度会有一定的差异。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值