레슨 98-4: 아두이노를 사용한 LED 조명 페이딩: 밝기 제어
LED는 어디에나 있습니다 — 표시등, 디스플레이, 장식 조명 — 하지만 대부분의 초보자는 단순히 켜고 끄는 것에서 멈춥니다. 이 프로젝트는 다음 단계로 나아갑니다: Arduino의 내장 PWM(펄스 폭 변조) 기능을 사용하여 LED를 부드럽게 페이드 인 및 아웃하는 것입니다. 거친 깜빡임 대신, 자연스러운 디밍, 숨쉬는 효과, 그리고 순수 디지털 핀에서 아날로그 같은 제어를 모방하는 점진적인 밝기 상승과 하강을 얻을 수 있습니다. 결과를 즉시 볼 수 있기 때문에 가장 만족스러운 첫 프로젝트 중 하나이며, 동일한 기법이 실제 제품의 모터 속도 제어, 오디오 볼륨, 백라이트 디밍의 기초가 됩니다.
페이딩을 이해하고 나면 다양한 실용적인 제작에 적용할 수 있습니다:
- 깜빡여서 주의를 분산시키는 대신 부드럽게 맥동하는 기기의 "숨쉬는" 상태 표시등 만들기
- 주변 광량이나 시간대에 따라 LED 야간 조명을 자동으로 디밍하기
- LCD 또는 OLED 디스플레이의 백라이트 밝기 제어하기
- 밝기 수준 사이를 부드럽게 전환하는 분위기 조명 또는 장식 램프 만들기
- 자연스럽게 깨어나도록 점진적으로 밝아지는 느린 일출 알람 시계 시뮬레이션하기
- 소형 DC 모터나 팬에 속도 제어 추가하기 (동일한 PWM 원리가 적용됨)
이 튜토리얼은 Robojax Arduino 단계별 과정의 일부이며, 특히 10개 중 프로젝트 4를 다룹니다: Arduino를 사용하여 LED 조명 페이딩하기. 전체 프로그램은 기사 아래에서 다운로드할 수 있습니다.
하드웨어 및 부품
이 프로젝트의 부품 목록은 최소한입니다 — 이전에 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를 만들 뿐입니다. 페이딩의 경우 어차피 밝기를 변화시키므로 이는 실제로 문제가 되지 않습니다.
배선 가이드
배선은 가능한 한 간단합니다. LED의 양극은 저항을 통해 Arduino의 PWM 지원 핀에 연결됩니다 — 이 프로젝트에서는 핀 3입니다. 음극은 접지에 연결됩니다.
왜 특별히 핀 3일까요? 모든 Arduino 핀이 PWM을 지원하는 것은 아니기 때문입니다. 대부분의 Arduino 보드에서 PWM 지원 핀은 물결표 기호(~)로 표시됩니다 — 일반적으로 Uno의 핀 3, 5, 6, 9, 10, 11입니다. PWM이 아닌 핀을 사용하면 analogWrite()가 가변 출력을 생성하지 않으며, LED는 그냥 켜지거나 꺼질 뿐입니다.
회로를 다음과 같이 연결하세요:
- LED를 브레드보드에 삽입하고, 어느 다리가 양극(긴 쪽)이고 어느 것이 음극(짧은 쪽/평평한 면)인지 확인합니다.
- LED의 양극을 저항을 통해 Arduino 핀 3에 연결합니다.
- LED의 음극을 Arduino의 GND 핀에 연결합니다.
- 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 byled— 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과 타이밍이 어떻게 상호작용하는지 직관을 쌓기에 훌륭한 방법입니다.
연속 실행 대신 푸시 버튼으로 페이드를 트리거하는 방식으로 더 나아가고 싶다면, 별도의 튜토리얼에서 다룹니다 — 아래 관련 프로젝트 섹션을 참조하세요.
이 동영상의 관련 프로젝트
- Lesson 98-1: How to Turn On and Off an LED with Arduino
- Lesson 98-2: How to Turn On and Off an LED Using a Push Button with Arduino
- Lesson 98-3: How to Turn On/Off a Toggle LED Using a Push Button with Arduino
- Lesson 98-5: Fade Light When a Button Is Pressed Using Arduino
- Lesson 98-6: Seesaw LED Game with Arduino
- Lesson 98-7: Walking Light Using Arduino and 5 LEDs
- Lesson 98-8: Walking Light with Push Button and LEDs with Arduino
- Lesson 98-9: LED Voltage Level Meter Using Arduino or walking light with potentiometer
- Lesson 98-10: Arduino Traffic Light
챕터
- [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 신호등
This code has not been parsed yet. Please return to the admin panel to parse it.
필요할 수 있는 것들
-
아마존SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
아마존
-
아마존
자원 및 참고자료
-
문서화Documentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
파일📁
아두이노 라이브러리 (zip)
-
SunFounder 3-in-1 스마트 카 학습 키트 소스 코드
3in1-kit-main-v2.zip12.80 MB
사용자 매뉴얼
-
SunFounder 3-in-1 Arduino 스마트 카 조립 설명서이 문서는 SunFounder 3-in-1 Arduino 스마트 카의 단계별 조립을 보여줍니다.
SunFounder_car_assembly_manual.pdf1.20 MB