페이지

2025년 12월 14일 일요일

2.3.2. LED 서서히 밝게 하기

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 digitalWrite() 함수로 LED를 '켜고 끄는' 법을 배웠죠? 마치 방의 전등 스위치를 딸깍! 하고 켜고 끄는 것처럼요. 오늘은 여기서 한 단계 더 나아가, 전등의 밝기를 스르륵- 조절하는 '디머(Dimmer)' 스위치처럼 LED의 밝기를 내 마음대로 조절하는 법을 배워볼 거예요.

이 기술은 단순히 불빛을 조절하는 것 이상으로 아주 중요해요. 예를 들어, 3색 LED로 수만 가지 색을 만들거나 모터의 속도를 자유자재로 제어할 때 바로 이 '밝기 조절' 기술, 즉 PWM(Pulse Width Modulation)이 핵심적인 역할을 하거든요.

자, 그럼 아두이노와 함께 빛을 다루는 마법사, PWM의 세계로 떠나볼까요?

Slide 1: 02. LED 서서히 밝게 하기

오늘의 목표는 아주 명확해요. LED가 서서히 밝아지게 만드는 것!

단순히 켜고 끄는 것을 넘어, '조금만', '중간 정도로', '아주 밝게'처럼 빛의 세기를 단계별로 조절하는 방법을 익힐 거예요. 이 실습을 통해 아두이노의 아날로그 출력 기능을 확실하게 이해하게 될 겁니다. 준비되셨나요?

Slide 2: 회로 구성하기

가장 먼저 하드웨어를 준비하고 연결해야겠죠?

✅ 준비물

  • 아두이노 UNO
  • LED (아무 색이나 괜찮아요!)
  • 220Ω 저항
  • 브레드보드
  • 점퍼선

✅ 회로 구성

회로 연결은 아주 간단해요. 이미지의 회로도를 잘 따라 해보세요.

  1. LED의 긴 다리(+)저항을 거쳐 아두이노 9번 핀에 연결해요.
  2. LED의 짧은 다리(-)GND 핀에 연결해요.

여기서 가장 중요한 포인트가 있어요! 바로 9번 핀에 연결했다는 점이에요. 아두이노 보드를 자세히 보면 디지털 핀 번호 옆에 물결무늬(~) 표시가 있는 핀들이 있어요. (3, 5, 6, 9, 10, 11번 핀)

물결무늬(~)가 바로 PWM 기능, 즉 아날로그 출력이 가능한 핀이라는 표시랍니다! 밝기 조절은 오직 이 핀들에서만 가능하니 꼭 기억해주세요!

Slide 3: 코드 작성하기

이제 아두이노에게 "LED를 점점 밝게 만들어줘!"라고 명령할 코드를 작성해 볼게요.

CODE 2.7 | 서서히 밝아지는 LED 코드
01/*
02  CODE 2.7 | 서서히 밝아지는 LED 코드
03*/
04void setup() {
05  analogWrite(9, 0);    // 밝기 0 (완전 꺼짐)
06  delay(500);
07  analogWrite(9, 64);   // 밝기 64 (약 25%, 약하게 켜짐)
08  delay(500);
09  analogWrite(9, 128);  // 밝기 128 (약 50%, 중간 밝기)
10  delay(500);
11  analogWrite(9, 192);  // 밝기 192 (약 75%, 밝음)
12  delay(500);
13  analogWrite(9, 255);  // 밝기 255 (100%, 최대 밝기)
14  delay(500);
15}
16 
17void loop() {
18  // 이번 예제는 setup()에서 모든 동작이 끝나므로
19  // loop()는 비워둡니다.
20}

이 코드를 업로드하고 실행하면 어떤 일이 일어날까요?
LED가 처음엔 꺼져 있다가, 0.5초(500ms) 간격으로 '톡, 톡, 톡, 톡' 하고 4단계에 걸쳐 점점 밝아질 거예요. 마지막에는 가장 밝은 상태로 계속 켜져 있게 되죠.

코드를 보면 analogWrite()라는 새로운 함수가 등장했네요. 바로 이 함수가 오늘 배울 핵심 문법입니다!

Slide 4: 핵심 문법: analogWrite() 함수

digitalWrite()가 'ON/OFF' 스위치였다면, analogWrite()는 '볼륨 조절 다이얼'과 같아요. 전기의 세기를 부드럽게 조절해서 원하는 만큼만 내보낼 수 있게 해주는 아주 유용한 함수죠.

📝 형식

analogWrite(핀번호, 값);

  • 핀번호: 전기를 내보낼 핀 번호를 적어요. 반드시 물결무늬(~)가 있는 PWM 핀(3, 5, 6, 9, 10, 11번)만 사용해야 해요!
  • : 출력할 전기의 세기를 숫자로 적어요. 이 값은 0부터 255까지의 범위를 가져요.
    • 0: 전기를 전혀 보내지 않아요 (0V, 완전 꺼짐).
    • 127: 약 절반의 힘으로 전기를 보내요 (약 2.5V, 중간 밝기).
    • 255: 낼 수 있는 최대 힘으로 전기를 보내요 (5V, 최대 밝기).

우리가 작성한 코드는 바로 이 원리를 이용해 9번 핀에 보내는 전기 신호의 세기를 0 -> 64 -> 128 -> 192 -> 255 순서로 점점 강하게 만들었던 거랍니다.

Slide 5 & 6: [심화] 왜 최댓값은 100이 아니고 255일까요?

여기서 똑똑한 분들은 이런 질문을 할 수 있어요.
"멘토님, 왜 하필 100%나 10점 만점이 아니라 애매하게 255가 최댓값인가요?"

아주 좋은 질문이에요! 이 비밀을 풀려면 컴퓨터가 숫자를 세는 방식을 살짝 이해해야 해요.

1️⃣ 컴퓨터의 언어: 2진법과 비트(Bit)

우리는 손가락이 10개라 0부터 9까지의 숫자를 쓰는 10진법이 익숙하죠. 하지만 컴퓨터는 전기가 '흐르거나(ON)' '흐르지 않는(OFF)' 두 가지 상태밖에 몰라요. 그래서 1과 0만으로 모든 것을 표현하는 2진법을 사용한답니다.

이때 0 또는 1의 정보를 담는 가장 작은 단위를 비트(Bit)라고 해요.

2️⃣ 아두이노의 그릇: 8비트

아두이노 UNO는 PWM 신호를 만들 때, 0과 1을 담을 수 있는 상자(비트)를 총 8개 사용해요. 이걸 8비트 해상도라고 불러요.

자, 8개의 스위치(비트)가 있다면 총 몇 가지의 경우의 수를 만들 수 있을까요?
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 2⁸ = 256 가지의 상태를 표현할 수 있어요.
즉, 아두이노는 빛의 밝기를 총 256단계로 쪼개서 표현할 수 있는 능력을 가진 셈이죠!

3️⃣ 숫자는 0부터 시작!

"어? 256단계면 최댓값이 256이어야 하는 거 아닌가요?"
마지막 퍼즐 조각이에요! 컴퓨터는 우리와 달리 숫자를 셀 때 항상 0부터 시작해요.

256개의 계단이 있는데, 첫 번째 계단 번호가 '0번'이라면 마지막 꼭대기 계단은 몇 번일까요? 네, 바로 '255번'이 됩니다.

그래서 아두이노의 밝기 단계는...

  • 최솟값(완전 꺼짐): 0
  • 최댓값(최대 밝기): 255

...가 되는 것이랍니다! 이제 255의 비밀이 풀리셨나요? 😉

오늘은 LED의 밝기를 서서히 조절해보면서 아두이노의 아날로그 출력 기능과 analogWrite() 함수에 대해 깊이 있게 알아봤어요. 0부터 255까지의 숫자로 빛의 세기를 조절할 수 있다는 것, 그리고 왜 최댓값이 255인지도 이해하게 되셨을 거예요.

오늘 배운 PWM은 앞으로 정말 다양하게 활용될 거예요. 3색 LED를 조합해 영롱한 색을 만들거나, DC 모터의 회전 속도를 조절하고, 피에조 부저로 '도레미파솔라시도' 음계를 연주하는 등 무궁무진한 프로젝트의 기초가 된답니다.

여러분도 코드의 숫자들을 바꿔보면서 LED 밝기가 어떻게 변하는지 직접 실험해보세요! 궁금한 점이 있다면 언제든 댓글로 질문 남겨주시고요. 그럼 다음 시간에 더 재미있는 주제로 만나요! 👋

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.

댓글 없음:

댓글 쓰기