3. 数据采集硬件:单片机选型(ESP32/STM32)、接口电路设计(GPIO、中断)、防雷与防水设计

好,咱们进入硬件选型环节。说实话,很多初学者一上来就纠结“用ESP32还是STM32”,其实没那么玄乎。我个人的习惯是:先看需求,再定芯片。雨量检测这个场景,说白了就是传感器信号进来,单片机处理,然后上传数据。但这里头有几个坑,我踩过,得跟你聊聊。

3.1 单片机选型:ESP32 vs STM32

先说说这两款芯片。ESP32,带Wi-Fi和蓝牙,适合直接上云。STM32,性能稳定,外设丰富,适合做工业级控制。你想想看,如果项目要求数据直接传到服务器,那ESP32确实方便,省一个通信模块。但如果是野外长期运行,对功耗和稳定性要求极高,我建议用STM32。

我在项目中遇到过一件事:用ESP32做雨量计,结果连续下雨天,Wi-Fi重连频繁,数据丢包严重。后来换成STM32加LoRa模块,问题就解决了。嗯,这里要注意,不是ESP32不好,而是场景要选对。

选型建议:

  • ESP32:适合原型验证、快速迭代、需要Wi-Fi/BLE的场景。成本低,生态好。
  • STM32:适合工业级、低功耗、高可靠性场景。外设丰富,抗干扰能力强。

我个人习惯,如果项目最终要量产,我会选STM32。因为它的文档和库函数更成熟,出了问题好排查。ESP32的Arduino生态虽然方便,但底层细节有时候藏得深,调试起来费劲。

3.2 接口电路设计:GPIO与中断

雨量传感器,最常见的是翻斗式。每翻一次,就是一个脉冲信号。这个信号怎么接?说白了,就是接到单片机的GPIO上,然后配置成外部中断。

为什么用中断?你想,如果主程序一直在轮询GPIO电平,CPU就被占死了。用中断的话,翻斗一翻,CPU立刻响应,计数加1。这样既省电,又不会漏掉脉冲。

我曾经犯过一个低级错误:没加去抖电路。结果雨稍微大点,翻斗抖动,一个脉冲变成了好几个。嗯,后来我在GPIO输入端加了一个RC低通滤波,软件里再做个10ms的去抖延时,问题就解决了。

接口电路设计要点:

  • 上拉/下拉电阻:翻斗传感器通常是干簧管或霍尔元件,输出为开漏。必须加上拉电阻,否则电平不确定。
  • 去抖电容:在GPIO与GND之间并联一个0.1μF电容,滤除高频抖动。
  • 中断触发方式:建议用下降沿触发。翻斗翻转时,信号从高到低,正好一个完整脉冲。

代码示例(ESP32 Arduino环境):

const int rainPin = 4;  // GPIO4
volatile int rainCount = 0;

void IRAM_ATTR rainISR() {
  // 简单去抖:忽略10ms内的重复触发
  static unsigned long lastTime = 0;
  unsigned long now = millis();
  if (now - lastTime > 10) {
    rainCount++;
    lastTime = now;
  }
}

void setup() {
  pinMode(rainPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(rainPin), rainISR, FALLING);
  Serial.begin(115200);
}

void loop() {
  Serial.printf("Rain count: %d\n", rainCount);
  delay(1000);
}

你看,代码很简单。但注意那个 IRAM_ATTR,这是ESP32的要求,中断服务函数必须放在IRAM里,否则会出问题。我刚开始不知道,程序老是重启,查了半天才找到原因。

3.3 防雷与防水设计

农业气象站,说白了就是放在野外的。雷雨天气,传感器和通信线路最容易遭雷击。防水更不用说了,雨量计本身就是测雨的,不防水怎么行?

先讲防雷。我见过一个惨痛的案例:一个气象站的雨量计,雷雨过后直接报废。拆开一看,PCB上的走线都烧断了。原因很简单,传感器线缆太长,感应到了雷击浪涌。

防雷设计要点:

  • TVS管:在传感器信号线与GND之间并联一个双向TVS管,钳位电压选5V或6V。能吸收瞬间浪涌。
  • 气体放电管:在长线缆的入口处加一个气体放电管,对付大能量雷击。
  • 光耦隔离:如果条件允许,用光耦把传感器信号和单片机隔离开。这样雷击浪涌最多烧坏光耦,单片机没事。

再讲防水。雨量计的外壳,防护等级至少IP65,最好IP67。接口处要用防水接头,线缆入口要打胶密封。我建议在PCB上涂一层三防漆,防潮防腐蚀。

嗯,这里有个细节:排水孔。雨量计内部如果进水,必须能排出去。否则水积在里面,传感器会误触发。我在设计时,会在外壳底部开几个小孔,用防水透气膜封住,既排水又防虫。

防水设计清单:

项目 要求 备注
外壳防护等级 IP65以上 推荐IP67
线缆接口 防水航空接头 M12或M8规格
PCB防护 三防漆喷涂 厚度0.1-0.2mm
排水设计 底部排水孔+透气膜 孔径3mm,间距10cm

最后说一句,防雷和防水,别想着省钱。野外设备一旦坏了,维修成本比硬件成本高得多。我见过有人用普通网线做传感器线缆,结果一场雨下来,线皮都烂了。嗯,还是老老实实用铠装电缆吧。

避坑指南:

  • 我曾经用普通杜邦线接翻斗传感器,结果风吹日晒,线头氧化,信号时断时续。后来全换成镀金端子,再没出过问题。
  • 防雷接地一定要做好。单独打一根接地桩,接地电阻小于4Ω。别跟电源地共用,否则雷击时电位会反串。

好了,这一章的内容就这些。硬件选型、接口设计、防护措施,这三块是雨量检测系统的基石。下一章咱们聊聊传感器数据怎么校准,那又是另一门学问了。