코드 검색

Lesson 98-5: 아두이노를 사용하여 버튼을 눌렀을 때 조명 페이드

Lesson 98-5: 아두이노를 사용하여 버튼을 눌렀을 때 조명 페이드

이번 레슨에서는 명령에 따라 서서히 꺼지는 조명을 만들어 봅니다. 푸시 버튼을 누르면 LED가 최대 밝기로 켜지고, 그다음 부드럽게 어두워지면서 꺼집니다. 이것은 Arduino에서 가장 유용한 초보자 패턴 중 하나인데, 디지털 입력(버튼)과 PWM 아날로그 출력(LED 밝기)을 결합하고, 단순히 무언가를 켜고 끄는 것이 아니라 변화의 속도부드러움을 제어하는 방법을 가르쳐 주기 때문입니다.

LED with resistor on breadboard connected to Arduino with a push button
푸시 버튼이 있는 Arduino에 연결된 브레드보드 위의 저항이 달린 LED

요청 시 페이드되는 기능은 실제 제품 곳곳에서 나타납니다. 여기서 배운 내용을 활용할 수 있는 몇 가지 실용적인 방법은 다음과 같습니다:

  • 부드러운 소등 표시등 — 램프가 갑자기 꺼지는 대신 버튼을 누르면 부드럽게 어두워지므로 가전제품과 3D 프린팅 케이스에서 훨씬 세련되어 보입니다.
  • 슬립 / 대기 모드 — 버튼을 누르면 밝은 상태 LED가 검게 사라져 밤에 방해되지 않으면서도 회로는 계속 전원이 공급됩니다.
  • "페이드 투 블랙" 무대 또는 모형 조명 — 버튼 하나로 LED 스트립이나 패널이 갑자기 꺼지는 대신 부드럽게 어두워집니다.
  • 배터리 절약 피드백 — 순간 버튼 누름으로 밝은 확인 섬광이 나타났다가 사라지므로 LED는 짧은 시간 동안만 최대로 켜집니다.
  • 인터랙티브 아트와 소품 — 터치로 작동하는 "숨을 내쉬는" 효과로, 코스프레, 디오라마, 박물관 전시에 이상적입니다.

핵심 아이디어는 간단합니다. 버튼이 Arduino에게 "지금 페이드를 시작하라"고 알려주면, Arduino는 LED 밝기를 255(최대)에서 0(꺼짐)까지 작은 단계로 낮춥니다. 단계가 작고 빠르게 진행되기 때문에 눈에는 갑자기 바뀌는 것이 아니라 부드러운 페이드로 보입니다.

LED를 한 번도 페이드해 본 적이 없다면, 기본이 되는 밝기 제어는 레슨 98-4: Arduino를 사용한 LED 조명 페이드: 밝기 제어에서 다룹니다. 이번 레슨은 그 기초 위에 푸시 버튼을 트리거로 추가하여 바로 이어집니다.

하드웨어 및 부품

330_ohm_resistor
330옴 저항

이것은 매우 저렴한 구성입니다. 여기 있는 모든 것은 표준 스타터 키트 재료입니다:

  • Arduino 보드 (Uno, Nano, Mega 또는 호환 보드)
  • LED 1개 (5 mm 또는 3 mm, 색상 무관)
  • 푸시 버튼 스위치 1개 (순간식, 4핀 택타일 타입이 잘 맞습니다)
  • LED용 저항 1개 — 200 Ω에서 1000 Ω 사이면 충분합니다 (고전적인 220 Ω 또는 330 Ω가 완벽합니다)
  • 브레드보드와 듀폰 점퍼 와이어
  • 프로그래밍용 USB 케이블 (그리고 전원선 없이 동작시키려면 배터리 또는 5 V 어댑터)

LED 저항에 대한 짧은 설명: LED는 양단에 약 2 V가 걸리고 약 10 mA의 전류가 필요합니다. 5 V 전원에서는 저항이 나머지 3 V를 떨어뜨려야 하므로 옴의 법칙에 따라 약 300 Ω가 됩니다. 300 Ω에서 1000 Ω 사이면 모두 작동합니다. 값이 높을수록 LED는 더 어두워질 뿐입니다. 저항 사용은 선택 사항이 아닙니다. 저항이 없으면 LED가 너무 많은 전류를 끌어와 타버립니다.

배선 가이드

Arduino schematic for LED with a push button switch
푸시 버튼 스위치가 있는 LED용 Arduino 회로도
Arduino wiring for LED with a push button switch
푸시 버튼 스위치가 있는 LED용 Arduino 배선

배선은 의도적으로 최소한입니다. LED의 애노드(더 긴 다리)는 저항을 통해 디지털 핀 3에 연결되고, 캐소드(더 짧은 다리, 패키지의 평평한 면)는 접지로 갑니다. 푸시 버튼은 디지털 핀 2와 접지 사이에 연결됩니다. 코드에서 Arduino의 내부 풀업을 활성화하므로 외부 풀업 저항은 필요하지 않습니다.

LED 극성에 주의하세요. 플라스틱 본체의 평평한 면과 더 짧은 다리가 캐소드(음극)를 나타냅니다. 거꾸로 꽂으면 LED가 단순히 켜지지 않습니다. 손상은 없으니 그냥 뒤집으면 됩니다.

푸시 버튼의 경우 4핀 택타일 스위치를 사용한다면 핀이 내부적으로 짝을 이루고 있다는 점을 기억하세요. 네 개의 핀 중 두 개는 항상 서로 연결되어 있습니다. 연속성 모드의 멀티미터를 사용해 눌렀을 때 삑 소리가 나는 한 쌍을 찾은 다음, 각 면에서 핀 하나씩 사용하세요. 한쪽은 핀 2로, 다른 쪽은 접지로 갑니다.

코드 설명

스케치는 짧고, 바꾸고 싶을 만한 거의 모든 것은 맨 위의 몇 줄에 있습니다. 다음은 사용자가 구성할 수 있는 부분입니다:

const int pushButtonPin = 2;//푸시 버튼 스위치가 연결된 핀
const int LEDPin = 3;//LED가 연결된 핀
const int fadeAmount = 10;    // LED를 페이드할 포인트 수
const int fadeSpeed = 5;//페이드 시간(밀리초). 값이 작을수록 페이드가 빨라짐

pushButtonPinLEDPin은 단순히 버튼과 LED를 어느 핀에 연결했는지 아두이노에 알려줍니다. 버튼을 4번 핀으로 옮기거나 LED를 9번 핀(PWM 지원 핀)으로 옮긴다면, 이 두 숫자를 배선에 맞게 변경하면 됩니다. LED 핀은 반드시 PWM을 지원해야 합니다 — Uno에서는 3, 5, 6, 9, 10, 11번 핀을 의미합니다 — 페이딩에는 analogWrite()가 필요하기 때문입니다.

fadeAmount는 각 밝기 단계의 크기를 제어합니다. 밝기는 0에서 255까지이며, fadeAmount가 10이면 LED가 약 25단계로 어두워진다는 뜻입니다. 숫자가 클수록 페이드가 거칠고 빨라지며, 작을수록 부드럽고 느려집니다.

fadeSpeed는 각 단계 사이의 지연 시간(밀리초)입니다. 이것이 효과가 느껴지는 방식에 가장 중요한 단일 변수입니다. 5 ms 값은 빠르고 경쾌한 페이드를 제공하고, 30 ms 이상은 느리고 여유로운 디밍을 제공합니다. fadeAmount와 결합하면 이 두 값으로 원하는 정확한 느낌으로 페이드를 조정할 수 있습니다.

알아둘 만한 내부 변수도 있습니다:

int brightness = 255;    // LED의 밝기
int pushButtonStatus = 0; // 2번 핀에서 읽은 푸시 값

brightness는 255에서 시작합니다. 즉, 버튼을 누를 때마다 LED가 최대 밝기에서 시작합니다. 페이드가 더 어두운 지점 — 예를 들어 절반 밝기 — 에서 시작하길 원한다면 이 값을 128로 변경하세요.

로직 자체는 이렇게 동작합니다: 루프가 버튼을 읽습니다. 버튼이 눌리면(내부 풀업 때문에 LOW), brightness가 0보다 큰 동안 while 루프가 실행됩니다. 그 루프 안에서 아두이노는 현재 밝기를 LED에 출력하고, fadeAmount를 빼고, fadeSpeed 밀리초를 기다린 후 반복합니다. 버튼이 눌리지 않으면 LED는 단순히 0으로 출력되어 꺼진 상태를 유지합니다.

중요한 세부 사항 하나: 내부 풀업은 버튼이 눌리지 않았을 때 핀이 HIGH를 읽고, 눌렸을 때 LOW를 읽는다는 뜻입니다. 그래서 코드가 누름을 감지하기 위해 LOW를 확인합니다. 만약 외부 풀다운 저항으로 바꾼다면, 그 비교를 HIGH로 변경해야 합니다.

실시간 프로젝트 및 데모

업로드하면 동작이 즉시 나타나고 만족스럽습니다. 버튼을 누르면 LED가 최대 밝기로 점프한 다음, 사용자가 제어하는 기간 동안 눈에 띄게 어두워지며 꺼집니다. 버튼을 놓으면 LED가 꺼지고, 다시 누르면 최대 밝기에서 페이드가 다시 시작됩니다.

영상에서는 여러 설정에서 페이드를 시연하므로 차이를 듣고 볼 수 있습니다. fadeAmount = 20이면 페이드가 빠르고 뚝뚝 끊기며 — 몇 번의 눈에 보이는 단계로 0에 도달합니다. fadeAmount = 10으로 낮추면 훨씬 부드러워지고, fadeAmount = 3으로 가면 페이드가 눈에 띄게 더 오래 걸리고 거의 연속적으로 보입니다. fadeSpeed 값도 똑같이 극적인 영향을 줍니다: 1 ms로 설정하면 페이드가 거의 즉각적이고, 더 큰 값은 늘어집니다.

이 실험을 해보세요: fadeAmount = 5fadeSpeed = 30으로 설정하세요. 잠드는 빛처럼 느리고 부드러운 디밍을 얻을 수 있습니다. 그런 다음 fadeAmount = 50fadeSpeed = 1로 설정하면 강하고 빠른 컷이 됩니다. 어느 쪽도 "틀린" 것이 아닙니다 — 전적으로 원하는 분위기에 관한 것입니다.

같은 버튼의 토글 동작은 Lesson 98-3: How to Turn On/Off a Toggle LED Using a Push Button with Arduino에서 별도로 다루며, 더 간단한 누르면 켜지는 버전은 Lesson 98-2: How to Turn On and Off an LED Using a Push Button with Arduino에 있습니다.

페이드가 순간 접점에 의해 트리거되므로, 이 동일한 회로는 LED 대신 릴레이나 MOSFET을 구동하는 데 자연스럽게 적합합니다 — 12 V 램프, 모터의 소프트 스타트, 또는 발열체의 예열을 페이드할 수 있습니다. 버튼은 단지 트리거일 뿐이며, 무엇을 페이드할지는 여러분에게 달려 있습니다.

이 영상의 관련 프로젝트

챕터

  • [00:00] 10가지 LED 프로젝트 개요
  • [01:00] 아두이노 단계별 과정 소개
  • [02:29] LED 기초: 기호, 극성 및 전류
  • [03:49] 옴의 법칙으로 LED 저항 계산하기
  • [05:53] 프로젝트 1: LED 켜고 끄기
  • [12:43] 프로젝트 2: 푸시 버튼으로 LED 제어하기
  • [17:13] 프로젝트 3: 푸시 버튼으로 LED 토글하기
  • [20:12] 프로젝트 4: LED 페이딩
  • [23:20] 프로젝트 5: 푸시 버튼으로 LED 페이딩하기
  • [27:32] 프로젝트 6: 시소 LED
  • [30:47] 프로젝트 7: 워킹 라이트
  • [36:41] 프로젝트 8: 푸시 버튼으로 워킹 라이트 제어하기
  • [42:25] 프로젝트 9: LED 전압 레벨 미터
  • [49:25] 프로젝트 10: 아두이노 신호등

이미지

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
푸시 버튼이 있는 Arduino에 연결된 브레드보드 위의 저항이 있는 LED
푸시 버튼이 있는 Arduino에 연결된 브레드보드 위의 저항이 있는 LED
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
언어: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

파일📁

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

사용자 매뉴얼