久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于 Arduino 的自動晝夜 LED 燈帶控制器設(shè)計(jì)

基于 Arduino 的自動晝夜 LED 燈帶控制器設(shè)計(jì)

作者: 時間:2025-11-14 來源: 收藏


1. 項(xiàng)目概述:讓燈自己知道“天黑了”

本項(xiàng)目實(shí)現(xiàn)了一個 自動燈光控制系統(tǒng)
當(dāng)環(huán)境變暗時,Arduino 自動打開 12V LED 燈帶;
當(dāng)環(huán)境光線變亮?xí)r,又自動關(guān)閉燈帶。

系統(tǒng)核心特性:

  • 利用 LDR 光敏電阻 感知環(huán)境亮度;

  • 通過 電壓分壓電路 將光強(qiáng)轉(zhuǎn)換為可測電壓;

  • 使用 Arduino UNO Mini 讀取光強(qiáng)并做邏輯判斷;

  • 通過 5V 繼電器模塊 控制 12V LED 燈帶通斷;

  • 無需按鍵、無需人為干預(yù),實(shí)現(xiàn) 全自動“天黑亮燈,天亮熄燈”

這是一個非常適合入門的 Arduino 項(xiàng)目,可以一次性學(xué)到:

  • 模擬傳感器讀取(analogRead

  • 電阻分壓原理

  • 繼電器驅(qū)動高壓/大功率負(fù)載

  • 簡單的控制邏輯與閾值判斷


2. 硬件清單與功能說明

2.1 主要元件

  1. Arduino UNO Mini × 1

    • 基于 ATmega328P 微控制器;

    • 5V 邏輯電平,板載 USB 接口;

    • 負(fù)責(zé)采集 LDR 信號、執(zhí)行控制算法、驅(qū)動繼電器。

  2. LDR 光敏電阻(約 5 MΩ)× 1

    • 亮:電阻值降低;暗:電阻值升高;

    • 通過與 10k 電阻組成分壓,將光照強(qiáng)度轉(zhuǎn)換為電壓。

  3. 10kΩ 電阻 × 1

    • 與 LDR 組成 電壓分壓器

    • 10k 是典型室內(nèi)光照下比較常用的分壓值,能得到合適的 ADC 讀數(shù)范圍。

  4. 5V 繼電器模塊 × 1(如:DFRobot Gravity 5A Relay)

    • 線圈側(cè)使用 Arduino 的 5V 邏輯控制;

    • 觸點(diǎn)側(cè)串聯(lián)在 12V LED 燈帶的供電回路中;

    • 提供 電氣隔離,保護(hù) Arduino 不直接接觸 12V 負(fù)載電路。

  5. 12V LED 燈帶 × 1

    • 項(xiàng)目中的光源負(fù)載;

    • 通常需要單獨(dú)的 12V DC 電源適配器 供電。

  6. 12V 電源適配器 × 1

    • 專門為 LED 燈帶提供電源;

    • 通過繼電器控制燈帶的“斷/通”;

    • 注意電流能力應(yīng)匹配燈帶功耗。

  7. 面包板與若干杜邦線

    • 用于快速搭建原型電路;

    • 連接 Arduino ? LDR 分壓 ? 繼電器模塊 ? 12V 燈帶。

  8. 熱熔膠槍(可選)

    • 用于固定 LDR 位置或整理線材,提升結(jié)構(gòu)可靠性。


3. 工作原理與電路設(shè)計(jì)

3.1 LDR 光敏電阻與電壓分壓

LDR 的電阻值會隨光強(qiáng)變化:

  • 亮光 → 電阻變小(幾千歐甚至更低)

  • 黑暗 → 電阻變大(可達(dá)兆歐級)

直接測電阻不方便,因此使用經(jīng)典的 電壓分壓電路

  • LDR 一端接 5V

  • LDR 另一端接模擬輸入 A0

  • 在 A0 與 GND 之間串接 10k 電阻

形成如下結(jié)構(gòu):

5V ── LDR ── A0 ── 10k ── GND

A0 點(diǎn)的電壓隨光照變化而變化,Arduino 通過 analogRead(A0) 讀到 0–1023 之間的數(shù)值,即可反映當(dāng)前亮度。

3.2 繼電器控制 12V LED 燈帶

為了安全與隔離,LED 燈帶不直接由 Arduino 供電,而是:

  • 燈帶的 正極(+) 直接接 12V 電源正極

  • 燈帶的 負(fù)極(-) 經(jīng)繼電器常開觸點(diǎn) (NO, COM) 串聯(lián)后接到 12V 電源負(fù)極

典型接法:

12V 電源 + ───── LED Strip +  
12V 電源 - ── Relay NO  
Relay COM ───── LED Strip -

當(dāng)繼電器吸合時 NO 與 COM 接通,LED 燈帶形成完整回路 → 點(diǎn)亮;
當(dāng)繼電器斷開時,回路被切斷 → 熄滅。

繼電器控制腳連接:

  • Relay VCC → Arduino 5V

  • Relay GND → Arduino GND

  • Relay IN  → Arduino 數(shù)字引腳 D2


4. 硬件連接步驟(匯總)

  1. LDR 分壓接線

  • LDR 一腳 → 5V

  • LDR 另一腳 → A0

  • 10k 電阻一端接 A0,另一端接 GND

  1. 繼電器模塊接線

  • VCC → 5V

  • GND → GND

  • IN → D2(即 RELAY_PIN

  1. LED 燈帶與 12V 電源

  • 燈帶 “+” → 12V 適配器 “+”

  • 燈帶 “–” → 繼電器 COM 接線端

  • 繼電器 NO → 12V 適配器 “–”

?? 安全提示:
雖然這里使用的是 12V 低壓直流,但依然要注意極性與接線牢固,避免短路。若將來擴(kuò)展到市電負(fù)載(220V AC),必須使用符合安全規(guī)范的繼電器與布線方式,并做好絕緣防護(hù)。


5. 軟件實(shí)現(xiàn):自動晝夜判斷邏輯

你原文里附帶的代碼是一個 “按鍵控制繼電器” 示例(BUTTON_PIN + INPUT_PULLUP),非常適合練習(xí)繼電器控制和防抖。但要實(shí)現(xiàn)真正的 “自動白天關(guān)燈、夜晚開燈”,我們需要改成讀取 LDR 的模擬值,并根據(jù)閾值控制繼電器。

下面給出一個 基于 LDR 的自動控制完整示例,邏輯為:

  • 讀取 A0 模擬值 lightValue

  • 設(shè)置“變暗閾值”和“變亮閾值”,形成簡單 遲滯,避免光線波動時燈頻繁閃爍;

  • 根據(jù)當(dāng)前狀態(tài)和光照水平,決定是否吸合/釋放繼電器。

5.1 自動晝夜控制示例代碼(推薦)

// Automatic Day-Night LED Strip Controller Using Arduino
// 硬件:Arduino UNO Mini + LDR + 10k 電阻 + 5V 繼電器 + 12V LED 燈帶
// 功能:環(huán)境變暗 → 自動打開 LED 燈帶;環(huán)境變亮 → 自動關(guān)閉 LED 燈帶

const int LDR_PIN   = A0;  // LDR 分壓中間點(diǎn)接 A0
const int RELAY_PIN = 2;   // 繼電器控制引腳

// 注意:很多繼電器模塊是“低電平觸發(fā)”(active LOW)
// 如果是低電平觸發(fā),請?jiān)O(shè)為 true;如果是高電平觸發(fā),設(shè)為 false
const bool RELAY_ACTIVE_LOW = true;

// 根據(jù)實(shí)測光線情況調(diào)節(jié):值越大代表越暗
// 這里用兩個閾值實(shí)現(xiàn)簡單遲滯:
// - 當(dāng) lightValue > THRESHOLD_DARK 時認(rèn)為“夠暗,可以開燈”
// - 當(dāng) lightValue < THRESHOLD_LIGHT 時認(rèn)為“夠亮,可以關(guān)燈”
const int THRESHOLD_DARK  = 700; // 暗環(huán)境閾值(示例值)
const int THRESHOLD_LIGHT = 600; // 亮環(huán)境閾值(示例值)

bool lightOn = false; // 當(dāng)前燈狀態(tài)

void setRelay(bool on) {
  if (RELAY_ACTIVE_LOW) {
    digitalWrite(RELAY_PIN, on ? LOW : HIGH);
  } else {
    digitalWrite(RELAY_PIN, on ? HIGH : LOW);
  }
}

void setup() {
  Serial.begin(9600);
  pinMode(LDR_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);

  // 啟動時默認(rèn)關(guān)閉燈帶
  lightOn = false;
  setRelay(lightOn);

  Serial.println("Automatic Day-Night LED Strip Controller");
  Serial.println("Cover the LDR to turn the LED strip ON.");
}

void loop() {
  int lightValue = analogRead(LDR_PIN); // 讀取 0~1023

  // 簡單遲滯控制
  if (!lightOn && lightValue > THRESHOLD_DARK) {
    // 環(huán)境足夠暗且當(dāng)前燈是關(guān)的 → 開燈
    lightOn = true;
    setRelay(lightOn);
    Serial.print("LightValue: ");
    Serial.print(lightValue);
    Serial.println(" -> DARK, LED Strip ON");
  } else if (lightOn && lightValue < THRESHOLD_LIGHT) {
    // 環(huán)境足夠亮且當(dāng)前燈是開的 → 關(guān)燈
    lightOn = false;
    setRelay(lightOn);
    Serial.print("LightValue: ");
    Serial.print(lightValue);
    Serial.println(" -> BRIGHT, LED Strip OFF");
  }

  // 調(diào)試輸出
  Serial.print("Current LightValue: ");
  Serial.println(lightValue);

  delay(200); // 簡單節(jié)流,避免串口刷屏
}

使用建議:

  • 上傳代碼后,打開串口監(jiān)視器(9600 波特率),在不同光照下查看 lightValue 大致范圍;

  • 根據(jù)實(shí)際環(huán)境,微調(diào) THRESHOLD_DARKTHRESHOLD_LIGHT

  • 確認(rèn)繼電器模塊是否為“低電平觸發(fā)”,如果不是,將 RELAY_ACTIVE_LOW 改成 false


6. 原始“按鍵控制繼電器”代碼的定位

你提供的這段代碼本身是很好的 繼電器 + 按鍵防抖 教學(xué)示例:

  • 使用 INPUT_PULLUP 作為按鍵輸入模式;

  • loop() 中做簡單防抖;

  • RELAY_ACTIVE_LOW 適配不同繼電器模塊的觸發(fā)邏輯。

這段代碼可以作為 “手動開關(guān)模式”調(diào)試用模式,例如:

  • 先用按鍵確認(rèn)繼電器和燈帶接線無誤;

  • 再切換到上面的 LDR 自動模式。

你可以把它單獨(dú)作為“附錄:按鍵控制繼電器示例”放在文章末尾。


7. 測試方法與調(diào)試步驟

  1. 單獨(dú)測試?yán)^電器 + 燈帶

    • 先使用“按鍵控制繼電器”的簡化代碼;

    • 手動按鍵,看燈帶是否跟隨 ON/OFF;

    • 確認(rèn)繼電器接線、電源極性正確。

  2. 測試 LDR 讀數(shù)

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

    • 在明亮、半暗、全暗環(huán)境下記錄 lightValue

    • 以實(shí)際讀數(shù)為依據(jù)設(shè)置 THRESHOLD_DARK / THRESHOLD_LIGHT

  3. 整體聯(lián)調(diào)

    • 上傳自動控制代碼;

    • 用手遮住 LDR,觀察串口顯示是否識別為“DARK”并點(diǎn)亮燈帶;

    • 用手機(jī)手電筒/臺燈照向 LDR,觀察是否識別為“BRIGHT”并熄滅燈帶;

    • 根據(jù)實(shí)際使用環(huán)境微調(diào)閾值和延時。


8. 小結(jié)與擴(kuò)展方向

這個 基于 Arduino 的自動晝夜 LED 燈帶控制器,在結(jié)構(gòu)上非常簡單,卻完整涵蓋了 IoT 與嵌入式入門所需的多個核心知識點(diǎn):

  • 傳感器(LDR) → 模擬信號采集;

  • 電阻分壓與 ADC 讀數(shù)之間的關(guān)系;

  • 繼電器驅(qū)動高功率負(fù)載的安全做法;

  • 狀態(tài)邏輯 + 閾值 + 遲滯,避免抖動。

在此基礎(chǔ)上,你還可以進(jìn)一步擴(kuò)展:

  • 使用 電位器 調(diào)節(jié)“靈敏度”,實(shí)時改變閾值;

  • 加入 手動模式/自動模式切換開關(guān)

  • OLED 或 LCD1602 實(shí)時顯示光照值與當(dāng)前燈狀態(tài);

  • 使用 ESP8266 / ESP32 + Wi-Fi,把光照和燈狀態(tài)上傳到手機(jī) App 或云平臺。



關(guān)鍵詞: DIY

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉