首页
/ 72小时水质革命:用Arduino-ESP32打造水产养殖智能监测系统

72小时水质革命:用Arduino-ESP32打造水产养殖智能监测系统

2026-02-04 04:06:24作者:邬祺芯Juliet

你是否还在为鱼塘缺氧死鱼损失惨重?是否因水质突变导致养殖物大面积生病?本文将带你用Arduino-ESP32构建一套成本不到500元的水质监测与自动控制系统,实时监控水温、pH值、溶氧量等关键指标,异常时自动启动增氧泵,让水产养殖省心又高效。读完本文你将获得:

  • 3种核心水质传感器的ESP32接入方案
  • 低代码实现自动换水与增氧控制逻辑
  • 7x24小时数据记录与远程告警系统构建指南

系统架构:从传感器到执行器的闭环控制

水产养殖智能监测系统主要由三大模块组成:传感器采集模块、数据处理核心和执行器控制模块。Arduino-ESP32作为主控单元,通过模拟输入接口连接各类水质传感器,将采集到的数据进行分析后,通过数字输出引脚控制继电器,进而操作增氧泵、电磁阀等设备。系统架构如下:

graph TD
    A[水温传感器] -->|模拟信号| B(ESP32主控)
    C[pH传感器] -->|模拟信号| B
    D[溶氧传感器] -->|UART| B
    B -->|控制信号| E[继电器模块]
    E --> F[增氧泵]
    E --> G[换水电磁阀]
    B --> H[WiFi模块]
    H --> I[远程监控平台]

核心硬件选择建议:

  • 主控:ESP32-WROOM-32E(内置WiFi和蓝牙,性价比首选)
  • 电源:12V/2A防水电源适配器
  • 传感器:DS18B20(水温)、SEN0161(pH)、DO-6800(溶氧)

传感器接入:3步实现水质参数采集

水温监测:DS18B20数字传感器

DS18B20是一款单总线数字温度传感器,精度可达±0.5℃,非常适合水产养殖环境使用。接线时只需将DATA引脚连接到ESP32的GPIO4,VCC接3.3V,GND接地即可。核心代码如下:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 4  // 数据引脚连接GPIO4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  sensors.begin();  // 初始化传感器
}

void loop() {
  sensors.requestTemperatures();  // 请求温度数据
  float tempC = sensors.getTempCByIndex(0);  // 获取温度值
  Serial.print("水温: ");
  Serial.print(tempC);
  Serial.println(" °C");
  
  // 温度异常处理
  if (tempC > 30.0) {
    digitalWrite(2, HIGH);  // 启动降温风扇
  } else {
    digitalWrite(2, LOW);
  }
  delay(2000);
}

温度传感器库文件路径:libraries/OneWire/

pH值检测:模拟信号采集与校准

pH值是衡量水体酸碱度的重要指标,大多数水产养殖生物适宜的pH范围在6.5-8.5之间。以SEN0161 pH传感器为例,其输出0-5V模拟信号对应pH 0-14,需要通过ESP32的ADC引脚进行采集。校准方法:先将传感器放入pH=7的标准液中,记录输出电压,再放入pH=4的标准液,计算斜率和截距。

const int pH_PIN = 34;  // pH传感器连接GPIO34
float pHValue = 0.0;
float voltage = 0.0;
float slope = 0.0;      // 校准后的斜率
float intercept = 0.0;  // 校准后的截距

void setup() {
  Serial.begin(115200);
  pinMode(pH_PIN, INPUT);
}

void loop() {
  // 读取模拟值(0-4095对应0-3.3V)
  int adcValue = analogRead(pH_PIN);
  voltage = adcValue * (3.3 / 4095.0);  // 转换为电压值
  
  // 根据校准参数计算pH值
  pHValue = slope * voltage + intercept;
  
  Serial.print("pH值: ");
  Serial.println(pHValue, 2);
  
  // pH值异常处理
  if (pHValue < 6.5 || pHValue > 8.5) {
    digitalWrite(5, HIGH);  // 启动pH调节泵
    delay(5000);            // 运行5秒
    digitalWrite(5, LOW);
  }
  delay(1000);
}

ESP32 ADC配置参考:cores/esp32/esp32-hal-adc.h

溶氧监测:UART接口传感器应用

溶氧量(DO)是水产养殖中最重要的参数之一,直接关系到养殖物的生存。推荐使用RS485接口的溶氧传感器,通过MAX485模块与ESP32的UART接口连接。传感器输出Modbus RTU协议数据,需要编写解析程序。

#include <HardwareSerial.h>

HardwareSerial DO_Serial(2);  // 使用UART2
#define DO_TX 17
#define DO_RX 16
#define DO_ADDR 0x01  // 传感器地址

void setup() {
  Serial.begin(115200);
  DO_Serial.begin(9600, SERIAL_8N1, DO_RX, DO_TX);
}

void loop() {
  // 发送读取溶氧命令
  uint8_t cmd[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};
  DO_Serial.write(cmd, sizeof(cmd));
  
  delay(100);
  uint8_t response[9];
  int len = DO_Serial.readBytes(response, sizeof(response));
  
  if (len == 9 && response[0] == DO_ADDR) {
    float dissolvedOxygen = ((response[3] << 8) | response[4]) / 10.0;
    Serial.print("溶氧量: ");
    Serial.print(dissolvedOxygen);
    Serial.println(" mg/L");
    
    // 溶氧过低自动增氧
    if (dissolvedOxygen < 5.0) {
      digitalWrite(12, HIGH);  // 启动增氧泵
    } else {
      digitalWrite(12, LOW);
    }
  }
  delay(2000);
}

UART配置参考:cores/esp32/esp32-hal-uart.h

执行器控制:继电器模块应用

继电器模块是连接ESP32与大功率设备的桥梁,用于控制增氧泵、换水电磁阀等。推荐使用5V继电器模块,通过ESP32的GPIO控制。为保证系统稳定,继电器电源应独立供电,与传感器电源分开。

#define RELAY_O2 12    // 增氧泵继电器连接GPIO12
#define RELAY_WATER 13 // 换水电磁阀连接GPIO13

void setup() {
  pinMode(RELAY_O2, OUTPUT);
  pinMode(RELAY_WATER, OUTPUT);
  digitalWrite(RELAY_O2, LOW);  // 初始关闭
  digitalWrite(RELAY_WATER, LOW);
}

// 自动换水控制函数
void autoChangeWater(float phValue) {
  if (phValue < 6.5 || phValue > 8.5) {
    digitalWrite(RELAY_WATER, HIGH);  // 打开换水阀
    delay(30000);  // 换水30秒
    digitalWrite(RELAY_WATER, LOW);
  }
}

GPIO控制参考:cores/esp32/esp32-hal-gpio.h

数据记录与远程监控

本地数据存储:SD卡模块应用

使用SD卡模块记录历史水质数据,推荐使用SPI接口的MicroSD卡模块,连接到ESP32的SPI引脚(SCLK=18, MOSI=23, MISO=19, CS=5)。数据格式采用CSV,方便后续用Excel分析。

#include <SD.h>
File dataFile;

void setup() {
  Serial.begin(115200);
  if (!SD.begin(5)) {  // CS引脚连接GPIO5
    Serial.println("SD卡初始化失败");
    return;
  }
}

void logData(float temp, float ph, float doValue) {
  dataFile = SD.open("/water_data.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.print(millis());
    dataFile.print(",");
    dataFile.print(temp);
    dataFile.print(",");
    dataFile.print(ph);
    dataFile.print(",");
    dataFile.println(doValue);
    dataFile.close();
  }
}

SD卡库参考:libraries/SD/

远程监控:WiFi数据上传

通过ESP32的WiFi功能,将实时数据上传到阿里云IoT平台或自有服务器。以下是连接WiFi并发送数据到HTTP服务器的示例代码:

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* serverUrl = "http://你的服务器地址/api/upload";

void setup() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi连接成功");
}

void uploadData(float temp, float ph, float doValue) {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(serverUrl);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    
    String postData = "temp=" + String(temp) + "&ph=" + String(ph) + "&do=" + String(doValue);
    int httpCode = http.POST(postData);
    
    if (httpCode > 0) {
      String response = http.getString();
      Serial.println(httpCode);
      Serial.println(response);
    } else {
      Serial.println("HTTP请求失败");
    }
    http.end();
  }
}

WiFi库参考:libraries/WiFi/ HTTP客户端参考:libraries/HTTPClient/

系统集成与调试

将传感器、继电器和ESP32按电路图连接后,进行系统调试。建议先单独测试各模块,再进行集成测试。调试时可通过Serial输出查看各传感器数据是否正常,执行器是否按预期工作。

系统调试步骤:

  1. 检查各模块供电是否正常
  2. 测试单个传感器数据采集
  3. 测试单个执行器控制
  4. 测试传感器与执行器联动逻辑
  5. 测试数据上传功能
  6. 进行72小时稳定性测试

常见问题解决:

  • 传感器数据波动大:增加滤波算法或 shielding
  • WiFi连接不稳定:靠近路由器或增加WiFi信号放大器
  • 继电器误动作:检查电源是否稳定,增加光耦隔离

项目总结与扩展

本文介绍的Arduino-ESP32水质监测系统已能满足基本水产养殖需求,你可以根据实际情况进行扩展:

  • 增加浊度传感器监测水体透明度
  • 添加氨氮传感器监测水质污染
  • 通过蓝牙模块实现近距离设备调试
  • 增加太阳能供电系统实现无外接电源运行

完整项目代码可在examples/water_quality_monitor/目录下找到,包含传感器驱动、执行器控制和数据上传等完整功能。如有任何问题,可参考官方文档docs/esp32_guide.md或提交issue。

点赞收藏本文,关注作者获取更多水产养殖智能化方案!下期将介绍如何使用机器学习算法预测水质变化趋势,敬请期待。

项目仓库地址:https://gitcode.com/GitHub_Trending/ar/arduino-esp32

登录后查看全文
热门项目推荐
相关项目推荐