🔆 빛을 켜다 - LED 제어의 기초¶
"컴퓨터가 세상과 대화하는 첫 번째 방법: 불을 켜고 끄기"
🎯 이 장에서 배우는 것¶
- 디지털 출력(HIGH/LOW)의 개념을 이해하고 LED를 켜고 끌 수 있다
-
time모듈을 사용해 LED 깜빡임을 구현할 수 있다 - 반복문(
while)을 활용해 LED가 계속 깜빡이게 만들 수 있다 - 다양한 깜빡임 패턴(SOS, 심장 박동 등)을 직접 설계할 수 있다
💡 왜 이걸 배우나요?¶
LED를 켜는 건 피지컬 컴퓨팅의 "Hello World"야.
프로그래밍을 처음 배울 때 화면에 "Hello World"를 출력하잖아? 피지컬 컴퓨팅에서는 LED를 켜는 것이 그 첫 번째 단계야. 왜냐하면:
┌─────────────────────────────────────────────────────────────┐
│ │
│ 코드 작성 → Pico에 전송 → LED가 켜짐! │
│ │
│ 내가 쓴 코드가 "진짜 세상"에 영향을 미치는 순간 🎉 │
│ │
└─────────────────────────────────────────────────────────────┘
생각해봐: - 🚦 신호등은 LED의 확장판이야 - 📱 스마트폰 알림 불빛도 LED - 🎄 크리스마스 트리 조명도 LED - 🚗 자동차 계기판 표시등도 LED
LED 하나를 제어할 수 있으면, 이 모든 것의 기본 원리를 이해한 거야!
📚 핵심 개념¶
개념 1: 디지털 출력 (Digital Output)¶
비유로 시작 🔦
디지털 출력은 마치 방의 전등 스위치와 같아.
스위치 ON (올림) 스위치 OFF (내림)
┌───────────┐ ┌───────────┐
│ 💡 ON │ │ 💡 OFF │
│ │ │ │
│ [===] │ │ [===] │
│ ↑ │ │ ↓ │
│ 올림 │ │ 내림 │
└───────────┘ └───────────┘
스위치는 딱 두 가지 상태만 있어: 올림(ON) 또는 내림(OFF). 중간은 없어!
정확한 정의 📖
디지털 출력은 Pico가 핀을 통해 전기 신호를 내보내는 것이야: - HIGH (1): 3.3V 전압 출력 → LED 켜짐 - LOW (0): 0V 전압 출력 → LED 꺼짐
Pico 핀 상태
HIGH (1) ─────────────────── 3.3V ═══ LED 켜짐 💡
LOW (0) ─────────────────── 0V ═══ LED 꺼짐 ○
예시로 확인 ✅
쉽게 말하면: LED에 전기를 보내면(HIGH) 켜지고, 안 보내면(LOW) 꺼져!
개념 2: GPIO 핀 (General Purpose Input/Output)¶
비유로 시작 🔌
GPIO 핀은 Pico의 손가락이야. 이 손가락들로 외부 세계와 소통하지.
┌──────────────────────────────────────┐
│ Raspberry Pi Pico │
│ ┌──────────────────────────────┐ │
│ │ [USB 포트] │ │
│ └──────────────────────────────┘ │
│ │
│ ● ● ● ● ● ● ● ● ● ● ● │ ← GPIO 핀들
│ 0 1 2 3 4 5 6 7 8 9 10 │ (숫자 = 핀 번호)
│ │
│ ● ● ● ● ● ● ● ● ● ● ● │
│ ... │
└──────────────────────────────────────┘
정확한 정의 📖
GPIO(General Purpose Input/Output)는 "다목적 입출력"이라는 뜻이야: - 각 핀에는 번호가 있어 (GP0, GP1, GP2...) - 같은 핀을 출력(LED 제어)으로도, 입력(버튼 읽기)으로도 쓸 수 있어 - Grove Shield를 사용하면 더 쉽게 연결할 수 있어
예시로 확인 ✅
쉽게 말하면: GPIO 핀은 Pico가 바깥 세상과 전기 신호를 주고받는 통로야!
개념 3: time 모듈과 sleep()¶
비유로 시작 ⏰
time.sleep()은 "잠깐 기다려!" 명령이야.
정확한 정의 📖
import time # time 모듈 불러오기
time.sleep(1) # 1초 대기
time.sleep(0.5) # 0.5초(500ms) 대기
time.sleep(0.1) # 0.1초(100ms) 대기
예시로 확인 ✅
쉽게 말하면: sleep(초)는 프로그램을 그 시간만큼 멈추게 해!
🔨 따라하기¶
Step 1: LED 켜기 - 첫 번째 불빛¶
목표: LED를 켜서 내 코드가 실제로 작동하는 걸 확인하자!
하드웨어 연결:
┌──────────────────────────────────────────────────────────┐
│ Grove Shield for Pico │
│ │
│ ┌─────────┐ │
│ │ LED │ ←── Grove 케이블 ──→ D16 포트 │
│ │ (빨강) │ │
│ └─────────┘ │
│ │
│ 💡 Grove LED 모듈을 D16 포트에 연결해! │
│ (케이블 방향 맞추기 - 검정선이 GND 쪽) │
│ │
└──────────────────────────────────────────────────────────┘
코드:
# === WHAT: LED 켜기 - 피지컬 컴퓨팅의 Hello World ===
# 가장 기본적인 출력: LED를 켜는 코드
# --- WHY: 왜 이 코드들이 필요한지 ---
# machine 모듈: Pico의 하드웨어(핀)를 제어하기 위해
# Pin 클래스: GPIO 핀을 설정하고 제어하기 위해
# HOW: 한 줄씩 따라가보자
from machine import Pin # machine 모듈에서 Pin 클래스 가져오기
# Pin(16, Pin.OUT) 의미:
# - 16: GPIO 16번 핀 사용 (Grove D16 포트)
# - Pin.OUT: 출력 모드로 설정 (전기를 내보냄)
led = Pin(16, Pin.OUT)
# LED 켜기
# value(1) = HIGH = 3.3V 전압 출력 = LED ON!
led.value(1)
print("LED가 켜졌어! 🔆")
실행 결과:
그리고 LED가 실제로 켜진다! 💡🤔 여기서 잠깐!
코드를 실행했는데 LED가 안 켜진다면? 1. Grove 케이블이 D16 포트에 꽂혀 있는지 확인 2. 케이블이 끝까지 들어갔는지 확인 3. LED 모듈의 전원 LED(작은 거)가 켜져 있는지 확인
Step 2: LED 끄기 - 불 끄기¶
목표: LED를 껐다가 다시 켜보자
코드:
# === WHAT: LED 껐다 켜기 ===
# value(0)으로 끄고, value(1)으로 켜기
from machine import Pin
led = Pin(16, Pin.OUT)
# LED 켜기
led.value(1)
print("LED 켜짐 💡")
# 잠깐 기다리기 (이게 없으면 너무 빨라서 변화를 못 봐!)
import time
time.sleep(2) # 2초 대기
# LED 끄기
led.value(0)
print("LED 꺼짐 ○")
실행 결과:
💡 알아보기: value() vs on() / off()
LED를 제어하는 방법은 여러 가지가 있어:
# 방법 1: value() 사용 led.value(1) # 켜기 led.value(0) # 끄기 # 방법 2: on() / off() 사용 (더 직관적!) led.on() # 켜기 led.off() # 끄기 # 방법 3: toggle() - 현재 상태 반전 led.toggle() # 켜져있으면 끄고, 꺼져있으면 켜기세 방법 모두 똑같이 작동해. 편한 거 써!
Step 3: LED 깜빡이기 - 반복의 마법¶
목표: LED가 계속 깜빡이게 만들자!
핵심 개념: while True (무한 반복)
┌─────────────────────────────────────────────────────────────┐
│ │
│ while True: ← "True인 동안 반복해" = 영원히 반복! │
│ LED 켜기 │
│ 1초 기다리기 │
│ LED 끄기 ↺ 끝나면 다시 처음으로 │
│ 1초 기다리기 │
│ │
└─────────────────────────────────────────────────────────────┘
코드:
# === WHAT: LED 깜빡이기 (Blink) ===
# 피지컬 컴퓨팅의 "Hello World" - 가장 기본적인 예제!
from machine import Pin
import time
# LED 설정
led = Pin(16, Pin.OUT)
print("LED 깜빡이기 시작! (멈추려면 Ctrl+C)")
# 무한 반복
while True:
led.value(1) # LED 켜기
print("켜짐 💡")
time.sleep(1) # 1초 대기
led.value(0) # LED 끄기
print("꺼짐 ○")
time.sleep(1) # 1초 대기
# 여기까지 오면 다시 while True로 돌아감!
실행 결과:
🤔 여기서 잠깐!
프로그램 멈추는 방법: - Thonny에서 빨간 STOP 버튼 클릭 - 또는 키보드에서 Ctrl + C 누르기
Step 4: 깜빡임 속도 바꾸기¶
**목표