기타 2010. 7. 1. 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
참고할만한 좋은 아이폰 소스  (19) 2010.05.04
세계지도 앱 - World Atlas  (2) 2010.04.21
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24
AND