본문 바로가기

Electronics

아두이노 기초 강좌 1

지난 번에는 아두이노가 무엇인가와 아두이노에 흥미를 가질 수 있을 만한 예를 몇가지 보는 것으로 아두이노를 소개하는 시간을 가졌다.

이번에는 약간 깊이 들어가보기로 한다. 약간만 ^^ 아두이노로 할 수 있는 가장 간단한 일이 LED를 켜고 끄는 것이다.
그걸 하기 위한 도구를 어떻게 준비하고 연결해야되는지를 알아 보자.

먼저 아두이노 보드와 컴퓨터가 필요하고, 둘을 연결할 USB케이블이 필요하다. 그리고 컴퓨터에 아두이노 프로그래밍을 위한 프로그램인 아두이노를  www.arduino.cc 에서 자기 OS에 맞는 것으로 무료로 다운받아 설치한다. 오픈소스라서 공짜다. 걱정하지 말고 다운받아서 설치하자. 

아두이노 보드와 USB케이블은 www.plughouse.co.kr에서 살 수 있다. 전자부품을 잘 모르면 arduino starter kit을 사는 것이 편할것이다. 단품으로 살때는 arduino duemilanove/328 보드를 사면된다.  duemila nove (두에밀라노베)는 이탈리아어로 2009란 뜻으로, 아두이노의 2009년 버전을 뜻하는 이름이다. 짐작했다시피 이탈리아 사람들이 만들어서 이탈리아어로 된 이름을 가지게 되었다.


아두이노 두에밀라노베

USB케이블


아두이노  맥킨토시 버전을 다운받으면 FTDI USB Driver가 함께 딸려 온다. 아두이노는 어플리케이션 디렉토리로 드래그해서 깔고 FTDI USB Driver는 더블클릭해서 깔아준다.

윈도우즈 버전은 일단 프로그램 먼저 깔고 나중에 USB케이블을 꽂으면 비스타 이상은 자동으로 설치되고, XP는 새로운 하드웨어를 감지했다는 창이 뜨는데, 이때 아두이노가 설치된 디렉토리 밑의 drivers/FTDI USB Drivers 디렉토리를 지정해서 드라이버를 설치해준다. 

그러면 복잡한(?) 프로그램 설치가 끝난 것이다. 

아래는 아두이노 프로그램이다. 요즘 최신 버전이 0018이다.   맥킨토시 버전이라 메뉴가 분리되어 있지만 윈도우즈 버전은 메뉴가 붙어 있다. 
  



위 그림의 아이콘으로 된 버튼들의 사용법을 보면, 
맨 왼쪽 원안에 삼각형은 컴파일 버튼이다. 프로그램을 다 짜고 나서 저장 한 후에 이걸 누르면 컴파일이 된다. 컴파일은 보드안의 마이크로컨트롤러 칩이 알아먹을 수 있는 기계어로 프로그램을 변환해주는 과정이다. 프로그램 고칠 때 마다 해줘야 된다.
그 다음 원안의 네모는 멈춤, 
윗쪽 화살표는 문서 열기
아래쪽 화살표는 저장하기, 프로그램을 고친 후에는 한 번씩 해줘야 한다. 
오른쪽 화살표는 보드로 프로그램 업로드하기이다. 컴파일 후에 업로드를 누르면 작성한 프로그램이 아두이노 보드에 업로드 된다. 이것도 프로그램 고칠때 마다 다시 해줘야 한다.
끝으로 네모안의 네모와 연결된 쪼그만 동그라미가 든 (길다--;;) 아이콘은 시리얼 모니터인데, 아두이노 보드가 컴퓨터에게 보내는 문자들을 보여준다. 

프로그램을 짜고 저장 - 컴파일 - 업로드 순서로 한번씩 눌러주면 아두이노 보드로 프로그램이 올라가서 실행이 되는 그런 식이다. 일단 보드에 프로그램이 올라가면 자동으로 시작된다. 재시작은 보드의 리셋버튼을 누르면 되고, 끄려면 USB케이블을 뽑으면 된다. 스위치는 따로 없다. 단순한 세상이다.

보드의 전원공급은 USB케이블을 통해서 되며, 별도의 전원단자로 전원을 공급해주면 자동으로 USB의 전원은 끊어 지도록 되어 있다. 그러나 이런 전원 자동전환 기능은 두에밀라노베 보드에서 부터 적용된 것이기 때문에, 예전보드나 다른 호환보드는 두 가지 전원이 동시에 공급되지 않도록 주의 해야 한다.


그럼 오늘의 하이라이트 LED켜고 끄기 프로그램을 해보자.
아래의 코드를 아두이노에 쳐 넣고 컴파일 해서 업로드하기만 하면 보드에 달린 LED는 자동으로 1초간 켜졌다가 1초간 꺼졌다가를 반복하게 된다.

회로는 부품 2개만 써서 간단하게 구성할 수 있다. 13번 핀에 전선을 꽂아서 200오옴 이상의 저항을 연결하고 저항의 반대쪽에 LED의 긴 다리를 연결한다. LED의 짧은 다리는 아두이노보드의 GND(그라운드)에 연결하면 회로가 완성 된다. 저항과 LED는 납땜을 해도 되지만 시험용일 경우에는 브레드보드(일명 빵판)라는 것을 이용해서 땜질 없이 연결하는 방법을 쓴다.


빵판이란건 위 사진처럼 꽂으면 빨간 전선과 LED의 한가닥이 연결된 것이고 LED와 저항도 연결이 된다. 5개의 구멍끼리 내부에서 연결이 되어 있는 구조다. 빵판의 구조는 나중에 자세히 설명하기로 한다. 위에 사용한 보드는 아두이노와 호환되는 RBBB라는 보드로 사이즈는 다르지만 완벽하게 호환된다. 

마이크로 컨트롤러 프로그램은 기본적으로 해 넣은 프로그램이 무한반복하는 방식이다. 그러니까 아래의 프로그램은 한번 켰다가 잠시 후 끄는 동작만을 담고 있지만 자동으로 그 짓을 무한 반복하는 것이다. 이게 마이크로 컨트롤러 프로그래밍의 가장 기본이 되는 프로그래밍 규칙이다.

// 는  단지 다른 사람이 알아보기 쉽게 설명을 쓰기 위한 기호로써 그 다음에 쓰는 글씨는 프로그램 실행과는 아무 관계 없다. 단 한줄 넘어가면 안된다. 한 줄 내에서만 작동한다. 
//의 앞에 있는것은 프로그램으로 작동하고 //의 뒤에 있는 글자만 설명문으로 간주된다. 앞으로 //를 이용해서 코드를 설명하겠다.


//LED blink example

int ledPin = 13;                                 // 13번 핀을 ledPin이라고 이름지어 준다. ledPin이라는 정수형 
      // 변수의 선언이기도 하다.
void setup()                                     // 모든 아두이노 프로그램엔 void setup()이라는 함수가 들어가고, 
{                                                    // 처음 한번 만 실행되는 것들을 담고 있다.
  pinMode(ledPin,OUTPUT);                // 위에서 이름지어준 ledPin 이라는 포트를 OUTPUT출력으로
}                                                    // 지정한다.

void loop ()                                     //void loop()도 모든 아두이노 프로그램에 기본적으로 들어가는 것으
{                                                    //로써, 아두이노를 켜 놓는 동안 무한반복할 동작이 이 안에 들어간
  digitalWrite(ledPin, HIGH);               //다.  ledPin이라고 이름붙인 13번 핀에 전기를 줘서 불을 킨다.
  delay(1000);                                 // 그 상태 그대로 1000 밀리 초(1초) 만큼 기다린다.
  digitalWrite(ledPin, LOW);               // ledPin에 전기를 끊어서 불을 끈다.
  delay(1000);                                 // 그 상태 그대로 1000밀리 초를 대기한다.
}      
                                


위에서 setup()과 loop()는 함수라고 불리우는 것으로 void는 그 함수의 특성을 지정하는 말이고, 아두이노를 쓰는 내내 저 두 함수명은 변하지 않고 쓰이게 된다. 아두이노 프로그램의 기본뼈대가 되는 것이다. 어떤 아두이노 프로그램에도 void setup()과 void loop()는 들어 간다는 뜻이다. 순서를 바꿔도 실행은 되지만, 프로그램을 나중에 볼 때 헷갈릴 수가 있다. 각 함수의 내용은 중괄호로 감싸준다.

아두이노로 대략 중괄호 빼고 8줄이면 LED를 깜빡이는 프로그램을 짤 수 있다는 말이 된다. 프로그램을 조금이라도 짜 봤다면 많이 어렵진 않다고 보는데, 프로그래밍을 처음 접한다면 당황스러울 수도 있을 것이다.

LED하나를 켜고 끄는건 정말 시시한 일이지만 직접 해보면 결코 시시한 기분은 아닐것이다. 새로운 세상을 아는 첫 걸음을 내 딛을 때의 흥분을 새로운 것을 배워본 사람이라면 알 수 있을 것이다. 마치 로미오와 첫날밤을 겪은 줄리엣의 기분이라면 이해가 갈까? 세익스피어 인 러브에 나온 기네스펠트로의 대사가 떠오른다. 
"새로운 세상을 만났어! " 


P.S. 본 강좌를 보시고 이해가 안가는 부분이나 어려운 부분이 있으면 꼭 댓글을 남겨 주시기 바랍니다. 알아듣기 쉬운 강좌로 만드는데 큰 도움이 될 것입니다 ^^

'Electronics' 카테고리의 다른 글

아두이노 기초강좌 3  (13) 2010.04.28
아두이노 기초강좌 2  (34) 2010.04.14
꽃보다 남자? 물감보다 아두이노!  (15) 2010.03.30
CDROM drive stepper motor hack  (13) 2010.03.05
GPS Logger 자작기  (11) 2009.08.17