2009년 5월 31일 일요일

맥 OS X용 시리얼 터미널 CoolTerm (CoolTerm - Serial Terminal Software for Mac OS X)

이전 포스트인 Mac OS X에서 시리얼 터미널 프로그램 (Serial Terminal Emulator in Mac OS X)에서 이야기했던것처럼 Mac OS X에는 GUI 인터페이스를 사용하는 쓸만한 무료 시리얼 터미널 프로그램이 없었다. (물론 telnet 터미널 프로그램은 상당히 다양하다.)
일반적인 경우는 시리얼 터미널 소프트웨어가 없어도 불편이 없지만 네트웍, 텔레컴 장비를 다루거나 임베디드 환경에서 작업하는 사람들에게 있어서는 시리얼 터미널은 가장 기본적이고 필수불가결한 툴이다.
그런 의미에서 얼마전에 발표된 CoolTerm은 Mac OS X에 있어 가뭄의 단비(?)와 같은 소프트웨어이다.


프로그램 설명에도 써 있는것처럼 터미널 에뮬레이션 기능은 빠진 간단한 시리얼 포트 터미널 소프트웨어로 시리얼포트로 데이터를 주고 받는걸 주 목적으로 하는 임베디드 환경에서 작업하는 사람들을 주 타켓으로 하고 있다. (사실 임베디드 환경에서 작업하는 사람들에게는 터미널 에뮬레이션 기능(vt100, xterm 등등)은 없어도 관계없다.) 그렇기 때문에 데이터를 텍스트 포맷 뿐 아니고 헥사값으로도 볼 수 있고 시리얼 포트가 여러개 있는 경우 동시에 복수개의 커넥션 연결, 헥사값으로 데이터 전송 등등 임베디드 작업에 유용한 여러가지 기능들을 가지고 있다.

RTS/CTS, DTR/DSR, DCD, RI 등의 핸드쉐이크 핀의 상태를 볼 수 있다.

Options에서 통신 환경을 설정할 수 있다.

Send String에서 텍스트로 뿐 아니고 헥사값을 보낼 수도 있다.


현재 (Version 1.0) Preferences에서는 Viewer의 폰트설정만 변경할 수 있다.

2009년 5월 30일 토요일

아이팟/아이폰 독 커넥터 시리얼 케이블 만들기 (DIY iPod/iPhone dock connector serial cable)

아이팟 터치/아이폰의 시리얼 포트를 사용할 수 있으면 다른 장비들과 연결해서 상당히 재미있는 일들을 많이 할 수 있게 된다.
하지만 시중에서 아이팟용 시리얼 케이블을 팔고 있지 않기 때문에 직접 만들어 보았다.
아이팟 도킹 커넥터의 pinout은 pinouts.ru 에서 확인할 수 있다.

먼저 아이팟 30핀 도킹 커넥터 male 타입은 Devicemart에서 구입할 수 있었다. 구입해야 하는 부품명은 ipod-30p-conn-wire 으로 개당 2500원이다.

커넥터를 구입하면 내용물은 다음과 같다.


커넥터는 30핀인데 위의 사진에서 보는것처럼 서로 엇갈리게 배치되어 자세히 보지 않으면 핀 위치를 찾기가 좀 힘들게 되어 있다.

핀 배치를 좀 보기 쉽게 풀어 그려 본 것이다. 다리가 긴 핀과 짧은 핀이 있어서 다리가 긴 핀은 바깥쪽에 있고 짧은 핀은 안쪽에 배치되어 있다. 그리고 각각의 핀은 조금씩 위치가 어긋나게 배치되어 있다.
이 핀들이 다 있으면 납땜질 하기 불편하기 때문에 필요없는 핀들은 다 뽑아버린다. 롱노우즈 플라이어로 잡아 땡기면 쉽게 빠져나온다. 단 한번 빠져나오면 다시 끼기 힘들기 때문에 뽑아내야 하는 핀의 위치를 확실하게 확인한 다음에 빼기 바란다.
시리얼 케이블에 필요한 핀들이다. 이 중 1,2,15,16,29,30은 모두 GND로 아이팟 내부에서 다 전기적으로 연결되어 있다. 그러므로 다 연결할 필요는 없다.

이 핀들만 남겨놓으면 된다. 15, 16도 땜질에 방해가 되기 쉬우므로 빼 버려도 관계 없다.
배선 연결은 위와 같다. 실제 시리얼 포트에 연결하는건 Tx, Rx, GND 3선이면 된다. 물론 아이팟에 연결하는 장치의 전력소모가 크지 않은 경우 3.3V에 연결해서 아이팟에서 전원을 공급받을수도 있다. (단 이 경우 아이팟 전력소모가 약간이나마 증가하는걸 염두에 둬야 한다.)
또한 Tx, Rx도 3.3V 레벨의 신호이기 때문에 RS-232에 연결하려면 MAX232, 233같은 레벨 컨버터가 필요하다. 저 2개의 저항은 칩 저항을 사용하면 커넥터 케이스 속에 집어넣을 수 있겠지만 현재 가지고 있는 칩 저항이 없기 때문에 이번에는 커넥터에서 Tx, Rx, Serial GND, GND, 3.3V 이렇게 5개의 선을 뽑아내었다.
Grey - GND
Red - Tx
Green - Rx
Orange - +3.3V
Black - Serial GND

단선을 방지하기 위해 열 수축 튜브로 고정시켜 주었다.

커넥터를 금속 케이스에 집어 넣는다.
집어넣은 모양은 다음과 같다.

또 하나의 금속판을 연결시킨다. 여기서 아래 그림과 같이 커넥터의 홈에 맞게 밀어 넣어줘야 한다.

제대로 집어 넣었으면 아래와 같이 양쪽의 걸쇄가 보인다.

플라스틱 케이스에도 위쪽과 아래쪽이 있다.

아래쪽 케이스에 조립된 커넥터를 집어넣는다.

집어넣은 모습은 다음과 같다.

커넥터를 분리할 때 사용하는 양쪽 버튼을 집어 넣는다. 이 때 버튼도 방향이 있으니까 주의해야 한다.

아래 사진처럼 버튼을 잘 보면 홈이 파여있는 쪽이 앞쪽이다.

버튼까지 다 집어넣은 모습이다.

이제 위쪽 케이스를 아래쪽 케이스에 맞춰서 끼워넣기만 하면 된다.

여기서는 프로토타입 보드에 꼽아 아뒤노와 연결하여 테스트하기 위해 반대쪽에도 헤더핀들을 연결시켜 놓았다.

2009년 5월 29일 금요일

구글 챠트 API (Google Chart API) - 1

구글은 다양한 서비스를 만드는것에 그치지 않고 일반인들이 자신의 서비스를 직접 이용할 수 있도록 거의 대부분의 경우 서비스에 대한 API를 제공해준다. 그 중 상당히 유용하게 사용할 수 있는것중에 하나가 Chart API이다.

이를 사용하면 동적으로 다양한 종류의 그래프를 매우 손 쉽게 그려서 웹 페이지에 보여줄 수 있게 된다.

'백문이 불여일run'이라고 직접 그래프를 만들어 보는것이 장황하게 설명하는것보다 빠를것 같다. 웹 브라우져의 주소창에 'http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World' 을 입력해보기 바란다.

위의 URL을 입력하고 엔터를 누르면 브라우져에 아래와 같은 그래프가 출력된다.

구글 챠트 API는 선 그래프, 막대 그래프, 파이챠트, 스캐터 그래프 등등 다양한 종류의 그래프를 그려줄 수 있으며 물론 각 그래프에 대해서 크기, 칼라, 라벨 등등 다양한 속성을 지정해 줄 수도 있다.

Chart API에서는 모든 데이터와 속성을 URL을 통해 전달해 준다.

URL의 포맷은 다음과 같다.


http://chart.apis.google.com/chart?<parameter 1>&<parameter 2>&...&<parameter n>


여러개의 파라미터는 순서는 상관없고 각 파라미터는 '&'로 연결해준다. 각 파라미터는 속성=값 쌍으로 되어 있다.

위의 예제에서 사용한 URL은 다음과 같이 구성되어 있다.


http://chart.apis.google.com/chart?       Chart API의 위치

cht=p3                                                            그래프 타입

&

chs=250x100                                                    그래프의 크기(픽셀)

&

chd=t:60,40                                                       그래프의 데이터

&

chl=Hello|World                                                 그래프 라벨


또한 이 URL을 html문서 내의 <img> 태그에 임베딩해서 해당 웹 페이지가 브라우져에 보여질 때 그래프도 같이 렌더링해서 보여지게 할 수도 있다.

이 경우 <img src="<URL>" /> 의 "<URL>" 부분에 넣어주면 되는데 주의할 점은 '&' 대신 '&amp'를 사용해 줘야 하는것에 주의해야 한다.


구글 Chart API에서 사용할 수 있는 속성은 여러가지가 있는데 그래프를 그리는 경우 항상 다음의 3개 속성은 필수로 지정되어야 한다.


- 타입 (cht)

- 크기 (chs)

- 데이터 (chd)


나머지 속성들은 그래프 타입에 따라 필수이거나 또는 옵션으로 지정해 줄 수 있다.



위의 표를 보면 각 그래프 타입별로 지정할 수 있는 속성의 종류를 알 수 있다. 단 QR chart인 경우 필수 3개 이외에 추가로 지정할 수 있는 속성이 없기 때문에 위의 도표에는 생략되어 있다. 이전 포스트에 보면 구글 챠트 API를 이용해서 QR Code를 만드는 예제를 볼 수 있다.


그래프의 크기는 'chs=<폭>x<높이>'로 지정해 준다. 단위는 픽셀이다. 지도를 제외한 나머지 그래프 타입의 경우 가능한 최대 면적은 30만 픽셀이다. 폭이나 높이의 최대값은 1000 픽셀이므로 그릴 수 있는 최대 크기의 그래프로는 1000x300, 300x1000, 600x500, 500x600, 800x375, 375x800 등등이 있다. (모두 폭에 높이를 곱하면 30만이다.) 단, 지도 타입은 최대 크기가 폭 440 픽셀에 높이 220 픽셀이다.



* 다음번 글에서는 데이터 속성의 포맷과 인코딩 방식에 대해 설명하겠다.

팬-틸트 유닛 제작 ( Make a Pan-Tilt Unit)

집에 굴러(?)다니는 부품들을 가지고 웹캠등의 미니 카메라를 팬-틸트시킬 수 있는 초저렴 모듈을 만들어 보았다.


팬-틸트 유닛이란 위의 그림처럼 카메라를 회전, 위아래로 움직일 수 있게 해 주는 장치를 말한다.

2개의 서보보터와 알미늄 조각, 몇개의 나사를 찾아내어 제작을 시작하였다.

먼저 알미늄 판을 서보 크기에 맞춰 잘라준다.

자른 알미늄 판을 서보에 맞춰 구멍을 뚫어준다. 또한 원형 암에도 알미늄 프레임을 고정하기 위해 구멍 크기를 확대해 준다.

또한 십자형 암에도 나사를 집어넣기 위해 구멍 크기를 확장해 줄 필요가 있다.

그 다음 패닝 서보에 큰 알미늄 판을 나사로 고정해 준다.

옆쪽에서 본 사진이다. 알미늄 판의 높이를 올려주기 위해 중간에 플라스틱 조각을 집어넣어 높이를 조정해 주었다. 여기서는 못쓰는 CD를 잘라서 재활용 하였다.


틸팅 서보에 십자형 암을 붙여주고 거기에 알미늄 프레임을 나사로 조여서 고정시켜 준다.

각각 다른 방향에서 본 모습이다.

틸팅 서보를 패닝 서보에 연결되어 있는 알미늄 프레임에 연결한다. 볼트와 너트로 조여서 꽉 고정해 줘야 하지만 당장 가지고 있는 나사가 부족해서 일단 클립으로 고정시켜 주었다. 아래가 완성된 모습을 여러 방향에서 본 것이다.




완성된 팬-틸트 유닛을 아뒤노에 연결하여 간단하게 테스트 해 본 결과 토크도 충분하고 회전속도도 상당히 빨랐다.

다만 이번에 문제는 프레임 재료로 가위로도 자를 수 있는 얇은 알미늄 판을 사용하다 보니 구조적으로 튼튼하지 못한 점과 틸트 서보에 붙어있는 십자형 암에 붙어있는 프레임의 높이가 낮아 90도밖에 회전을 할 수가 없었다. 조만간 이번 문제점들을 개선한 version 2를 만들어 봐야겠다.

* 추가내용
필요한 나사를 구해서 제대로(?) 완성한 모습이다.


2009년 5월 28일 목요일

맥을 지정한 시간에 켜고 끄기 (Turn on & off at the specified time in the Mac)

Mac OS X는 OS에서 기본적으로 정해진 시간에 컴퓨터를 키거나 끄기 (또는 잠자기 및 깨어나기) 기능을 가지고 있다.

독에서 System Preferences를 선택한다.

System Preferences 화면에서 Energy Saver를 선택한다.

Energy Saver 화면의 오른쪽 아래부분에 있는 Schedule... 을 선택한다.

Schedule... 화면으로 들어오면 아래와 같이 시작 또는 깨어나기, 잠자기 또는 끄기 시간을 지정할 수 있다.

아래쪽에서는 잠자기, 재시동, 끄기중에 선택할 수 있다.

또한 시간 뿐 아니고 매일, 주중에만, 주말에만, 아니면 특정 요일에만 꺼지거나 재시동 하도록 선택해 줄 수도 있다.

이나마도 귀찮은 경우 shutdown 이라는 유틸리티를 이용하면 30, 60, 90 분 후에 컴퓨터가 꺼지게 할 수도 있다.
Shutdown은 대쉬보드 위젯으로 설치한 다음 대쉬보드에서 위젯 버튼을 눌러주면 30분 후 꺼짐->60분 후 꺼짐->90분 후 꺼짐->기능 사용 안함->... 순으로 바뀌게 된다.