나만의 움직이는 장난감 – 재패니노를 써보자! (어른의 과학 매거진 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()의 끝

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.