- 들어가며 — LED를 5V에 바로 꽂으면 정확히 무슨 일이 벌어지는가
- LED는 저항이 아니라 다이오드입니다
- 순방향 전압은 색마다 다릅니다
- 저항값 계산 — 5V와 3.3V에서 각각
- 왜 올림인가 — E24 계열과 표준 저항값
- 저항에서 소비되는 전력과 정격
- LED 여러 개 — 병렬에 저항 하나가 나쁜 이유
- 핀이 감당할 수 없을 때 — 트랜지스터와 드라이버 IC
- 마치며 — 계산의 시작은 여유 전압입니다
들어가며 — LED를 5V에 바로 꽂으면 정확히 무슨 일이 벌어지는가
"LED에는 저항을 달아야 한다"는 문장은 어디에나 있습니다. 그런데 왜 달아야 하는지, 왜 220옴인지, 파란 LED에도 220옴인지에 대한 설명은 잘 보이지 않습니다. 그냥 220옴이라고 적힌 회로도를 따라 하게 됩니다.
여기서 문제가 생깁니다. 5V 아두이노에서 220옴으로 잘 되던 회로를 3.3V 라즈베리파이로 옮기면 LED가 어둡습니다. 빨간 LED 대신 파란 LED를 꽂으면 아예 안 켜집니다. 따라 하기만 했으므로 무엇을 바꿔야 하는지 알 수 없습니다.
이 글의 목표는 220옴이라는 숫자가 어디서 나왔는지 계산할 수 있게 되는 것입니다. 그러면 전원이 바뀌든 색이 바뀌든 직접 값을 구할 수 있습니다.
먼저 저항 없이 꽂으면 어떻게 되는지부터 정확히 보겠습니다. 빨간 LED 하나를 5V와 GND 사이에 직접 연결하면, LED 양단에 5V가 걸립니다. 이 LED가 정상적으로 동작할 때 걸리는 전압은 약 2.0V입니다. 3.0V가 남습니다. 이 3.0V가 LED 내부의 아주 작은 저항 성분에 걸리는데, 그 값은 대략 10옴 수준입니다.
전류 = 3.0V / 10옴 = 0.3A = 300mA
300mA입니다. 이 LED가 견디도록 만들어진 값은 20mA입니다. 15배입니다. LED 칩의 크기는 한 변이 0.3mm 정도이고, 그 안에서 소비되는 전력은,
P = 5V × 0.3A = 1.5W
1.5W입니다. 성냥 머리보다 작은 반도체 조각에 1.5W가 들어갑니다. 접합부 온도가 순식간에 수백 도까지 올라가고, 칩과 리드를 잇는 금선이 녹거나 접합 자체가 손상됩니다. 이것이 "잠깐 밝았다가 꺼진다"의 물리적 실체입니다. 소프트웨어처럼 되돌릴 수 없습니다.
LED는 저항이 아니라 다이오드입니다
왜 이런 일이 생기는지 이해하려면 LED가 저항과 근본적으로 다른 부품이라는 것을 알아야 합니다.
저항은 전압과 전류가 비례합니다. 5V를 걸면 1V일 때의 다섯 배가 흐릅니다. 그래프를 그리면 직선입니다.
LED는 다이오드이고, 다이오드의 전류는 전압에 대해 지수 함수로 증가합니다. 이 관계를 쇼클리 다이오드 방정식이라고 부르는데, 실무에서 알아야 할 것은 식 자체보다 그것이 만드는 결과입니다.
전형적인 5mm 빨간 LED를 실제로 측정하면 대략 이런 값이 나옵니다.
| 걸어 준 전압 | 흐르는 전류 | 앞 단계 대비 |
|---|---|---|
| 1.7V | 약 0.5mA | 기준 |
| 1.8V | 약 2mA | 4배 |
| 1.9V | 약 6mA | 3배 |
| 2.0V | 약 20mA | 3.3배 |
| 2.1V | 약 60mA | 3배 |
| 2.2V | 약 150mA | 2.5배 |
전압을 0.1V, 즉 5퍼센트 올렸을 뿐인데 전류는 세 배가 됩니다. 이것이 지수 함수의 성질입니다.
이 표에서 두 가지 결론이 나옵니다.
첫째, LED에 전압을 직접 지정하는 것은 불가능에 가깝습니다. 목표 전류 20mA를 맞추려면 전압을 2.00V로 맞춰야 하는데, 2.05V만 되어도 전류가 두 배 가까이 됩니다. 전원의 오차, 온도 변화, 개체 차이가 모두 이 정도 수준입니다. 전압으로 LED를 제어하겠다는 접근은 시작부터 성립하지 않습니다.
둘째, 그리고 더 위험한 것인데, LED는 스스로를 보호하지 못합니다. 온도가 오르면 순방향 전압이 섭씨 1도당 약 2mV씩 낮아집니다. 즉 뜨거워질수록 같은 전압에서 더 많은 전류가 흐릅니다. 더 많이 흐르면 더 뜨거워집니다. 이 되먹임에 제동을 거는 것이 아무것도 없습니다.
그래서 해법은 방향을 바꾸는 것입니다. 전압을 지정하려 하지 말고 전류를 지정합니다. 전류를 정하는 가장 단순하고 확실한 부품이 직렬 저항입니다. 저항은 전압과 전류가 비례하는 선형 부품이므로, 전류가 늘려고 하면 저항 양단 전압이 커지고 그만큼 LED에 걸리는 전압이 줄어 전류가 다시 억제됩니다. 저항은 전류 제한 장치인 동시에 음의 되먹임 장치입니다.
순방향 전압은 색마다 다릅니다
LED가 빛을 내려면 반도체의 밴드갭 에너지를 넘는 전압이 필요하고, 그 에너지가 곧 나오는 빛의 색을 결정합니다. 파장이 짧은 빛, 즉 파란색은 더 큰 에너지를 요구하므로 순방향 전압이 높습니다. 색과 전압이 따로 노는 것이 아니라 같은 물리량의 두 얼굴입니다.
실무에서 쓰는 대표값은 다음과 같습니다. 개체마다 편차가 있으므로 데이터시트가 있으면 그것을 우선하되, 없을 때는 이 값으로 계산해도 대체로 안전합니다.
| 색상 | 대표 순방향 전압 | 실제 분포 범위 | 반도체 재료 |
|---|---|---|---|
| 적색 | 2.0V | 1.8 ~ 2.2V | AlGaAs, GaAsP |
| 황색 | 2.1V | 2.0 ~ 2.4V | AlGaInP |
| 황록색 (구형) | 2.2V | 2.0 ~ 2.4V | GaP |
| 순수 녹색 (고휘도) | 3.2V | 2.9 ~ 3.6V | InGaN |
| 청색 | 3.2V | 2.9 ~ 3.6V | InGaN |
| 백색 | 3.2V | 2.9 ~ 3.6V | InGaN + 형광체 |
| 적외선 (IR) | 1.3V | 1.2 ~ 1.5V | GaAs |
여기서 실무적으로 가장 중요한 경계가 하나 있습니다. 녹색 LED에는 두 종류가 있습니다. 옛날부터 있던 황록색 계열은 2.2V이고, 요즘 밝은 순녹색은 청색과 같은 InGaN이라 3.2V입니다. 겉보기가 비슷해서 같은 값으로 계산하면 결과가 크게 틀어집니다. 헷갈리면 멀티미터의 다이오드 테스트 기능으로 직접 재는 것이 가장 빠릅니다. 표시되는 값이 그 LED의 순방향 전압입니다.
그리고 3.2V라는 숫자를 3.3V 보드와 나란히 놓고 보면 바로 문제가 보입니다. 이 이야기는 다음 절에서 계산으로 확인하겠습니다.
저항값 계산 — 5V와 3.3V에서 각각
공식은 앞 글의 옴의 법칙 그대로입니다. 저항에 걸리는 전압을 원하는 전류로 나누면 됩니다.
저항 = (전원 전압 - LED 순방향 전압) / 목표 전류
분자를 여유 전압이라고 부르겠습니다. LED가 자기 몫인 순방향 전압을 가져가고 남은 것이 저항의 몫입니다.
목표 전류는 얼마로 잡을까요. 일반적인 5mm LED의 최대 정격은 20mA입니다. 최대 정격에 맞춰 설계하면 여유가 0이므로, 실무에서는 15mA 정도를 목표로 잡는 것이 안전합니다. 밝기 차이는 사람 눈으로 거의 구분되지 않습니다. 이 블로그의 배선 검증 도구도 15mA를 기준으로 저항을 제안합니다.
5V 전원에 빨간 LED
여유 전압 = 5V - 2.0V = 3.0V
저항 = 3.0V / 0.015A = 200옴
정확히 200옴이 나왔습니다. 이 값은 뒤에서 볼 표준값 목록에 그대로 있습니다.
20mA로 계산하면 이렇게 됩니다.
저항 = 3.0V / 0.02A = 150옴
150옴 역시 표준값입니다. 그리고 흔히 쓰는 220옴은 이 사이 어디쯤에 있는 넉넉한 선택입니다. 220옴을 쓰면 실제 전류는,
전류 = 3.0V / 220옴 = 0.0136A = 13.6mA
13.6mA입니다. 충분히 밝고 아주 안전합니다. 초보자용 키트에 220옴이 잔뜩 들어 있는 이유가 이것입니다. 틀린 값이 아니라 안전 쪽으로 기운 값입니다.
3.3V 전원에 빨간 LED
여유 전압 = 3.3V - 2.0V = 1.3V
저항 = 1.3V / 0.015A = 86.7옴
86.7옴입니다. 5V일 때의 200옴과 전혀 다른 값입니다. 여유 전압이 3.0V에서 1.3V로 줄었기 때문입니다. 전원 전압이 34퍼센트 줄었는데 저항값은 57퍼센트 줄었습니다. 이 비선형성이 "같은 회로를 라즈베리파이로 옮겼더니 어둡다"의 원인입니다. 5V용으로 계산한 200옴을 그대로 쓰면,
전류 = 1.3V / 200옴 = 0.0065A = 6.5mA
목표의 절반도 안 되는 6.5mA가 흐릅니다. 저항이 잘못된 것이 아니라 전원이 바뀌었으므로 다시 계산해야 하는 것입니다.
3.3V 전원에 파란 LED — 계산이 성립하지 않는 경우
여유 전압 = 3.3V - 3.2V = 0.1V
저항 = 0.1V / 0.015A = 6.67옴
숫자는 나왔지만 이 회로는 쓰면 안 됩니다. 이유는 여유 전압이 0.1V밖에 없기 때문입니다.
순방향 전압의 개체 편차가 2.9V에서 3.6V라고 했습니다. 이 LED가 3.4V짜리라면 여유 전압이 음수가 되어 아예 안 켜집니다. 3.0V짜리라면 여유 전압이 0.3V가 되어 전류가 세 배로 뜁니다. 3.3V 레일이 3.25V로 조금 처지기만 해도 밝기가 절반이 됩니다. 즉 이 회로는 부품 개체와 전원 흔들림에 완전히 휘둘립니다.
해결책은 셋 중 하나입니다. 5V 레일에서 LED를 구동하고 신호만 3.3V로 제어하거나, 순방향 전압이 낮은 다른 색을 쓰거나, 전류를 능동적으로 유지해 주는 정전류 드라이버를 쓰는 것입니다. 여유 전압이 전원의 20퍼센트 아래로 떨어지면 저항 하나로 처리하는 방식을 재검토하는 것이 원칙입니다.
계산 결과 요약
| 전원 | 색상 | 순방향 전압 | 여유 전압 | 15mA용 계산값 | 선택할 표준값 | 실제 전류 |
|---|---|---|---|---|---|---|
| 5V | 적색 | 2.0V | 3.0V | 200옴 | 200옴 | 15.0mA |
| 5V | 황색 | 2.1V | 2.9V | 193.3옴 | 200옴 | 14.5mA |
| 5V | 황록색 | 2.2V | 2.8V | 186.7옴 | 200옴 | 14.0mA |
| 5V | 청색 / 백색 | 3.2V | 1.8V | 120옴 | 120옴 | 15.0mA |
| 3.3V | 적색 | 2.0V | 1.3V | 86.7옴 | 91옴 | 14.3mA |
| 3.3V | 황색 | 2.1V | 1.2V | 80.0옴 | 82옴 | 14.6mA |
| 3.3V | 황록색 | 2.2V | 1.1V | 73.3옴 | 75옴 | 14.7mA |
| 3.3V | 청색 / 백색 | 3.2V | 0.1V | 6.67옴 | 사용 부적합 | 불안정 |
표의 마지막 두 열이 이 글의 나머지 절반입니다. 계산값과 실제로 살 수 있는 저항값이 왜 다른지, 그리고 왜 항상 큰 쪽으로 맞추는지를 봐야 합니다.
왜 올림인가 — E24 계열과 표준 저항값
86.7옴짜리 저항은 팔지 않습니다. 저항은 아무 값이나 만들어지는 것이 아니라 정해진 목록의 값으로만 생산됩니다. 이 목록을 E 계열이라고 합니다.
E24 계열은 한 자릿수 구간을 24단계로 나눈 것으로, 다음 값들과 그 10배, 100배, 1000배로 이루어집니다.
1.0 1.1 1.2 1.3 1.5 1.6 1.8 2.0 2.2 2.4 2.7 3.0
3.3 3.6 3.9 4.3 4.7 5.1 5.6 6.2 6.8 7.5 8.2 9.1
그래서 실제로 존재하는 값은 82옴, 91옴, 100옴, 110옴 같은 식이고, 86.7옴은 그 사이에 없습니다.
이 간격이 이렇게 정해진 이유가 흥미롭습니다. 인접한 값의 비율이 대략 1.1배, 즉 10퍼센트씩 벌어집니다. 그리고 E24 저항의 표준 오차가 5퍼센트입니다. 즉 각 값의 오차 범위가 서로 겹치지 않으면서 빈틈도 남기지 않도록 설계된 등비수열입니다. 더 촘촘한 E96 계열은 1퍼센트 오차 부품에 대응합니다. 로그 스케일로 균등 분할한다는 발상은 오디오 볼륨이나 이미지 리사이즈 단계를 정할 때와 같은 원리입니다.
이제 핵심입니다. 계산값이 목록에 없을 때 위로 올릴 것인가 아래로 내릴 것인가.
반드시 올려야 합니다. 이유는 저항이 클수록 전류가 작아지기 때문입니다. 86.7옴을 82옴으로 내리면,
전류 = 1.3V / 82옴 = 0.0159A = 15.9mA
목표보다 많은 15.9mA가 흐릅니다. 91옴으로 올리면,
전류 = 1.3V / 91옴 = 0.0143A = 14.3mA
목표보다 적은 14.3mA입니다. 밝기 차이는 눈에 띄지 않고, 전류는 안전한 쪽입니다.
이 원칙이 결정적으로 중요해지는 곳이 핀 전류 한계입니다. 라즈베리파이의 GPIO 핀 하나가 허용하는 값은 16mA입니다. 82옴을 쓰면 15.9mA로 한계에 0.1mA를 남기고 붙습니다. 여기에 LED 개체 차이로 순방향 전압이 1.9V였다면 여유 전압이 1.4V가 되고,
전류 = 1.4V / 82옴 = 0.0171A = 17.1mA
한계를 넘습니다. 반면 91옴이면 같은 조건에서 15.4mA로 여전히 안쪽입니다. 올림 한 단계가 마진을 만듭니다.
배선을 짜 놓고 이 계산이 맞는지 빠르게 확인하고 싶다면 배선 검증 도구에 보드와 부품, 저항값을 넣어 보면 됩니다. 이 도구도 같은 규칙으로 E24 계열에서 위쪽 값을 골라 제안하고, 선택한 저항으로 실제 흐를 전류가 핀 한계를 넘는지 알려 줍니다.
저항에서 소비되는 전력과 정격
저항은 여유 전압만큼을 열로 버립니다. 얼마나 버리는지 계산해 두면 어떤 저항을 사야 하는지가 정해집니다.
5V에 빨간 LED, 200옴인 경우입니다.
저항에 걸리는 전압 = 3.0V
흐르는 전류 = 15mA
소비 전력 = 3.0V × 0.015A = 0.045W = 45mW
45mW입니다. 가장 흔한 1/4W(250mW) 저항이면 정격의 18퍼센트만 쓰는 셈이므로 아주 여유롭습니다.
3.3V에 빨간 LED, 91옴인 경우입니다.
소비 전력 = 1.3V × 0.0143A = 0.0186W = 18.6mW
더 적습니다. 3.3V 회로가 열 측면에서 유리한 이유입니다.
그럼 LED 저항은 늘 1/4W면 되는가 하면, 전원 전압이 올라가면 얘기가 달라집니다. 12V 조명에 빨간 LED 하나를 20mA로 켠다고 하면,
여유 전압 = 12V - 2.0V = 10.0V
저항 = 10.0V / 0.02A = 500옴 → E24 표준값 510옴
소비 전력 = 10.0V × 0.02A = 0.2W = 200mW
200mW입니다. 1/4W 저항의 정격 250mW에 80퍼센트까지 차오릅니다. 앞 글에서 정격의 절반 이하로 쓰라고 한 기준을 넘으므로 1/2W를 쓰는 것이 맞습니다.
그리고 이 계산은 12V 회로 설계 방식을 바꿉니다. 10V를 저항에서 열로 버리는 것은 공급 전력의 83퍼센트를 낭비하는 것입니다. 그래서 12V에서는 LED를 여러 개 직렬로 이어 여유 전압을 줄입니다. 빨간 LED 다섯 개를 직렬로 놓으면,
LED 전압 합계 = 2.0V × 5 = 10.0V
여유 전압 = 12V - 10.0V = 2.0V
저항 = 2.0V / 0.02A = 100옴
소비 전력 = 2.0V × 0.02A = 0.04W = 40mW
같은 20mA로 LED 다섯 개를 켜면서 저항 손실은 5분의 1입니다. 직렬 연결은 전류가 공통이므로 다섯 개가 정확히 같은 밝기로 켜집니다. LED 여러 개를 다룰 때 직렬을 먼저 고려하는 이유가 이것입니다.
LED 여러 개 — 병렬에 저항 하나가 나쁜 이유
직렬이 좋다면 병렬은 어떨까요. LED 세 개를 나란히 놓고 저항 하나로 묶는 배선을 회로도에서 종종 보게 됩니다. 부품이 덜 들어가니 매력적으로 보입니다. 하지만 이 배선은 하면 안 됩니다.
이유는 앞에서 본 지수 곡선입니다. 병렬로 연결된 세 LED는 양단 전압이 강제로 같아집니다. 그런데 세 LED의 순방향 전압은 절대로 같지 않습니다. 같은 봉지에서 나온 부품이라도 0.05V 정도는 차이가 납니다.
숫자로 확인해 보겠습니다. 5V에 150옴 하나, LED 세 개가 병렬이고 순방향 전압이 각각 1.95V, 2.00V, 2.05V라고 하겠습니다.
세 LED의 양단 전압은 같아야 하고, 그 값은 대략 가장 낮은 1.95V 근처에서 결정됩니다. 저항에 걸리는 전압은,
5V - 1.95V = 3.05V
전체 전류 = 3.05V / 150옴 = 0.0203A = 20.3mA
전체 20.3mA를 셋이 나눠 가지는데, 앞의 지수 표를 다시 보면 1.95V에서 흐르는 전류는 2.00V에서보다 세 배가량 적습니다. 방향을 바꿔 말하면 순방향 전압이 가장 낮은 LED가 전류를 독차지합니다. 실제로 재 보면 대략 이런 분배가 나옵니다.
| LED | 순방향 전압 | 실제 흐르는 전류 | 비율 |
|---|---|---|---|
| A | 1.95V | 약 15mA | 74퍼센트 |
| B | 2.00V | 약 4mA | 20퍼센트 |
| C | 2.05V | 약 1mA | 5퍼센트 |
세 개가 눈에 띄게 다른 밝기로 켜집니다. 이것만으로도 실패지만 더 나쁜 것이 남았습니다.
전류를 독차지한 A가 가장 뜨거워집니다. 온도가 오르면 순방향 전압이 1도당 2mV씩 내려갑니다. A의 온도가 25도 오르면 순방향 전압이 0.05V 더 낮아지고, 그러면 A는 전류를 더 많이 가져갑니다. 더 뜨거워지고, 전압이 더 낮아지고, 전류를 더 가져갑니다. 이것이 열폭주입니다. 결국 A가 먼저 죽고, A가 죽으면 남은 전류 전부가 B로 몰려 B도 위험해집니다.
올바른 배선은 LED마다 저항을 하나씩 주는 것입니다. 저항 세 개가 각 갈래의 전류를 독립적으로 정하므로 개체 차이가 있어도 전류가 크게 벌어지지 않습니다. 저항이 있으면 A가 전류를 더 가져가려 할 때 A쪽 저항 양단 전압이 커져서 저절로 제동이 걸립니다. 저항 하나 아끼려다 LED를 잃는 거래는 어느 쪽으로 봐도 손해입니다.
핀이 감당할 수 없을 때 — 트랜지스터와 드라이버 IC
LED 개수가 늘어나면 저항 계산과는 다른 벽에 부딪힙니다. 핀이 낼 수 있는 전류의 한계입니다.
이 한계는 두 층으로 되어 있습니다. 핀 하나당 한계와, 모든 핀을 합친 총합 한계입니다. 둘 다 지켜야 합니다.
| 보드 | 로직 전압 | 핀 하나당 한계 | 전체 GPIO 합계 한계 | 15mA LED 몇 개까지 |
|---|---|---|---|---|
| 아두이노 우노 R3 | 5V | 20mA (절대 최대 40mA) | 200mA | 13개 |
| 라즈베리파이 40핀 | 3.3V | 16mA | 50mA | 3개 |
| ESP32 DevKit v1 | 3.3V | 12mA | 120mA | 10개 (핀당 12mA로 낮춰서) |
마지막 열은 총합 한계만으로 계산한 개수입니다. ESP32는 핀당 한계가 12mA이므로 LED 하나당 목표 전류를 12mA로 낮춰야 하고, 그러면 총합 120mA를 열 개가 나눠 쓰게 됩니다. 핀당 한계와 총합 한계 중 먼저 걸리는 쪽이 실제 상한입니다.
라즈베리파이의 숫자를 다시 보십시오. 핀당 16mA는 LED 하나에 충분하지만 전체 합계가 50mA입니다. 15mA짜리 LED 네 개를 켜면 60mA로 이미 초과입니다. 핀은 40개인데 LED는 세 개까지입니다.
총합 한계가 존재하는 이유는 물리적입니다. 각 핀의 출력 트랜지스터는 칩 내부의 공통 전원 배선에 연결되어 있고, 그 배선과 칩의 본딩 와이어, 패키지 리드가 전체 전류를 함께 견뎌야 합니다. 개별 핀이 규격 안이어도 합계가 넘으면 그 공통 경로가 과열됩니다. 그리고 칩 내부의 전원 배선 저항 때문에 전압 강하가 생겨서, 같은 칩 안의 다른 회로가 불안정해집니다.
한계를 넘어서면 핀으로 LED를 직접 구동하는 방식을 버려야 합니다. 선택지는 셋입니다.
트랜지스터로 스위칭하기
핀은 신호만 주고, 전류는 전원 레일에서 직접 가져오게 만듭니다. 로직 레벨 MOSFET이나 소신호 트랜지스터를 스위치로 씁니다.
BJT를 쓴다면 베이스 저항 계산이 필요합니다. LED 여덟 개를 15mA씩, 총 120mA를 스위칭한다고 하겠습니다. 2N3904 같은 소신호 트랜지스터를 포화 영역에서 쓰려면 전류 증폭률을 넉넉히 10 정도로 잡습니다.
필요한 베이스 전류 = 120mA / 10 = 12mA
베이스 저항 = (5V - 0.7V) / 0.012A = 358옴
E24에서 아래쪽 값인 330옴을 고르면,
실제 베이스 전류 = (5V - 0.7V) / 330옴 = 0.013A = 13mA
13mA로 핀 한계 20mA 안쪽입니다. 여기서 베이스 저항은 LED 저항과 반대로 아래쪽으로 내림한다는 점에 주의해야 합니다. 베이스 전류가 모자라면 트랜지스터가 완전히 켜지지 않아 자기 몸에서 전력을 소모하고 뜨거워집니다. 목적이 다르므로 반올림 방향도 다릅니다.
0.7V는 베이스와 이미터 사이의 전압 강하입니다. 실리콘 접합의 특성값이고, 계산에서 빼야 실제 저항에 걸리는 전압이 나옵니다.
드라이버 IC를 쓰기
ULN2803 같은 드라이버 배열은 여덟 채널의 달링턴 트랜지스터를 하나의 칩에 담은 부품입니다. 채널당 500mA까지 처리하고 입력은 마이크로컨트롤러 핀에서 1mA 정도만 가져갑니다. 74HC595 시프트 레지스터와 조합하면 핀 세 개로 여덟 개, 열여섯 개를 제어할 수 있습니다.
여기서 주의할 것은 방향입니다. ULN2803은 싱크 전용입니다. 즉 출력 핀이 전류를 GND로 빨아들일 뿐 내보내지 않습니다. 그래서 LED의 애노드를 전원 레일에 연결하고 캐소드를 드라이버 출력에 연결해야 합니다. 소스 방식으로 배선하면 아무리 코드를 고쳐도 켜지지 않습니다.
전용 LED 드라이버로 넘어가기
LED가 수십 개 이상이거나 밝기를 개별 제어해야 한다면 정전류 드라이버가 답입니다. WS2812B처럼 LED마다 제어기가 내장된 부품이 대표적인데, 이 경우 전류 계산의 성격이 달라집니다. WS2812B 한 알이 세 색을 모두 최대로 켜면 60mA를 씁니다. 30알짜리 스트립이면,
60mA × 30 = 1800mA = 1.8A
1.8A입니다. 아두이노의 5V 레일 한계가 450mA이므로 보드에서 전원을 뽑는 것 자체가 불가능합니다. 별도 전원이 필요하고, 이 이야기는 모터와 유도성 부하를 다루는 글로 이어집니다.
PWM은 전류를 줄이는 방법이 아닙니다
밝기 조절이 목적이라면 저항을 키우는 대신 PWM을 씁니다. 다만 PWM은 켜져 있는 순간의 전류를 줄이지 않습니다. 켜고 끄는 비율을 바꿔 평균 밝기를 조절할 뿐입니다.
// LED 밝기를 부드럽게 올렸다 내립니다.
// 저항은 그대로 200옴이고, 켜져 있는 순간의 전류도 그대로 15mA입니다.
// PWM은 켜져 있는 시간의 비율만 바꿉니다.
const int LED_PIN = 9; // 우노에서 PWM이 가능한 핀
const int STEP_DELAY_MS = 8;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 듀티 0에서 255까지. 255가 계속 켜져 있는 상태입니다.
for (int duty = 0; duty <= 255; duty++) {
analogWrite(LED_PIN, duty);
delay(STEP_DELAY_MS);
}
for (int duty = 255; duty >= 0; duty--) {
analogWrite(LED_PIN, duty);
delay(STEP_DELAY_MS);
}
}
핀 전류 예산을 계산할 때는 PWM 듀티가 아니라 최대 순간 전류로 잡아야 합니다. 듀티 50퍼센트라고 해서 7.5mA로 계산하면 안 됩니다. 켜져 있는 순간에는 15mA가 그대로 흐르고, 핀의 출력 트랜지스터가 견뎌야 하는 값은 그 순간값입니다.
마치며 — 계산의 시작은 여유 전압입니다
LED 저항 계산에서 기억할 것은 사실상 한 줄입니다. 전원 전압에서 LED의 순방향 전압을 빼고, 그 나머지를 원하는 전류로 나눕니다.
이 한 줄이 전원 전압이 바뀌든 색이 바뀌든 그대로 작동합니다. 220옴을 외우는 대신 이 뺄셈과 나눗셈을 기억하면 됩니다.
그리고 뺄셈의 결과, 즉 여유 전압을 볼 때마다 한 가지를 함께 확인하는 습관을 들이면 좋습니다. 이 값이 전원 전압에 비해 너무 작지 않은가입니다. 3.3V에 파란 LED를 다는 경우처럼 여유가 0.1V만 남으면, 저항값을 아무리 정확히 계산해도 회로가 부품 편차와 전원 흔들림에 그대로 노출됩니다. 여유 전압은 계산의 재료인 동시에 이 설계가 튼튼한지를 알려 주는 지표입니다.
다음 글에서는 입력 쪽으로 넘어갑니다. 버튼을 핀에 연결했는데 값이 제멋대로 바뀌는 현상, 즉 플로팅 입력과 풀업 저항 이야기입니다.
현재 단락 (1/171)
"LED에는 저항을 달아야 한다"는 문장은 어디에나 있습니다. 그런데 왜 달아야 하는지, 왜 220옴인지, 파란 LED에도 220옴인지에 대한 설명은 잘 보이지 않습니다. 그냥 2...