기타 2010.07.01 16:24
1. 아두이노

아두이노는 마이크로 프로세스를 탑재한 보드와 개발툴을 제공하는 오픈 프로젝트입니다. 보드가 USB와 연결된 상태에서 프로세싱에 기반한 통합개발환경에서 소스코드를 작성하고 Upload 버튼을 클릭함으로써 보드로 간편하게 업로드 할 수 있습니다. 아래는 티스토리 블로그에서 댓글이 등록되면 LED가 5초동안 켜지는 간단한 샘플을 실행한 모습입니다.


아두이노는 국내에서는 플러그 하우스나 기타 하드웨어를 취급하는 쇼핑몰등에서 보드와 관련 모듈, 부품들을 구입할 수 있습니다. 전기적인 지식이 조금 있으신 분들은 아두이노 공식 사이트에 공개된 하드웨어 메뉴얼을 참조하여 직접 만드는 것도 어렵지 않습니다.

아두이노
카테고리 컴퓨터/IT > 컴퓨터공학 > 마이크로프로세서 > 마이크로프로세서일반
지은이 마시모 밴지 (인사이트, 2010년)
상세보기

아두이노와 관련된 번역서도 나와 있고 공식 사이트의 Leaning, Reference 페이지와 인터넷에 공개되어 있는 많은 자료들을 참고하면 쉽게 익숙해질 수 있습니다. 브레드보드를 이용하여 LED, 모터, 스위치, 센서와 저항들을 연결하여 사용하면 기판을 만들 필요도 없고 납땜도 필요없이 손쉽게 원하는 회로를 만들어 볼 수 있습니다.

요즘은 아이가 로봇교실에서 사용하던 각종 센서와 모터를 물려서 시간날때 마다 이것저것 만들어 보고 있는데 재미있습니다.

물론 지금 쓰고 있는 컴퓨터 보다 1,000배는 더 열등한(?) 하드웨어이고 간단한 코드들로 간단한 동작들만 하지만 직접 하드웨어를 구성하고 제어하는 물리적인 재미와 함께 어린시절 전자키트를 가지고 놀던 향수도 느낄 수 있습니다. 직접 회로를 만들 수도 있지만 판매되는 전용 이더넷 쉴드모터쉴드직비 쉴드등을 이용해 쉽게 기능을 추가할 수 있으며 로봇 교재 사이트등에서 판매하는 부품들도 대부분 사용이 가능합니다. 아두이노는 소프트웨어 개발자를 위한 저렴(?)하고 재미있는 장난감중 하나인 것 같습니다.

아두이노는 스크래치에서도 바로 인식이 가능하기 때문에 스크래치의 센서보드로도 사용할 수있습니다. 관찰 메뉴에서 하단의 센서 관련 블록에서 우클릭 후에 'ScratchBoard 감시판 보이기'를 클릭하고 다시 감시판에서 우클릭 후에 '시리얼/USB 포트 선택'을 클릭하면 아래와이 아두이노 보드가 인식됩니다.


이를 이용하면 스크래치의 리모콘, 게임 컨트롤러를 쉽게 만들 수 있으면 촉각, 광, 온도, 적외선, 소리 센서등을 이용해 실제 환경을 스크래치에 반영시키는 것이 가능합니다. 스크래치뿐만 아니라 여러 개발환경에서 아두이노와 통신할 수 있는 방법들이 많이 공개되어 있습니다.


2. 샘플

이전에 포스팅한 블로그의 새 댓글을 확인하는 스크래치를 아두이노 버젼으로 만들어 보겠습니다. 이번도 마찬가지지만 정확한 파싱없이 대충 새 댓글을 판별하는 것이기 때문에 뭔가 쓸만한게 만들어 보실려면 코드를 많이 수정하셔야 할 것 입니다.

1) 아두이노 코드
아두이노 통합개발환경은 아두이노 공식 사이트의 다운로드 페이지에서 사용하는 OS별로 다운 받으실 수 있습니다. IDE의 에디터에서 아래의 코드를 입력한 후에 상단의 Upload 버튼을 클릭하면 보드로 업로드됩니다.

  1. #define LED_PIN    13
  2. #define DELAY_SEC  5
  3.  
  4. void setup() {
  5.   Serial.begin(9600);
  6.   pinMode(LED_PIN, OUTPUT);
  7. }
  8.  
  9. void loop() {
  10.   if (Serial.available() > 0) {
  11.    
  12.     byte b = Serial.read();
  13.     if (== 'O') {
  14.       digitalWrite(LED_PIN, HIGH);
  15.       delay(1000 * DELAY_SEC);
  16.       digitalWrite(LED_PIN, LOW);
  17.     }
  18.   }
  19. }

2) 프로세싱 코드
아두이노에서는 별도의 이더넷 모듈 없이는 직접적인 인터넷 연결이 불가능하기 때문에 프로세싱과 연동하여 블로그의 내용을 가져오도록 합니다. 프로세싱 IDE에서 아래의 코드를 입력하고 실행합니다.

  1. import processing.net.*;
  2. import processing.serial.*;
  3.  
  4. final String BLOG_URL = "www.cocoadev.co.kr";
  5. final int DELAY_SEC = 5;
  6.  
  7. String prevCommentID = "";
  8. Serial port;
  9.  
  10. void setup() {
  11.   size(400, 140);
  12.   background(10);
  13.  
  14.   port = new Serial(this, Serial.list()[0], 9600);
  15. }
  16.  
  17. void draw() {
  18.   background(10);
  19.   text(String.format("* URL: %s", BLOG_URL), 10, 25);
  20.  
  21.   Client webClient = new Client(this, BLOG_URL, 80);
  22.  
  23.   webClient.write("GET / HTTP/1.1\n");
  24.   webClient.write(String.format("HOST: %s\n\n", BLOG_URL));
  25.  
  26.   delay(1000 * DELAY_SEC);
  27.  
  28.   if (webClient.available() > 0) {
  29.     String data = webClient.readString();
  30.     String[] comment = match(data, "/[0-9]*#comment[0-9]*");
  31.    
  32.     text(String.format("* Received: %02d:%02d", hour(), minute()), 10, 50);
  33.    
  34.     String statusTitle;
  35.     if (comment != null && comment.length > 0) {
  36.       String recentCommentID = comment[0];
  37.      
  38.       if (prevCommentID.equals(recentCommentID)) {
  39.         statusTitle = "None";
  40.       } else {
  41.         statusTitle = "New";  
  42.        
  43.         port.write("O");
  44.       }
  45.      
  46.       prevCommentID = recentCommentID;
  47.     } else {
  48.       statusTitle = "Error";
  49.     }
  50.      
  51.     text(String.format("* Status: %s", statusTitle), 10, 75);
  52.   }
  53. }

아래와 같이 실행되는 모습을 확인할 수 있습니다. 급조한 소스에 나와있다시피 실행한 후 5초 후에 최초로 한번 LED가 한번 켜지고 그후에는 댓글에 변경이 있을때마다 켜집니다.
아두이노는 몇년전 마소와 같은 잡지에도 소개되고 사용하는 분들이 많으실 것 같습니다. 저야 신호등 놀이나 하는 수준이지만 인터넷을 찾아보니 기발한 아이디어로 재미있는 것들을 만드시는 분들이 많더군요. 재미있는 것을 하나 만들어봐야 겠다는 생각이 드는데 딱히 떠오르는 것은 없습니다. 그냥 이렇게 살살 가지고 놀다 끝날 수도 있을 것 같네요.

'기타' 카테고리의 다른 글

다시 글쓰기  (2) 2011.07.19
아두이노와 놀기  (4) 2010.07.01
참고할만한 좋은 아이폰 소스  (19) 2010.05.04
세계지도 앱 - World Atlas  (2) 2010.04.21
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24

정확히 언제부터인지는 모르겠지만 현 버젼(1.4)의 스크래치는 42001 포트를 이용한 소켓통신으로 양방향으로 데이터를 전송할 수 있습니다. 이를 이용해서 티스토리에 댓글이 추가되었을때 스크래치에서 알려주는 간단한 샘플을 만들어 보겠습니다.


1. 스크래치

1) 원격 센서 연결 활성화
소켓 통신을 위해서는 스크래치의 관찰 항목 하단의 '센서의 버튼누르기' 명령어 블럭을 마우스로 우클릭합니다. 나오는 메뉴중에 '원격 센서 연결 활성화'를 클릭하고  '원격 센서 연결 켜기' 대화상자가 뜨면 확인 버튼을 클릭합니다. 이로써 스크래치가 소켓통신이 가능한 상태가 됩니다.

2) 메시지 생성
다음은 메시지를 생성합니다. 제어 메뉴의 '방송하기' 명령어 블록을 우클릭하여 '새로 만들기...'를 클릭합니다. 메시지의 이름에 new_cmt를 입력하고 확인 버튼을 클릭합니다.


3) 스크립트
아래와 같이 스크립트창에서 명령어 블럭을 배열합니다. 캡쳐 이미지는 파이썬으로 부터 enw_cmt 메시지를 수신했을 때 동작하는 모습입니다.



2. 테스트 코드

1)  코드

스크래치가 준비되었으면 파이썬을 이용하여 테스트를 해볼 수 있는 간단한 코드를 작성해 보겠습니다. 에디터에서 아래의 소스를 입력하고 scratch.py로 저장합니다. 터미널에서 'chmod +x scratch.py' 명령을 실행하여 파일이 실행 가능하도록 권한을 변경합니다.

  1. #!/usr/bin/python
  2. #  -*- coding: utf-8 -*-
  3. import socket, httplib, re, time
  4. from array import array
  5.  
  6. DELAY_SEC = 5
  7. SCRATCH_PORT = 42001
  8.  
  9. def sendToScratch():
  10.     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11.     sock.connect(('127.0.0.1', SCRATCH_PORT))
  12.  
  13.     msg = 'broadcast "new_cmt"'
  14.     sdata = array('c', [chr(0), chr(0), chr(0), chr(len(msg)&0xFF)])
  15.  
  16.     sock.send(sdata.tostring() + msg)
  17.     sock.close()
  18.  
  19. prevComment = ""
  20. while True:
  21.     webClient = httplib.HTTPConnection("www.cocoadev.co.kr")
  22.     webClient.request("GET", "/")
  23.     response = webClient.getresponse()
  24.  
  25.     rdata = response.read()
  26.  
  27.     webClient.close()
  28.  
  29.     result = re.search("/[0-9]*#comment[0-9]*", rdata)
  30.  
  31.     curComment = result.group(0)
  32.  
  33.     if curComment != prevComment:
  34.         print ">> New comment"
  35.         prevComment = curComment
  36.         sendToScratch()
  37.     else:
  38.         print "-- No new comment"
  39.  
  40.     time.sleep(DELAY_SEC)

2) 테스트
스크래치가 실행된 상태에서 위의 파이썬 코드를 실행합니다. 처음 한번은 새로운 메시지가 왔다는 이벤트를 보냅니다. 파이썬 시작후에 스크래치에서 'new_cmt' 메시지를 수신하고 해당 블럭이 실행되는 것을 확인하실 수 있습니다.


간단한 테스트 코드를 만들어 보았는데 위와 반대로 스크래치에서 보내는 메시지를 파이썬에서 수신도 가능합니다. 이를 이용하면 스크래치에서 트위터에 글을 내보내는 등 다른 어플리케이션들과 연동하여 다양한 방법으로 스크래치의 활용이 가능합니다. 아래의 파일을 클릭하여 위의 스크래치와 파이썬의 소스를 다운로드 받으실 수 있습니다.





지인의 소개로 구입해서 얼마전까지 읽은 책입니다. 초창기 애플에서 맥용 소프트웨어를 개발했던 앤디 허츠펠드가 당시 매킨토시를 개발하면서 겪었던 재미있는 사건들을 Folklore 사이트에 정리해 놓은 것을 책으로 출판한 것입니다. 앤디 허츠펠드는 2005년부터 구글에서 소프트웨어 엔지니어로 근무하며 주로 JavaScript를 사용하는 일을 한다고 합니다. 한 인터뷰에서 애플과 구글은 비슷한 점이 많지만 몇가지 다른점도 있는데 구글은 애플 보다 더 직원을 신뢰한다고 이야기 했습니다. 스티브 잡스가 들으라고 한 소리일까요?

미래를 만든 GEEKS
카테고리 경제/경영
지은이 앤디 허츠펠드 (인사이트, 2010년)
상세보기

스티브 잡스에 관한 책들은 많지만 이렇게 직접 만든 실무자가 이야기를 쓴 책은 처음 본 것 같습니다. 그래서인지 공감가는 이야기들도 많고 여느 애플에 관한 책보다 재미있게 읽었습니다. 소프트웨어 개발자가 쓴 책이다 보니 다소 기술적인 이야기들이 많이 나오지만 오히려 개발자들한테는 더 큰 재미를 주는 것 같습니다. 내용은 80년대 초반 매킨토시를 개발하고 있던 팀에서 허츠펠드가 겪었던 혹은 들었던 일들을 회고하는 형식으로 되어 있습니다. 

재미있었던 부분은 MS의 빌게이츠가 1983년 컴덱스에서 윈도를 발표하자 격노한 스티브 잡스가 애플로 빌 게이츠를 불러 들였을 때 나눈 이야기들입니다. 잡스가 먼저 "나는 당신을 믿었는데 당신은 지금 우리 것을 훔치고 있어"라며 소리치자 빌 게이츠는 아래와 같이 침착하게 대답했습니다.

"이봐, 그 일을 보는데는 여러가지 시각이 있다고 생각해. 우리에게는 둘다 제록스라는 부자이웃이 있었고 내가 TV를 훔치러 그 집에 몰래 들어 갔다가 당신이 이미 TV를 훔친 사실을 안 것과 비슷하거든."

험한 분위기에서 많은 애플 직원들속에 홀로 둘러 쌓여 저렇게 응대할 수 있다니 대단한 사람인 것은 틀림 없는 것 같습니다. 여지껏 애플에 관해 나온 책들이 일반 보통 사람들과 마케팅, 경영에 관심이 있는 사람들이 좋아할 책이었다면 이 책은 제목처럼 개발자들을 위해 나온 애플에 관련된 책인 것 같습니다.

'책 이야기 > IT 일반' 카테고리의 다른 글

미래를 만든 Geeks  (1) 2010.06.24
번역서의 표지 디자인  (8) 2009.08.31
소프트웨어 크리에이티비티 2.0  (0) 2009.07.21
드리밍 인 코드  (2) 2009.05.20
레이몬드 첸의 윈도우 개발 282 스토리  (0) 2008.01.18
스티브 워즈니악  (4) 2007.12.31