搜索代码

ESP32 教程 24/55 - 测量土壤湿度用于灌溉 | SunFounder 的 ESP32 IoT 学习套件

ESP32 教程 24/55 - 测量土壤湿度用于灌溉 | SunFounder 的 ESP32 IoT 学习套件

在本教程中,我们将学习如何使用SunFounder ESP32配合土壤湿度传感器来测量土壤中的湿度水平,这有助于实现灌溉系统的自动化。通过监测湿度水平,当湿度低于某个阈值时,我们可以触发蜂鸣器,提示植物需要浇水。这个项目对于维护植物健康非常有价值,并且可以扩展到各种环境传感应用中。(视频中00:00处)

土壤湿度模块

我们将使用电容式土壤湿度传感器,它通过测量两块极板之间的电容变化来工作,这种变化取决于周围介质的含水量。该传感器将提供反映湿度水平的模拟输出,使我们能够根据读数做出决策。ESP32将读取模拟输出,并在土壤过于干燥时激活蜂鸣器。

硬件说明

对于这个项目,主要组件是SunFounder ESP32微控制器、电容式土壤湿度传感器和蜂鸣器。ESP32具有内置的Wi-Fi和蓝牙功能,支持远程监控和控制。土壤湿度传感器由两块测量电容的极板组成,电容随土壤中的湿度水平而变化。这种电容变化会改变输出电压,ESP32通过其模拟输入读取该电压。当湿度水平低于设定阈值时,蜂鸣器将发出警报。

土壤湿度模块原理图

数据手册详情

制造商 SunFounder
零件编号 土壤湿度传感器
工作电压 3.3至5 V
输出类型 模拟
信号范围 0至3.3 V
响应时间 快速
尺寸 约60 x 20毫米
备注/变体 电容式传感器

 

  • 确保传感器不要完全浸入水中,以防止损坏。
  • 如有必要,使用适当的上拉电阻以获得稳定的读数。
  • 针对您的特定土壤类型校准传感器,以获得准确的湿度读数。
  • 保持正确的接线连接,以避免信号丢失。
  • 注意电源供应,避免过压情况。

接线说明

ESP32-24-soild-moisture-wiring

要将土壤湿度传感器连接到ESP32,请将传感器的VCC引脚连接到ESP32上的3.3V引脚。接下来,将传感器的GND引脚连接到ESP32上的GND引脚。土壤湿度传感器的模拟输出引脚应连接到ESP32上的模拟引脚35。对于蜂鸣器,将正极引脚连接到ESP32上的数字引脚13,负极引脚连接到GND。确保所有连接牢固,以避免操作过程中出现间歇性问题。

代码示例与讲解

以下是初始化串行通信并读取湿度传感器值的代码片段:

void setup() {
  // 以115200比特每秒的速率初始化串行通信:
  Serial.begin(115200);
}

此片段设置了串行通信,使我们能够在串行监视器中查看湿度传感器的读数。

接下来是主循环,其中读取传感器的模拟值:

void loop() {
  // 读取模拟值
  int analogValue = analogRead(35);
  
  // 打印数值
  Serial.printf("模拟值 = %d\n",analogValue);
  
  delay(300);  // 读取之间的延迟,以便从串行监视器清晰读取
}

在此循环中,代码每300毫秒从引脚35连续读取模拟值并将其打印到串行监视器。这使我们能够实时监测湿度水平。

演示/预期效果

当湿度传感器放置在干燥的土壤中时,模拟值会较高,表明湿度较低。相反,当传感器插入潮湿的土壤中时,该值会显著下降。如果读数低于定义的阈值(例如2000),连接到引脚13的蜂鸣器将激活,提示植物需要浇水。注意避免悬空输入,并确保传感器不要暴露在超出其建议限度的水中(视频中02:30处)。

视频时间戳

  • 00:00 开始
  • 1:51 项目介绍
  • 5:53 接线说明
  • 7:23 Arduino代码说明
  • 9:09 在Arduino IDE中选择ESP32开发板和COM端口
  • 10:47 在花盆上的项目演示
  • 14:30 当花盆干燥时打开蜂鸣器

图像

ESP32-24-soild-moisture-wiring
ESP32-24-soild-moisture-wiring
ESP32-24-soild-moisture-schematic
ESP32-24-soild-moisture-schematic
soil_mositure_module
soil_mositure_module
soil_mositure_module_schematic
soil_mositure_module_schematic
823-ESP32 Tutorial 24/55- Arduino code for soil moisture measurement
语言: C++
void setup() {
 // 以每秒115200比特初始化串行通信:
  Serial.begin(115200);
}

void loop() {
 // 读取模拟值
  int analogValue = analogRead(35);

 // 打印出数值
  Serial.printf("Analog value = %d\n",analogValue);

  delay(300); // 从串行监视器清晰读取的读取之间的延迟
}

资源与参考

文件📁

没有可用的文件。