智能交流灯光控制:Arduino UNO + 继电器 + 超声波传感器自动开关
项目目标
实现「人来灯亮、人走灯灭」的节能照明:超声波传感器 (HC-SR04) 监测门口区域,检测到有人通过(距离小于阈值)即切换灯光状态。使用继电器模块控制市电灯泡(或低压直流设备验证原理),Arduino UNO 为核心控制器。
安全警示
材料清单
| 元件 | 数量 | 说明 |
|---|---|---|
| Arduino UNO | 1 | |
| HC-SR04 超声波测距模块 | 1 | Trig→D12, Echo→D11 |
| 单路/双路继电器模块 (有源低电平触发) | 1 | VCC→5V, GND→GND, IN1→D8 |
| 节能灯/LED 灯泡 (E27) + 灯座 + 插头线 | 1套 | 火线串联继电器常开(NO)/公共端(COM) |
| 5V 直流电源适配器 (给 Arduino 供电) | 1 | |
| 面包板、跳线、螺丝刀、绝缘胶带/热缩管 | 若干 |
硬件接线
超声波模块
HC-SR04 Arduino VCC ──────── 5V Trig ──────── D12 Echo ──────── D11 GND ──────── GND
继电器模块 (有源低电平触发)
Relay Arduino VCC ──────── 5V GND ──────── GND IN1 ──────── D8
判断触发极性:上电后 IN1 悬空,若继电器吸合 → 高电平触发;若不吸合,再用杜邦线将 IN1 接 GND,若吸合 → 低电平触发。本项目模块为低电平触发,代码中 HIGH=断开(灯灭)、LOW=吸合(灯亮)。
市电灯泡接线 (极其重要)
- 灯座一根线直接接插头零线 (N)
- 另一根线(火线 L)剪断,分别接继电器 COM (公共端) 与 NO (常开端)
- 插头地线 (PE) 若灯具金属外壳必须接地
- 所有裸露导体必须用绝缘胶带/热缩管包裹,继电器模块建议装入绝缘盒
软件设计要点
中值滤波去噪
HC-SR04 偶发异常值 (0 或尖峰)。使用 NewPing 库 ping_median(7) 取 7 次测量中位数,再 convert_cm() 转距离。读数为 0 视为无障碍物,置为 MAX_DISTANCE。
状态切换逻辑
- 检测距离
< critical_distance(默认 50cm,约门宽一半) → 进入「有人区」 - 等待距离恢复 > 阈值(人离开) → 翻转灯光状态
- 避免人在门口停留导致频繁切换
完整代码
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
#define RELAY_PIN 8
#include "NewPing.h"
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int critical_distance_cms = 50;
bool lampState = false; // false=灭, true=亮
void setup() {
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // 低电平触发:HIGH=断开
}
void loop() {
delay(50); // 20Hz 采样
unsigned int dist = readDistance();
Serial.print("Ultrasonic: "); Serial.print(dist); Serial.println("cm");
if (dist < critical_distance_cms) {
while (readDistance() < critical_distance_cms) delay(5); // 等人走开
lampState = !lampState;
digitalWrite(RELAY_PIN, lampState ? LOW : HIGH);
Serial.println(lampState ? "Door Open! Light ON" : "Door Closed! Light OFF");
}
}
unsigned int readDistance() {
unsigned int d = sonar.convert_cm(sonar.ping_median(7));
return (d == 0) ? MAX_DISTANCE : d;
}
测试步骤
- 先不接市电,用 LED+电阻串联在继电器输出端验证逻辑
- 打开串口监视器观察距离读数与状态翻转
- 调整
critical_distance_cms适配门宽 - 确认无误后,断电接市电,再次上电实测
进阶改进
- 增加光敏电阻:白天光照足不开灯
- 用 PIR 人体红外替代/融合超声波,减少误触发
- 接入 MQTT/Home Assistant 实现智能家居联动
- 做成 PCB 扩展板,集成端子排、保险丝、压线端子,更安全美观
资源链接
制造工艺
- 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- Arduino 自动浇水系统:定时 + 土壤湿度双模式,轻松养护盆栽
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- 智能自系鞋带鞋:内置压电发电与计步功能
- Arduino 声纳实时测距与 Processing 可视化
- 光影交响:Arduino DIY 生日祝福灯光音乐装置
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏