2008년 11월 30일 일요일

(DIY) 아이폰/아이팟 터치 충전회로 제작

이전 포스팅(iPhone 3G/iPod Touch 2G charging(일반 아답터로 아이폰 3G/아이팟 터치 충전하기))에서 아이폰/아이팟 터치가 왜 그냥 5v가 나오는 아답터에 연결해서는 충전이 되지 않는지 설명했었다.

이번에는 실제로 아이폰/아이팟 터치를 USB포트로 전원이 나오는 일반 아답터에서 충전할 수 있는 컨버터(?) 회로를 제작해 보겠다.

재료비로는....

USB A-type male connector: $0.39

USB A-type female connector: $0.39

저항 4개: 개당 $0.04

-----------------------------

합계 $0.94

먼저 저항을 두개씩 묶어서 납땜을 해 준다.

chg1.jpg

납땜한 부분이 아래 회로에서 표시된 부분이다.

* 회로도에서는 50Kohm 저항 2개를 사용했지만 구할수가 없어서 여기서는 대신 51Kohm 저항을 사용했다. 여기서 중요한건 저항값이 같은 2개를 사용하는것(전압을 반으로 나누는 것)이기 때문에 50K나 51K나 차이는 없다.

download.jpg

위에서 땜질한 두 쌍의 저항에서 3과 5, 4와 6을 납땜하고 테이프로 감아준다.

chg2-1.jpg

이번에 납땜한것은 아래에 표시된 부분이다. 테이프로 감아줘 버리면 어느 쪽이 3과 5를 땜질한것인지 확인할 수가 없으므로 미리 그 다리에 표시를 해 준다.


download-1.jpg

USB male connector에 전원선을 땜질해 준다. 이쪽은 VBUS, GND만 연결해주면 된다.

chg3.jpg


download-2.jpg

위에서 만든 커넥터를 하우징에 집어넣어준다.

chg4.jpg

위에서 테이프로 묶어 놓은 저항과 USB커넥터들을 납땜으로 연결해준다.


chg5.jpg


download-3.jpg

일단 여기까지 했으면 실제 동작하는지 확인해 본다. 먼저 아이폰을 그냥 +5V, GND에만 연결해 보았다. 아래와 같이 충전이 되지 않는걸 알 수 있다. (그림같이 USB허브를 컴퓨터에 연결하지 않고 아답터만 연결해 놓으면 USB 포트로 5V를 출력해주는 아답터가 된다.)

IMG_0007.JPG

이번에는 아답터와 USB dock cable사이에 방금 전에 만든 회로를 넣어줬더니 충전이 되는걸 확인할 수 있었다.

IMG_0008.jpg

저대로 두면 배선이 끊어지기 쉽기 때문에 껍데기(?)를 씌워주기로 했다. 아무 플라스틱 조가리를 적당한 크기로 자른다. 여기서는 다 쓴 스타벅스 카드를 칼로 잘라냈다.

chg8.jpg

위의 사진에 표시한 부분 위, 아래쪽에 글루건으로 실리콘을 녹여 바른 다음 플라스틱 조각을 붙였다. 그 다음 가운데 부분이 비어서 붕 뜨기 때문에 그곳에 실리콘을 채워서 굳힌다.

chg9.jpg

마지막으로 전체를 테입으로 둘러 싸 주면 끝이다.

chg10.jpg

* 내용추가

Eagle PCB로 SMD 타입 부품 사용한 PCB를 한번 아트웍 해 보았다. 이렇게 만들면 정말 휴대폰 SIM 칩 크기의 보드에 다 깨끗하게 집어넣을 수 있다. 언제 다른 PCB 만들때 같이 하나 떠서 만들어 봐야 겠다.


* AA 배터리 2개로 아이폰/터치팟을 충전할 수 있는 충전기 DIY도 추가하였다.

http://techblog.textcube.com/60

2008년 11월 23일 일요일

iPhone 3G/iPod Touch 2G charging (일반 아답터로 아이폰3G/아이팟 터치 충전하기)

iPhone 3G와 새로 나온 iPod Touch의 경우 케이블을 컴퓨터의 usb포트에 연결하거나 같이 포함되어 있는 충전기를 사용하지 않으면 충전이 되지 않는다.

원인은 변경된 충전회로 때문이다.


200811222311.jpg

위 사진은 iPhone의 회로인데 빨간색으로 표시 된 칩이 Linear Technology의 LTC 4066 USB Power Controller and Li-Ion Linear Charger이다. 즉 아이폰의 배터리 충전과 사용을 컨트롤하는 칩이다.

여기서 문제는 USB 전원을 사용할 경우가 되는데 USB포트에 500mA의 전류가 공급되는 경우에만 USB 전원을 사용하게 된다. 하지만 USB 케이블을 컴퓨터에 연결하는 것 만으로 컴퓨터가 바로 500mA를 공급해 주는게 아니고 enumeration이라는 과정을 거치며 USB장치(여기서는 아이폰)와 컴퓨터간에 정해진 절차(즉 컴퓨터가 아이폰에게 '너 전류가 얼마나 필요해?'라고 물어보고 아이폰이 500mA라고 알려줘야 그에 맞는 전류를 공급해준다.)를 거친 후에야 컴퓨터가 그 포트에 500mA의 전류를 흘려주게 된다. 이 절차 후에 컴퓨터가 충분한 전류를 공급해 줄 때부터 LTC 4066은 USB 전원을 사용해서 충전을 하게 된다.

그런데 일반 외부 아답터를 사용하는 경우는 처음부터 필요한 전류를 항상 공급해주지만 LTC 4066에 그 사실을 알려주지 않으면 LTC 4066은 USB 포트의 전원을 사용할 수가 없다. 이 사실을 알려주기 위해서는 LTC 4066의 HPRW(pin 13)과 WALL(pin 20) 핀을 1.25v이상으로 풀-업(pull-up) 해주면 된다.

200811222322.jpg


200811222323.jpg

아이폰에서는 이 두 핀이 USB 커넥터의 D+, D-에 연결되어 있다. 즉 USB 케이블의 +(USB커넥터의 1번 핀)에 5V를 공급해주고 D+, D-핀을 1.25v이상으로 풀업 해 주면 아이폰은 USB 포트를 통해 공급되는 전원을 사용해서 충전을 할 수 있게 된다.

200811222326.jpg

즉 아래와 같은 회로를 만들어주면 된다.


iphone-chg.jpg


다음 포스트에서 실제 제작방법을 볼 수 있다.

(DIY) 아이폰/아이팟 터치 충전회로 제작.

2008년 11월 21일 금요일

램디스크를 사용해서 브라우져를 빠르게 만들기 (Make web browser faster using ram disk)

요새는 컴퓨터 사용시간의 대부분을 웹 브라우져로 해결하게 되는 경우가 많다.

일반 웹페이지 브라우징 뿐 아니고 메일도 gmail을 사용하고 심지어는 워드나 엑셀 작업까지도 구글 document로 할 수 있기 때문에 아마 개별 프로그램 사용시간을 따져보면 웹브라우져 사용시간이 50%를 넘을 확률이 크다.

그렇기 때문에 충분한 램을 가지고 있는 경우 브라우져 캐쉬를 램디스크로 옮겨 놓으면 상당한 속도 향상을 얻을 수 있게 된다.

먼저 램디스크를 만들어 줘야 한다. 이전 글에서도 맥에서 사용할 수 있는 램디스크를 소개한적이 있었는데 이번에는 Espérance DV 를 사용한다. 프로그램을 다운받아 압축을 풀어보면 아래와 같이 3개의 파일이 들어있다.

Espérance.jpg

설치하는 방법은 Assistant.app를 실행해 주거나 아니면 EsperanceDV.prefPane를 직접 /Library/PreferencePanes/ 또는 ~/Library/PreferencePanes/에 넣어주면 된다.

설치가 끝난 다음 System Preferences를 열어보면 Esperance DV가 추가된 걸 볼 수 있다.

System Preferences.jpg

Esperance DV를 선택해서 설정을 변경해준다.


Esperance1.jpg

기본적으로 Capacity만 설정해 주면 된다. 처음에는 만들어 진 램디스크가 없으니까 Eject 버튼이 Create로 되어 있다. 이 버튼을 눌러주면 램디스크가 만들어지고 Eject로 바뀌게 된다.

'Create on opening session'를 체크해주면 로그인할때마다 자동으로 램디스크가 만들어진다.

사파리 사용자는 Various Options 부분에 있는 체크박스를 선택해주면 자동으로 사파리 캐쉬가 램디스크로 옮겨지게 된다.

Firefox 사용자는 터미널을 열어주고 아래 명령을 입력해주면 된다.

% rm -r ~/Library/Caches/Firefox

% mkdir /Volumes/RamDisk/Firefox

% ln -s /Volumes/RamDisk/Firefox ~/Library/Caches/Firefox

이렇게 해 주면 브라우져가 램디스크를 캐쉬로 사용하기 때문에 페이지를 열 때 마다 매번 디스크를 억세스 할 필요가 없어지기 때문에 상당히 가볍게 움직이는걸 느낄 수 있을 것이다.


* 추가
위의 명령을 사용하면 컴퓨터를 껐다가 다시 켜는 경우 램디스크 내용을 저장했다 다시 restore하지 않으면 램디스크에 Firefox 디렉토리가 없어지기 때문에 매번 디렉토리를 만들어 줘야 한다. 좀 더 간단하게 하려면 다음과 같이 해 주면 된다.

% rm -r ~/Library/Caches/Firefox

% ln -s /Volumes/RamDisk ~/Library/Caches/Firefox

이렇게 해 주면 매번 Firefox 디렉토리를 만들어 줄 필요가 없어진다.



Reference: Faster browsing with RAM disks

2008년 11월 19일 수요일

내 위치를 알아내는 법 (GPS, 무선랜)

최근들어 LBS(Location Based Service)에 대한 관심이 높아지고 아이폰, 구글폰들이 출시되며 이를 이용한 어플리케이션들이 속속 등장하고 있다. 여기에서 현재 휴대폰의 위치를 알아내는 방법의 원리들에 대해 설명해 보겠다.

먼저 가장 먼저, 널리 사용되는건 GPS이다.

GPS(Global Positioning System)의 기본 원리는 삼각측량법이다.

gps1.jpg

위의 그림에서처럼 지도상에 정확한 위치를 알고 있는 3개 지점에서부터 내 위치까지의 거리를 알 수 있으면 그 각 지점(위의 그림에서는 각 스테이션)을 중심점으로 내 위치까지의 거리를 반지름으로 하는 3개의 원을 그리면 3개의 원은 정확하게 한 점에서 만나게 된다. 그 원들이 만나는 지점이 내 현 위치가 된다.


gps2.jpg

단 여기서 전제조건은 각 스테이션과의 정확한 거리를 알고 있어야 한다는 것이다.

그런데 실제로 거리를 측정할 때 줄자를 가지고 잴 수 있는게 아니고 각 스테이션에서 송출하는 특정 신호를 수신해서 그 신호의 세기를 가지고 거리를 예측하게 된다. 하지만 전파의 특성 상 거리에 반비례해서 신호 세기가 약해지긴 해도 여러가지 조건에 따라 그 약해지는 정도가 항상 변화하기 때문에 대강의 거리를 예측할 뿐 정확한 거리를 알 수가 없다. (실제 GPS에서는 신호 세기가 아니고 시간차를 이용하지만 이 경우에도 정확한 거리를 알 수 없는건 차이가 없다.)


gps3.jpg

대략의 거리를 가지고 원을 그리게 되면 3개의 원이 위의 그림과 같이 한 점에서 만나는게 아니고 그림과 같이 3개의 원으로 둘러 쌓인 부분이 생기게 된다. 예측한 거리의 오차가 크면 클 수록 원으로 표시된 부분의 크기가 커지게 된다. 즉 정확한 위치를 찾을 수 없고 대략 저 둘러 쌓인 부분 내에 있다는 것만 알 수 있게 된다.


gps4.jpg

그래서 더 여러 지점과의 거리를 측정해서 더 많은 원을 그려 더 많은 원들에 둘러 쌓인 부분을 찾으면 그 면적이 줄어들기 때문에 오차를 줄일 수 있게 된다.

그런데 최근에는 GPS를 내장하지 않은 모바일 디바이스들도 무선랜 신호를 이용해 자신의 위치를 상당히 정확하게 찾아내는걸 볼 수 있다. 이 경우는 미리 구축되어 있는 무선 AP목록 DB가 구축되어 있어야 한다. 이 DB는 사업자 핫스팟의 경우는 사업자가 설치된 정확한 주소를 알려줄 수 있지만 개인이 설치한 AP의 경우는 등록된 주소가 없는데 어떻게 위치를 알 수 있을까? 정답은 구글 스트리트 뷰 사진과 유사한 방식으로 War driving을 이용해서 DB를 구축하게 된다.


wd.jpg

자동차에 그림과 같이 무선랜 안테나와 GPS 수신기를 장착하고 차를 몰아 길을 돌아다니면서 각 위치에서 신호가 잡히는 AP의 목록과 신호의 세기를 기록해서 DB를 구축하게 된다.


gps5.jpg

위의 그림에서 각 숫자가 AP이고 알파벳이 자동차가 움직이며 해당 위치에서 신호가 잡히는 AP의 목록을 기록해서 테이블을 만든다.


GPS8.jpg

이렇게 만든 테이블을 이용해 각 AP의 위치 DB를 만든다.

GPS9.jpg

위의 그림과 같이 각각 AP의 신호가 잡히는 지점들을 가지고 있게 된다.


gps6.jpg

그림에서 저 지점에 아이팟 터치가 있다면 13, 15, 17번 AP의 신호를 받을 수 있게 된다.


GPS10.jpg

그럼 그 정보를 이용해 위에 만들어 진 DB를 검색하면 13, 15, 17 모두에 공통으로 들어있는 위치는 M이 된다. 즉 예측할 수 있는 가장 가까운 위치는 M이라고 판단할 수 있게 되는 것이다.