本页目录
传感器
从物理量到 I2C 寄存器值的完整链路
传感器接口选型
| 接口 | 距离 | 速度 | 功耗 | 多设备 | 典型传感器 |
|---|---|---|---|---|---|
| I2C | PCB | 100k~1M | 低 | ✅ (地址) | 绝大多数数字传感器 |
| SPI | PCB | MHz | 中 | 需片选 | 高速 ADC, IMU |
| UART | 长 | 115k~1M | 中 | ❌ 一对一 | GPS, 激光测距 |
| 模拟 | PCB | - | 极低 | ❌ | NTC, 光敏, 麦克风 |
| 1-Wire | 长 | 慢 | 极低 | ✅ (ROM ID) | DS18B20 |
| 脉冲/PWM | PCB | - | 低 | ❌ | 霍尔, 转速 |
温度传感器
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 (惯性测量单元)
典型芯片
| 芯片 | 加速度计 | 陀螺仪 | 磁力计 | 接口 | 特点 |
|---|---|---|---|---|---|
| MPU6050 | 3轴 | 3轴 | ❌ | I2C | 经典入门 |
| MPU9250 | 3轴 | 3轴 | 3轴 | I2C/SPI | 9轴一体 |
| ICM-20948 | 3轴 | 3轴 | 3轴 | I2C/SPI | 低功耗 9轴 |
| BMI160 | 3轴 | 3轴 | ❌ | I2C/SPI | 超低功耗 |
| LSM6DS3 | 3轴 | 3轴 | ❌ | I2C/SPI | ST 主流 |
| BNO055 | 3轴 | 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传感器, 校准