本页目录

传感器

从物理量到 I2C 寄存器值的完整链路


传感器接口选型

接口距离速度功耗多设备典型传感器
I2CPCB100k~1M✅ (地址)绝大多数数字传感器
SPIPCBMHz需片选高速 ADC, IMU
UART115k~1M❌ 一对一GPS, 激光测距
模拟PCB-极低NTC, 光敏, 麦克风
1-Wire极低✅ (ROM ID)DS18B20
脉冲/PWMPCB-霍尔, 转速

温度传感器

NTC 热敏电阻 (最便宜)

电路: 分压法
  Vcc
   │
   R_fixed (10k, 1%)
   │
   ├── ADC 输入
   │
   NTC
   │
  GND

计算温度:
  R_ntc = R_fixed × (Vcc - V_adc) / V_adc
  T = 1 / (1/T25 + ln(R_ntc/R25)/B) - 273.15
  T25 = 298.15K, R25 = 标称阻值@25°C, B = B 参数

精度: ±0.5°C (B 值准确 + 1% 电阻), 够大多数场景
优点: 便宜 (几分钱), 响应快, 体积小
缺点: 非线性, 需要 MCU ADC, 需要查表或 B 公式

DS18B20 (数字单总线)

协议: 1-Wire (一根数据线, 寄生供电可选)
精度: ±0.5°C (-10~85°C)
分辨率: 9~12 bit
每片有唯一 64-bit ROM ID → 一根线上挂多个

优点: 不需要 ADC, 出厂校准, 可远距离, 可多点
缺点: 贵 (~¥3), 速度慢 (750ms @12bit), 协议复杂

热电偶 (高温)

原理: 两种不同金属焊接处产生热电势 (Seebeck 效应)
类型: K 型 (最通用, -200~1250°C), J/T/E/N 型
需要: 冷端补偿 (测量冷端温度 + 查表)

芯片: MAX6675 (K型, SPI), MAX31855/MAX31856
应用: 3D 打印机热端、烤箱、工业炉

选型速查

场景                      推荐
────────────────────────────────────
室温 ±2°C 就够了          NTC (最便宜)
需要出厂校准不需 ADC       DS18B20
高温 (>150°C)             热电偶 (K 型)
高精度 (±0.1°C)           PT100/PT1000 (铂电阻)
人体测温                  医疗专用红外
PCB 板温                  内置温度传感器或 NTC

IMU (惯性测量单元)

典型芯片

芯片加速度计陀螺仪磁力计接口特点
MPU60503轴3轴I2C经典入门
MPU92503轴3轴3轴I2C/SPI9轴一体
ICM-209483轴3轴3轴I2C/SPI低功耗 9轴
BMI1603轴3轴I2C/SPI超低功耗
LSM6DS33轴3轴I2C/SPIST 主流
BNO0553轴3轴3轴I2C/UART内置姿态解算!

IMU 输出什么

加速度计: 加速度 (m/s² 或 g)
  静止: Z 轴 = 1g (重力)
  可算俯仰和横滚角 (利用重力方向)

陀螺仪: 角速度 (°/s 或 rad/s)
  积分得角度 → 但会漂移
  静止时理想值 = 0 (实际有零偏)

磁力计: 磁场强度 (μT)
  可算偏航角 (指南针)

9轴融合 = 加速度 + 陀螺 + 磁力计 → 无漂移的绝对姿态
  (陀螺快但漂, 加速度+磁力计无漂但慢/噪声大)
  → 互补滤波 / 卡尔曼滤波 / Madgwick 算法

实际坑

- MPU6050 上电后需要校准 (静止采样几百次, 取零偏)
- I2C 地址冲突 (MPU6050 默认 0x68, AD0 拉高变 0x69)
- 振动环境加速度计没法用 (需要更复杂的滤波)
- 磁力计极易受干扰 (远离电机/电流/铁磁性物质!)
- BNO055 省掉融合代码但贵

环境传感器

温湿度

DHT11/DHT22: 单总线, 便宜但慢 (2s 一次), 精度一般
SHT30/31: I2C, ±2%RH, 快, 可靠
BME280: I2C/SPI, 温度+湿度+气压, 一芯三用 ★推荐
AHT20: I2C, 便宜替代 SHT30

坑: DHT11 在 >80%RH 或 <10%RH 时严重不准
    SHT/BME 系列好得多

气压

BMP280/BME280: I2C/SPI, 精度 ±1hPa (±8.5m 高度)
LPS22HB: I2C/SPI, ±0.5hPa
MS5611: I2C/SPI, ±0.15hPa (高精度)

应用: 高度计, 天气站, 无人机定高

光线

BH1750: I2C, 直接输出 lux 值 (不需要校准!)
VEML7700: I2C, 宽范围, 低功耗
OPT3001: I2C, 与人眼匹配的光谱响应

光敏电阻 (LDR): 模拟, 便宜但非线性 + 需要校准

空气质量 / 气体

CCS811: I2C, eCO2 + TVOC (需要 48h 老化, 功耗大)
SGP30: I2C, eCO2 + TVOC (比 CCS811 好)
PMS5003: UART, 激光 PM2.5/PM10 (物理测量, 准确!)
MH-Z19: UART, NDIR CO2 (物理测量)
MQ 系列 (MQ-2/MQ-135...): 模拟, 需要预热, 不准

传感器调试套路

1. 上电 → 读 WHO_AM_I / Device ID 寄存器
   读不到 → 检查供电/焊接/I2C 地址/上拉电阻
   读到了 → 传感器活着, 继续

2. 读原始数据 → 看是否合理
   全是 0 或 0xFF → 配置问题 (没使能/没启动转换)
   数据跳变剧烈 → 电源噪声 / 时序不对

3. 对比参考值
   NTC 算出的温度 vs 室温 → 差 >5°C 查 B 参数或 R_fixed
   IMU 静止时加计 ≈ 1g → 不对查量程配置

4. 加滤波
   简单移动平均 → 消除高频噪声
   中值滤波 → 消除偶发尖峰

5. 校准 (如果需要)
   温度: 冰水 0°C + 沸水 100°C 两点校准
   IMU: 六面校准 (每个面静止采样)

关键词: NTC, DS18B20, 热电偶, MPU6050, IMU, BME280, SHT30, I2C传感器, 校准