전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

아두이노 실전 튜토리얼 (1) : 아두이노를 사용해 LED를 제어하기

전문가칼럼
DBMS별 분류
Etc
작성자
dataonair
작성일
2016-01-18 00:00
조회
6580





아두이노 실전 튜토리얼 (1)

아두이노를 사용해 LED를 제어하기



연재를 시작하며

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

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

오픈소스 하드웨어 시장에서는 하드웨어에 대한 회로도를 공개 하고 이 하드웨어를 사용하는 코드들이 공개가 되어있어 누구나 쉽게따라해보고다양한프로젝트를제작할수있다.

연재를 시작하는 아두이노는 이탈리어로‘친한 친구’라는 뜻으 로 대표적인 오픈소스 하드웨어로 딱딱하고 접근하기 힘들었던 임베디드 분야를 이름처럼 누구나 쉽게 접근할 수 있도록 만든 미 니기판이다.

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

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



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

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

이번 첫 연재에서는 아두이노 제어에서 가장 기본이 되는 LED 를제어해보려한다.

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

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



LED 사용방법

column_img_2301.jpg

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

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

또한, LED가 동작하는 순간, 과대 전류가 흘러 LED가 파괴될 수 있으므로, 전 류 제한용 저항을 같이 달아주어야 한다. 아두이노의 공급전압은 5V이며, LED 는약2V와 10mA을 소비한다. 따라서옴의법칙으로저항을계산하면,

전기 저항(R) = 전압(V) / 전류의 세기(I)

(5-2) / 0.01 = 300Ω이필요하다. 그렇기때문에일반적으로많이사용되는330Ω저항을달아주는것이안전하다. 아두이노로LED를제어해보기위한준비물은아래와같다.



column_img_2302.jpg

하드웨어 연결하기

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



column_img_2303.jpg

column_img_2304.jpg

소스코드
// 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,OUTP UT)을 통해 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는 켜지게된다.



column_img_2305.jpg

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 를방문해보길바란다.