초보자를 위한 아두이노 코딩연재-7: “DUAL LED BLINKING: 전압 측정 및 전류 계산”

in #kr6 years ago (edited)

아래의 배선도에 따라 아두이노 코딩에 의해서 두 개의 LED를 ON OFF 해 보기로 한다. DUAL 이라는 단어는 2개를 뜻한다.

그림_01.png

초보자를 위한 아두이노 코딩 입문-2
https://steemit.com/kr/@codingart/89cbn

초보자를 위한 아두이노 코딩 입문 -3
https://steemit.com/kr/@codingart/2apkpp-3

초보자를 위한 아두이노 코딩-4:아두이노 편집기(Arduijno IDE) 다운로드 및 설치
https://steemit.com/kr/@codingart/4-arduijno-ide

초보자를 위한 아두이노 코딩-6: CH340G 드라이버 설치, 아두이노 코딩에 의한 LED ON OFFhttps://steemit.com/kr/@codingart/6-ch340g-led-on-off

아래의 사진은 위 회로도를 반대로 돌려 놓은 상태이다. 2개의 LED 와 1개의 220 Ω 저항이 사용되었다.

그림_02.png

발광 다이오드 LED 는 두 개의 다리 중 긴 쪽이 양극으로서 3.3V 나 5V의 + 전기를 공급하게 되며 반대쪽은 반드시 전류 제한 저항과 연결해야 한다. 저항과 LED 연결 순서가 다음 그림에서처럼 바뀌어도 극성이 잘 유지되면 문제 될 것이 없다.

그림_03.png

전류 제한 저항의 역할은 전기 배선에서 과도한 전류 흐름에 따라 끓어지는 퓨즈와 유사한 역할을 한다.
그림에서는 빨빨검 띠를 가진 저항 즉 220Ω 저항이 사용되고 있다. 200∼470옴 사이의 저항이라면 사용이 가능하다.

LED는 전류제한 저항 없이 9V 전지에 연결하면 순간적으로 ON 되나 과전압 및 과전류로 인해 타 버리게 된다. 5V나 3.3V 전원과도 전류제한 저항 없이 연결하면 순간적으로 ON은 되지만 그래도 과전류로 인해 타 버릴 가능성이 높으므로 주의해야 한다. 전류 제한 저항은 220Ω, 330,Ω 470Ω이 많이 이용된다. 값이 커지게 되면 직렬로 연결된 LED의 밝기가 어두워진다. 전류 제한 저항의 값이 지나치게 크게 되면 점퍼선이나 배선에 흐르는 전류 가 지나치게 작아져 LED를 점등하지 못하게 될 수도 있다.

LED 는 극성이 있는 엘렉트로닉스 부품으로 다리 길이가 긴 쪽이 + 이고 짧은 쪽이 – 에 해당한다. 즉 + 에 높은 전압이 가해지고 – 에 낮은 전압이 되어야 LED 가 ON 될 수 있는 조건이 된다.

그림_04.png

아울러 이 예제에서는 두 개의 LED 가 있음에도 불구하고 하나의 저항이 사용되고 있는 점은 LED ON OFF 코딩에서 동시에 두 개의 LED 가 ON 되지 않도록 코딩할 계획에 기인한다.
그렇다면 이 회로의 전체 저항 값은 직렬연결이므로 전류제한 저항 값과 LED 하나가 ON 된 상태에서의 저항 값을 합하면 된다. 참고로 LED의 순간 저항 값은 전류 제한 저항에 비해 상당히 큰 편이다.

만약에 동시에 두 개의 LED를 ON 하게 되면 LED 가 병렬로 연결되어 있어 이 둘의 합성 저항 값이 하나의 LED 저항 값의 반이 되므로 회로 전체 저항 값이 앞의 경우와 비해 상당히 작아지게 되며 전류 값이 커지게 된다. 그냥 타버리지는 않으나 흐르는 전류 값이 크다는 점은 곧 LED 의 수명 단축과 직결되어 있다.

배선이 완성되었으면 코딩 단계로 넘어가기로 한다. PC에서 아두이노 편집기(Arduino IDE)를 열어서 새 파일을 열도록 한다.

새 파일을 열면 항상 void setup() 과 void loop() 문이 들어 있는데 이는 아두이노 편집기에서 bare minimum 이라 한다. 그 뜻은 아두이노 코드의 뼈대만 갖춘 그러나 아무런 코딩 내용이 없는 최소한의 틀이란 의미이다. 사용자는 여기서부터 코딩을 시작하면 된다.

void setup() 과 void loop() 이란 C/C++ 코딩 문법에서 유래된 바 void 란 단어의 뜻은 “비어 있다“ 를 의미하는데, setup() 이나 loop()를 실행하더라도 괄호 ()를 통해 파라메타 값을 전달하거나 또는 결과적으로 특별한 변수 값을 되 돌려 줄 필요가 없는 코딩 구조에서 사용된다. 만약에 코드 내용 중에 특별한 함수 값을 계산하는 루틴을 호출 실행한다면 함수 루틴은 계산 결과 값을 되 돌려주어야 할 것이다. 이런 경우에는 void 란 용어가 사용되지 않으며 함수의 괄호 부분에 되돌려 주어야 할 파라메터의 변수 명을 지정하게 되는 것이다.

코딩 내용 중에 //⚫⚫⚫ 는 코딩에 주석 설명을 달아주는 역할이라 컴파일 할 때에 아무런 문제를 일으키지 않는다. 사용하는 언어 편집기 별로 다른데 아두이노 IDE 는 // , 라즈베리 파이선의 경우는 #를 사용하기도 한다. 또는 설명하는 내용이 길 경우에는 /* ⚫⚫⚫ */ 형식을 취하기도 하는데 이때의 ⚫⚫⚫내용이 상당히 긴 경우에 국한된다.

사용자가 코딩을 완료하게 되면 적절한 경로를 지정하여 저장한 후에 컴파일 버튼을 눌러 문법이나 PC에서의 설정 환경을 체크한다. 반드시 괄호를 열었으면 닫았는지 또는 한 줄 한 줄 명령마다 명령 줄 분리 기호 즉 세미콜론(;)을 사용했는지 변수들의 유형 정수 또는 실수 선언이 제대로 되었는지 체크하게 된다.

그림_05.png

아두이노 편집기에서 새 파일을 클릭하면 나타나는 위 그림에서처럼 아무런 내용이 없는 bare minimum 도 컴파일이 가능하며 아래와 같은 결과를 출력한다.

그림_06.png

컴파일 된 내용을 아두이노 우노 아두이노 칩에 업로딩하기 위해서는 필수적인 준비 작업이 필요하다.

즉 아두이노 보드 지정과 함께 USB-2-Serial 로 연결된 COM 포트 번호를 정확하게 지정해주어야 한다.

국내에 아두이노 우노 호환 보드가 많이 보급되어 있는데 자신이 사용하는 보드가 아두이노 우노 보드인지 확인할 필요가 있다.

그림_07.png

보드 종류 지정 단계에서 아두이노 우노 또는 호환 보드의 경우에 Arduino/Genuino Uno를 정확하게 지정하기 바란다.

아두이노 우노 호환 보드라는 외형적으로는 거의 아두이노 우노이지만 길쭉한 Atmel CPU 칩 대신에 손톱만한 System On Chip을 사용하여 더욱 싸게 만들어 파는 보드 종류도 있다. 성능상의 문제는 전혀 없으며 단지 Atmel CPU 칩처럼 DIP 형태 소켓을 사용하지 않고 납땜 처리되어 있기 때문에 뽑아서 사용하기는 곤란한 점이 있다.
아두이노 보드의 붙박이 led 가 빠른 속도로 점멸하면서 업로딩이 완료된다.

그림_08.png

아두이노 코딩은 크게 3 영역으로 구성된다.
첫째 헤더 부분인데 필요한 라이브러리를 불러들이며 아울러 코드 수행에 필요한 전역 변수들을 설정하는 곳이다.

그림_09.png

하지만 이 예제에서는 별도의 라이브러리 지원이 필요 없으며 정수(integer)형 변수 즉 청색 LED 와 초록색 LED 배선이 연결되는 디지털 데이터 핀 번호 2와 3을 led_blue 와 led-green 이라는 변수 명으로 지정하였다.
전역 변수로 지정되면 setup() 이나 loop() 또는 설정된 루틴들이 있으면 그 어느 곳에서나 적용이 가능하다. 반면에 로컬 변수라는 것을 특정 루틴에서 설정하게 되면 그 루틴 내부에서만 한정적으로 유효하게 된다.

setup() 에서는 코드 수행을 위해 한 번 설정 되어야 하는 즉 PC와 USB 케이블을 통한 통신 속도라든지 LED 핀별로 출력할 것인지 입력으로 사용할 것인지 여부를 선언하여 설정한다.

그림_10.png

Serial.begin(9600)은 아두이노 보드와 USB-2-Serial 로 COM 포트와 연결된 PC 사이에서 통신 속도를 baud rate 단위를 사용하여 설정한다. 접두어로 보이는 Serial 은 클라스 명령 선언으로 보면 된다. 즉 아두이노 보드와 PC 사이에 이루어지는 USB 시리얼 통신을 의미하며, 클라스 명령의 뜻은 Serial.XXX 와 같이 접두사로 하여 파생된 여러 개의 명령을 사용할 수 있다는 의미이다.

pinMode(led_blue, OUTPUT)은 즉 아두이노 보드의 디지털 핀 2번을 청색 LED 출력용으로 설정한다. 마찬가지로 초록색 LED 용도 아울러 지정이 되어야 한다. 이 지정이 없다면 아두이노 CPU 는 이 디지털 핀을 입력으로 쓸 것인지 출력으로 쓸 것인지 미지정으로 인해 에러 메시지를 주게 될 것이다.

loop() 문에서 digitalWrite(led_blue,HIGH) 명령이 수행되면 즉 2번 핀이 HIGH가 되어 LED가 ON 점등 된다. delay(300)은 현재 LED 가 ON 된 상태에서 시간지연을 뜻하며 숫자의 단위는 msec 이다. 이어서 digitalWrite(led_blue,LOW) 명령이 실행되면 청색 LED 가 OFF 소등된다. 즉 시간지연 되는 0.3초 동안 청색 LED 가 ON 상태를 유지한다. 반면에 청색 LED 가 OFF 되면 초록색 LED 가 ON 되어 0.3초 지속하게 된다.

이렇게 loop() 문의 코드가 일회 수행되면 loop()의 특성에 의해서 전원이 제거되기 전까지 무한 반복을 하게 된다. 여기까지가 코딩 영역이며 다음 내용은 초보적인 엘렉트로닉스 관련 내용이다. 참고하기 바란다.

멀티메터로 LED 가 ON 되었을 때 전압을 측정해 보자. 멀티 메터가 없는 경우에는 본문에 기술된 측정 결과를 자신이 측정한 것처럼 그대로 참고해도 된다. 전압을 측정하려면 시간 지연 요소를 10초 정도로 충분히 준 후에 쉽게 측정할 수 있다. 청색 LED 는 2.8V 반면에 초록색 LED 는 2.2V 가 걸린다. 즉 어느 LED 가 ON 되었느냐에 따라서 전류 제한 저항에 걸리게 되는 전압도 변동된다. 즉 청색 LED ON 시 저항에 1.8V 의 전압이 걸리며 초록색 LED 가 ON 되면 2.4V 의 전압이 걸린다.

그림_11.png

초록색 LED 에 가해진 전압이 낮고 전류 제한 저항에 걸린 전압이 높으므로 이때의 전류 값을 옴의 법칙( E = I⚫R : E-전압 V, I-전류 A, R-저항 Ω)을 이용하여 알아보자. LED 허용 적정 전류는 20mA 로 알려져 있음을 참고하자.

전류 제한 저항에 흐르는 전류 I = 2.4V/220Ω = 0.011A = 11 mA 이다. 이 전류가 초록 색 LED 에 흐른다면 초록색 LED 의 순간 저항 값이 옴의 법칙 적용에 의해 계산 될 수 있다. R = E/I = 2.2V/0.011A = 200Ω 이 된다. 하지만 LED 는 상태에 따라서 전류 흐름과 순간 저항 값이 변동되므로 이 저항 값이 큰 의미는 없다.

만약에 두 개의 LED 가 동시에 ON 되어 있을 겨우 코드를 수정하여 실험해 보기로 한다. 5초간 동시 ON 후 5초간 동시 OFF 한다. 전류제한 저항에서의 전압은 2.4V LED 양단의 전압도 2.4V 로 측정되었다.

그림_12.png

전류 제한 저항에 흐르는 전류 I = 2.4V/220Ω = 0.011A = 11 mA 로 앞의 경우와 별 차이는 없다. 다만 청색 LED는 2.8V 가 걸려야 충분한 밝기를 내는데 전압이 떨어져 상당히 어둡게 ON 되었으며 초록색 LED 는 전압이 상당히 높아졌으므로 훨씬 밝아졌다.

LED를 각각 독자적으로 ON OFF 하기를 원한다면 청색 LED는 220Ω 전류 제한 저항을 그대로 사용하면 되며 초록색 LED는 적정 저항 값을 찾아야 할듯하다.

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.027
BTC 59476.67
ETH 2299.07
USDT 1.00
SBD 2.48