본문 바로가기

만들기 / making/Hardware,device

마이크로소프트웨어에 실린 글] ARDUINO 보드를 소개하며


현재 MDF 조각기는 작동하기는 하나 여러 가지의 현실적인 타협으로 고민하는 상태다. 차라리 중국 Sieg의 작은 밀링(mill)을 하나 사서 만드는 것이 빠를 것 같기도 하지만 실제로 바닥부터 출발하여 만드는 것만큼 빠른 학습곡선은 없다. 이런 과정을 공유하는 곳이 인터넷이다. 인터넷은 필자를 포함한 많은 사람들의 진정한 스승이다. 과거에는 몇 권의 책만 읽고 귀동냥으로 들은 다음 몸으로 때워야 했다. 완성된 기계나 망가진 기계를 가지고 진지하게 뜯어보는 일도 배움의 중요한 부분이었다. 그러나 요즘은 인터넷을 찾아다니며 글과 그림을 보는 일로 거의 몇 년에 해당되는 도약을 가능하게 만들기도 한다. 생각하면 무섭기도 하지만 본질적인 일은 변한 것이 없다. 집중된 에너지가 필요하다. 그런데 필자에게는 집중된 에너지를 방해하는 많은 일들이 있다. 할 일이 너무 많고 좋아하는 것들도 너무 많다. 이번의 글은 잠시 필자를 홀린 아이템의 하나를 적을 것이다. 필자는 정말 매혹된 적이 있다. 보드를 몇 개 수입하거나 빌릴까 망설이다가 만능기판에 만들어서 바로 테스트를 시작했다. 잠깐의 해크로 오리지널 보드의 버전들과 문제점 개선까지 알 수 있었다. 워낙 간단했다.

MDF 조각기의 최종안을 놓고 고민하는 와중에 원고를 쓸 때가 되었으니 조각기만큼 중요한 주제를 다루지 않을 수 없다. 필자는 요즘 오디오(해묵은 앰프 만들기와 스피커 유닛)에 빠져 있으나 3-4월에는 아두이노(Arduino)보드에 빠져 있었다.  8080, 8085,Z80부터 시작하여 여러 가지 제어기를 써왔고 다양한 개발환경을 사용해 보았지만 아두이노 보드와 비슷한 환경은 처음이다. 이 보드는 makezine을 포함한 여러 가지 프로젝트에 사용하고 있고 미디어 아티스트들 중에도 이 보드를 사용하는 사람이 많다. 그만큼 쉽고 가벼운 마음으로 개발을 할 수 있고 실제로 복잡한 개발교육의 입문용으로 아주 적당한 보드이기도 하다. 최근에는 우리나라에도 수입되기 시작하면서 avr 개발 보드를 파는 곳에서 아두이노 보드를 팔기 시작했다. 플러그하우스(plughouse.co.kr)라는 회사에서 취급을 시작한 것이다. 보드는 예전부터 알려져 있었는데 이 보드의 설계자가 한국에 와서 워크숍을 연적도 있다. 이 보드가 필자의 눈에 들어 온 것은 reprap 프로젝트가 그 동안 써오던 pic 콘트롤러 대신 아두이노 보드를 차기 콘트롤러로 채택하려 한 후부터다.

간단히 말하면 하드웨어 자체는 atmega 168 또는 atmega 8 마이크로 콘트롤러를 바탕으로 간단한 제어기를 만든 것이다. <화면 1>은 제일 많이 팔리는 데시밀라 보드다. 최초의 버전은 일반적인 시리얼 통신이었으나 요즘 노트북에는 rs-232 (시리얼) 포트가 사라지고 있다. 데스크톱 PC에는 당분간 남아있을 것이다. 그런 이유로 데시밀라보드는 USB를 시리얼로 변환하는 칩을 사용하고 있다.

하드웨어 자체는 전혀 새로울 것이 없다. 그리고 아두이노의 홈페이지(www.arduino.cc)에 가면 모든 회로와 PCB가 공개되어 있다. 오픈 소스 하드웨어인 것이다. 오픈 소스 소프트웨어에 이어 오픈 소스 하드웨어가 중요한 재료로 등장했다고 볼 수 있다. <그림 1>은 원래의 아두이노에 가까운 아두이노 시리얼의 회로도다. 기본적인 회로는 모든 버전의 하드웨어에 공통적이라고 볼 수 있다.

임베디드 시스템을 만들어 본 사람이면 도대체 이 회로가 무엇이 특별한 것인지 의아할 것이다. 일상적인 atmega8(또는 atmega168)의 보드다. 이 보드를 특별한 것으로 만든 것은 사람들이 이 저렴한 보드와 개발환경이 여러 가지 장난감을 만드는 일에 아주 편리하다는 것을 알게 되면서 부터다.

우선 개발 환경이 다르다. 이 점은 매우 특별한 점이다. 사람들이 AVR 프로세서의 개발을 하면서 만나는 환경은 AVR studio나 ICC AVR과 같은 전용 개발 환경이었다. AVR 칩을 개발하면서 무료로 다운로드 받을 수 있는 AVR Studio는 매우 훌륭한 프로그램인데, gcc의 avr 개발환경을 사용하기 쉬운 IDE 환경으로 만든 것이다. 지금까지의 AVR 사용자들은 이와 비슷한 프로그램 중에 하나를 선택할 수밖에 없었다. 사용이 어렵지는 않지만 초보자들이 배우기 쉽거나 편한 마음을 주는 인터페이스는 아니다. 엔지니어가 아닌 사람들이 쉽게 배우려면 더 간단하고 명료해야 한다!

필자가 홀린 부분은 아두이노의 개발환경이었다. 스케치(sketch)라는 프로그램이 있다. 이 프로그램을 사용하면 매우 간단하게 코드를 작성하고 바로 컴파일하고 보드로 다운로드 시킬 수 있다. 프로그램만 작성하면 바로 시리얼로 다운로드하여 프로그램을 즐길 수 있는 것이다.

이 개발환경은 자바와 processing 그리고 gcc를 포함한 여러 가지 오픈소스 프로그램을 이용하여 개발했다. ATMEGA 168(또는 8) 보드의 마이크로콘트롤러에는 부트로더를 설치하고 시리얼로 데이터가 전송되기를 기다린다. 그러니 특별한 개발환경은 없고 USB 케이블이 유일한 개발 장비인 셈이다. 사람들은 간단한 설명을 읽고 바로 개발에 들어갈 수 있는 환경을 좋아했다.
그리고 이 편리한 개발환경은 AVR이라는 탁월한 마이크로프로세서가 있었기 때문에 가능했다. AVR은 8비트에서는 아주 강력한 플랫폼이다. 팹(Fab)에서도 주력 마이크로프로세서다. 필자는 사람들이 쉽게 접근하는 교육과정이 힘들 것이라고 생각했는데 아두이노가 많은 부분을 해결했던 것이다. 그래서 아두이노는 오픈소스 컴퓨팅 플랫폼이다(맥이나 리눅스에서도 개발환경은 동일하다).

나중에 더 적겠지만 아두이노의 오리지널 보드 말고도 많은 호환보드가 존재한다. 필자는 처음부터 다른 보드들에 홀려서 보드를 선정하느라 며칠을 보냈다. 조합을 만들기 위해서다. 저렴한 보드를 만들 수 있다면 굳이 아두이노 보드를 살 이유가 없다. 대안을 더 좋아하는 것은 필자의 본능이다. 
그러나 사람들이 접근하기 쉬운 환경을 만들었다는 것은 아두이노 팀의 대단한 위업이라고 할 수 있다. 표준적인 장난감을 만들기 위한 가장 중요한 작업이다. 오리지널 아두이노에 대한 존경심도 충분히 갖고 있다. 

하지만 항상 오리지널 보드가 편한 것도 아니다. 용도에 따라서는 작은 보드나 변형된 보드가 편한 경우가 있으며 더 저렴한 보드를 사용하고 싶어 하는 사람도 있다. 그러니 나중에 대안들도 살펴보는 것이 좋겠다. 이들은 아두이노라는 이름을 사용하지 않고 보아두이노(Boarduino), 프리두이노(Freeduino)같은 이름을 사용하고 있다. 그리고 하드코어적인 RBBB(Really Bare Bones Board) 같은 제품들도 있다. 필자는 보아두이노의 회로가 마음에 들었다. 한때 회로를 제작하고 PCB를 찍을까도 생각해 보았으나 곧 다른 일들에 홀려서 묻혀버리고 말았다.

약간의 소프트웨어만 다룰 줄 알면 기존의 많은 예제들과 작품들을 가지고 많은 일들을 빠르고 쉽게 배울 수 있다. 사용자는 외부의 신호를 감지하거나 SW를 켜고 모터를 돌리기도 한다. 사용자와의 상호작용을 위한 여러 가지 신호와 액추에이터 그리고 무엇보다도 많은 사용례들이 늘어나고 있다. 많은 개발보드들이 응용의 예를 늘리기 위해 필사적인데 비해 아두이노는 저절로 늘어나고 있다. 재미와 개발의 영역이 만나는 곳에 이미 많은 예제들이 있다. 임베디드나 로보틱스를 포함해 교육과정을 준비하는 사람들 취미나 호기심을 위한 프로젝트에는 최선은 아니더라도 매우 좋은 선택이라고 할 수 있다. 앞서도 말했지만 필자에게는 Fab의 연장으로 중요한 플랫폼으로 생각하고 있다. 조만간 필자는 이 분야에 대한 책을 써야 할 것으로 생각하고 있고 그런 의미에서 아두이노는 중요한 프로젝트다.

우선 전자장치와 디지털에 대한 문턱을 낮춘다. 몇 가지를 해보고 나면 더 어려운 프로젝트가 어렵지 않은 프로젝트로 변한다. 필자는 이 문턱 낮추기를 위해 고심하다가 아두이노를 발견하고 놀랐다. 그냥 AVR 마이크로프로세서를 배우는 수준이 아니라 전자공학 만들기에 대해 많은 것을 배울 수 있다. 게다가 다른 AVR 보드들과 마찬가지로 아두이노 보드의 가격은  매우 싸다.  몇 만원으로 시작할 수 있는 프로젝트다. 이 보드로 정말 많은 것들을 할 수 있다.

아두이노 보드의 장점

<그림 2>는 ATmega 8의 블록다이어그램이다. 이 프로세서는 디지털로 외부 신호를 읽거나 아날로그 신호를 AD 컨버터로 읽거나 카운터 동작이나 PWM 신호를 보낼 수 있다. 여기에 약간의 회로를 더하면 거의 모든 일을 할 수 있다(예전에는 꿈의 콘트롤러였지만 요즘은 소매로 ATmega8은 천 원대 168은 4천 원대로 구입할 수 있다). 아두이노 데시밀라나 아두이노 환경을 구현할 간단한 보드는 이 콘트롤러의 기능을 간단하게 요약하여 복잡한 IO를 한 줄의 스케치 문장으로 바꾼다. 그러니 알고리즘만 만들 수 있으면 센서를 붙여 외부의 전압을 읽거나 외부장치를 움직이는 것은 아주 간단한 작업으로 변한다. 기왕 만드는 김에 약간의 간단한 전자 지식까지 배워 응용한다면 실상의 일들을 코딩하는 강력한 제어기로 변하는 것은 순식간이다. 초등학생이라도 제어기를 만들 수 있다. 미디어 아티스트들이 간단한 제어기를 만들어 인터랙티브 작품을 만드는 일도 아주 간단했다. 실제로 그동안 국내의 아두이노의 많은 작품들이 미디어 작품을 만드는데 사용되었다. 필자가 이 사실을 알게 된 것은 최승준 님의 이야기를 들은 후다. 웹을 검색하고 나서는 예상외로 많은 사용이 있었다는 것을 재확인 했다.

필자는 『Make Things to Talk』라는 책과 아두이노 사이트에 있는 몇 개의 예제를 읽고 실제 세계의 프로그래밍을 이토록 쉽게 가르칠(배울) 수 있다는 것을 알 수 있었다. 중요한 점은 쉽고 직관적이라는 것이다.

http://www.arduino.cc/en/Tutorial/HomePage 에 있는 예제들을 보자. 아두이노 보드와 간단한 브레드보드(사진의 구멍 뚫린 기판) 그리고 LED와 가변저항 같은 것으로 Sketch의 사용법을 익히는 일이 단시간에 끝난다. 워크숍으로 진행하면 초보자들이 AVR 보드를 손에 익히는데 몇 시간이면 충분하다는 것을 알게 된다. 그 다음에는 임베디드 프로그램을 혼자서 익힐 수 있다. 그러니 처음부터 심각하게 개발 프로그램을 익히느라 고생할 필요도 없다. AVR 내부를 너무 고민하지 않아도 된다. 웬만한 작업들은 이미 스케치에 내장되어 있기 때문이다. 이정도로도 온도나 습도를 읽어 들이기도 하고 근접센서들을 읽어 들이거나 전압을 읽을 수 있다. 나머지 응용은 그야말로 머리 쓰기에 달려있다. 최적의 코드는 아니더라도 그럭저럭 원하는 코드를 만들어 낼 수 있다. 그렇다면 만들기의 문턱은 낮아진다. 게다가 예제들도 꽤 많다. 우선 아두이노가 돌아간다고 생각하고 가장 간단한 코드를 짜보자.

int ledPin = 13;                 // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}


코드는 처음에 setup() 부분을 수행하고 그 다음 loop() 부분을 수행한다. pin 13은 약간의 delay를 갖고  불이 점멸된다.
그 다음엔 <화면 3>과 같이 가변저항을 연결한다.


이번에는 다음과 같은 코드를 sketch에서 실행한다. 이 코드는  가변저항의 값을 읽어 전압 값만큼 지연(delay)을 준다.

int potPin = 2;    // select the input pin for the potentiometer
int ledPin = 13;   // select the pin for the LED
int val = 0;       // variable to store the value coming from the sensor

void setup() {
  pinMode(ledPin, OUTPUT);  // declare the ledPin as an OUTPUT
}

void loop() {
  val = analogRead(potPin);    // read the value from the sensor
  digitalWrite(ledPin, HIGH);  // turn the ledPin on
  delay(val);                  // stop the program for some time
  digitalWrite(ledPin, LOW);   // turn the ledPin off
  delay(val);                  // stop the program for some time
}

실로 간단하지만 좋은 예제가 아닌가? 가변 저항을 돌린 만큼 점멸시간이 길어지고 짧아진다. 독자들이 원하면 습도나 촉각을 이용한 간단한 제어기 같은 프로젝트도 얼마든지 만들 수 있다.

<화면 4>와 <화면 5>는 조금 엽기적인 예들을 보여주고 있다. 하나는 필자가 가장 경제적인 아두이노 클론인 보아두이노를 기판을 이해하기 위해 만들어 본 것이고 이 보드로  아두이노를 이해했다. 부트로더에서 퓨즈비트까지 다 이해해서 만들어 볼 수밖에 없었다. 반드시 아두이노를 사야하는 것만은 아니다. 보아두이노는  보드 자체가 하나의 부품처럼 브레드 보드 등에 얹을 수 있도록 만든 것이다. 물론 오리지널과 100% 호환된다. 다른 하나는  이고이(Igoe)의 보드로 아예 브레드 보드위에 조립하는 방법을 설명하고 있다. 조금 더 하드코어로 가면 크리스탈(수정 발진자)마저 생략하고 AVR 칩 하나로 아두이노처럼 동작하도록 만들 수 있다.

아두이노로 만든 프로젝트들은 아주 많으니 독자들은 많은 영감을 얻을 수 있을 것이다. 아직은 PC와의 통신에 불만이 있기는 하지만 중요한 플랫폼 하나를 득템한 것이다. 웬만한 것은 거의 다 만들어 볼 수 있다. 

'만들기 / making > Hardware,device' 카테고리의 다른 글

SMD SIZE 규격  (0) 2010.03.12
베터리자체를 솔라필름으로  (0) 2009.09.01
scrapyardchallenge workshop  (0) 2009.08.31
[무작정따라하기] SMD 타입도전기  (0) 2009.07.29