第二章 硬件选型与接口基础

做智能实验平台,说白了就是跟各种硬件打交道。我刚开始接触这行时,也踩过不少坑——选错传感器、接错线、通信对不上……今天咱们就把这些基础捋清楚。

2.1 常用传感器:感知世界的“五官”

传感器就像系统的眼睛和耳朵。没有它们,你的平台就是个“盲人”。

2.1.1 温度传感器

最常用的有两种:DS18B20 和 DHT11/DHT22。

型号 精度 接口 典型场景
DS18B20 ±0.5°C 单总线(OneWire) 工业测温、环境监控
DHT11 ±2°C 单总线 室内温湿度监测
DHT22 ±0.5°C 单总线 高精度温湿度采集
我的经验:DS18B20 支持多点级联,一条线上能挂几十个。我曾在温室项目里用一根 10 米长的线挂了 16 个传感器,效果很稳。但注意——线太长信号会衰减,建议加个上拉电阻。

2.1.2 湿度传感器

湿度传感器通常和温度做在一起。DHT11 便宜但精度一般,DHT22 贵一些但靠谱得多。

我个人习惯:预算允许就上 DHT22。为什么?因为 DHT11 的湿度误差能到 ±5%,做实验数据容易飘。你想想看,湿度差 5% 对植物生长实验来说,结论可能完全不一样。

2.1.3 光照传感器

常见的有 BH1750 和光敏电阻。

  • BH1750:数字输出,I2C 接口,精度高。我推荐用它做光照采集。
  • 光敏电阻:模拟输出,便宜但需要 ADC 转换。适合做简单的“亮/暗”判断。
避坑指南:光敏电阻的响应速度很慢,别用它做快速变化的光照检测。我曾经在一个自动窗帘项目里踩过这个坑——阳光被云遮住又出来,光敏电阻半天反应不过来,窗帘开开关关像个傻子。

2.2 执行器:让系统“动起来”

传感器负责感知,执行器负责行动。两者缺一不可。

2.2.1 电机

智能实验平台里最常用的是步进电机和直流减速电机。

类型 控制方式 特点 适用场景
步进电机 脉冲+方向 精确控制角度 机械臂、精密位移
直流减速电机 PWM 调速 扭矩大、控制简单 小车、风扇、泵

嗯,这里要注意:步进电机需要驱动器,不能直接接 GPIO。我见过有人直接把步进电机接到树莓派的 3.3V 引脚上……结果嘛,芯片冒烟了。

2.2.2 继电器

继电器就是个“电子开关”。用小电流控制大电流设备,比如 220V 的灯、水泵。

选型时注意两点:

  • 线圈电压:常见 5V 或 3.3V,要和你的主控匹配
  • 触点容量:10A/250V 是常见规格,够用
关键提醒:继电器线圈是感性负载,断电时会产生反向电动势。一定要在继电器线圈两端并联一个续流二极管(比如 1N4007),否则可能烧坏你的 GPIO 引脚。我吃过这个亏,教训深刻。

2.3 通信接口:硬件之间的“语言”

传感器和执行器怎么跟主控芯片说话?靠的就是这些通信接口。

2.3.1 GPIO——最基础的“对话”

GPIO 就是通用输入输出引脚。你可以把它理解成一根“信号线”,要么输出高电平(3.3V),要么输出低电平(0V)。

用 GPIO 控制 LED 亮灭的代码很简单:

# Python 示例:用 GPIO 控制 LED
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)  # 设置引脚18为输出

while True:
    GPIO.output(18, GPIO.HIGH)  # 点亮
    time.sleep(1)
    GPIO.output(18, GPIO.LOW)   # 熄灭
    time.sleep(1)
小技巧:GPIO 的驱动能力有限,一般只能输出几毫安。别想着直接驱动电机或继电器,必须加驱动电路或模块。

2.3.2 I2C——多设备“串门”

I2C 只用两根线(SDA 数据线、SCL 时钟线),就能挂载多个设备。每个设备有唯一地址。

我常用的 I2C 设备:BH1750 光照传感器、OLED 显示屏、MPU6050 陀螺仪。

读取 BH1750 的代码:

# Python 示例:读取 BH1750 光照值
import smbus
import time

bus = smbus.SMBus(1)
addr = 0x23  # BH1750 默认地址

def read_light():
    data = bus.read_i2c_block_data(addr, 0x10, 2)
    return (data[0] << 8 | data[1]) / 1.2

while True:
    lux = read_light()
    print(f"光照强度: {lux:.1f} lux")
    time.sleep(1)
注意:I2C 总线上的设备地址不能冲突。我遇到过两个传感器用了同一个地址,结果数据全乱了。解决办法是用地址转换模块,或者换不同地址的型号。

2.3.3 SPI——高速“专线”

SPI 比 I2C 快得多,但需要更多引脚(MOSI、MISO、SCLK、CS)。适合高速数据传输,比如 SD 卡、显示屏、ADC 芯片。

SPI 的典型接线:

  • MOSI:主出从入
  • MISO:主入从出
  • SCLK:时钟
  • CS:片选(每个设备一根)

我个人习惯:如果设备数量少(1-2个),用 SPI;设备多,用 I2C。SPI 的接线虽然多,但调试起来反而简单——因为每根线功能明确,不像 I2C 那样要处理地址冲突。

2.3.4 UART——最“古老”的串口

UART 就是串口通信,用 TX(发送)和 RX(接收)两根线。电脑和单片机通信最常用的方式。

调试时我几乎必用 UART:

# Python 示例:通过 UART 发送数据
import serial

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
ser.write(b'Hello from Raspberry Pi\n')
response = ser.readline()
print(response)
经验之谈:UART 的波特率要一致。发送端设 9600,接收端也得是 9600,否则数据全是乱码。我刚开始学的时候,经常因为波特率不匹配而抓狂。

2.4 知识体系总览

下面这张图把本章的核心内容串起来了。你可以把它当成选型时的“速查地图”。

智能实验平台硬件选型与接口体系 主控芯片 传感器(感知层) 温度(DS18B20) 湿度(DHT22) 光照(BH1750) 执行器(动作层) 步进电机 直流电机 继电器 通信接口(连接层) GPIO(通用IO) I2C(双线多设备) SPI(高速四线) UART(串口通信) 选型原则:传感器匹配场景 → 执行器匹配负载 → 接口匹配速度

这张图里,主控芯片是大脑,传感器是感官,执行器是手脚,通信接口就是神经。选型时记住一个原则:先定场景,再选传感器;先算负载,再选执行器;先看速度,再定接口

好了,这一章的内容就到这儿。硬件选型是个熟能生巧的活,多动手、多踩坑,慢慢就有感觉了。


公众号:蓝海资料掘金营,微信deep3321