news 2026/5/8 12:43:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能家居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秒,既保证安全又不会影响睡眠。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 12:43:28

SpringBoot项目整合TDengine 3.0:用Druid连接池避开那些新手必踩的坑

SpringBoot项目整合TDengine 3.0&#xff1a;用Druid连接池避开那些新手必踩的坑 时序数据库在物联网领域的应用越来越广泛&#xff0c;而TDengine作为国产高性能时序数据库的代表&#xff0c;凭借其出色的写入性能和压缩比&#xff0c;成为许多开发者的首选。本文将聚焦Sprin…

作者头像 李华
网站建设 2026/5/8 12:40:41

基于AI与向量数据库的视频内容语义检索工具Clip Finder实战指南

1. 项目概述 如果你和我一样&#xff0c;是个重度视频内容消费者&#xff0c;无论是追技术播客、看教程&#xff0c;还是沉迷于各种深度访谈&#xff0c;肯定都遇到过这个让人抓狂的时刻&#xff1a;明明记得某个博主在视频里说过一句特别精辟的话&#xff0c;或者演示过一个关…

作者头像 李华
网站建设 2026/5/8 12:39:41

从Blender到Unity:用FBX Python SDK打通3D工作流中的‘数据孤岛’

从Blender到Unity&#xff1a;用FBX Python SDK打通3D工作流中的‘数据孤岛’ 在3D内容生产管线中&#xff0c;不同软件间的数据流转一直是技术美术&#xff08;TA&#xff09;和工具开发工程师的痛点。当你从Blender导出一个精心调校的角色模型&#xff0c;满怀期待地导入Uni…

作者头像 李华
网站建设 2026/5/8 12:39:22

终极指南:如何让闲置电视盒子秒变Linux服务器

终极指南&#xff1a;如何让闲置电视盒子秒变Linux服务器 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, …

作者头像 李华
网站建设 2026/5/8 12:37:30

避开这些坑!eMMC 5.1 PCB布线实战指南(附Micron官方参考设计解析)

eMMC 5.1 PCB布线避坑指南&#xff1a;从官方参考设计到工程实践 在嵌入式存储领域&#xff0c;eMMC 5.1以其高速性能和相对简单的接口设计&#xff0c;成为众多硬件工程师的首选方案。然而&#xff0c;当设计从理论走向实践&#xff0c;特别是面对高速信号完整性挑战时&#x…

作者头像 李华