오늘 끝나면
GPIO와 회로
- ✓GPIO와 회로의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 GPIO와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
핀으로 하드웨어를 제어 — 전압·저항의 현실 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
Physical AI · 06
GPIO와
회로
보드의 핀 하나로 바깥 세상을 켜고 끈다. 그 핀이 GPIO다.
저항 없이 전선만 꽂으면 부품이 탄다. 회로를 알아야 한다.
GPIO, 핀으로 바깥을 제어한다
소프트웨어가 물리 세계로 나가는 출구가 핀이다. 그 핀 이름이 GPIO, 곧 General Purpose Input Output이다.
Arduino Uno에는 디지털 핀 14개와 아날로그 입력 6개가 달려 있다. Raspberry Pi에는 40핀 헤더가 있다. 핀 하나하나를 코드로 켜고 끌 수 있다.
출력(Output)으로 쓰면 핀이 전압을 낸다. Arduino는 HIGH=5V,LOW=0V이고 Pi는 HIGH=3.3V다.
입력(Input)으로 쓰면 핀이 바깥 전압을 읽는다. 버튼이나 센서 신호를 받아들인다.
digitalWrite(13, HIGH) 한 줄이면 13번 핀에 5V가 걸린다.
여기에 LED를 달면 불이 켜진다.
OUT은 전압을 낸다 · IN은 바깥 전압을 읽는다
옴의 법칙, 전압·전류·저항
회로를 다루려면 숫자 셋을 봐야 한다. 전압 V, 전류 I, 저항 R이다.
전압(V, 볼트)은 전기를 미는 힘이다. 물탱크의 수압 같은 것이다.
전류(I, 암페어)는 실제로 흐르는 양이다. 파이프를 지나는 물의 양에 해당한다.
저항(R, 옴 Ω)은 흐름을 막는 정도다. 파이프가 좁을수록 크다.
셋은 한 식으로 묶인다. V = I × R이다.
전류를 구하면 I = V / R이 된다.
전압이 같을 때 저항이 크면 전류는 작아진다. 반대도 같다.
이 식 하나로 회로의 거의 모든 걸 계산한다. 부품에 얼마가 흐를지 미리 알 수 있다.
전류를 구할 땐 I = V / R
저항이 크면 전류는 작아진다
저항이 없으면 탄다
LED를 핀에 그냥 꽂으면 안 된다. 곧 탄다.
LED는 켜지면 자기 양단에 약 2V를 떨군다(순방향 전압 Vf). 빨강은 약 1.8~2.2V다.
5V 핀에 LED만 달면 남는 3V가 거의 저항 없이 걸린다. 그러면 전류가 폭주한다.
그래서 직렬로 저항을 끼운다. 남는 전압을 저항이 받아 전류를 제한한다.
식으로는 I = (Vcc − Vf) / R이다.
5V 핀, Vf=2V, 저항 220Ω이면 전류는 (5−2)/220 ≈ 13.6mA가 된다. LED가 좋아하는 안전한 값이다.
저항을 너무 키우면(예: 10kΩ) 전류가 0.3mA로 떨어져 불이 흐릿해진다.
너무 작거나 없으면 전류가 한계(보통 20mA)를 넘겨 LED가 타거나 핀이 망가진다. 적당한 값이 핵심이다.
| 저항 R | 전류 I | 결과 |
|---|---|---|
| 없음 (0Ω) | ≈ ∞ | 탐 |
| 47Ω | 64mA | 탐 |
| 220Ω | 13.6mA | 안전 |
| 1kΩ | 3mA | 흐림 |
| 10kΩ | 0.3mA | 거의 꺼짐 |
LED 한계 ≈ 20mA · 넘으면 탄다
저항값을 바꿔 직접 태워본다
5V, 220Ω, LED 직렬 회로다. 전류는 I = (5 − 2) / R로 계산된다.
저항을 키우면 전류가 줄어 LED가 흐려지고, 줄이면 밝아진다.
저항을 충분히 낮추면 전류가 LED 한계(20mA)를 넘어 LED가 탄다. 실제 회로에서 일어나는 일이다.
정상 점등 · 안전 구간
저항을 낮추면 전류가 오르고 밝기도 오른다. 너무 낮추면 탄다.
풀업·풀다운, 입력은 떠 있으면 안 된다
입력 핀에는 함정이 있다. 아무것도 안 연결하면 값이 0도 1도 아닌 채로 떠 있는다(플로팅).
버튼만 핀에 달면 안 눌렀을 때 핀이 공중에 뜬다. 주변 전기 잡음에 따라 0과 1을 멋대로 오간다. 누르지도 않았는데 눌렸다고 읽힌다.
그래서 기준을 잡아주는 저항을 끼운다.
풀업(pull-up)은 핀을 저항으로 전원에 묶는다. 평소엔 1이고, 누르면 0으로 떨어진다(GND로).
풀다운(pull-down)은 핀을 저항으로 GND에 묶는다. 평소엔 0이고, 누르면 1이 된다.
외부 저항 대신 칩 내부 풀업을 켜도 된다. Arduino는 INPUT_PULLUP 한 줄, Pi는 GPIO.PUD_UP이다.
핀 하나 읽는 데도 저항으로 기준을 세워야 안정적이다.
Q. LED에 저항을 직렬로 다는 이유는? (전압을 올리려고 · 전류를 제한해 소자가 타지 않게 · LED를 더 밝게 · 색을 바꾸려고)
정답은 전류를 제한해 소자가 타지 않게다.LED는 자체 저항이 거의 없어 직결하면 과전류가 흘러 곧 탄다.
직렬 저항이 남는 전압(Vcc − Vf)을 받아 전류를 안전한 값(보통 10~20mA)으로 떨군다.
밝기는 그 전류의 부수 효과일 뿐이고, 핵심 목적은 소자 보호다.
떠 있다 · 잡음에 0/1 흔들린다
누르면 0 (GND로)
누르면 1 (5V로)
Arduino: INPUT_PULLUP · Pi: GPIO.PUD_UP