传感器技术基础:温度、湿度、光照、CO₂ 选型与原理

传感器这东西,说白了就是温室的「五官」。你想想看,一个系统再聪明,如果传感器数据不准,那后面的控制全是瞎忙活。我这些年踩过的坑,十有八九都出在传感器选型上。今天咱们就把温度、湿度、光照、CO₂ 这四类传感器掰开揉碎了讲。

温度传感器:PT100 与 DS18B20

温度是温室里最基础的参数。常用的就两种:PT100 和 DS18B20。它们俩的脾气完全不同。

PT100 铂电阻

PT100 的原理很简单——铂的电阻值随温度变化。0℃ 时正好 100Ω,所以叫 PT100。它的线性度非常好,精度能做到 ±0.1℃。我在东北一个大型连栋温室项目里用过它,冬天零下 30℃,PT100 依然稳得很。

核心参数:
  • 测温范围:-200℃ ~ 850℃
  • 精度等级:A 级 ±0.15℃,B 级 ±0.3℃
  • 接线方式:二线制、三线制、四线制
我的习惯: 温室环境用三线制就够了。二线制会引入导线电阻误差,四线制成本高没必要。三线制刚好能抵消导线电阻,性价比最高。

DS18B20 数字温度传感器

DS18B20 是 Dallas 公司的经典产品。它直接把温度转成数字信号,用一根数据线就能通信。你想想看,一个 GPIO 口可以挂几十个 DS18B20,布线多省事。

// DS18B20 读取示例(Arduino)
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  Serial.print("温度:");
  Serial.println(temp);
  delay(1000);
}
我曾经踩过的坑: DS18B20 的供电电压是 3.0V~5.5V,但如果你用寄生供电模式,长距离传输时电压降会导致读数异常。我建议老老实实用外部供电,别省那两根线。

湿度传感器:电容式与电阻式

湿度测量比温度麻烦多了。温室里湿度动不动就 90% 以上,传感器很容易结露失效。

电容式湿度传感器

主流方案是电容式。感湿材料吸收水汽后介电常数变化,电容值跟着变。典型型号是 SHT30、SHT40 系列。精度能做到 ±2% RH,响应也快。

型号 精度 范围 接口 价格区间
SHT30 ±2% RH 0~100% RH I²C ¥15~25
SHT40 ±1.8% RH 0~100% RH I²C ¥20~35
DHT22 ±2% RH 0~100% RH 单总线 ¥10~15
避坑指南: DHT22 虽然便宜,但采样间隔必须大于 2 秒。我见过有人用 100ms 去读,数据全是乱的。另外,所有湿度传感器都要避开通风口直吹,否则读数会偏低。

光照传感器:光合有效辐射 PAR

温室里测光照,不能只看 lux。植物光合作用需要的是 400~700nm 波段的光,也就是光合有效辐射(PAR)。单位是 μmol/m²/s。

我推荐用量子传感器,比如 Apogee SQ-500 或国产的 PHOTON 系列。它们用硅光电二极管加滤光片,只响应 PAR 波段。

选型要点:
  • 量程:0~2000 μmol/m²/s(温室够用)
  • 余弦修正:必须带,否则低角度光测量不准
  • 防水等级:IP67 以上,温室里水汽大

为什么强调余弦修正?你想想看,太阳在头顶和在地平线时,光线入射角不同。没有余弦修正的传感器,早晚测的值会偏小很多。我在云南一个花卉温室里吃过这个亏,补光灯控制策略全错了。

CO₂ 传感器:NDIR 原理

CO₂ 浓度直接影响光合作用效率。温室里 CO₂ 传感器几乎全是 NDIR(非色散红外)原理的。它利用 CO₂ 分子对 4.26μm 红外光的吸收特性来测浓度。

主流型号有 MH-Z19B、SenseAir S8。精度能做到 ±30ppm + 读数的 3%。

// MH-Z19B 读取示例(Arduino)
#include <SoftwareSerial.h>

SoftwareSerial co2Serial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);
  co2Serial.begin(9600);
}

void loop() {
  co2Serial.write(0xFF);
  co2Serial.write(0x01);
  co2Serial.write(0x86);
  co2Serial.write(0x00);
  co2Serial.write(0x00);
  co2Serial.write(0x00);
  co2Serial.write(0x00);
  co2Serial.write(0x79);

  if (co2Serial.available() >= 9) {
    byte response[9];
    for (int i = 0; i < 9; i++) {
      response[i] = co2Serial.read();
    }
    int co2 = response[2] * 256 + response[3];
    Serial.print("CO₂: ");
    Serial.print(co2);
    Serial.println(" ppm");
  }
  delay(2000);
}
注意: NDIR 传感器有寿命问题。红外光源用久了会衰减,一般 5 年后需要校准或更换。我建议每年用标准气标定一次,否则数据漂移会让你摸不着头脑。

传感器选型对比总表

参数 温度 湿度 光照 CO₂
推荐原理 铂电阻/数字 电容式 量子传感器 NDIR
典型精度 ±0.1~0.5℃ ±2% RH ±5% ±30ppm
采样周期 100ms 2s 100ms 2s
通信方式 模拟/数字 I²C/单总线 模拟/RS485 UART/PWM
寿命 10年+ 5年 5年 5年

传感器布局与安装要点

传感器选好了,装在哪也很关键。我见过有人把温度传感器贴在温室铁柱上,夏天测出来比实际高 5℃。嗯,这里要注意几个原则:

  • 高度: 作物冠层上方 20~30cm,那是植物实际感受的环境
  • 遮蔽: 光照传感器不能被遮阴,CO₂ 传感器要远离通风口
  • 冗余: 每个区域至少 2 个传感器,取均值或做故障判断
  • 防结露: 湿度传感器要加防辐射罩,避免冷凝水直接滴在探头上
我的经验: 温室里传感器故障率最高的不是电子部分,而是接口氧化。我后来全部改用防水航空插头,故障率降了 70%。多花几十块钱,省去后期维护的麻烦。
温室传感器选型与布局逻辑图 传感器选型 温度传感器 湿度传感器 光照传感器 CO₂传感器 PT100 / DS18B20 电容式 / 电阻式 PAR 量子传感器 NDIR 红外 选型核心原则 精度够用就好,别盲目追求高精度 环境适应性 > 参数指标(防水、防结露、抗腐蚀) 通信接口统一,减少协议转换的麻烦

传感器这块,说白了就是「选对、装对、用对」。选对看原理和参数,装对看位置和防护,用对看采样和校准。这三步走扎实了,你的温室控制系统就成功了一半。