🔧 ESP32-C6 实战:用 HC-SR501 打造智能人体感应灯(附完整代码)

分享作者:XIUYUAN
作者昵称:XIUYUAN
评测品牌:iCEasy
评测型号:HC-SR501
发布时间:2025-10-22 13:42:53
8
视频链接
【ESP32-C6 实战:用 HC-SR501 打造智能人体感应灯-哔哩哔哩】 https://b23.tv/Geba8jQ
概要
在物联网项目中,人体感应控制是非常基础且实用的功能,比如自动感应灯、智能门禁提醒等。今天就带大家从零开始,用 ESP32-C6 WROOM-1 主控板搭配 HC-SR501 人体红外传感器,实现 “人来灯亮,人走灯灭” 的智能效果,全程干货,新手也能轻松上手!
开源口碑分享内容

🔧 ESP32-C6 实战:用 HC-SR501 打造智能人体感应灯(附完整代码)

       在物联网项目中,人体感应控制是非常基础且实用的功能,比如自动感应灯、智能门禁提醒等。今天就带大家从零开始,用 ESP32-C6 WROOM-1 主控板搭配 HC-SR501 人体红外传感器,实现 “人来灯亮,人走灯灭” 的智能效果,全程干货,新手也能轻松上手!


📦 所需硬件清单

       主控板:ESP32-C6 WROOM-1(性能强,支持 WiFi,适合物联网扩展)

       传感器:HC-SR501 人体红外传感器(检测人体移动,灵敏度可调节)

       执行元件:LED 灯(普通直插或贴片均可)

       辅助元件:220Ω 限流电阻(保护 LED 和 GPIO 引脚)

       连接线:杜邦线若干

       电源:5V USB 电源或电池模块


🔌 硬件接线指南(超详细)

接线是项目成功的关键,大家一定要对照清楚,避免接错烧毁元件:

元件引脚ESP32-C6 对应引脚备注说明
HC-SR501VCC5V 或 3.3V多数模块兼容两种电压
HC-SR501GNDGND共地是电路稳定的前提
HC-SR501OUTGPIO20传感器信号输出脚
LED 灯正极(长脚)GPIO18(经电阻)必须串联 220Ω 限流电阻
LED 灯负极(短脚)GND直接接地即可
⚠️ 重要提醒:LED 灯的正极一定要串联限流电阻,否则过高的电流会烧毁 ESP32-C6 的 GPIO 引脚,也可能直接烧坏 LED 灯。

🚀 Arduino IDE 代码实现(完整可直接上传)

首先确保你的 Arduino IDE 已经安装了 ESP32-C6 的开发板支持(在 Boards Manager 中搜索 “ESP32”,安装最新版本),然后复制以下代码,修改引脚定义(如果你的接线和本文不同),即可直接上传。

// 引脚定义
#define PIR_SENSOR_PIN 20  // HC-SR501的OUT引脚连接到ESP32-C6的GPIO20
#define LED_PIN 18         // LED的控制引脚连接到ESP32-C6的GPIO18

// 状态变量
bool motionDetected = false;  // 检测到运动的状态标记
unsigned long lastMotionTime = 0;  // 最后一次检测到运动的时间戳
const unsigned long lightOffDelay = 5000;  // 人离开后延迟关灯时间(5000毫秒=5秒)

void setup() {
  // 初始化引脚模式
  pinMode(PIR_SENSOR_PIN, INPUT);  // PIR传感器设为输入模式
  pinMode(LED_PIN, OUTPUT);        // LED设为输出模式
  
  // 初始化串口通信(用于调试,波特率115200)
  Serial.begin(115200);
  
  // 初始状态关闭LED
  digitalWrite(LED_PIN, LOW);
  
  // 系统启动提示
  Serial.println("✨ 人体感应灯系统启动中...");
  delay(2000);  // 等待PIR传感器预热稳定(关键步骤)
  Serial.println("✅ 系统就绪,等待人体感应...");
}

void loop() {
  // 实时读取PIR传感器的状态(高电平=检测到人体,低电平=无人体)
  motionDetected = digitalRead(PIR_SENSOR_PIN);
  
  // 检测到人体活动时
  if (motionDetected) {
    digitalWrite(LED_PIN, HIGH);  // 点亮LED灯
    lastMotionTime = millis();    // 更新最后一次检测到运动的时间
    Serial.println("🔆 检测到人体活动,LED已开启");
  } else {
    // 未检测到人体时,判断是否超过延迟时间
    if (millis() - lastMotionTime > lightOffDelay) {
      digitalWrite(LED_PIN, LOW);  // 超过延迟,关闭LED
      Serial.println("🌙 未检测到人体活动,LED已关闭");
    }
  }
  
  delay(100);  // 短暂延迟,避免频繁检测导致CPU占用过高
}



📝 代码核心逻辑解析

  1. 引脚初始化:明确 PIR 传感器为输入模式,LED 为输出模式,确保硬件能正常通信。
  2. 传感器预热:HC-SR501 上电后需要 2 秒左右的预热时间,这段时间内检测结果不稳定,所以在 setup 函数中加入延迟。
  3. 实时检测:在 loop 函数中不断读取 PIR 传感器的状态,一旦检测到高电平(人体移动),立即点亮 LED 并记录当前时间。
  4. 延迟关灯:当传感器检测不到人体时,并非立即关灯,而是等待设定的延迟时间(默认 5 秒),避免人短暂离开导致灯频繁开关。
  5. 调试信息:通过串口输出状态信息,方便大家排查问题(比如传感器是否正常工作、LED 是否响应)。

⚙️ 优化与扩展建议

  1. 调节灵敏度:HC-SR501 模块上有两个电位器,一个调节感应距离(最远可达 7 米),另一个调节持续触发时间,可根据实际场景手动调节。
  2. 修改延迟时间:代码中的lightOffDelay变量可直接修改,比如改为 10000(10 秒)或 3000(3 秒),适配不同场景。
  3. 添加 WiFi 功能:ESP32-C6 支持 WiFi,可添加 MQTT 通信代码,将感应状态上传到物联网平台(如 Home Assistant),实现远程监控。
  4. 替换执行元件:将 LED 换成继电器模块,可控制更大功率的设备(如台灯、排风扇),打造真正的智能家电控制。

🚨 常见问题排查

  • LED 不亮:检查接线是否正确,限流电阻是否串联;用串口监视器查看是否有 “检测到人体活动” 的提示,判断传感器是否工作。
  • 灯一直亮:可能是 PIR 传感器被遮挡或处于不稳定环境(如风扇直吹),尝试更换安装位置;也可检查模块上的电位器是否调节不当。
  • 检测灵敏度低:旋转 HC-SR501 上的灵敏度电位器(通常标注 “SENS”),顺时针旋转可增加感应距离。

🌟 总结

       这个项目难度较低,非常适合物联网新手入门,既能熟悉 ESP32-C6 的基本用法,又能掌握 HC-SR501 传感器的工作原理。通过简单的代码和接线,就能实现实用的智能功能,大家可以根据自己的需求进行扩展,打造更多有趣的物联网项目!

如果在实践过程中有任何问题,欢迎在评论区留言交流,祝大家项目顺利!🎉


全部评论
暂无评论
0/144