코드 검색

레슨 98-4: 아두이노를 사용한 LED 조명 페이딩: 밝기 제어

레슨 98-4: 아두이노를 사용한 LED 조명 페이딩: 밝기 제어

LED는 어디에나 있습니다 — 표시등, 디스플레이, 장식 조명 — 하지만 대부분의 초보자는 단순히 켜고 끄는 것에서 멈춥니다. 이 프로젝트는 다음 단계로 나아갑니다: Arduino의 내장 PWM(펄스 폭 변조) 기능을 사용하여 LED를 부드럽게 페이드 인 및 아웃하는 것입니다. 거친 깜빡임 대신, 자연스러운 디밍, 숨쉬는 효과, 그리고 순수 디지털 핀에서 아날로그 같은 제어를 모방하는 점진적인 밝기 상승과 하강을 얻을 수 있습니다. 결과를 즉시 볼 수 있기 때문에 가장 만족스러운 첫 프로젝트 중 하나이며, 동일한 기법이 실제 제품의 모터 속도 제어, 오디오 볼륨, 백라이트 디밍의 기초가 됩니다.

LED-5mm-green

페이딩을 이해하고 나면 다양한 실용적인 제작에 적용할 수 있습니다:

  • 깜빡여서 주의를 분산시키는 대신 부드럽게 맥동하는 기기의 "숨쉬는" 상태 표시등 만들기
  • 주변 광량이나 시간대에 따라 LED 야간 조명을 자동으로 디밍하기
  • LCD 또는 OLED 디스플레이의 백라이트 밝기 제어하기
  • 밝기 수준 사이를 부드럽게 전환하는 분위기 조명 또는 장식 램프 만들기
  • 자연스럽게 깨어나도록 점진적으로 밝아지는 느린 일출 알람 시계 시뮬레이션하기
  • 소형 DC 모터나 팬에 속도 제어 추가하기 (동일한 PWM 원리가 적용됨)

이 튜토리얼은 Robojax Arduino 단계별 과정의 일부이며, 특히 10개 중 프로젝트 4를 다룹니다: Arduino를 사용하여 LED 조명 페이딩하기. 전체 프로그램은 기사 아래에서 다운로드할 수 있습니다.

하드웨어 및 부품

330_ohm_resistor
330 ohm 0.25 watt resistor

이 프로젝트의 부품 목록은 최소한입니다 — 이전에 Arduino 작업을 해본 적이 있다면 필요한 모든 것을 이미 가지고 있을 가능성이 높습니다:

  • 1× Arduino 보드 (Uno, Nano, Mega 또는 호환 보드)
  • 1× LED (5mm 또는 3mm, 색상 무관)
  • 1× 저항 (200Ω ~ 1000Ω — 300Ω ~ 1kΩ 범위가 잘 작동함)
  • 브레드보드 및 듀폰 점퍼 와이어
  • 프로그래밍 및 전원용 USB 케이블

LED에 관한 중요한 참고 사항: 긴 다리가 양극(애노드)이고, 짧은 다리 — 또는 플라스틱 케이스에 평평한 가장자리가 있는 쪽 — 가 음극(캐소드)입니다. 이것을 거꾸로 하면 LED가 단순히 켜지지 않으므로 전원을 켜기 전에 다시 확인하세요.

저항 값의 경우, 스크립트는 (영상 03:49 부분)에서 계산 과정을 설명합니다: 일반적인 LED는 약 2V를 떨어뜨리고 약 10mA의 전류가 필요합니다. 5V 공급에서 나머지 3V는 저항 양단에 걸려야 하므로 R = V/I = 3V / 0.01A = 300Ω입니다. 실제로는 300Ω에서 1000Ω 사이의 어떤 값이든 작동합니다 — 높은 값은 더 어두운 LED를 만들 뿐입니다. 페이딩의 경우 어차피 밝기를 변화시키므로 이는 실제로 문제가 되지 않습니다.

배선 가이드

Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw

배선은 가능한 한 간단합니다. LED의 양극은 저항을 통해 Arduino의 PWM 지원 핀에 연결됩니다 — 이 프로젝트에서는 핀 3입니다. 음극은 접지에 연결됩니다.

왜 특별히 핀 3일까요? 모든 Arduino 핀이 PWM을 지원하는 것은 아니기 때문입니다. 대부분의 Arduino 보드에서 PWM 지원 핀은 물결표 기호(~)로 표시됩니다 — 일반적으로 Uno의 핀 3, 5, 6, 9, 10, 11입니다. PWM이 아닌 핀을 사용하면 analogWrite()가 가변 출력을 생성하지 않으며, LED는 그냥 켜지거나 꺼질 뿐입니다.

회로를 다음과 같이 연결하세요:

  1. LED를 브레드보드에 삽입하고, 어느 다리가 양극(긴 쪽)이고 어느 것이 음극(짧은 쪽/평평한 면)인지 확인합니다.
  2. LED의 양극을 저항을 통해 Arduino 핀 3에 연결합니다.
  3. LED의 음극을 Arduino의 GND 핀에 연결합니다.
  4. USB를 통해 Arduino를 컴퓨터에 연결합니다.

코드 설명

이 프로젝트의 스케치는 몇 가지 수정을 거친 고전적인 Arduino "Fade" 예제를 기반으로 합니다. 모든 줄을 설명하기보다는, 자신만의 실험을 위해 조정하고 싶을 부분에 집중하겠습니다.

사용자 구성 변수

코드 상단에서 세 개의 변수가 전체 동작을 제어합니다:

int led = 3;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 3;    // how many points to fade the LED by
  • led — LED가 연결된 핀을 정의합니다. 기본값은 3번 핀이지만, PWM을 지원하는 핀(보드에서 ~로 표시된 핀)으로 변경할 수 있습니다. LED를 다른 핀으로 옮긴 경우 이 값을 그에 맞게 업데이트하세요.
  • brightness — 현재 밝기 수준으로, 0(꺼짐)부터 255(최대 밝기)까지입니다. 코드에서는 0에서 시작하지만, 해당 범위 내 어디에서든 시작할 수 있습니다.
  • fadeAmount — 가장 흥미롭게 가지고 놀 수 있는 값입니다. 각 주기마다 몇 개의 밝기 "단계"를 이동할지 제어합니다. 3과 같은 작은 값은 느리고 점진적인 페이드를 만들어냅니다. 20과 같은 큰 값은 LED가 매우 빠르게 페이드 인/아웃되도록 합니다. 이는 동영상에서 (동영상 22:37 지점) 시연됩니다 — 5에서 20으로 변경하면 효과 속도가 극적으로 빨라집니다.

페이딩의 작동 원리

페이딩의 핵심은 loop() 안의 두 줄에서 일어납니다:

analogWrite(led, brightness);
brightness = brightness + fadeAmount;

루프를 한 번 통과할 때마다 현재 밝기 값이 analogWrite()를 사용해 LED에 기록되고, 그런 다음 밝기가 fadeAmount만큼 증가합니다. analogWrite() 함수는 PWM을 사용해 아날로그 전압을 시뮬레이션합니다 — 핀을 빠르게 켜고 끄며, 켜진 시간과 꺼진 시간의 비율이 인지되는 밝기를 결정합니다.

밝기가 0 또는 255에 도달하면, 코드는 fadeAmount의 부호를 뒤집어 방향을 반전시킵니다:

if (brightness <= 0 || brightness >= 255) {
  fadeAmount = -fadeAmount;
}

이것이 LED가 페이드 인한 다음 페이드 아웃하고, 다시 페이드 인하게 만드는 원리입니다 — 연속적인 호흡 주기입니다. 루프 끝의 delay(30)은 애니메이션의 전체 속도를 제어합니다. 지연이 짧을수록 페이드가 빨라지고, 지연이 길수록 느려집니다.

값을 가지고 실험하기

두 개의 변수가 시각적 효과를 가장 많이 제어할 수 있게 해줍니다:

  • fadeAmount를 늘리면 더 빠르고 극적인 페이드가 됩니다. 10이나 20을 시도해 보세요.
  • fadeAmount를 줄이면 느리고 부드러운 호흡 효과가 됩니다. 1이나 2를 시도해 보세요.
  • delay() 값을 조정하면 속도를 바꿀 수 있습니다. 지연이 작을수록 전체 주기가 빨라지고, 클수록 늘어납니다.

작은 fadeAmount와 짧은 지연을 결합하면 매우 부드럽고 거의 유기적인 페이드가 만들어집니다 — 분위기 조명에 좋습니다. 큰 fadeAmount와 짧은 지연은 빠른 펄스 효과를 만듭니다.

실시간 프로젝트 시연

코드를 업로드하면 LED가 꺼진 상태에서 최대 밝기까지 천천히 밝아졌다가 다시 어두워지기를 무한히 반복하는 것을 볼 수 있습니다. 동영상은 (동영상 22:25 지점)에서 기본 동작을 보여줍니다 — 부드럽고 적당한 속도의 페이드입니다.

fadeAmount를 20으로 변경하면 LED가 매우 빠르게 페이드 인/아웃됩니다 — 거의 깜빡임처럼 보입니다. 3으로 설정하면 페이드가 눈에 띄게 더 오래 걸려 편안하고 점진적인 전환이 만들어집니다. 이는 동영상 (동영상 23:02 지점)에서 명확히 시연됩니다.

이 프로젝트의 아름다움은 코드 변경의 효과를 즉시 볼 수 있다는 점입니다 — 배선 변경은 필요 없고, 변수만 편집하고 다시 업로드하면 됩니다. 이러한 빠른 피드백 루프 덕분에 PWM과 타이밍이 어떻게 상호작용하는지 직관을 쌓기에 훌륭한 방법입니다.

연속 실행 대신 푸시 버튼으로 페이드를 트리거하는 방식으로 더 나아가고 싶다면, 별도의 튜토리얼에서 다룹니다 — 아래 관련 프로젝트 섹션을 참조하세요.

이 동영상의 관련 프로젝트

챕터

  • [00:00] 10가지 Arduino LED 프로젝트 개요
  • [01:22] 과정 및 필요한 부품 소개
  • [02:29] LED 이해하기: 기호, 극성, 종류
  • [03:49] 옴의 법칙을 사용한 LED 저항값 계산
  • [05:53] 프로젝트 1: LED 켜고 끄기
  • [12:43] 프로젝트 2: 푸시 버튼으로 LED 제어하기
  • [17:13] 프로젝트 3: 푸시 버튼으로 LED 토글하기
  • [20:12] 프로젝트 4: LED 페이딩 — 코드 해설
  • [22:25] 페이딩 시연 및 페이드 속도 조정
  • [23:20] 프로젝트 5: 푸시 버튼 트리거로 LED 페이딩
  • [27:32] 프로젝트 6: 시소 LED 효과
  • [30:47] 프로젝트 7: 5개의 LED로 워킹 라이트
  • [36:41] 프로젝트 8: 푸시 버튼으로 제어하는 워킹 라이트
  • [42:25] 프로젝트 9: 포텐셔미터를 사용한 LED 전압 레벨 미터
  • [49:25] 프로젝트 10: Arduino 신호등

이미지

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
언어: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

파일📁

아두이노 라이브러리 (zip)

사용자 매뉴얼