树莓派用 MCP3008 ADC 读取模拟传感器:LDR 与 TMP36 实例
树莓派 GPIO 仅支持数字信号,连接模拟传感器颇具挑战。廉价解决方案是 MCP3008,一款 8 通道 10 位模数转换器,直插树莓派 SPI 总线,无需额外元件。
本指南演示将 MCP3008 接线树莓派,连接光敏电阻 (LDR) 和 TMP36 温度传感器,并用简单 Python 脚本读取数据。
所需材料
- 树莓派(任意带 GPIO 排针的型号)
- MCP3008 8 通道 ADC
- 光敏电阻 (LDR) — 如 NORPS-12
- TMP36 温度传感器
- 10 kΩ 电阻(用于 LDR 分压电路)
在树莓派上启用 SPI
SPI 接口默认禁用。按 在树莓派上启用 SPI 接口 激活 SPI 并安装 spidev Python 库。
电路连接
MCP3008 需占用树莓派 40Pin 排针的四个 GPIO。按以下连接(引脚号指 P1 编号):
VDD 3.3V VREF 3.3V AGND GROUND CLK GPIO11 (P1‑23) DOUT GPIO9 (P1‑21) DIN GPIO10 (P1‑19) CS GPIO8 (P1‑24) DGND GROUND
MCP3008 的 CH0–CH7 各成为一路模拟输入。下例用 CH0 接 LDR,CH1 接 TMP36;其余 6 通道留待扩展。
光敏电阻 (LDR)
LDR 在强光下电阻约 10 kΩ,黑暗中升至数兆欧姆。与 10 kΩ 电阻组成分压电路,MCP3008 读取的电压随光照增强趋向 0V,黑暗时趋向 3.3V。
TMP36 温度传感器
TMP36 为 3 引脚模拟温度传感器。供电 3.3V,读取 VOUT 引脚。25°C 时输出 0.750V,斜率 10mV/°C。故 0°C 对应 0.500V,100°C 对应 1.500V。
Python 读取数据
MCP3008 输出 10 位值 0–1023,线性映射 0V–3.3V。对 TMP36 对应约 -50°C 至 +280°C。
下面最小示例用 spidev 读取通道 0 和 1:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0) # bus 0, device 0
spi.max_speed_hz = 1350000
def read_channel(channel):
# MCP3008 协议:起始位、单端/差分、通道号(3位)、5位填充
adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
while True:
ldr_val = read_channel(0)
temp_val = read_channel(1)
temp_c = (temp_val * 3.3 / 1023) * 100 - 50 # 转换为 °C
print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
time.sleep(1)
根据你的传感器布局修改通道号。脚本持续打印 LDR 原始 ADC 值和计算出的摄氏度温度。
此配置下,只需将额外模拟传感器(如光电二极管、压力变送器、湿度探头)接至 CH2–CH7 并扩展 Python 代码即可。
祝你玩得开心!
制造工艺
- 树莓派+$5 I²C传感器打造温度记录仪
- 树莓派温度画像:Python+SQLite+LabVIEW实战
- 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
- 树莓派2上使用DS18B20读取温度完整指南
- 树莓派专业温度监测:基于 DS18B20 传感器的完整指南
- 树莓派结合 Maxim 1-Wire 传感器与 DS2482 I2C 桥接器的多点温度测量
- 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 树莓派 3 配合 PubNub 实现远程气象监测
- 树莓派 Zero 配合 Node‑RED 融合 TI SensorTag 与 Blynk 物联网平台
- 树莓派无原生 ADC 读取模拟传感器:阶跃响应法实战