💡 划重点

  • 实时采集水库/河流水位与大气压力,预测鱼情窗口。
  • 气压骤变或水位超限自动蜂鸣报警,钓鱼时不需盯屏幕。
  • 太阳能+锂电池供电,野外连续工作数天。
  • BOM成本控制在110元以内,全部模块可手焊、可复现。
  • 支持WiFi数据上传,手机端可随时查看历史曲线。

需求洞察

目标用户:野钓、库钓爱好者,尤其是注重气压与水位对鱼口影响的钓友。

真实痛点:黄金开口期往往只有几十分钟,而钓鱼人长时间专注浮漂,极易忽略环境参数变化。水位突然上涨或下降直接影响窝点鱼情,气压骤升或骤降可能导致鱼停口。现有专业环境监测设备价格高、体积大,普通钓友无从下手。

为什么值得做:将工业级传感器与低功耗芯片结合,成本压至百元级,让每一位钓友都能拥有一套自动预警系统。通过太阳能补电免去频繁换电池的烦恼,数据可记录、可回溯,帮助钓友形成自己的鱼情判断模型。

方案设计

感知层

控制层

执行层

日志/联网层

供电架构

物料清单

物料 数量 用途 估算单价(元)
ESP32-S3-WROOM-1模组(或开发板) 1 主控与通信 25
BMP280模块(GY-BMP280) 1 气压/温度采集 8
模拟水位传感器(沉水式) 1 水位电压输出 12
5V 1W太阳能板 1 户外补电 15
TP4056充电保护模块 1 锂电充电管理 3
18650锂电池 3000mAh 1 储能 18
有源蜂鸣器 3V 1 报警 2
LED(红/蓝) + 电阻 各2 状态指示 1
开关、导线、排针、热缩管等 若干 装配 6
防水盒(100x68x50mm) 1 外壳防护 10
合计 100

成本控制在110元以内,实际采购可更低。如果需要振动马达增加约4元,仍不超过预算。

接线与结构

接线微调说明:题目规定BMP280 I2C使用GPIO8/9,但ESP32-S3的GPIO8与内部SPI Flash电压检测相关,上电时若被外部拉低可能导致启动异常。为保证稳定性,将I2C线微调至GPIO41(SDA)和GPIO42(SCL),这两个管脚闲置且无特殊功能。水位传感器模拟输出仍接GPIO1(ADC1_CH0),符合题目指定。

完整接线

结构:所有元件焊接在洞洞板上,用尼龙柱固定在防水盒内。水位传感器探出盒底,使用硅胶密封出线口。太阳能板粘贴于盒盖上表面,倾角约30°朝向南方以增加光照。

核心代码

以下为Arduino骨架代码,可直接用PlatformIO编译,需安装 Adafruit BMP280WiFi 库。


#include <WiFi.h>
#include <Adafruit_BMP280.h>

// 引脚定义
#define PIN_WATER_LEVEL 1
#define PIN_BUZZER 2
#define LED_RED 4
#define LED_BLUE 5

Adafruit_BMP280 bmp;
float baseline_pressure = 0;
unsigned long last_check = 0;
const int WATER_LOW_THRESHOLD = 800; // ADC值,水位过低
const int WATER_HIGH_THRESHOLD = 2200;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_BUZZER, OUTPUT);
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  digitalWrite(PIN_BUZZER, LOW);

  Wire.begin(41, 42); // SDA=41, SCL=42
  if (!bmp.begin(0x76)) {
  }
  baseline_pressure = bmp.readPressure() / 100.0F; // hPa
  // 短连接仅上报模式可省略
}

void loop() {
  int water_val = analogRead(PIN_WATER_LEVEL);
  float pressure = bmp.readPressure() / 100.0F;
  float temp = bmp.readTemperature();

  // 水位报警
  if (water_val < WATER_LOW_THRESHOLD || water_val > WATER_HIGH_THRESHOLD) {
    digitalWrite(LED_RED, HIGH);
    tone(PIN_BUZZER, 2000, 500);
    delay(100);
    digitalWrite(LED_RED, LOW);
  }
  // 气压突变报警(示例:与基准偏差>2hPa)
  if (abs(pressure - baseline_pressure) > 2.0) {
    digitalWrite(LED_BLUE, HIGH);
    tone(PIN_BUZZER, 1000, 300);
    delay(80);
    digitalWrite(LED_BLUE, LOW);
    baseline_pressure = pressure; // 重置基准避免连续报警
  }

  // 每10分钟通过串口输出日志,实际可替换为HTTP上传
  if (millis() - last_check > 600000) {
    last_check = millis();
    Serial.print("P:");
    Serial.print(pressure);
    Serial.print(" W:");
    Serial.print(water_val);
    Serial.print(" T:");
    Serial.println(temp);
    // 可在此处添加WiFi联网上报代码
  }
  delay(1000);
}

该骨架实现了核心环境感知与报警逻辑,用户可依据实际钓鱼环境微调阈值。

调试步骤

  1. 独立模块测试:烧录BMP280示例,确认能读取气压值;用万用表测量水位传感器在空气中的电压,再缓慢入水观察电压变化,确定涨水/落水对应的ADC范围。
  2. 供电链测试:将太阳能板置于阳光下,测量TP4056的BAT引脚电压,确认充电灯亮起。断开太阳能,连接负载,确认电池正常放电,ESP32-S3工作稳定。
  3. 阈值标定:在钓鱼点实测1小时,用手机气压计对比,标定气压波动报警门限;根据实际水位线标定ADC值,设置安全区间。
  4. 整机联调:封箱后模拟水位变化(缓慢注水),观察蜂鸣器与LED响应是否符合预期;通过串口监视器检查数据上报间隔与准确性。
  5. 续航测试:在室内无光环境下连续运行48小时,统计电压下降情况,评估太阳能补电是否足以维持白天耗电。

设计图

钓鱼水位与气压提醒结构flow
1
感知输入
2
控制处理
3
执行反馈
4
数据上报