当前位置: 首页 > news >正文

智能家居DIY:用树莓派+SR501模块打造你的自动感应小夜灯(Python/Shell脚本控制)

智能家居DIY:用树莓派+SR501模块打造你的自动感应小夜灯

深夜起床时摸黑找开关的体验想必大家都不陌生。传统小夜灯要么常亮浪费电,要么需要手动操作。今天我们就用树莓派和SR501人体感应模块,打造一个真正智能的自动感应小夜灯。这个项目不需要复杂的驱动开发,只需简单的Python脚本和系统配置,就能实现"人来灯亮,人走灯灭"的智能效果。

1. 硬件准备与接线

1.1 所需材料清单

  • 树莓派(任何型号,推荐3B+或4B)
  • SR501人体红外感应模块
  • LED灯带或5V继电器模块(根据灯具功率选择)
  • 杜邦线若干(公对公、公对母)
  • 5V电源适配器
  • 可选:光敏电阻(实现光线暗时才触发)

SR501模块上有三个主要引脚:VCC(电源正极)、GND(电源负极)和OUT(信号输出)。模块的工作电压范围是4.5-20V,但输出信号为3.3V电平,与树莓派GPIO完美兼容。

1.2 接线示意图

树莓派 GPIO引脚图: [USB端口朝下] +------------+ | 3V3 (1) (2) 5V | | GPIO2 (3) (4) 5V | | GPIO3 (5) (6) GND | | GPIO4 (7) (8) GPIO14| | GND (9)(10) GPIO15| +------------+ 接线方案: SR501 VCC → 树莓派 5V (引脚2) SR501 GND → 树莓派 GND (引脚6) SR501 OUT → 树莓派 GPIO4 (引脚7) LED正极 → 树莓派 GPIO17 (引脚11) LED负极 → 树莓派 GND (引脚9)

如果使用继电器控制大功率灯具,接线稍有不同:

继电器 VCC → 树莓派 5V 继电器 GND → 树莓派 GND 继电器 IN → 树莓派 GPIO17 灯具火线 → 继电器 COM 灯具零线 → 直接接电源

2. 系统环境配置

2.1 启用树莓派GPIO接口

在终端执行以下命令确保GPIO访问权限:

sudo raspi-config

选择"Interface Options" → "P4 SPI/I2C" → 启用SPI和I2C接口。

2.2 安装必要软件包

更新系统并安装Python GPIO库:

sudo apt update && sudo apt upgrade -y sudo apt install python3-pip python3-venv -y pip3 install RPi.GPIO

3. Python控制脚本编写

3.1 基础感应控制

创建night_light.py文件,内容如下:

#!/usr/bin/env python3 import RPi.GPIO as GPIO import time # 引脚定义 PIR_PIN = 4 # SR501输出接GPIO4 LED_PIN = 17 # LED/继电器控制接GPIO17 # 初始化设置 GPIO.setmode(GPIO.BCM) GPIO.setup(PIR_PIN, GPIO.IN) GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.LOW) try: print("感应小夜灯已启动 (Ctrl+C退出)") while True: if GPIO.input(PIR_PIN): print("检测到人体移动 - 开灯") GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(30) # 保持亮灯30秒 else: GPIO.output(LED_PIN, GPIO.LOW) time.sleep(0.1) # 降低CPU占用 except KeyboardInterrupt: print("\n程序终止") finally: GPIO.cleanup()

3.2 进阶功能:光敏控制

如果需要白天不亮灯,可以添加光敏电阻:

# 在初始化部分添加 LIGHT_SENSOR_PIN = 27 # 光敏电阻接GPIO27 GPIO.setup(LIGHT_SENSOR_PIN, GPIO.IN) # 修改主循环 while True: is_dark = GPIO.input(LIGHT_SENSOR_PIN) # 假设光敏电阻低电平表示黑暗 if GPIO.input(PIR_PIN) and is_dark: GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(30) else: GPIO.output(LED_PIN, GPIO.LOW) time.sleep(0.1)

3.3 参数调优技巧

SR501模块上有两个电位器可以调节:

  • 灵敏度调节:顺时针旋转增加检测距离(最大约7米)
  • 延时调节:顺时针旋转增加亮灯持续时间(最长约5分钟)

在代码中也可以通过修改sleep时间来控制亮灯时长,建议与实际电位器设置配合使用。

4. 系统服务配置

4.1 创建systemd服务

为了让脚本开机自启,创建服务文件:

sudo nano /etc/systemd/system/night_light.service

内容如下:

[Unit] Description=Night Light Service After=network.target [Service] ExecStart=/usr/bin/python3 /home/pi/night_light.py WorkingDirectory=/home/pi StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target

4.2 启用并测试服务

sudo systemctl daemon-reload sudo systemctl enable night_light.service sudo systemctl start night_light.service

检查服务状态:

systemctl status night_light.service

4.3 日志查看与调试

如果遇到问题,可以查看详细日志:

journalctl -u night_light.service -f

5. 外壳制作与安装建议

5.1 3D打印方案

  • 设计一个带散热孔的盒子容纳树莓派
  • SR501模块单独安装,确保菲涅尔透镜不被遮挡
  • 使用半透明亚克力板作为灯罩

5.2 安装位置选择

  • 高度:离地1.2-1.5米(与人行走高度匹配)
  • 角度:略微向下倾斜15度
  • 避开空调/暖气出风口(温度变化会引起误触发)

5.3 安全注意事项

  • 使用5V低压LED灯带最安全
  • 如果控制110V/220V灯具,务必做好绝缘处理
  • 避免在潮湿环境使用裸露电路

6. 项目扩展思路

6.1 多房间联动系统

通过MQTT协议实现多个感应灯之间的通信:

import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("home/night_light") client = mqtt.Client() client.on_connect = on_connect client.connect("mqtt_broker", 1883, 60)

6.2 手机APP控制

使用Flask创建简单的Web界面:

from flask import Flask, render_template_string app = Flask(__name__) @app.route("/") def control(): return render_template_string(''' <h1>夜灯控制</h1> <a href="/on">开灯</a> | <a href="/off">关灯</a> ''')

6.3 能耗统计功能

记录亮灯时间并估算能耗:

import datetime start_time = None total_seconds = 0 while True: if GPIO.input(PIR_PIN): if start_time is None: start_time = datetime.datetime.now() GPIO.output(LED_PIN, GPIO.HIGH) else: if start_time is not None: end_time = datetime.datetime.now() total_seconds += (end_time - start_time).total_seconds() start_time = None GPIO.output(LED_PIN, GPIO.LOW)

7. 常见问题解决

7.1 感应不灵敏

  • 检查SR501的跳线帽设置(H模式可重复触发)
  • 清洁菲涅尔透镜
  • 调整灵敏度电位器

7.2 误触发

  • 避开宠物经常活动的区域
  • 设置光敏控制避免白天触发
  • 在代码中添加去抖动逻辑:
from collections import deque detection_history = deque(maxlen=5) while True: detection_history.append(GPIO.input(PIR_PIN)) if sum(detection_history) >= 3: # 5次检测中3次为真才触发 GPIO.output(LED_PIN, GPIO.HIGH)

7.3 灯光闪烁

  • 确保电源功率足够(特别是使用继电器时)
  • 检查接线是否松动
  • 在LED正负极之间并联一个100μF电容

这个项目最让我惊喜的是SR501模块的可靠性——经过适当调整后,在我家走廊使用三个月几乎没有误触发。一个实用小技巧是在楼梯安装时,将模块略微向下倾斜,这样能更好检测上下楼的人体移动。如果用在卧室,建议将延时时间调短至10-15秒,既保证安全又不会影响睡眠。

http://www.jsqmd.com/news/776595/

相关文章:

  • Paseo:本地化多AI智能体编排平台的设计与实战指南
  • 3步告别广色域显示器色彩失真:novideo_srgb硬件级色彩校准方案
  • 大语言模型动态对话系统的自适应策略优化
  • YimMenu终极指南:打造坚不可摧的GTA5在线游戏体验
  • 别再手动汉化了!TinyMCE 6.x 中文语言包(zh_CN.js)一键配置全攻略
  • 告别局域网!用cpolar+Windows 10快速搭建Minecraft服务器,和小伙伴异地联机全攻略
  • 区域岩柱最大厚度分布数据集
  • 【AISMM人才吸引黄金72小时法则】:从大会签约到Offer接受的转化率提升210%实战复盘
  • 从Blender到Unity:用FBX Python SDK打通3D工作流中的‘数据孤岛’
  • 别再死记硬序!一张图搞懂AXI-Lite握手信号的所有“潜规则”与避坑指南
  • 如何快速优化游戏资源:终极虚幻引擎Pak文件分析工具完全指南
  • 别再死记硬背了!我用这26个CAD快捷键,一天搞定传输线路施工图
  • Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定
  • 岩体分布密度数据集
  • 钉钉机器人接入 OpenClaw 全攻略教程
  • 告别离线包!Qt 5.15.2 Windows在线安装保姆级教程(含清华镜像加速)
  • Universal Pokemon Randomizer完全指南:重新定义你的宝可梦冒险体验
  • 别再到处找了!Windows 10/11 安装嘉立创EDA专业版2.1.33的保姆级图文教程
  • 免费开源项目管理利器:GanttProject从入门到精通实战指南
  • 别再只用SE了!手把手教你用PyTorch实现CBAM、ECA、CA注意力模块(附完整代码)
  • 沃尔玛电子卡能用也能回收?五一福利卡合理处理方式大全 - 喵权益卡劵助手
  • 基于Anse框架快速构建企业级AI对话应用:从部署到高级定制
  • 免费压缩包密码恢复神器:如何用ArchivePasswordTestTool找回遗忘的密码
  • 树莓派5到手别急着买屏幕!保姆级无头安装教程(含VNC远程桌面配置)
  • 技术律师崛起:工程师转型专利律师的必然性与企业IP策略
  • 从零开始使用Taotoken在十分钟内完成第一个AI应用调用
  • 浏览器Cookie本地导出工具:Get cookies.txt LOCALLY实用指南
  • 2026年全网实测:5款论文降AI率工具深度测评,附免费降AI/去AI痕迹保姆级教程 - 降AI实验室
  • LookScanned.io终极指南:零隐私风险的PDF扫描效果生成器
  • AI 任务编排中状态同步静默丢失的治理实践:从事件丢失到分层校验的稳定性设计