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

Arduino光控夜灯:Proteus仿真、代码详解与硬件实现全流程

Arduino 光控自动夜灯:从 Proteus 仿真到硬件落地的完整教程

本项目基于 Arduino UNO + LDR 分压 + BC547 三极管驱动继电器,实现环境光照度低于阈值自动点亮灯具、高于阈值自动熄灭。包含原理图、PCB 要点、Arduino 代码、Proteus 仿真步骤,适合嵌入式入门与自动化控制教学。

1. 系统框图与信号流

[LDR+10kΩ分压] → [Arduino A3 ADC采样 0~1023] → [软件阈值比较] → [D12 输出 HIGH/LOW] → [BC547 放大] → [5V继电器线圈] → [220V灯具通断]

2. 硬件清单与关键参数

元件 规格 选型要点
Arduino UNOATmega328P, 5V/16MHz官方板或兼容板,建议 DIP-28 封装便于维修
LDRGM55, 暗阻 1MΩ, 亮阻 10kΩ分压电阻 10kΩ 匹配量程,ADC 值跨度大
分压电阻10kΩ 1% 金属膜精度 1% 提升阈值一致性
BC547NPN, Ic=100mA, Vceo=45V, hFE=110-800基极串联 1kΩ 限流,集电极驱动继电器线圈
继电器模块5V 低电平触发, 光耦隔离, 接点 10A/250VAC含续流二极管、指示 LED、端子排,接线安全
续流二极管1N4007 (若模块未集成)并联线圈两端,吸收反向感应电压保护三极管

3. 原理图与 PCB 关键点

Arduino光控夜灯:Proteus仿真、代码详解与硬件实现全流程

4. Arduino 代码 (含滞回比较、串口调试、看门狗)

#include <avr/wdt.h>

const uint8_t LDR_PIN = A3;
const uint8_t RELAY_PIN = 12;
const uint16_t THRESHOLD_ON  = 300;  // 暗态 ADC 值,约 1.47V (9V*300/1023) → 继电器吸合
const uint16_t THRESHOLD_OFF = 350;  // 亮态 ADC 值,滞回 50 码防抖
uint16_t adcVal;
bool lampState = false;

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);  // 低电平触发模块,LOW=导通
  wdt_enable(WDTO_2S);           // 2s 看门狗防死机
}

void loop() {
  wdt_reset();
  adcVal = analogRead(LDR_PIN);
  Serial.print("ADC: "); Serial.println(adcVal);

  if (!lampState && adcVal < THRESHOLD_ON) {      // 灭→亮
    digitalWrite(RELAY_PIN, HIGH);  // 模块低电平触发,HIGH=断开?需确认模块极性!
    lampState = true;
    Serial.println("LAMP ON");
  } else if (lampState && adcVal > THRESHOLD_OFF) { // 亮→灭
    digitalWrite(RELAY_PIN, LOW);
    lampState = false;
    Serial.println("LAMP OFF");
  }
  delay(500);  // 降低采样频率,减少串口输出
}

⚠ 关键修正:代码中 `digitalWrite(RELAY_PIN, HIGH)` 对应“灯亮”假设模块为**高电平触发**。若模块为**低电平触发** (常见),逻辑需取反。请实测模块 IN 引脚悬空/接高/接低时的通断状态,修正代码逻辑。

5. Proteus 仿真全流程

  1. 安装 Proteus 8.10+ 与 Arduino IDE 1.8+;
  2. Proteus 元件库搜索:`ARDUINO UNO`、`LDR`、`RELAY`、`BC547`、`RES`、`CAP`、`VOLTAGE_PROBE`;
  3. 按原理图接线,**LDR 属性**设置:`LIGHT_LEVEL` 绑定滑块 (0~1000 Lux),`RESISTANCE_DARK=1M`,`RESISTANCE_LIGHT=10K`;
  4. Arduino 属性 → `Program File` 填入编译生成的 `.hex` 路径 (IDE: 文件→首选项→勾选“编译”和“上传”详细输出,编译后控制台最后一行即路径);
  5. 运行仿真,拖动 LDR 光照滑块,观察:
      - 虚拟示波器/电压探针监测 A3 电压、D12 电平、继电器线圈电流;
      - 终端窗口打印 ADC 值与状态切换日志;
  6. 验证滞回逻辑:光照 300→350→300 循环,继电器仅动作一次,无抖动。

6. 硬件调试与阈值标定

  1. 上电,打开串口监视器 (9600),记录不同时刻 ADC 值:
      正午阳光: ______
      室内办公: ______
      黄昏/阴天: ______
      全黑/遮挡: ______
  2. 选取“黄昏值”与“全黑值”中点作为 `THRESHOLD_ON`,`THRESHOLD_OFF = THRESHOLD_ON + 30~50`;
  3. 实测继电器动作声、灯具亮灭,连续运行 24h 观察稳定性。

7. 进阶功能扩展

结语: 本项目完整覆盖了“传感-采样-判决-执行”控制闭环,代码引入滞回比较与看门狗提升工程鲁棒性,Proteus 仿真验证逻辑正确性,硬件标定落地真实环境。掌握此流程,可快速迁移至温控、液位、气体等各类阈值型自动化项目。

工业技术

  1. 用 Arduino 打造绚丽显示器 Ambilight 系统
  2. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  3. 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
  4. Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
  5. Arduino 自动化 Chrome 恐龙游戏 - LDR 光敏电阻 + Python 实现全自动跳跃
  6. 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
  7. 无线Arduino编程盾:HC-05蓝牙模块实现免USB线烧录
  8. Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY
  9. Arduino + OpenCV 实时人脸追踪云台系统
  10. WARAN 家庭自动化套件:树莓派 + Arduino + nRF24L01+ 模块化设计
  11. 自动换刀装置(ATC)工作原理与选型应用全解析
  12. 制造商如何利用自动化规模化电商履约