树莓派光敏电阻日志与报警系统:低功耗光照传感器 Python 实现
项目简介
本指南将带你构建一个基于树莓派的光敏传感器,记录光照强度并触发报警。适用于监测衣柜、设备柜等黑暗空间,或单纯记录环境光照变化。
我们将用 LED 作为指示输出,但电路可改造为控制继电器、蜂鸣器甚至通知服务。你只需一个 Adafruit RPi 入门套件——这个高性价比套装包含所需一切——或按下方物料清单自行采购。
- 3 × 10 mm 漫射 LED(红、蓝、绿)
- 1 × 1 µF 电容
- 1 × 光敏电阻
- 3 × 560 Ω 电阻
- 1 × Pi Cobbler 扩展板
- 10 × 面包板跳线
- 1 × 全长无焊面包板
与典型单片机不同,树莓派没有板载模数转换器。我们通过计时电容经光敏电阻充电——一种廉价的 RC 计时技术——获得可靠读数。
前置条件
编程使用 Python。推荐使用 Adafruit Occidentalis 发行版,预装 RPi.GPIO 库和树莓派预编译模块。若偏好精简环境,仅需通过 pip 安装 RPi.GPIO 即可。
电路电流极小,标准树莓派电源足矣。为校准方便,准备可调光源(如可调台灯)以观察传感器对不同光照的响应。
步骤 1 – RC 电路接线
- 将 Cobbler 插入面包板,确保无引脚接触同一电源轨,否则可能短路树莓派。
- 连接 3.3 V 引脚到面包板正轨,GND 到负轨。
- 将光敏电阻跨接在面包板中央缺口两侧。
- 光敏电阻一端接 3.3 V 轨,另一端接树莓派 18 号引脚。
- 1 µF 电容连接 18 号引脚到 GND。RC 网络完成。
此时可进行传感器校准。
步骤 2 – 校准与测试
运行以下 Python 脚本。它持续测量电容经光敏电阻充电的时间。返回值随光照增强而减小。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
RC_PIN = 18
def rc_time(pin):
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
time.sleep(0.1) # 充分放电电容
GPIO.setup(pin, GPIO.IN)
count = 0
while GPIO.input(pin) == GPIO.LOW:
count += 1
return count
while True:
print(rc_time(RC_PIN))
time.sleep(0.5)
随着光源变化,你会观察到清晰的数值趋势:光照越强,读数越低。在黑暗和典型光照下各采集几个样本,建立触发报警的阈值。
步骤 3 – 实现报警逻辑
确定阈值后,修改脚本控制 LED 亮灭、记录数据到文件,或通过邮件/MQTT 发送通知。例如,房间变亮时闪烁红色 LED:
RED_LED = 17
GPIO.setup(RED_LED, GPIO.OUT)
while True:
level = rc_time(RC_PIN)
if level < THRESHOLD:
GPIO.output(RED_LED, GPIO.HIGH)
else:
GPIO.output(RED_LED, GPIO.LOW)
time.sleep(1)
更复杂的工作流可集成 Home Assistant、Node‑RED 或自定义 Flask Web 服务。
安全与最佳实践
- 上电前务必再次核对引脚连接。
- RC 网络使用 3.3 V 供电;避免 5 V 以免损坏树莓派 GPIO。
- 保持电容值较小(1 µF),防止充电时间过长拖慢脚本。
- 记录校准数据;便于故障排查和未来调整。
通过这套装置,你拥有了一个可靠、低功耗的光照传感器,能记录并响应光照变化。可自由扩展:增加多传感器、记录到数据库、在 Web 仪表盘可视化数据。
制造工艺
- NodeMCU DHT22接入树莓派3B+ MQTT Broker:无缝物联网集成指南
- 树莓派控制水培养殖系统:构建指南与代码
- 光耦隔离采集 24V 恒温器信号:树莓派实现 HVAC 事件记录与实时绘图
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派配合 EzTemp 实现无缝温湿度监测
- 树莓派室温监测系统:Gnuplot 绘图与邮件报警
- 树莓派 GPIO 直连 DS1820 单总线温度传感器指南
- 树莓派 3 接 HC‑SR04 超声波测距传感器完全指南
- 树莓派无原生 ADC 读取模拟传感器:阶跃响应法实战
- 树莓派多传感器温度光照监测系统:DS18B20 实战构建
- 树莓派 GPIO 读取按键:分步实战指南
- 树莓派传感器与执行器控制实战:加速度计、舵机与数据流