第一章:传感器基础与选型
大家好,我是老李。做物联网这些年,我经手过的传感器少说也有上百种了。今天咱们聊聊传感器的基础知识和选型。说实话,选传感器这事儿,看着简单,其实坑不少。我刚开始做项目时,就吃过不少亏。
一、常见传感器类型
传感器说白了,就是把物理世界的信号变成电信号的东西。咱们物联网项目里,最常用的就这几类:
1. 温度传感器
这个大家最熟悉。我常用的有DS18B20、DHT11、SHT30这些。DS18B20精度不错,-55℃到125℃范围,适合大多数场景。DHT11便宜,但精度一般,我一般只用在要求不高的环境监测里。
2. 湿度传感器
湿度测量其实挺讲究的。电容式湿度传感器响应快,但容易受温度影响。电阻式的便宜,但精度差一些。我做过一个粮仓监测项目,当时选了SHT30,效果不错。
3. 压力传感器
压力传感器分绝对压力、表压和差压。我做过一个水箱液位监测,用的就是扩散硅压力传感器。选型时要注意量程,别选太大,否则小信号测不准。
4. 光照传感器
光照传感器有光敏电阻、光电二极管、数字光照传感器。BH1750是我常用的,I2C接口,直接读数字量,省事。
二、传感器关键参数
选传感器,你得看懂参数表。我刚开始时,看着一堆参数头都大。后来慢慢总结出几个关键点:
| 参数 | 说明 | 我的建议 |
|---|---|---|
| 精度 | 测量值与真实值的偏差 | 一般选±2%以内的 |
| 分辨率 | 能检测到的最小变化量 | 12位以上够用 |
| 采样率 | 每秒采集次数 | 温度1Hz够,振动要100Hz+ |
| 量程 | 能测量的范围 | 留20%余量 |
| 响应时间 | 信号变化到输出的时间 | 温度慢,光照快 |
三、选型实战案例
光说不练假把式。我拿一个实际项目说说:
项目背景: 智能温室环境监测系统。需要测温度、湿度、光照、CO2浓度。
我的选型思路:
- 温度湿度: 选了SHT30。精度±0.3℃,湿度±2%RH。I2C接口,好接线。
- 光照: 选了BH1750。0-65535 lux范围,16位分辨率。够用。
- CO2: 选了MH-Z19B。红外原理,400-5000ppm。注意要预热。
选型时,我还会考虑接口类型。模拟输出要ADC,数字输出省事。I2C和SPI是主流,UART也常见。我个人习惯优先选I2C,因为接线少,调试方便。
四、知识体系总览
下面这张图,是我自己总结的传感器选型框架。你照着这个思路走,基本不会出错:
嗯,这张图基本把选型的逻辑说清楚了。你想想看,是不是这个理?先确定要测什么(类型),再看需要多准(参数),最后考虑怎么接(接口)。
五、代码示例:读取SHT30温湿度
最后,给个实际代码。这是我在树莓派上读SHT30的Python代码:
import smbus
import time
# SHT30 I2C地址
SHT30_ADDR = 0x44
# 初始化I2C
bus = smbus.SMBus(1)
def read_sht30():
# 发送测量命令
bus.write_i2c_block_data(SHT30_ADDR, 0x2C, [0x06])
time.sleep(0.5)
# 读取6字节数据
data = bus.read_i2c_block_data(SHT30_ADDR, 0x00, 6)
# 计算温度
temp_raw = ((data[0] << 8) | data[1])
temperature = -45 + 175 * temp_raw / 65535.0
# 计算湿度
hum_raw = ((data[3] << 8) | data[4])
humidity = 100 * hum_raw / 65535.0
return temperature, humidity
# 主循环
while True:
temp, hum = read_sht30()
print(f"温度: {temp:.2f}℃, 湿度: {hum:.2f}%")
time.sleep(2)
好了,传感器基础就聊到这儿。记住,选传感器没有万能方案,关键看你的项目需求。多看看数据手册,多动手试试,慢慢就有感觉了。