用Arduino UNO和HC-SR04做个智能小夜灯:5分钟搞定人体感应自动开关

张开发
2026/6/3 16:36:23 15 分钟阅读
用Arduino UNO和HC-SR04做个智能小夜灯:5分钟搞定人体感应自动开关
用Arduino UNO和HC-SR04打造智能小夜灯从零开始的自动感应方案深夜起床开灯总是让人感到刺眼不适这款基于Arduino和超声波传感器的智能小夜灯能在你靠近时自动点亮离开后延时关闭完全无需手动操作。不同于市面上成品夜灯的固定功能我们可以自由定制感应距离、灯光亮度和延时时间甚至还能添加更多智能功能。1. 项目准备与硬件选型在开始动手前我们需要了解这个项目的核心组件及其替代方案。Arduino UNO作为控制核心其丰富的数字IO口和模拟输入输出能力完全满足我们的需求。而HC-SR04超声波模块则负责检测人体移动其2cm-450cm的检测范围特别适合小夜灯这类应用场景。必备材料清单Arduino UNO开发板或兼容板如Elegoo UNOHC-SR04超声波传感器模块5V LED灯带60灯/米或3W小夜灯模块220Ω电阻用于LED限流面包板及杜邦线若干5V 2A电源适配器长期使用建议不用电脑USB供电提示LED灯带建议选用暖白色2700K-3000K色温夜间使用更舒适不刺眼。若需要调节亮度可选用PWM调光型灯带。硬件连接示意图如下Arduino UNO引脚HC-SR04引脚LED灯带连接5VVCC正极5VGNDGND负极GND数字引脚9Trig-数字引脚10Echo-数字引脚6-信号线2. 硬件连接与电路搭建实际接线时建议先给Arduino断电操作。将HC-SR04的VCC和GND分别连接到Arduino的5V和GND引脚Trig接数字引脚9Echo接数字引脚10。LED灯带的正极接5V电源负极通过220Ω电阻接地信号线接数字引脚6PWM引脚。常见接线问题排查模块不工作检查5V供电是否正常万用表测量VCC-GND间电压测距值异常确保Trig和Echo没有接反线材接触良好LED不亮检查极性是否正确电阻值是否合适超声波模块的最佳安装角度是水平向下倾斜15-30度这样能更好检测走近的人体。可以用热熔胶临时固定后期装入外壳时再调整位置。// 基础引脚定义 const int trigPin 9; const int echoPin 10; const int ledPin 6;3. 核心代码实现与优化基础版的代码只需要约50行就能实现基本功能但我们加入了防误触发的算法优化。超声波模块在开放环境中可能受到干扰导致距离读数突变。通过设置采样平均和阈值判断可以大幅提升稳定性。// 智能小夜灯完整代码 #include Arduino.h #define SAMPLE_NUM 5 // 采样次数 #define THRESHOLD_DISTANCE 50 // 感应阈值(厘米) int distances[SAMPLE_NUM]; int currentIndex 0; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } float getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration pulseIn(echoPin, HIGH); return duration * 0.034 / 2; // 计算距离(cm) } void loop() { // 滑动窗口采样 distances[currentIndex] getDistance(); currentIndex (currentIndex 1) % SAMPLE_NUM; // 计算移动平均 float avgDist 0; for(int i0; iSAMPLE_NUM; i) { avgDist distances[i]; } avgDist / SAMPLE_NUM; // 距离判断与灯光控制 if(avgDist THRESHOLD_DISTANCE avgDist 2) { analogWrite(ledPin, 150); // 中等亮度 delay(5000); // 持续点亮5秒 } else { analogWrite(ledPin, 0); // 关闭LED } delay(100); // 采样间隔 }代码优化要点采用滑动窗口平均算法消除单次测量误差设置2cm的最小有效距离避免误触发使用PWM控制LED亮度夜间更柔和加入5秒延时关闭避免频繁开关4. 功能扩展与进阶玩法基础功能实现后我们可以考虑添加更多实用特性。比如通过光敏电阻检测环境亮度白天自动禁用夜灯功能或者添加红外人体传感器与超声波形成双重检测提高可靠性。扩展功能实现方案功能所需组件代码修改要点环境光控制光敏电阻10KΩ分压电阻添加模拟输入读取设置亮度阈值移动模式PIR红外传感器数字输入检测与超声波逻辑或运算亮度记忆EEPROM存储保存最后一次使用的亮度值无线控制ESP-01 WiFi模块添加Web服务器或MQTT客户端功能光敏电阻的添加方法// 添加在setup()中 pinMode(A0, INPUT); // 添加在loop()开始处 int lightValue analogRead(A0); if(lightValue 500) { // 环境较亮 analogWrite(ledPin, 0); return; // 跳过后续检测 }5. 外观设计与安装建议功能完善后一个美观的外壳能大幅提升使用体验。可以使用3D打印制作定制外壳或者改造现有灯具。我推荐使用半透光亚克力板作为灯罩既能均匀光线又能看到内部电子元件的科技感。安装位置建议床头高度约50-70cm倾斜向下30度走廊安装高度1.2-1.5m朝向行走方向楼梯每级台阶侧面安装检测上下楼动作电源方案可以选择5V手机充电器USB线最经济18650锂电池组充电模块无线便携旧路由器电源改造稳定可靠在最终组装前建议先用热熔胶固定所有组件测试无误后再用螺丝或胶水永久固定。留出USB编程接口位置方便后期更新固件。

更多文章