오렌지보드를 사용해 LED를 제어하기

[컴퓨터월드]


연재를 시작하며

오픈소스가 유행하면서 많은 회사들이 프로그램의 코드를 무료로 배포하는 경우가 많아졌다. 대표적으로 리눅스(Linux)를 들 수 있다. 오픈소스인 경우 창작자는 창작물에 대한 권리를 포기하고 소스의 사용, 복제, 배포의 권리를 모두에게 허락하기 때문에 누구나 그 프로그램에 대한 구성요소를 볼 수 있고, 자신이 원한다면 프로그램을 보완하여 수정하고 그 상태로도 배포가 가능하다.

이러한 오픈소스가 딱딱한 하드웨어 생태계까지 영향을 미치게 됐으며 오픈소스하드웨어라는 새로운 시장을 만들게 되었다. 대표적인 것이 아두이노와 라즈베리파이다.

오픈소스 하드웨어 시장에서는 하드웨어에 대한 회로도를 공개하고 이 하드웨어를 사용하는 코드들이 공개가 되어있어 누구나 쉽게 따라해보고 다양한 프로젝트를 제작할 수 있다. 연재를 시작하는 아두이노는 이탈리어로 ‘친한 친구’라는 뜻으로 대표적인 오픈소스 하드웨어로 딱딱하고 접근하기 힘들었던 임베디드 분야를 이름처럼 누구나 쉽게 접근할 수 있도록 만든 미니 기판이다. 이번 강좌에 사용하는 오렌지보드는 한국형 아두이노라 할 수 있다.

아두이노의 보급은 오픈소스 하드웨어의 확산을 불러일으켰고 메이커 문화의 확산에도 큰 기여를 했다. 최근에는 인텔, 마이크로소프트 등 대형 기업들도 이런 오픈소스 하드웨어시장에 뛰어들기 시작했다. 그 만큼 오픈소스 하드웨어 시장의 잠재력이 커졌다는 얘기이다.

오렌지보드 연재를 시작하며 다양한 사람들이 아두이노와 오픈소스 하드웨어에 대해 조금이나마 알게 되고 친숙해지는 계기가 되기를 바란다.


다양한 센서와의 호환성이 큰 장점

오렌지보드의 장점은 뭐니뭐니 해도 다양한 센서와의 호환성을 들 수 있다. 오렌지보드와 호환이 가능한 센서는 수 백가지가 넘는다. 센서의 수만큼 오렌지보드는 무궁무진한 확장성을 가지고 있으며 아이디어만 있다면 다양한 프로젝트를 제작할 수 있다.

이번 첫 연재에서는 오렌지보드 제어에서 가장 기본이 되는 LED를 제어해보려 한다.

LED는 Light Emitting Diode의 약자로 풀어쓰면 빛을 발산하는 다이오드라고 보면 된다. 다이오드는 한쪽 방향으로 전류가 흐르게 하는 소자이다.

LED의 장점은 백열전구와 달리 필라멘트를 사용하지 않기 때문에 외부 충격에 대해 강한 내구성과 긴 수명을 가지고 있으며 낮은 전압으로도 밝은 빛을 얻을 수 있다는 것이다. 때문에 다양한 제품에서 널리 쓰이고 있다.

LED 사용방법
단색 LED는 일반적으로 2개의 전극단자로 구성돼 있으며, 각 단자는 극성을 가지고 있다. 긴 단자는 애노드, 짧은 단자는 캐소드라 부른다.

▲ LED의 형태

긴 단자에 +전극을, 짧은 단자에는 -전극을 연결하면 LED가 켜지는데 LED는 일반적으로 약 2V의 전원이 필요하다. LED에 2V보다 더 높은 전압을 가하면 빛의 밝기가 더 커지지만, 한계전압에 이르러 LED가 파손될 위험이 있다.

또한, LED가 동작하는 순간, 과대 전류가 흘러 LED가 파괴될 수 있으므로, 전류 제한용 저항을 같이 달아주어야 한다. 오렌지보드의 공급전압은 5V이며, LED는 약 2V와 10mA을 소비한다. 따라서 옴의 법칙(전기 저항(R) = 전압(V) / 전류의 세기(I))으로 저항을 계산하면, (5-2) / 0.01 = 300Ω 이 필요하다. 그렇기 때문에 일반적으로 많이 사용되는 330Ω 저항을 달아주는 것이 안전하다.

오렌지보드로 LED를 제어해보기 위한 준비물 목록

▲ 오렌지보드로 LED를 제어해보기 위한 준비물은 아래와 같다.


하드웨어 연결하기

오렌지보드는 아래와 같이 연결한다. 아래의 이미지는 Fritzing이라는 툴로 만들었으며 Fritzing은 공개 프로그램으로 인터넷에서 쉽게 받을 수 있다. LED를 비롯하여 센서류, 소자류, IC칩 등 다양한 부품들이 기본적으로 제공되고 자신이 원하면 이미지를 만들어서 부품으로 등록해 사용할 수도 있다.


▲ Fritzing으로 만든 아두이노 회로도

▲ ORCAD로 만든 회로도

회로 연결방법

 1. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결한다.
2. LED를 애노드(긴 단자)가 아래쪽으로 향하게 하여 꽂는다.
3. LED의 애노드가 연결된 행에 330Ω 저항을 연결한다.
4. 저항의 반대 쪽을 오렌지보드 A1핀에 연결한다.
5. LED의 캐소드가 연결된 행을 -버스에 연결한다.

 

 소스코드

// LED를 A1핀으로 설정합니다.
int led = A1;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
// 빨간색 LED 핀을 OUTPUT으로 설정합니다.
pinMode(led, OUTPUT);
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
// LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(led, HIGH);
// 0.5초 동안 대기합니다.
delay(500);
// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(led, LOW);
// 0.5초 동안 대기합니다.
delay(500);
}


LED를 제어하기 위한 소스코드는 위와 같다. 오렌지보드 소스코드는 크게 2개의 구역으로 구분된다. 두 개의 구역은 각각 setup()함수와 loop()함수로 먼저 setup()함수는 처음 시작할 때 한번만 실행되는 함수이다. setup()함수 안에는 통신 초기화나 핀 번호 선언, 모드 설정과 같은 중요한 기능을 주로 포함하게 된다.

두 번째 구역은 loop()함수로 setup()함수가 실행되고 난 뒤 계속 그 기능을 반복하는 함수이다. 주로 오렌지보드가 실질적으로 해야할 일들을 포함한다. led제어나 각종 센서 제어, 연산기능, 통신기능 등을 이 부분에 작성한다.

위 소스에서 먼저 setup()에서 pinMode(led,OUTPUT)을 통해 led핀의 모드를 출력(OUTPUT)상태로 변경한다.

pinMode(pin, mode)
- pin : 핀모드를 설정할 핀번호
- mode : 핀의 모드(INPUT, OUTPUT, INPUT_PULLUP이 있다.)

 pinMode(pin, mode)함수는 오렌지보드에 달린 각 핀(pin)에 대해 데이터를 받아올 것인지 내보낼 것인지(mode) 정하는 함수이다. 한번 선언하면 그 이후에는 계속 그 설정을 유지하기 때문에 setup()함수에 위치하는 것이 좋다.

LED는 오렌지보드에서 전류를 내보내야 켤 수 있기 때문에 OUTPUT으로 설정한다.

그 다음 loop()에서는 실질적으로 반복해야할 일들을 작성하는데 먼저 digitalWrite(led,HIGH)를 통해 led핀에 HIGH값을 전달한다.

digitalWrite(pin, value)
- pin : 디지털 신호를 입력할 핀 번호
- value : 디지털 신호값. HIGH나 LOW로 줄 수 있다.

digitalWrite(pin, value)함수는 디지털 신호를 입력한 핀에 전달하는 함수이다. 디지털 신호를 전달하기 때문에 전달할 수 있는 값이 두 가지 형태 HIGH(1)와 LOW(0)로 존재한다. HIGH는 쉽게 말하면 전압을 제공하는 형태이고 LOW는 전압을 제공하지 않는 상태를 말한다. LED와 연결된 핀에 HIGH값을 전달하면 LED는 켜지게 된다.

▲ 오렌지보드에서의 디지털 파형

LED를 켠 다음에 delay(500)을 통해 잠시 오렌지보드 코드 진행을 중지시키는데 delay(ms)함수는 오렌지보드에서 흐름을 제어하는 중요한 함수로 오렌지보드는 일반적으로 싱글 쓰레드를 사용하기 때문에 코드 전체를 중지시키는 delay함수는 어떻게 쓰느냐에 따라 양날의 검이 될 수 있다.

여기에서는 500ms; 0.5초의 지연시간을 주었는데 사실 주지는 않아도 LED는 정해진 코드에 따라 깜빡거린다. 다만 매우 빠른 속도로 HIGH와 LOW값을 반복하기 때문에 사람은 LED가 깜빡거리는지 알 수가 없다. 그렇기 때문에 적당한 시간으로 지연시간을 주어 그 깜빡거림을 관찰할 수 있게 한다.

그 이후에는 다시 LED에 LOW값을 주어 LED를 꺼지게 하고 이러한 루틴을 loop()함수를 통해 무한 반복한다.

그렇게 되면 LED는 전력이 공급되는 한은 0.5초간 계속 깜빡거리게 된다.


마치며

오렌지보드는 어느 정도 프로그래밍에 지식이 있는 사람이라면 쉽게 사용할 수 있는 하드웨어이다.
오픈소스 하드웨어 중 가장 많이 사용하는 하드웨어이기 때문에 여러 라이브러리나 예제 코드 등이 활성화가 잘 되어있다.

코딩 난이도 또한 쉬운 편이기 때문에 초보자가 접하기 쉽고 숙련만 된다면 다양한 센서와 함께 여러 가지 작품들을 만들어 볼 수 있다.

오늘은 첫 번째 연재이기 때문에 간단히 LED를 제어해 보았다. LED의 종류가 여러 개이기 때문에 응용만 한다면 Strip형 LED를 비롯하여 Stick형 LED, SMD LED등 정말로 다양한 LED를 오렌지보드로 제어할 수 있다.

프로젝트에 대한 더 자세한 내용을 알고 싶다면 Kocoafab.cc를 방문해 보길 바란다.

 

 
코코아팹은 한국 메이커 문화를 만들어가는 온라인 메이커포털이다. 오픈소스 하드웨어 오렌지보드의 생산과 활용법 공개 등 많은 활동을 진행하고 있다.

 

저작권자 © 아이티데일리 무단전재 및 재배포 금지