"밝은 불꽃이되어 어두워 질 때까지 불을 끄세요!" 때때로 우리는 조명을 끄고 전기를 낭비하는 것을 잊고 낮에 가로등이 켜져있는 것을 보았을 것입니다. 우리는 이미 외부가 밝 으면 조명이 자동으로 꺼지고 외부가 어두우면 켜지는 어두운 감지기에 몇 가지 회로를 구축했습니다. 그러나 이번에이 회로에서는 조명 조건에 따라 조명을 켜고 끌뿐만 아니라 외부 조명 조건에 따라 조명의 강도를 변경합니다. 여기서는 Arduino와 함께 LDR 및 PWM 개념을 사용하여 1 와트 전원 LED 의 밝기를 자동으로 낮추거나 높였습니다.
기본적으로 PWM은 Pulse Width Modulation을 의미 하며 PWM 핀을 통한 출력 신호는 아날로그 신호이며 Arduino에서 디지털 신호로 수집됩니다. 디지털 웨이브의 듀티 사이클을 사용하여 신호에 대한 순차적 아날로그 값을 생성합니다. 또한이 신호는 전원 LED의 밝기를 제어하는 데 더 사용됩니다.
필요한 재료
- Arduino UNO
- LDR
- 저항기 (510, 100k ohm)
- 커패시터 (0.1uF)
- 트랜지스터 2N2222
- 1 와트 전원 LED
- 전선 연결
- 브레드 보드
회로도
코드 및 설명
자동 LED 조광기에 대한 전체 Arduino 코드 는 끝에 제공됩니다.
아래 코드에서는 코드에 사용할 PWM 핀과 변수를 정의하고 있습니다.
int pwmPin = 2; // 12 번 핀을 변수 pwm에 할당합니다. int LDR = A0; // 아날로그 입력 A0을 변수 pot에 할당 int c1 = 0; // 변수 c1 선언 int c2 = 0; // 변수 c2 선언
이제 루프에서 먼저 "analogRead (LDR)" 명령을 사용하여 값을 읽은 다음 아날로그 입력을 "value" 라는 변수에 저장합니다. 수학적 계산을 수행하여 PWM 신호를 생성합니다. 여기서는 아날로그 값이 500 미만인 경우에만 PWM을 사용하여 빛의 강도를 제어하고 500 이상이면 전등을 끕니다.
int 값 = analogRead (LDR); Serial.println (값); c1 = 값; c2 = 500-c1; // 1000에서 c2를 뺍니다. ans는 결과를 c1에 저장합니다. if (value <500) { digitalWrite (pwmPin, HIGH); delayMicroseconds (c2); digitalWrite (pwmPin, LOW); delayMicroseconds (c1); } if (값> 500) { digitalWrite (2, LOW); } }
여기에서 Arduino의 PWM에 대해 자세히 알아볼 수 있습니다.
조명 강도를 자동으로 제어하는 방법:
회로도에 따라 LDR 및 100k 저항을 사용하여 전압 분배기 회로를 만들었습니다. 전압 분배기 출력은 Arduino의 아날로그 핀으로 공급됩니다. 아날로그 핀은 전압을 감지하고 Arduino에 아날로그 값을 제공합니다. 아날로그 값은 LDR의 저항에 따라 변합니다. 따라서 LDR이 어두우면 저항이 증가하여 전압 값 (아날로그 값)이 감소합니다. 따라서 아날로그 값은 PWM 출력 또는 듀티 사이클을 변경하며 듀티 사이클은 전원 LED의 빛의 강도에 더 비례합니다. 따라서 LDR 위의 빛은 자동으로 전원 LED의 강도를 제어합니다. 아래는 이것이 작동하는 순서도입니다. 위쪽 화살표 기호는 "증가"를 나타내고 아래쪽 화살표 기호는 "감소"를 나타냅니다.
빛의 강도 (LDR) ↓-저항 ↑-아날로그 핀의 전압 ↓-듀티 사이클 (PWM) ↑- 전원 LED의 밝기 ↑
외부가 완전히 밝아지면 (아날로그 값이 500 이상 증가 할 때) 전원 LED가 꺼집니다.
이것이 LDR을 사용하여 자동으로 빛의 강도를 제어하는 방법 입니다.
여기에서 모든 LDR 관련 회로를 확인하십시오.