亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

智能交流灯光控制:Arduino UNO + 继电器 + 超声波传感器自动开关

项目目标

实现「人来灯亮、人走灯灭」的节能照明:超声波传感器 (HC-SR04) 监测门口区域,检测到有人通过(距离小于阈值)即切换灯光状态。使用继电器模块控制市电灯泡(或低压直流设备验证原理),Arduino UNO 为核心控制器。

安全警示

⚠ 高压危险:本项目涉及 220V 市电接线。未满 16 岁或无电工经验者必须在专业人士指导下操作。建议先用 12V 直流小灯/LED 验证逻辑,确认无误后再接市电。所有市电接线必须绝缘良好、接地可靠、远离易燃物。

材料清单

元件数量说明
Arduino UNO1
HC-SR04 超声波测距模块1Trig→D12, Echo→D11
单路/双路继电器模块 (有源低电平触发)1VCC→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=吸合(灯亮)。

市电灯泡接线 (极其重要)

  1. 灯座一根线直接接插头零线 (N)
  2. 另一根线(火线 L)剪断,分别接继电器 COM (公共端) 与 NO (常开端)
  3. 插头地线 (PE) 若灯具金属外壳必须接地
  4. 所有裸露导体必须用绝缘胶带/热缩管包裹,继电器模块建议装入绝缘盒
智能交流灯光控制:Arduino UNO + 继电器 + 超声波传感器自动开关
市电接线:火线经继电器 NO/COM 切断/接通
智能交流灯光控制:Arduino UNO + 继电器 + 超声波传感器自动开关
完整电路原理图 (灯泡简化表示)

软件设计要点

中值滤波去噪

HC-SR04 偶发异常值 (0 或尖峰)。使用 NewPing 库 ping_median(7) 取 7 次测量中位数,再 convert_cm() 转距离。读数为 0 视为无障碍物,置为 MAX_DISTANCE。

状态切换逻辑

完整代码

#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;
}

测试步骤

  1. 先不接市电,用 LED+电阻串联在继电器输出端验证逻辑
  2. 打开串口监视器观察距离读数与状态翻转
  3. 调整 critical_distance_cms 适配门宽
  4. 确认无误后,断电接市电,再次上电实测

进阶改进

资源链接

制造工艺

  1. 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
  2. Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
  3. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  4. Arduino + DHT11 + 以太网盾板温湿度数据记录仪
  5. Arduino 自动浇水系统:定时 + 土壤湿度双模式,轻松养护盆栽
  6. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  7. 智能自系鞋带鞋:内置压电发电与计步功能
  8. Arduino 声纳实时测距与 Processing 可视化
  9. 光影交响:Arduino DIY 生日祝福灯光音乐装置
  10. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  11. 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
  12. Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏