아두이노나 라즈베리파이 같은 보드는 GPIO라는 입출력 핀들을 제공하는데요.
입출력 신호로 사용하는 전압은 각각 5v와 3.3v입니다.
이런 신호를 TTL(Transistor to Transistor Logic, 네트웍에서 말하는 TTL하고 다름)라고 하는데요.
보통 자체 동작전압을 가지고 입출력을 받는 회로를 만드는 경우에는 아무 문제가 없는데
별도 자체 전원으로 동작하는 외부 장치에서 신호를 받는 경우는 전압 때문에 입력을 받을 수가 없는 경우가 많습니다.
가장 대표적인 예가 PC하고 연결할때 시리얼포트를 쓰는 경우가 있는데,
PC는 HIGH/LOW를 +12V/-12V로 표현하는데,
이걸 직접 아두이노나 라즈베리파이에 연결하면 당연히 보드가 타버리게 되죠.
또 다른 예로는 아파트나 사무실 천정에 하나씩은 달려 있는 화재 감지기의 경우 인데요.
이것은 24V로 동작합니다. 그래서 화재가 나면 24V를 HIGH값으로 입력 받아야 하는데,
이걸 아두이노나 라즈베리파이에 그대로 받았다가는 순식간에 타버리게 되죠.
그 외에도 우리는 특정 전압을 어떤 전압으로 낮추어서 사용해야 할때가 많습니다.
이렇게 전압을 원하는 수준으로 내려야 할 때 사용하는 방법은 여러가지가 있는데요.
지금 소개할 방식은 저항을 이용한 전압분배 방식으로 TTL 신호를 받아 들기에 적합하고
회로 구현도 아주아주아주 쉽고 비용도 엄청 저렴합니다.
무엇보다도 전압분배에 대한 이해를 하는 것은 전자회로에 아주 중요한 기초이니까 함께 알아 보시죠.
먼저 저항과 전압의 관계에 대해서 좀 살펴 볼까요?
아래의 그림처럼 저항을 연결하고 저항 전/후의 전압을 측정하면 얼마 일까요?
배터리가 1.5v라고 했을때 몇 오옴 짜리 저항이든 간에, 저항과 플러스(양극,+)와 맞다은 곳은 1.5v이고
저항과 마이너스(음극, -)와 맞다은 곳은 0v 입니다.
어떤 분은 너무 당연하기도 하고 어떤 분은 이해가 안 갈겁니다.
이해 안되시는 분을 위해 아주 쉽게 설명하자면,
음극은 0v고 양극은 1.5v 겠죠? 그런데, 저항 다리가 각각의 극하고 붙어 있자나요.
그러니까 저항과 연결된 선 어디를 측정해도 연결된 극의 전압이 나옵니다.
실제로 멀티미터로 측정을 하려고 해도 우수운 그림 밖에 나오지 않습니다.
그림에서 저항의 왼쪽 전압을 측정하려면 아래 그림 처럼 될텐데, 우숩지요?
그럼 이제 다른 그림을 하나 더 볼까요?
10k옴 저항을 2개 연결했습니다.
그리고 나서 각 구간의 전압을 측정해 보면 가운데 영역은 몇 볼트가 나올까요?
실제로 측정해 보면 0.75v가 나옵니다.
만약 위의 건전지 처럼 1.5v 아니라 3v를 연결했다면 가운데 영역의 전압을 얼마가 나올까요?
네 예상하신것 처럼 1.5v가 나옵니다.
여기서 테스터기(멀티미터)의 리드봉(probe)을 아래와 같이 놓고 측정해도 같은 값이 나옵니다.
이렇게 어떤 회로 전과 후에 전압이 달라지는 것을 전위차라고 하구요.
일반적으로 우리가 "전압이 얼마다” 라고 이야기 하는 것은 바로 이 전위차를 말하는 것입니다.
저항 없이 양극과 음극이 만나면 어떻게 되고 그때 전압은 얼마 일까요?
이렇게 연결하면 건전지가 뜨거워 지면서 배터리 홀더와 전선, 그리고 배터리 까지 불타버립니다.
이걸 이용해서 김병만이 정글의 법칙에서 껌종이로 불도 피우고 그랬죠.
왜 그런지는 이전 포스트를 참조 하시구요.
지금은 이때 전압이 얼마인가 하는게 중요합니다.
전압(전위차)은 바로 0V입니다.
다들 아시는 옴의 법칙
짜잔!!
이 법칙에서 R 즉 저항이 0(zero, 영)이 되면 V 즉 전압도 0(zero, 영)이 될 수 밖에 없습니다.
무슨 수에 0을 곱하면 무조건 0이 되는거 다 아시죠?
이제 그럼 본격적인 실험을 해보죠.
이번엔 2개의 저항의 값을 서로 다르게 해보는 거에요.
아래 그림 처럼 10k옴, 20k옴 저항을 연결하면 각 영역의 전압은 얼마 일까요?
각각 1v와 2v가 나옵니다.
이것을 다이어그램으로 다시 그리면 아래와 같게 되죠.
그럼 이제 원래 알아 보려고 했던 전압을 낮추는 방법을 알아 볼께요.
앞서 알아 보았듯이, 저항 2개를 연결하고 그 가운데 영역의 전압을 측정해 보면
입력 전압보다 낮아 지는 것을 알 수 있습니다.
이때 저항의 입력전압과 저항 값에 따라 그 가운데 영역의 전압을 알아 낼 수 있는데요.
그 가운데 영역을 이용해서 TTL 신호로 사용하는 겁니다.
이때 저항 2개를 각각 R1, R2 라고 부르면, 두 저항의 값이 동일할 때는
R1에 걸리는 전압과 R2에 걸리는 전압이 동일하기 때문에 전압은 절반으로 나누어 집니다.
이와 달리 R1과 R2의 저항 값을 달리하게 되면 그 비율에 따라 나뉘게 됩니다.
이것을 공식으로 세우면 아래와 같은 공식이 완성 됩니다.
이제 저항 2개만 있으면 원하는 전압을 뽑아 낼 수 있게 되었습니다.
그럼 24V 전압을 아두이노 입력으로 받으려면 R1,R2의 저항 값은 얼마 일까요?
막상 계산하려니까 수학의 스트레스 스멜이 슬슬 올라 오나요?(학교 다닐때 저는 수학이 너무 싫었어요..)
쉽게 계산 하는 방법을 알려 드릴께요.
위 공식에 대입하면,
Vout = 5v (아두이노 디지털 핀으로 입력 받아야 하니까)
Vin = 24v (24v 전압을 입력 받는 다고 했으니까)
그럼 식으로 만들어 보죠.
5 = R2/(R1+R2) * 24
그 다음이 막막하네요… 일단, 이항 부터 해보면...
R2/(R1 + R2) = 5 / 24
오잉! R2가 나와 버렸네요.
R2 = 5
그럼 R1도 구해야죠~
R1 + R2 = 24
R2 = 24 - R1 = 24 - 5 = 19
R1 = 19, R2 = 5 네요. 간단하죠?
자 그럼 19옴하고 5옴을 연결하면 될까요?
잘 보면 저 공식은 각 저항 값의 배수 중 어떤것을 적용해도 같다는 걸 알 수 있어요.
예를 들면 첫번째로 실험했던 10k옴 2개를 연결했던걸 생각해 보세요.
3v를 반반씩 나누어서 1.5v로 되었어요.
그럼 여기서 1k옴 2개를 쓰면 어떻게 될까요? 당연히 1.5v 반반씩 나누어 집니다.
그럼 100k옴 2개는?, 10옴 2개는?, 1옴 2개는?
다~~~ 마찬가지입니다. 10K 뿐만 아니라 1,234옴 2개를 연결해도 마찬가지!!
왜냐하면 5:5 비율이니까요.
그럼 저 많은 것들 중에 어떤걸 써야 하죠?
해답의 열쇠는 바로바로바로~~ 전류가 가지고 있습니다.
얼마 만큼의 전류를 필요로 하는냐에 따라 배수 중에 적합한 것을 적용하는 것입니다.
전류값은 어떻게 구할까요?
다시 나옵니다. 옴의 법칙
짜잔!!
이 식을 다시 쓰면,
두둥!!
앞서 예를든 3V에 10k옴 2개를 연결했을 때 각 저항에 흐르는 전류는 얼마인지 계산해 볼까요?
IR1 = VR1 / R1 = 1.5V / 10,000 = 0.00015 = 0.15mA
저항 값이 같고 그래서 각 저항에 걸리는 전압도 같으니 두번째 저항에 흐르는 전류도 똑 같겠죠?
다시 한번 더 해 볼까요?
앞서 보았던 아래 그림 처럼 3V에 10k, 20k 저항을 연결했을때 각각의 전류는 얼마 일까요?
IR1 = 1V / 10K = 1 / 10000 = 0.0001 = 0.1mA
IR2 = 2V / 20K = 2 / 20000 = 0.0001 = 0.1mA
어때요? 각각의 저항과 전압이 다른데도 흐르는 전류의 값은 같죠?
이 포스트를 읽고 계실 분이라면
"하나의 회로에 흐르는 전류의 값은 같다"
라는 말을 어디서 들어 보셨을 것 같은데, 이제 이해 되시죠?
자 그럼 다시 원래대로 돌아 와서 24V 전압을 아두이노에 입력 받으려면
저항을 어떤걸 써야 할까요?
아까 구한 대로 라면
R1 = 19, R2 = 5 입니다.
비율만 갖다면 어떤 값이든 상관 없다고 했으니까,
표준 저항(모든 수치에 맞는 저항을 다 만들 수는 없겠죠. 신발사이즈 처럼)에서
고르기 편하게 R2를 1로 바꾸어서 다시 계산해면
R2/ (R1+ R2) 이니까, 5/24 였어요, 이걸 5로 약분하면
5/24 = 1/4.8 이네요.
그러면 R2 = 1, R1 = 4.8 - 1 = 3.8
R1 = 3.8, R2 = 1
정말 맞는지 공식에 다시 대입해 볼까요?
24 * 1 / ( 3.8 + 1) = 24 / 4.8 = 5
맞군요.
이제 10을 몇번 곱해야 할지는 필요한 전류에 따라 다릅니다.
우리는 아두이노 디지털 핀으로 입력 받기를 원하니까,
아두이노가 느낄 수 있는 정도의 전류만 있으면 되겠네요.
아두이노 입력 핀은 아무런 회로와 연결되어 있지 않으면
1(HIGH), 0(LOW)가 무작위로 입력됩니다.
아주 미세한 전자의 영향을 받는 것이죠.
이 상태를 Hi-Z(하이 임피던스)라고 하는데요.
이때는 아주 미세한 전류만 흘러도 인식할 수 있다는 뜻입니다.
수 마이크로 암페어의 전류만 있어도 가능합니다.
그럼, IR1, IR2가 수 uA(마이크로 암페어) 그러니까 0.x mA가 되도록 저항 값에 10을 곱해서 높여주면 되겠군요.
어차피 IR1과 IR2는 하나의 회로니까 전류값이 동일할 것이고, 그러면 편하게 IR2것만 계산해 보면 되겠네요.
IR2 = 5V / 1옴 = 5A 너무 크죠? 그럼 저항에 0을 4개 붙이면 0.0005A 즉 0.5mA가 되겠네요?
IR2 = 5V / 10,000옴 = 0.0005 = 0.5mA
그럼 배율에 따라 3.8과 1에다가 10k씩 곱해서
R1 = 38kΩ , R2 = 10kΩ
이제 되었네요.
그럼 실제로 실험을 해볼까요?
저는 38kΩ 저항이 없어서 20 kΩ + 18k Ω을 직렬연결하였습니다.
실제로 38kΩ은 표준저항에 없구요. 구매하실때는 39k Ω을 구매하시면 됩니다.
먼저 24v 어뎁터를 준비합니다.
24v 어뎁터를 브레드 보드에 쉽게 연결할 수 있게 커넥터를 준비했습니다.
멀티미터로 어뎁터의 전압을 측정해보니 24.36v 가 나오네요.
20k + 18k , 10k를 연결해서 중간에서 전압을 측정하니 5.04v가 나오네요.
자 그럼 실제로 아두이노와 연결해서 마지막 실험을 해볼까요?
(주의!! 이렇게 고전압으로 회로를 구성할때는 반드시 위의 사진처럼 멀티미터로 먼저 테스트 해보는게 좋습니다.
무조건 아두이노나 라즈베리파이의 GPIO에 연결하면 순식간에 타버릴 수 있으니까요!
제가 그걸 모르고 라즈베리파이 4개나 태워 먹었어요.)
저는 아래와 같이 회로를 구성했습니다.
저는 38k옴 대신에 20k와 18k를 연달아(직렬) 연결했습니다.
그리고 10k옴과 연결한 사이에서 2번 핀으로 입력을 받는 겁니다.
그리고 당연히 2개의 회로의 GND를 연결해줍니다.(이거는 어떻게 설명하기 힘든 부분이네요.)
아래 코드는 아두이노에서 스위치 입력을 받아 LED를 깜빡이는 코드 입니다.
아두이노 IDE 메뉴에서 “파일” > “예제” > “02.Digital” > “Button”을 누르면 나옵니다.
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
아래 동영상은 최종 실험 모습을 담았습니다.
VIDEO
만약 라즈베리파이로 똑같은 회로의 입력을 받는다면 저항 값은 얼마로 해야 할까요?
라즈베리파이는 3.3v를 입력 값으로 받기 때문에 저항 값을 다시 계산해야 합니다.
다시 공식에 대입해 볼까요?
3.3 = R2 / (R1+R2) * 24
R2/(R1+R2) = 3.3/24 = 1/7.27
R2 = 1
R1 = 7.27 - 1 = 6.27
이렇게 2개의 저항을 이용해서 전압분배를 해 보았는데요.
이 전압분배와 저항의 관계는 두고두고 써먹을 데가 많기도 하고 전자 회로를 이해하는데 꼭 필요한 지식입니다.
이것을 이해해야 트랜지스터를 이용한 여러가지 회로를 만들 수가 있습니다.
그럼 누군가에게는 도움이 되었기를 바랍니다.
그나저나 악보는 언제 쓰나...
댓글을 달아 주세요
행님.. led 스펙을 보면 허용 전압과 전류가 있습니다. 그걸 맞추기 위해 저항을 사용하는거고
옴의공식으로 저항값( r = v / i ) 을 계산하는건데, 어려운가요.?
그림은 첫번째가 맞습니다.
^__^
아... 알려 주셔서 감사합니다.
저도 짐작은 했지만....
짐작은 짐작일 뿐.... 꾸벅
진짜 감사합니다.^^
그러니까 LED도 전기를 잡아먹는 저항으로 간주하고 계산한다는 거죠?
넹.. 그리고 led 스펙을 알기 힘드니까.
470옴 짜리 저항을 쓰면,대부분의 led 스펙 안에 듭니다. 약간 어둡게 보이긴 하지만요..
^__^
아~ 그렇군요.^^
좋은 거 하나 또 배웠네요.
요즘 취업도 어렵구 공무원준비할 경제적 지웜이나 머리가 안되기도 하고 전기분야가 앞으로 전망이 있고 기술 익히면 밥은 굶지 않는다는 말을 듣고 전기기능사 자격증 딴후 전기쪽 노가다 일을 하면서 돈 모아서 폴리텍대학 전기과 가서 상급자격을 딸 계획이 어떻겠냐는 말을 듣고여. 혹시 이쪽 분야나 전기관련일에 잘 아시면 현실적인 얘기 부탁드립니다. 앞날을 좀 긍정적이고 희망을 좀 갖져도 될지요? 치킨집배달하는 친구도 요즘 AI 때뮨에 쉬고 있다는데 너무 부정적인 얘기만 해서여. 살아가는데 팔수적인 실용적 지식이나 지혜를 좀 알려주세여
요즘은 사람일 이라는 게 운이 100%라는 생각이 듭니다.
세상에 태어난 사람 중에 살기 위해 노력 안 하는 사람도 있을까요?
있다면, 모든 노력을 해 본 뒤에 지쳐서 포기한 사람이겠죠?
(기본적으로 모든 사람이 노력을 하고 있는 상태라면 성공과 실패를 결정짓는 핵심 요소는 행운이 될 수 밖에 없습니다.)
저도 거의 반백수로 매일 블로그질이나 하는 주제에 님께 알려드릴 지혜가 있을리는 없지만,
그냥, 남들이 '뭐 하면 좋다더라~~ '하는 거 말고,
님이 '죽어도 하고싶은 것'을 찾는 게 좋지 않을까요?
예를 들어서 누가
'너 김태희랑 결혼 할래? 아니면 이거 할래?'
라고 물을 때
조금도 주저없이
" 저는 김태희랑 결혼 하는 것 보다 이게 10000000000000000000배 좋아요."
라고 할 수 있는 것을 찾으세요.
만에 하나 돈을 잘 못 벌어도 그 걸 하는 동안만은 행복할테니까 그리 큰 손해는 아닐 겁니다.
저 에게는 그게 바로 '아두이노, 외국어 공부, 경제공부' 입니다.
낼 모래 나이 50 되는 저도
제가 이런 것을 좋아한다는 사실을 최근에야 깨달았습니다.
내가 뭘 좋아하는지를 찾아내는 게 쉬운 일이 아닙니다.
그걸 알아내려면 이것 저것 해 볼 수 있는 시간적 여유와 경제적 여유가 있어야하는대
일단 당장 먹고 살아야 하니까요.
아! 그리고 뭐든지 사람이 몰리면 임금 단가가 떨어집니다.
요즘 또 전기쪽 공학쪽으로 사람이 몰리는 분위기던대.....
희소성의 원칙은 만고불변입니다.
다이야몬드가 길거리에 발에 채이면 그걸 누가 돈 주고 사겠어요?
성경에도 '좁은 길로 가라. 좁은 길에는 사람이 적다' 고 했습니다.
이 말은 직업 진로를 선택 할 때에도 참고할만한 말인 것 같습니다.
짱님, 제가 알고 있는 것을 간단히 정리하였습니다.
LED는 P-N 접합 반도체 (발광 다이오드)이며, LED 양단에서 발생하는 전압 강하 (저항이 아님, 저항은 0)는 정해져 있습니다.
전압강하가 0.7V 정도이며 (정확한 것은 부품 제조사 datasheet에), 5V IO 출력을 사용 시 전류를 계산하는 방법을 예로 들면,
1) 저항이 없을 경우: I = V/R = (5V-0.7V) / 0옴 = 4.3V/0옴 = 무한대 전류
-->즉, IO가 출력할수 있는 전류만큼 출력하며, 전류가 매우 높을 경우 전기 에너지가 모두 열 에너지화 되면서 타버림
2) 저항이 200옴 경우: I = V/R = (5V-0.7V) / 200옴 = 4.3V/200옴 = 21.5mA
3) 원하는 전류로 저항 계산 방법: R = V/I = (5V-0.7V) / I = 4.3V/I
--> 전류 10mA로 하려면 저항 R = 4.3V/10mA = 430옴
4) LED를 2개 직렬로 연결하고 저항이 1개이고 100옴인 경우
: I = V/R = (5V - 0.7V - 0.7V) / 100옴 = 3.6V / 100옴 = 36mA
LED 전류는 보통 10mA 정도로 하면 되며, 전류를 높이면 전류 대비 빛 양의 효율이 떨어지고 나머지 에너지는 열로 변환 됩니다.
보통 전류가 많이 흐를 경우 탄다는 것은 결국은 열이 많이 발생에서 화학적인 반응으로..
전류가 낮더라도 전압이 높아서 망가지는 경우는 트레시홀드 이상 넘어가서 차단을 못해서 손상이 발생하는 것입니다.
오옴의 법칙과 LED (다이오드) 전압 강하만 이해하면 간단히 계산 됩니다.^^
실제 멀티미티로 찍어보면 정확히 계산대로 됩니다. (열 영향으로 인한 특성 변화를 감안하면)
전기회로는 이론이 확률적으로 딱 들어 맞는다고 생각합니다. 왜냐하면 엄청 많은 수량의 전자가 확률적으로 움직이고, 모수가 많아서 잘 들어맞는다고..
정말 감사합니다.
잊어버릴 때 마다 찾아 보고 참고하게 댓글을 지우지 말아주세요.
아두이노 재밌어요?
저는 외국어 공부를 좋아하고,
컴퓨터를 좋아하고,
전자부품을 보면 여자들이 다이야몬드 반지를 보고 정신을 잃는 것 처럼 정신을 잃습니다.
그리고 손으로 만지작 거리고 뭘 만드는 것도 잘 합니다.
이 모든 것을 한꺼번에 모아놓은 것이 아두이노입니다.
저온의 진공(우주)에다 열에너지를 가하면 열에너지가 유지될까요 아님 열에너지가 빨리 사라질까요?
^^ 글쎄요... 아주 어려운 질문이군요.
제가 그걸 대답할 수 있을까요?
할 수 있다면 한 10년 정도 골똘히 생각해 봐야할 것 같습니다.
고양이 영상은 무슨 기기로 올리시죠?요즘 유튜브같은걸 올리는1인 미디어 시대인대 dslr 카메라를 사야 할지 새로 니콘에서 30만원대 키미션 액션캠이 나왔더군요. 실용적이고 가성비에는 액션캠이 유리해보이는데 선택이 어럽내요
친구에게 얻은 중고 스마트폰 입니다.
그냥 카메라로 쓰고 있습니다.
그게.... 뭐더라....
팬텍이라고 망한 회사에서 마지막으로 만든 거....
중고가도 10만원 정도 밖에 안 하는 듯...
막 쓰기 좋네요^^
아두이노 배워 볼려하는데 뭐가 필요할까요?
일단 아두이노 관련 책 중에 그림이 많고 설명이 쉽게 되어있는 책을 골라야겠죠?
무엇보다도,
'나는 아두이노로 이런 것을 만들어보고싶다.' 는 것이 있으면 훨씬 공부가 잘 됩니다.
중간에 어려워도 포기도 안되고요.
저는 주로 용산에 가서 관련 부품을 삽니다.
교통이 그쪽이 더 편리해서요.