태그 Archives: ARDUINO

나만의 움직이는 장난감 – 재패니노를 써보자! (어른의 과학 매거진 Vol.27)#2-2

*주의* 여기에 쓰여 있는 재패니노(Japanino)는 아두이노(Arduino) 호환기입니다. 어른의 과학 매거진 Vol.27 부록으로 일반인이 쉽게 접할 수 있는 제품이다 보니 이것을 기본으로 작업했습니다. 그러므로 재패니노라고 언급된 부분은 아두이노로 바꿔 읽으셔도 아무 문제 없습니다.

일단 불을 켜보자!

어른의 과학 매거진 Vol.27호 부록 테크노 공작 세트를 풀어봅시다. 아래와 같은 구성품이 보일 것입니다.

오른쪽의 하얀색은 광잔상 키트고 중간의 빨간 것은 재패니노, 그리고 왼쪽의 검은 것은 배터리 케이스입니다. 배터리 케이스 위에 있는 것은 광잔상을 남기는 LED 유닛입니다. 이번에 쓸 것은 재패니노와 배터리 케이스입니다. 광잔상 키트는 조립해야 하지만 이 둘은 그냥 바로 쓸 수 있기 때문에 기다리지 않고 바로 작업에 들어갈 수 있습니다.

사용자 삽입 이미지추가로 있으면 좋은 것은 AAA 전지 3개와 USB 연장 코드입니다.
전지는 재패니노를 컴퓨터 없이 동작하게 할 때 쓰는 전원이고, USB 연장 케이블은 컴퓨터에 직접 연결할 때 USB 포트의 위치에 따라 연결이 어렵거나 안될 때 쓰면 됩니다.

앞에서 설명한 대로 통합 개발 환경(IDE)의 설치가 끝났다면 USB포트에 재패니노를 끼우는 것으로 준비는 끝입니다. 아니라면, http://asteris.pe.kr/blog/1222 를 참조해서 컴퓨터에 모든 프로그램을 설치해 주세요.

저장해 놓은 폴더를 열고 아두이노 통합 개발환경 (이하 IDE)를 실행시킵니다.

사용자 삽입 이미지
자, 그럼 이제 재패니노를 움직일 스케치를 해볼까요? 스케치?

사용자 삽입 이미지
이런 건가요?
ㅡㅅ-);;;

아무래도 아두이노는 전자 전공자들의 실습키트가 아닌 인터랙티브 디자인의 한 방법으로 탄생했기 때문에, 비전공자도 쉽고 편하게 쓸 수 있어야 했을 것입니다. 그래서인지 프로그램이라는 표현을 피하려고 노력한 것처럼 보입니다. 아무래도 “프로그래밍한다”라고 하면 뭔가 전산 쪽을 전공해야 하는 느낌이 많이 들어서인지도 모릅니다. 그래서 그림에서 밑그림을 그리고 덧칠해서 완성해나가는 것처럼, 프로그램하는 것을 스케치한다고 표현한 모양입니다. 이렇게 해서 저장하면 스케치북이라는 메뉴에 기록이 남습니다. 그리고 자기가 작성한 프로그램은 스케치라고 부릅니다. (*주1)

어찌 되었건, 이제 처음 제목대로 불을 켜보도록 하겠습니다.

제일 먼저 할 일은 File -> Examples -> Digital -> Blink 를 순서대로 누르는 것입니다.

사용자 삽입 이미지
그러면 새 창이 열리면서 뭔가 창 가득 써져 있습니다.

어이쿠, 이거 영어네요.

다 무시합니다. 그냥 Upload 버튼을 눌러봅니다.

사용자 삽입 이미지
재패니노가 급격히 깜박거리면서 잠시 뒤 항상 켜져 있는 불 옆에 1초 단위로 꺼졌다 켜졌다 하는 불이 보일 것입니다. 이게 이번 스케치입니다.

사용자 삽입 이미지
그런 겁니다. 그냥 버튼 몇 번 눌러주면 재패니노는 동작합니다.

-끝-

음, 이렇게 넘어가자니 아쉽습니다. 내가 뭘 한 것인지도 모르겠습니다.

그럼, 스케치를 살펴봐야겠죠.
일단 그대로 옮겨 놓았습니다.

/*
  Blink

 Turns on an LED on for one second, then off for one second, repeatedly.

 The circuit:
 * LED connected from digital pin 13 to ground.

 * Note: On most Arduino boards, there is already an LED on the board
 connected to pin 13, so you don't need any extra components for this example.


 Created 1 June 2005
 By David Cuartielles

 http://arduino.cc/en/Tutorial/Blink

 based on an orginal by H. Barragan for the Wiring i/o board

 */

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

// The setup() method runs once, when the sketch starts

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

// the loop() method runs over and over again,
// as long as the Arduino has power

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

아무리 아두이노가 비전공자에게도 쉽게 다가갈 수 있게 나온 물건이라고 하더라도
기본적으로 스케치하려면 프로그래밍 실력은 있어야 할 거 같습니다.
그러나 초보자라는 전제하에서 일단 설명하겠습니다.

첫 번째 줄의 /*주석이라는 의미입니다. 주석이 뭐냐고요? 이딴 이상한 알파벳들 보느라 머리 아플 땐 시원한 맥주 한 잔 주석잔에 마시면 끝내주죠. ㅡㅅ-);;; 가 아니라… http://krdic.naver.com/detail.nhn?docid=34885500&re=y 를 눌러 직접 확인해 보세요. 이해하셨나요? 말 그대로 이 스케치가 어디에 쓰이는 건지, 또 이번 줄은 어떤 기능을 하는지에 대해서 설명을 달아놓은 것입니다. 쭉쭉 내려서 20번째 줄을 보니 아까와는 비슷한데 반대인 기호가 나오는군요. */ 는 주석을 닫겠다는 말입니다. 그러니까 /* 에서 */ 사이에 있는 것은 모두 설명이라는 의미입니다.

내용을 대충 풀이해보자면, 이 Blink(깜박임)이라는 스케치는 LED를 1초동안 켜고, 다시 1초동안 끄며, 그것을 반복한다.는 설명이 붙어있습니다. 그리고 LED는 13번째 핀그라운드(GND)에 물려 놓으라고 설명이 되어있지요. 대부분의 아두이노 보드들은 기본적으로 13번 핀에 LED가 붙은 상태로 나온다고 되어있습니다. 그러니 별도의 LED를 준비하지 않아도 된다.라는 내용이죠. 그 밑에는 누가 이 스케치를 만들었나라는 게 적혀있습니다.

여기서 말하는 LED는 쉽게 말하면 꼬마 전구입니다. 재패니노를 끼웠을 때 빨갛게 불이 들어오는 게 바로 LED입니다. 그리고 핀이라는 것은 무엇이냐면, 단자를 말합니다. 재패니노 양 옆의 검은색 구멍 뽕뽕 뚫린 것이 바로 단자들입니다. 옆에는 영어와 숫자로 뭔가 써있지요?  그것이 바로 그 단자(핀)의 이름입니다. 그리고 아래 사진에서 보는 것처럼 아래쪽에 보면 불들이 보이는 데 그 중 한개가 13번째 핀에 붙은 상태로 되어있는 LED입니다. 별 다른 준비물 없이도 재패니노만 가지고 불이 들어오는 것을 확인할 수 있게 만들어주도록 준비되어 있는 것입니다.

사용자 삽입 이미지
이제, 그 밑을 보면

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

라고 되어있습니다.

일단 녹색 부분부터 설명하겠습니다. ///*와 마찬가지로 주석이라는 표시입니다. 단, //의 뒤부터 그 줄 끝까지 해당한다는 의미죠. 즉

/* LED connected to digital pin 13 */

를 줄여서 표현한 것입니다. 한 줄밖에 안되는데, 앞뒤로 붙이고 있으면 짜증나니까 그냥 앞에 //를 붙여서 여기부터 이줄 끝까지는 주석이다.라고 알려주는 것이지요.

앞으로 와서 int ledPin =  13;은 내가 앞으로 LED를 13번째 핀에 붙이겠다고 생각한 걸 미리 예약해 놓는 것입니다. 그런데 어떻게 예약하느냐 하면, 앞으로 스케치에 나오는 ledPin이라는 낱말은 모두 13으로 바꿔 달라는 거죠. 13 뒤에 써있는 ;는 이 명령의 끝이다라는 의미입니다.

다음 24번째 줄. Setup()이라고 써있는 부분은 스케치를 실행시키면 딱 한 번 실행하는 부분이라는 설명입니다.

26번째 줄을 살펴보죠.

void
setup()   { 

맨앞의 것은 일단 무시하고, setup()이라는 게 있고 그다음 { 표시가 있습니다. 이것은 setup()이라는 게 관할을 시작하는 부분이라는 뜻입니다. 좀더 내려가서 29번째 줄을 보면 }가 나옵니다. 이건 관할을 끝내겠다는 의미입니다. 즉, setup()은 { 에서 }까지 관리하겠다는 얘기지요.

{}안의 내용을 보면 주석이 달려있네요.

재패니노의 디지털 핀을 출력모드로 쓰겠다는 것입니다. 출력모드가 뭐냐고요? 전기를 내보내겠다는 의미입니다. 꼬마전구를 켜려면 건전지를 연결해야하는 것처럼, 재패니노를 전기를 내는 장치로 만들겠다는 의미입니다.

pinMode(ledPin, OUTPUT);

아두이노 홈페이지에서 설명을 찾아봅시다. (http://arduino.cc/en/Reference/PinMode )
사용방법은 pinMode(핀 번호, 모드) 라고 나와있습니다.
몇 번째 핀을 어떤 모드로 쓰는지를 재패니노에 알려주는 명령입니다. 위에서 설명했지만, OUTPUT이라고 쓰면 전기를 내보내는 장치로 쓰겠다는 것이고, INPUT이라고 쓰면 전기를 받아들이는 장치로 쓰겠다는 의미입니다.
ledPin은 앞에서 설명한대로 13을 의미합니다. ledPin=13이니까 pinMode(13, OUTPUT); 라고 바꿔 써도 상관없습니다.

즉 지금까지의 흐름을 보면, 재패니노를 처음 쳐서 13번째핀을 출력용으로 쓴다고  약속잡아놓은 것입니다.
그런 약속은 한 번만 잡으면 되니까, setup()안에 써놓은 것이고요.

자, 이제 그 밑으로 내려갑시다.
31, 32번째 줄에 또 설명이 써있네요.

loop() 명령은 아두이노에게 전기만 넣어주면 계속해서 반복 실행된다.라고 적혀 있습니다.

자기가 재패니노에게 시키고 싶은 일은 이제 여기다 써놓으면 됩니다. 위의 setup()과 마찬가지로 { 과 } 사이에 써두면 됩니다.

밑으로 내려가죠. 36번째 줄.

digitalWrite(ledPin, HIGH);

아까처럼 아두이노 홈페이지 설명(http://www.arduino.cc/en/Reference/DigitalWrite )을 보면, digitalWrite(핀 번호, 출력 값)이라고 되어있습니다. ledPin은 아까 말한 것과 동일하게 13으로 바꿔보면 되고, HIGH전기를 내보내겠다는 의미입니다. 즉, 13번째 핀에 붙어있는 LED를 켜야하니 거기로 전기를 내보내라는 말이죠.

그 다음 37번째 줄.

delay(1000);

delay는 말 그대로 지금은 곤란하다, 기다려 달라는 의미입니다. ()안의 값만큼 기다리는데, 괄호안의 1은 1/1000초를 의미합니다. 따라서 1000이라고 썼으니 1000 x (1/1000) = 1, 1초를 기다리라는 의미입니다.
만약 5초를 기다리라고 하고싶다면 5000이라고 써주면 되겠지요.

그 다음 38번째 줄.
36번째 줄과 같습니다만, HIGH 대신 LOW라고 되어있네요. 이건 전기를 내보내지 않겠다는 명령입니다. 13번째 핀에 물려있는 LED로 나가는 전기를 끊어라는 명령입니다.

그 다음 39번째줄은 1초간 기다리라는 의미.

그 다음 줄 }는 loop()의 끝

나만의 움직이는 장난감 – 재패니노를 써보자! (어른의 과학 매거진 Vol.27)#2-1

사용자 삽입 이미지이제 본격적으로 재패니노(Japanino)를 사용할 차례입니다.

언제나 그렇지만, 딱딱하게 기술만 나열하면 재미가 없지요. 그럼 지난번엔 각켄과 어른의 과학 매거진을 소개했으니 이번엔 아두이노(Arduino)에 대해서 소개해 볼까 합니다.

기본적인 내용은 어른의 과학 매거진 Vol.27을 참조하여 정리하였습니다. 일본어를 읽을 수 있는 분들은 직접 책을 구해서 읽는 쪽이 더 좋겠네요. 풍부한 사진과 다양한 자료들이 첨부되어 있으니까요.

————————-
이태리제 오픈 소스 마이크로 컨트롤러 아두이노

아두이노는 수많은 마이크로 컨트롤러 제품 중 하나입니다. 마이크로 컨트롤러는 작은 칩 안에 컴퓨터의 기능을 넣어둔 것으로 생각하면 이해하기 쉽습니다. 컴퓨터 USB포트에 마우스를 끼워서 손동작을 입력받을 수 있고, 모니터를 연결해서 컴퓨터에서 정보를 표시할 수 있는 것처럼 마이크로 컨트롤러라는 칩에다 센서를 달면 감지한 데이터를 받아들일 수 있고, LED등을 연결해서 신호를 표시할 수도 있습니다. 모터를 달면 돌아가기도 합니다. 그 움직임은 사용자가 미리 프로그램해서 집어넣으면 됩니다. 컴퓨터는 범용으로 쓰이고 다양한 기능을 위해서 무거운 OS를 올리고 그만큼 움직이는 게 굼뜹니다. 하지만, 마이크로 컨트롤러는 딱 그 움직임에 맞춰 모든 것을 칩 안에 내장해서 전기가 들어오면 바로 동작하는 거죠. 특정 목적에 최적화 시킬 수 있는 작고 가벼운 제품이라는 것이 차이점입니다.
무엇인가 움직이는 완구를 보면 그 안에는 마이크로 컨트롤러가 들어 있다고 생각하면 됩니다. 주변에서 쉽게 볼 수 있는 자판기를 살펴봅시다. 돈을 넣으면 돈을 감지하고, 사용자가 버튼을 누르면 그것에 해당하는 물건을 꺼내 줍니다. 그리고 잔돈을 거슬러 주지요. 큰 자판기도 열어보면 속에는 조그만 전자 회로 부품이 들어 있는데, 여기에 마이크로 컨트롤러가 사용됩니다. 그 컨트롤러에 돈 넣는 것을 감지하는 센서를 연결하고, 버튼을 연결하고, 물건을 꺼내는 장치를 연결해둔 거죠. 각각의 신호가 들어오면 그에 맞춰 동작하도록 프로그램 해놓은 것입니다. 이런 간단한 동작을 하는데 Windows를 띄우고 할 필요는 없으니까 가볍게 그것에 최적화된 컴퓨터를 만든 것이지요.

이런 종류의 칩과 그것을 응용한 제품들은 이미 많이 나와있습니다.
그런데 왜 아두이노가 주목받을까요?

아두이노는 이탈리아 이브레아(Ivrea)란 곳에서 탄생했습니다. 이곳은 올리베티(Ing. C. Olivetti & C. SpA.)라고 불리는 이탈리아의 정보통신 회사의 거점이기도 했는데, 지나친 개발비, 경영 불화등의 이유로 휘청거릴 때, 이브레아의 경기도 함께 어두워졌다고 합니다. 이때 텔레콤 이탈리아가 올리베티를 인수하고 어두워진 이브레아 경기의 활성화의 일환으로 IDII (Interaction Desing Institute Ivrea; 이브레아 인터랙션 디자인 대학원)을 설립합니다.
인터랙션 디자인이란 사람과 컴퓨터를 어떻게 연관짓고, 컴퓨터에게 무슨일을 시킬 수 있으며, 어떤 결과를 얻어낼 것인가를 디자인하는 학문이라고 합니다.
많은 자금이 투자되어 전 세계를 대상으로 교수진을 모았고 여러가지 시도를 하였으며, 자유롭고 새로움을 추구하는 분위기가 조성되었다고 합니다. 그들은 인터랙션 디자인을 구현할 수 있는 새로운 플랫폼을 찾아 고민했고 그 결과 마이크로 컨트롤러를 이용하려 하였습니다.
그러나 여러가지 테스트를 했지만 당시로써는 사용하는데 많이 불편했고, 가격도 비싼 문제가 있었습니다. 결국 그들은 스스로 저가면서도 사용하기 편한 것을 만들기 위해 노력했고, 다양한 오픈 소스 개발 환경을 이용해 초기 버전이 탄생하게 됩니다.
초기 제품은 200장 생산되어 주도했던 교수와 학생들이 100여장을 소비했고, 100장은 온라인 판매로 연결되었으나 초기 불량이 많고 다양한 오류등이 발견되었다고 합니다. 그 결과를 바탕으로 개선을 거쳐 2005년에 Arduino Serial을 발매하고 Arduino Mini, Arduino Diecimila를 차례 차례 발표했으며, 2009년에는 주력 상품인 Arduino Duemilanove를 발매하게 됩니다. 그들이 독점한 것은 아니고, 모든 정보를 공개해서 누구나 따라 만들 수 있게 해놓았습니다.
단지 장치가 있다고 움직이는 것은 아니니 아두이노를 움직이게 할 수 있는 프로그램 개발용 프로그램도 필요합니다. 이들은 이 개발환경도 공개된 수많은 것들을 이용해서 만들고 공짜로 풀어버립니다.

아두이노가 오픈소스 정책을 펴는 것은 개발부터 오픈소스 컴포넌트를 이용했기 때문이라는 것과, 아무리 뛰어난 것도 모체가 사라지면 사라지고 만다는 마인드에서 시작되었다고 합니다. 아마도 올리베티가 휘청이면서 그들의 제품을 제대로 지원해주지 못하는 현상을 보고 느낀 것이 컸으리라 생각됩니다. 누구의 것도 아니게 만들어서 공개해놓으면 누구의 것도 되기 때문에, 스스로 진화하고 발전시켜나갈 수있다는 계산이겠지요.

그 결과 세계 수많은 개발자들이 호환보드를 만들고 개선하고, 그것을 피드백하여 발전해오고 있다고 합니다. 각각의 주력 분야에 맞춰 다양한 옵션 부품이 제조되고 그것이 피드백됩니다. 또, 전문적인 전공자가 아니더라도 레고 블럭을 끼워 맞추듯 조립하고 개발 프로그램에 미리 준비되어있는 수많은 예제를 그대로 이용하는 것으로 쉽게 사용할 수 있는 것도 매력적이라 할 수 있습니다. 뿐만아니라, 수많은 호환기들은 경쟁을 통해서 저렴한 제품을 선보이고 있어 주머니 사정이 좋지 않은 취미인들이나 학생들에게도 큰 도움이 되고 있지요.

결국 과실은 저같이 장난감을 움직여보겠다고 취미로 전자공작을 하려는 사람에게 까지 나눠지고 있습니다.

* 아두이노라는 명칭의 유래는 이름을 정하기로 한 마지막 날까지 정하지 못하다가 일단 좀 쉬자고 간 바 이름이 아두이노였다는군요. 그러면서도 이탈리아에서 매우 인기있는 초대 임금 중 한 명의 이름이기도 하고요. 그래서 최종 낙찰되었다고 하네요.