基于 Arduino 的自动昼夜 LED 灯带控制器设计

内容摘要本项目实现了一个 自动灯光控制系统:当环境变暗时,Arduino 自动打开 12V LED 灯带;当环境光线变亮时,又自动关闭灯带。系统核心特性:利用 LDR 光敏电阻 感知环境亮度;通过 电压分压电路 将光强转换为可测电压;使用 Ardu

本项目实现了一个 自动灯光控制系统:

当环境变暗时,Arduino 自动打开 12V LED 灯带;

当环境光线变亮时,又自动关闭灯带。

系统核心特性:

利用 LDR 光敏电阻 感知环境亮度;

通过 电压分压电路 将光强转换为可测电压;

使用 Arduino UNO Mini 读取光强并做逻辑判断;

通过 5V 继电器模块 控制 12V LED 灯带通断;

无需按键、无需人为干预,实现 全自动“天黑亮灯,天亮熄灯”。

这是一个非常适合入门的 Arduino 项目,可以一次性学到:

模拟传感器读取(analogRead)

电阻分压原理

继电器驱动高压/大功率负载

简单的控制逻辑与阈值判断

Arduino UNO Mini × 1

基于 ATmega328P 微控制器;

5V 逻辑电平,板载 USB 接口;

负责采集 LDR 信号、执行控制算法、驱动继电器。

LDR 光敏电阻(约 5 MΩ)× 1

亮:电阻值降低;暗:电阻值升高;

通过与 10k 电阻组成分压,将光照强度转换为电压。

10kΩ 电阻 × 1

与 LDR 组成 电压分压器;

10k 是典型室内光照下比较常用的分压值,能得到合适的 ADC 读数范围。

5V 继电器模块 × 1(如:DFRobot Gravity 5A Relay)

线圈侧使用 Arduino 的 5V 逻辑控制;

触点侧串联在 12V LED 灯带的供电回路中;

提供 电气隔离,保护 Arduino 不直接接触 12V 负载电路。

12V LED 灯带 × 1

项目中的光源负载;

通常需要单独的 12V DC 电源适配器 供电。

12V 电源适配器 × 1

专门为 LED 灯带提供电源;

通过继电器控制灯带的“断/通”;

注意电流能力应匹配灯带功耗。

面包板与若干杜邦线

用于快速搭建原型电路;

连接 Arduino ↔ LDR 分压 ↔ 继电器模块 ↔ 12V 灯带。

热熔胶枪(可选)

用于固定 LDR 位置或整理线材,提升结构可靠性。

LDR 的电阻值会随光强变化:

亮光 → 电阻变小(几千欧甚至更低)

黑暗 → 电阻变大(可达兆欧级)

直接测电阻不方便,因此使用经典的 电压分压电路:

LDR 一端接 5V

LDR 另一端接模拟输入 A0

在 A0 与 GND 之间串接 10k 电阻

形成如下结构:

A0 点的电压随光照变化而变化,Arduino 通过 analogRead(A0) 读到 0–1023 之间的数值,即可反映当前亮度。

为了安全与隔离,LED 灯带不直接由 Arduino 供电,而是:

灯带的 正极(+) 直接接 12V 电源正极;

灯带的 负极(-) 经继电器常开触点 (NO, COM) 串联后接到 12V 电源负极。

典型接法:

当继电器吸合时 NO 与 COM 接通,LED 灯带形成完整回路 → 点亮;

当继电器断开时,回路被切断 → 熄灭。

继电器控制脚连接:

Relay VCC → Arduino 5V

Relay GND → Arduino GND

Relay IN  → Arduino 数字引脚 D2

LDR 分压接线

LDR 一脚 → 5V

LDR 另一脚 → A0

10k 电阻一端接 A0,另一端接 GND

继电器模块接线

VCC → 5V

GND → GND

IN → D2(即 RELAY_PIN)

LED 灯带与 12V 电源

灯带 “+” → 12V 适配器 “+”

灯带 “–” → 继电器 COM 接线端

继电器 NO → 12V 适配器 “–”

⚠️ 安全提示:

虽然这里使用的是 12V 低压直流,但依然要注意极性与接线牢固,避免短路。若将来扩展到市电负载(220V AC),必须使用符合安全规范的继电器与布线方式,并做好绝缘防护。

你原文里附带的代码是一个 “按键控制继电器” 示例(BUTTON_PIN + INPUT_PULLUP),非常适合练习继电器控制和防抖。但要实现真正的 “自动白天关灯、夜晚开灯”,我们需要改成读取 LDR 的模拟值,并根据阈值控制继电器。

下面给出一个 基于 LDR 的自动控制完整示例,逻辑为:

读取 A0 模拟值 lightValue;

设置“变暗阈值”和“变亮阈值”,形成简单 迟滞,避免光线波动时灯频繁闪烁;

根据当前状态和光照水平,决定是否吸合/释放继电器。

使用建议:

上传代码后,打开串口监视器(9600 波特率),在不同光照下查看 lightValue 大致范围;

根据实际环境,微调 THRESHOLD_DARK 与 THRESHOLD_LIGHT;

确认继电器模块是否为“低电平触发”,如果不是,将 RELAY_ACTIVE_LOW 改成 false。

你提供的这段代码本身是很好的 继电器 + 按键防抖 教学示例:

使用 INPUT_PULLUP 作为按键输入模式;

在 loop() 中做简单防抖;

用 RELAY_ACTIVE_LOW 适配不同继电器模块的触发逻辑。

这段代码可以作为 “手动开关模式” 或 调试用模式,例如:

先用按键确认继电器和灯带接线无误;

再切换到上面的 LDR 自动模式。

你可以把它单独作为“附录:按键控制继电器示例”放在文章末尾。

单独测试继电器 + 灯带

先使用“按键控制继电器”的简化代码;

手动按键,看灯带是否跟随 ON/OFF;

确认继电器接线、电源极性正确。

测试 LDR 读数

使用一个只做 analogRead(A0) 并 Serial.println() 的小程序;

在明亮、半暗、全暗环境下记录 lightValue;

以实际读数为依据设置 THRESHOLD_DARK / THRESHOLD_LIGHT。

整体联调

上传自动控制代码;

用手遮住 LDR,观察串口显示是否识别为“DARK”并点亮灯带;

用手机手电筒/台灯照向 LDR,观察是否识别为“BRIGHT”并熄灭灯带;

根据实际使用环境微调阈值和延时。

这个 基于 Arduino 的自动昼夜 LED 灯带控制器,在结构上非常简单,却完整涵盖了 IoT 与嵌入式入门所需的多个核心知识点:

传感器(LDR) → 模拟信号采集;

电阻分压与 ADC 读数之间的关系;

继电器驱动高功率负载的安全做法;

状态逻辑 + 阈值 + 迟滞,避免抖动。

在此基础上,你还可以进一步扩展:

使用 电位器 调节“灵敏度”,实时改变阈值;

加入 手动模式/自动模式切换开关;

用 OLED 或 LCD1602 实时显示光照值与当前灯状态;

使用 ESP8266 / ESP32 + Wi-Fi,把光照和灯状态上传到手机 App 或云平台。

 
举报 收藏 打赏 评论 0
今日推荐
浙ICP备19001410号-1