아두이노 LED 제어
이번 글에서는 가장 기본 예제라고 할 수 있는 아두이노 LED 빛의 제어 프로그램을 작성하고 실행해보자. LED는 들어오는 전류를 빛으로 변환해주는 부품인데 다리의 길이로 '음극'과 '양극'을 구별할 수 있다. 만약 이것들의 위치를 잘못 연결한다면 당연히 LED는 작동하지 않으며 파손될 수도 있다. (다리가 긴 쪽이 양극이고 짧은 쪽이 음극.)
다음은 전자부품에 전류가 흐르는 과정에서 과전류로 인한 피해를 방지하기 위한 [저항]에 대해서 알아보자. 아두이노는 기본적으로 5V의 전류가 흐르면서 작동하는데 LED에 이 전류를 장시간 흘려보내면 과전류로 인해서 훼손될 수가 있다. 그런 상황을 대비하기 위해서 전류 선과 LED 사이에 저항을 설치해주 게 되는데 생긴 건 다음과 같다.
학교 다닐 때 이 저항에 대해서도 분명히 공부를 했었고 그 크기에 따라서 전류가 어떻게 변하는지도 공부한 기억나긴 하지만 그 내용은 전혀 생각나지 않는다. (옴의 법칙 ▶ V(전압)=I(전류)XR(저항))ㅎㅎ
하지만 어떻게 사용하고 그 크기에 따라서 전류의 크기가 어떻게 변하는지 정도는 간단하게 파악할 수 있다. 일단 여기서는.... '저항'이란 과전류로 인해서 전자제품이 파손되는 걸 방지하기 위한 도구 정도로 정리하고 넘어가고 이제 LED를 활용한 예제들을 살펴보자.
첫 번째 예제에서는 여러 개의 LED가 파도처럼 순서대로 빛나도록 하는 내용이며 빵판에 다음과 같이 LED와 저항 등을 연결했다.
전체적인 구도를 보자면 그라운드(GND)에서 빵판 음극(-)으로 전류를 흘려보내고 있으며 디지털 핀 2~6번까지는 LED에 들어갈 양극(+)의 전류를 흘려보도록 했다. 그리고 디지털 핀 2~6에서 빵판으로 들어오는 + 전류와 LED 사이에는 저항을 연결해서 과부하로 인한 불상사를 방지했고, 그라운드 음극으로 들어가는 전류는 각 LED의 음극으로 향하도록 연결을 해줬다. 빵판쪽을 좀 더 자세히 보자.
바로 앞에서 정리한 내용대로 빵판에 저항 및 LED를 꽂고 음극과 양극의 전류들을 흐르게 한 상태인 걸 확인할 수 있다. 이제 이 LED들이 켜지도록 소스 코드를 작성할 건데 2~6번까지 순서대로 하나씩 켜졌다가 꺼지면서 진행하다가.... 다시 반대로 하나씩 켜졌다 꺼지기를 무한 반복을 해서 마치 왕복하면서 계속 파도타기 하는 행태의 빛들을 만들어보자. 빛이 켜지고 꺼지는 순서는 다음과 같이 될 것이다. (2>3>4>5>6>5>4>3>2>3>4>5>6)
소스 코드의 내용을 보자면 먼저... 불이 켜지는 딜레이 시간을 담당할 상수 TIME에 100을 할당했는데 1초가 1000ms이기 때문에 값을 100으로 해서 0.1초만 켜졌다가 꺼지도록 했다. 그리고 초기화 공간에서는 LED를 연결한 2~6번까지 디지털 핀에 전류를 밖으로... 즉 LED 쪽으로 흘려보내도록 하는 내용을 담고 있다.
이제 무한 반복되는 loop() 함수를 작성해보자.
loop에서는 가장 먼저 2번 핀이 켜지도록 했으며 ▶ (digitalWrite(2, HIGH))... 그리고 delay() 값에 앞에서 정한 상수 TIME을 전달해서 0.1초 동안 켜진 후에 digitalWrite 인자에 역시 (2, LOW) 전달해서 꺼지도록 하고 있다. 여기서 digitalWrite()의 인자 중 2는 LED가 연결된 디지털 핀번호인 걸 알 수 있고 HIGH는 전류를 보내도록.... LOW는 끊도록 하고 있는 걸 알 수 있다.
그렇게 0.1초 간격으로 순서대로 켜지고 꺼지기를 무한대로 반복하는 내용이다. 그리고 이 소소 코드를 아두이노에 업로드 한 후 실행한 결과 가음과 같은 결과를 얻을 수 있었다.
이렇게 해서 아두이노 프로그램 중 가장 기초라고 할 수 있는 LED 제어를 간단하게 해봤다.