2009년 6월 30일 화요일
유선/무선 공유기의 동작원리 (How NAT(Network Address Translation) works)
유/무선 공유기의 기본적인 동작원리를 간단하게 설명해 보겠다. 공유기의 기본 구성은 다음과 같다.
그림과 같이 4포트 허브, NAT(Network Address Translation)기능을 가지고 있는 라우터, DHCP 서버가 들어있다.
공유기의 LAN포트에 PC가 연결되면 먼저 DHCP서버에게 네트웍 정보를 요구해서 PC가 자신의 네트웍 인터페이스를 설정하게 된다.
공유기의 가장 핵심은 NAT(Network Address Translation, 네트웍 주소 변환) 기능이다.
인터넷에 연결을 위해 할당받은 IP 주소는 하나이지만 여러대의 컴퓨터가 하나의 주소를 공유하려면 각 패킷 헤더의 주소를 적절하게 변환해 줘야만 한다.
이를 위해 공유기에는 NAT 변환 테이블을 가지고 있다.
공유기에 연결되어 있는 컴퓨터에서 인터넷으로 패킷을 보낼 때는 다음과 같이 동작한다.
모든 패킷의 헤더 부분에는 목적지 주소와 발신자 주소가 들어있다. 이 중 발신자 주소를 NAT변환 테이블의 첫번째 칸에서 찾는다. 해당 주소가 있으면 패킷의 발신자 주소를 그 같은 줄에 있는 주소로 교체해서 인터넷으로 보낸다. 위의 예에서는 192.168.0.10:3430을 154.45.34.3:2302로 교체해 주었다.
만일 발신자 주소를 테이블에서 찾을 수 없는 경우는 먼저 발신자주소를 새 항목으로 만들어 추가해주고 발신자 주소를 변경해준다.
인터넷에서 공유기에 연결되어 있는 컴퓨터로 패킷이 날라오는 경우는 다음과 같다.
WAN포트로 받은 패킷의 목적지 주소를 NAT 테이블의 두번째 칸에서 찾는다. 패킷의 목적지 주소를 찾은 항목과 쌍으로 되어 있는 주소로 교체해서 공유기에 연결된 컴퓨터로 보낸다. 위의 예에서는 153.45.34.3:2302를 192.168.0.10:3430으로 교체하였다.
이렇게 해 줌으로써 공유기 내부에는 192.168.0으로 시작하는 여러개의 IP주소를 사용하지만 WAN 포트로 나가는 패킷은 항상 한개의 IP주소(여기서는 153.45.34.3)를 사용할 수 있게 된다.
2009년 6월 26일 금요일
전자식 밸브제어 DIY 엔진 (Cam-less EVIC Engine)
넷 서핑중 매우 재미있는 엔진을 발견하였다.
EVIC (camless Electronic Valve Internal Combustion) Engine으로 그 이름에서 알 수 있는것처럼 gear, cam shaft, cam, push rod, rocker arm이 없기 때문에 기계적으로도 훨씬 간단하고 이로 인한 에너지 손실이 없다.
아래 그림이 일반적인 4-cycle 내연기관의 동작원리이다.
그림에는 배기밸브에만 그려져 있지만 실제로는 왼쪽의 흡기밸브에도 오른쪽과 동일한 기어, 캠샤프트, 푸쉬로드등이 있다. 피스톤의 상하 운동에 따라 주기적으로 흡기, 배기밸브가 열렸다 닫혔다 하게 된다.
그에 비해 EVIC engine에는 양쪽의 기어, 캠샤프트, 푸쉬로드등이 다 필요없기 때문에 부품수가 대폭 줄어들게 된다. 대신 밸브의 개폐 타이밍 및 점화플러그 점화는 마이크로 컨트롤러가 직접 제어한다. 밸브 개폐에는 솔레노이드를 사용한다.
밸브의 개폐 타이밍을 상황에 따라 다이나믹하게 제어할 수 있고 필요에 따라서는 밸브의 개폐를 건너뛸 수 있기 때문에 연료를 절약할 수 있다.
이 엔진을 개발하고 있는 사람의 실험결과로는 매니폴드 쓰로틀링 없이 1800~10000 RPM까지 운용할 수 있었다고 한다.
위의 사진은 EVIC Mk 3 engine으로 17cc 용량에 8500 rpm에서 약 0.85마력의 출력을 얻었다고 한다.
우리나라에도 이런 분들이 전혀 없지는 않겠지만 이런 식으로 집에 선반이나 공작공구들을 갖춰놓고 개인적인 취미로 자신의 아이디어를 저렇게 직접 개발해 볼 수 있는 환경이 매우 부럽다.
2009년 6월 25일 목요일
Wii 컨트롤러 악세서리들을 DIY에 사용하기 (Using Nintendo Wii Controller Accessories for DIY project)
1. Wii Mote (위모트 리모컨)
Wii의 가장 기본 컨트롤러이다. Wii와 블루투스로 통신을 하는데 윈도우나 Mac, Linux에도 연결해서 리모컨이나 게임 컨트롤러로 사용할수도 있다.
내부에 100 Hz로 최대 4개까지의 적외선 광원을 추적할 수 있는 해상도 1024*768의 Infra-red camera, +/-3g, 100 Hz, 8-bit 해상도의 3축 가속도 센서, 디지털 조이스틱 등을 가지고 있다.
3축 가속도 센서덕에 X/Y/Z 축에 대한 가속도를 측정할 수 있다. 또한 Pitch, Yaw, Roll 값도 측정할 수 있는데 이건 직접 측정한 값은 아니고 가속도 센서 측정값을 조합해서 계산해 낸 값으로 정확한 값이 아닌 대강의 approximation 값이라고 생각해야 한다. 이 문제를 해결하기 위해 닌텐도에서 얼마전에 Motion Plus를 발표하였다.
2. Nunchuck
Wii mote에 연결하는 추가 컨트롤러이다. 내부에 Wii mote와 마찮가지로 3축 가속도 센서가 들어있다. 또한 아날로그 조이스틱이 추가되어 있다.
Wii mote와는 I2C 로 통신을 하기 때문에 Arduino에 직접 연결해서 Wire라이브러리를 사용하면 매우 쉽게 사용할 수 있다.
3. Wii Fit Balance Board
Wii의 새로운 악세서리 컨트롤러이다. Wii와 블루투스로 직접 통신을 한다. 내부에 4개의 압력센서를 가지고 있어 체중 측정 뿐 아니고 무게중심의 이동등을 감지할 수 있다.
아직까지 다른 Wii의 악세서리에 비해서는 내부가 덜 알려져 있기는 해도 의외로 재미있는 응용이 가능하다.
4. Motion Plus
가장 최근에 발표된 Wii용 주변기기이다. 앞쪽의 mote에서 이야기 했던것처럼 mote에는 가속도센서만 들어있어 Yaw, Roll, Pitch는 정확하게 측정할 수가 없었다. 그래서 mote에 추가로 꼽는 아답터 형태의 Motion Plus 에는 IntelliSense의 IDG-650 2축 MEMS Gyroscope sensor (자이로센서)가 들어있다.
Motion Plus 역시 nunchuck과 마찮가지로 mote와 I2C로 통신하기 때문에 arduino나 마이크로컨트롤러에 매우 쉽게 연결해 사용할 수 있다.
--
닌텐도 Wii 컨트롤러 주변기기들의 최대 장점은 대량생산을 통한 저렴한 가격이다. 개인적으로 저기 사용된 류의 센서들을 구입하려고 하면 센서 가격이 악세서리 가격의 보통 2~3배정도 하는걸 알 수 있을 것이다.
IDG-650만 해도 임베디드 보드에 쉽게 연결할 수 있게 주변회로 붙어있는 보드를 구하려고 하면 $80 정도 한다. 그에 비해 motion plus는 완제품이 $20이면 구할 수 있다.
닌텐도 정도의 회사에서 최소 백만~천만개 단위로 부품을 주문하는 경우에나 가능한 가격이다.
DIY를 할 때 가속도 센서, 자이로스코프, 트래킹용 적외선 카메라가 필요한 경우 특별한 제약사항이 있지 않는 이상 닌텐도 주변기기를 분해해 사용하는게 여러모로 경제적이고 편리하다.
2009년 6월 24일 수요일
전자부품 쇼핑 가이드 (Electronic Component & Gadget shopping guide)
그래서 평소 자주 부품들을 구경 및 구입하는 곳들을 소개하겠다.
국내에서라면 디바이스마트가 나름 크고 부품의 종류도 다양해서 웬만한 것들은 다 해결이 되는 편이다.
온라인 주문 뿐 아니고 구로 공구상가에 오프라인 매장이 있어 직접 구매도 가능하다.
그 외로는 IC114도 유명하다. 웹사이트 타이틀바에는 '국내최대 전자부품 전문쇼핑몰'이라고 되어 있는데 디바이스마트와 어디가 더 큰지는 비교할 수 없었다. ^^;
단 IC같은 부품의 경우는 별 차이가 없지만 저항, 콘덴서같이 저렴한 수동소자의 경우는 온라인 쇼핑보다는 주변에 갈 일이 있을 때 가능하면 직접 용산이나 구로공구상가를 나가서 구입하는게 훨씬 저렴하다. (단 그냥 그것때문에 간다면 부품값에서 절약한것보다 교통비가 더 나올것이다.)
해외의 경우 우선 DealExtreme이 있다. 부품이 다양하지는 않지만 재미있는 gadget들이 저렴한 가격에 올라온다. 그리고 배송료가 무료라는 장점이 있다. (단 배송이 좀 오래걸리는게 단점이다)
최근 Arduino나 physical computing쪽에 관심을 가지고 관련 사이트들을 보면 여기서 부품을 구했다고 많이 거론되는 SparkFun Electronics가 있다. 부품 종류가 아주 많은건 아니지만 대부분의 경우 편하게 사용할 수 있는 유용한 모듈들이 많아 상당히 편리하다.
역시 Arduino관련 사이트들에서 많이 거론되는 곳인 Adafruit 이다. 주로 arduino관련 키트를 취급한다.
그리고 최근에 발견한 온라인 쇼핑몰인 Seeed_stdio Depot 인데 physical computing을 위해 DIY를 하는데 필요한 부품들이 상당히 충실하고 중국에 있어서 그런지 다른곳에 비해 상당히 저렴한 가격이 최대 장점이다.
이 정도의 쇼핑몰을 이용하면 개인적인 DIY에 필요한 대부분의 부품을 구하는데 무리가 없을 것이다.
* 혹시 개인적으로 더 추가하고 싶은 곳은 리플에 남겨주면 감사하겠습니다.
2009년 6월 17일 수요일
맥, 리눅스, 심비안용 파이썬 블루투스 프로그래밍 인터페이스(Bluetooth API using Python in Mac OS X, Linux and Symbian)
원래 목적대로 구글신에게 좀 더 많은 신탁을 구한 결과 다음의 사항을 알게 되었다.
- Hands-Free Profile(HFP)를 사용해서 명령과 데이터를 주고받는다.
- 여기서 컴퓨터 또는 아이폰은 Hands-Free Device(블투시계)에 대해 AG(Audio Gateway)로 동작한다.
- HFP는 RFCOMM 위에 올라가는 프로파일로 예전 모뎀 제어에 널리 사용되던 AT 커맨드를 사용한다.
AG | HF device | |
RING | --> | |
+CLIP 1234567890 | --> | |
전화온거 알려주고 발신자 번호 표시 후 사용자가 전화 받기 버튼을 누름 | ||
<-- | ATA | |
OK | --> | |
음성통화로 연결됨 |
위의 시나리오에서 붉은색 문자가 시리얼 프로파일(RFCOMM)을 사용해 상대방 기기에게 전달되게 된다.
뿐만 아니고 소니 에릭슨 블루투스 장비들의 AT명령어 목록을 담고 있는 PDF파일과 HFP Application Guideline이라는 문서까지 구할 수 있었다. 이에 대한 내용은 좀 더 공부해서 맥/아이폰 또는 아뒤노용의 smartWatchM류의 프로그램 개발에 사용해 볼 예정이다. 이 부분에 대한 상세한 내용은 추후 포스팅에 다시 거론하기로 하겠다.
서론이 너무 길어졌는데 이 목적의 소프트웨어 개발에 가장 기본적이고 필수적인것이 블루투스를 사용해 컴퓨터(또는 아이폰, 아뒤노 등등)이 블투시계/팔찌와 통신을 하는 방법을 찾는 것이다. 일단 사용할 언어는 파이썬으로 생각하고 있기에 파이썬용 블루투스 API를 찾아 본 결과 발견한것이 LightBlue 이다. 파이썬용 크로스 플랫폼 블루투스 API로 맥 OS X, 리눅스 용 뿐 아니고 심비안 시리즈 60 플랫폼도 지원한다. (즉 현재 국내에서 판매중인 노키아 6210s도 Symbian OS 9.3 Series 60 UI를 사용하고 있기 때문에 노키아 6210s에서도 파이썬으로 블루투스 프로그램을 작성할 수 있다는 소리다.)
* 심비안 시리즈 60 플랫폼은 꽤 오래전부터 파이썬을 지원해 왔다. Python for Symbian Series 60
현재 LightBlue에서 지원하는 기능은 다음과 같다.
- 디바이스 및 서비스 검색
- RFCOMM과 L2CAP에 대한 표준 소켓 인터페이스
- OBEX를 통한 파일 전송
- RFCOMM과 OBEX 서비스 advertising
- 로컬 디바이스 정보
사용법은 매우 간단해서 일단 lightblue를 설치한 다음 예제를 잠시만 보면 매우 쉽게 사용할 수 있다.
무엇보다 먼저 lightblue 모듈을 임포트 해 줘야 한다.
>>> import lightblue
그 다음 주변에 있는 디바이스와 각 디바이스의 서비스를 검색하는 방법은 다음과 같다.
>>> lightblue.finddevices()
[('00:0E:6D:71:A2:0B', u'My6600', 5243396), ('00:0D:93:19:C8:68',
u'pantherbox', 1057028)]
검색된 디바이스 중 두번째 디바이스가 제공하는 서비스 목록을 확인한다.
>>> lightblue.findservices('00:0D:93:19:C8:68')
[('00:0D:93:19:C8:68', 10, 'OBEX Object Push'), ('00:0D:93:19:C8:68', 15,
'OBEX File Transfer'), ('00:0D:93:19:C8:68', 1, 'Bluetooth-PDA-Sync'),
('00:0D:93:19:C8:68', 3, 'Palm Serial Port')]
GUI를 통해 사용자가 디바이스와 서비스를 선택하게 할 수도 있다.
>>> lightblue.selectdevice() # brings up a device-selection GUI
('00:0E:6D:71:A2:0B', u'My6600', 5243396)
>>> lightblue.selectservice() # brings up a service-selection GUI
('00:0E:6D:71:A2:0B', 2, u'Bluetooth Serial Port')
RFCOMM 소켓을 사용하려면 다음과 같이 하면 된다.
# client socket
>>> s = lightblue.socket()
>>> s.connect(("00:12:2c:45:8a:7b", 5))
>>> s.send("hello")
5
>>> s.close()
# server socket
>>> s = lightblue.socket()
>>> s.bind(("", 0)) # bind to 0 to bind to dynamically assigned port
>>> s.listen(1)
>>> lightblue.advertise("My RFCOMM Service", s, lightblue.RFCOMM)
>>> conn, addr = s.accept()
>>> print "Connected by", addr
Connected by ('00:0D:93:19:C8:68', 5)
>>> conn.recv(1024)
"hello"
>>> conn.close()
>>> s.close()
위에서 보다시피 표준 소켓 인터페이스를 사용하기 때문에 네트웍 프로그래밍과 별다른 차이가 없다.
OBEX를 사용해 파일을 전송하려면 다음과 같이 하면 된다.
# send a file (can pass file name or file object)
>>> lightblue.obex.sendfile("00:12:2c:45:8a:7b", 10, "MyFile.txt")
# receive a file and save it as MyFile.txt
>>> s = lightblue.socket()
>>> s.bind(("", 0))
>>> lightblue.advertise("My OBEX Service", s, lightblue.OBEX)
>>> lightblue.obex.recvfile(s, "MyFile.txt") # or pass file object instead
>>> s.close()
OBEX 클라이언트 세션을 실행하려면 다음과 같다.
# send a business card (vCard) to an Object Push service
>>> client = lightblue.obex.OBEXClient("00:12:2c:45:8a:7b", 10)
>>> client.connect()
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={}>
>>> client.put({"name": "MyBusinessCard.vcf"}, file("MyBusinessCard.vcf", "r"))
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={}>
>>> client.disconnect()
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={}>
# get a directory listing from a File Transfer service
# (see examples/obex_ftp_client.py for a basic File Transfer client implementation)
>>> client = lightblue.obex.OBEXClient("00:12:2c:45:8a:7b", 15)
>>> ftp_target_uuid = '\xf9\xec{\xc4\x95<\x11\xd2\x98NRT\x00\xdc\x9e\t'
>>> client.connect({"target": ftp_target_uuid})
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={'connection-id': 327258,
'who': '\xf9\xec{\xc4\x95<\x11\xd2\x98NRT\x00\xdc\x9e\t'}>
>>> import StringIO
>>> dirlist = StringIO.StringIO()
>>> client.get({'type': 'x-obex/folder-listing'}, dirlist)
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={'length': 292}>
>>> dirlist.getvalue()
'<?xml version="1.0"?>\n<!DOCTYPE folder-listing SYSTEM
"obex-folder-listing.dtd"\n [ <!ATTLIST folder mem-type CDATA #IMPLIED>\n
<!ATTLIST folder label CDATA #IMPLIED> ]>\n<folder-listing version="1.0">\n
<folder name="C:" user-perm="RW" mem-type="DEV" label="Phone memory"/>\n</folder-listing>'
>>> client.disconnect()
<OBEXResponse reason='OK' code=0x20 (0xa0) headers={}>
로컬 디바이스의 정보를 얻으려면 다음과 같다.
>>> lightblue.gethostaddr()
'00:0F:3D:5F:20:F0'
>>> lightblue.finddevicename(lightblue.gethostaddr()) # get local device name
u'susebox'
>>> lightblue.gethostclass() # class of device
3670276
* LightBlue를 사용해서 맥을 Lego NXT에 연결시켜주는 프로그램도 나와 있다.
Python/Bluetooth Support for Lego Mindstorms NXT on Mac OS X
* 아뒤노에 블루투스를 연결하기 위해 현재 사용을 고려중인 모듈은 이것이다.BT2.0+EDR class 2 module로 시리얼 프로파일을 가지고 있기 때문에 전원과 Rx, Tx만 시리얼 포트에 연결해주면 되기 때문에 아주 쉽게 사용할 수 있다. 또한 저렴한 가격($19.5)이 최대 장점이다.
2009년 6월 16일 화요일
아뒤노를 사용한 맥용 오실로스코프 (Macduinoscope - higher precision oscilloscope using arduino for Mac)
그러던 차에 arduino forum의 exhibition 섹션에서 gagebear란 유저가 만든 higher precision scope를 발견하였다. 아뒤노의 A/D 컨버터를 이용해 샘플을 캡춰하고 시리얼 포트를 통해 맥으로 샘플 데이터를 전송해 표시해 주는 형태이다.
1 CH Oscilloscope이긴 해도 66 KHz까지는 10 bit 해상도로, 124 KHz는 10 bit, 200 KHz는 7 bit, 360 KHz는 3.5 bit 해상도로 신호를 표시해 줄 수 있다. USB oscilloscpe같은 전문적인 제품들과 비교할수는 없어도 오디오 신호나 아뒤노에 연결하는 센서신호등을 확인하는데는 충분하다.
PDE 파일이야 아뒤노용이라 동일하지만 GUI의 백앤드가 맥용밖에 없어 현재 윈도우에서는 사용할 수 없다. 다만 소스가 공개되어 있기 때문에 누군가 윈도우용으로 포팅하는건 큰 문제는 없을것으로 본다.
아래가 제작자가 만든 동작 동영상이다. Trigger, Hold, Measurement 등 오실로스코프의 기본적인 기능이 다 갖춰져 있다.
소스코드를 포함해서 소프트웨어는 http://gabuku.com/scope/ 에서 다운받을 수 있다.
단 소프트웨어만 설명이 되어 있지 하드웨어적인 보호회로에 대해서는 전혀 이야기가 되어있지 않다.
아뒤노의 아날로그 입력의 경우 0~5V의 신호만 입력받을 수 있기 때문에 일반 디지털 회로나 아뒤노에 연결하는 센서류인 경우는 관계 없지만 그렇지 않은 경우 주의하지 않으면 과전압으로 아뒤노를 망가트릴 수 있기 때문에 조심해야 한다.
아뒤노 아날로그 핀에 신호를 직접 입력하지 말고 5V 제너 다이오드를 연결해서 과전압에서 보호해주고 저항을 이용한 voltage divider를 사용해 입력전압의 범위를 늘려줄 수 있다.
아뒤노의 아날로그 입력핀에 위와 같은 회로를 연결해주면 0~15V 범위의 신호를 입력받을 수 있게 된다. 즉, 저 회로의 To Controller's ADC를 아뒤노의 아날로그 입력핀들중에 하나에 연결해 주면 된다.
2009년 6월 13일 토요일
블루투스 시계 기능을 확장해주는 소프트웨어 smartWatchM (Expand Bluetooth watch's feature by smartWatchM)
소니 에릭슨의 블루투스 시계인 MBW-150을 아뒤노 보드에 연결하여 원하는 메시지를 표시하거나 시계의 왼쪽에 있는 3개의 버튼을 이용하여 아뒤노에 이벤트를 줄 수 있게 해 놓은 것이다.
다만 아쉽게도 아직은 이 사진 하나만 올라와 있고 상세한 방법이나 기술적인 설명은 없었다.
그래서 궁금해서 구글신의 신탁을 받아 인터넷을 조금 더 뒤져 본 결과 smartWatchM 이라는 재미있는 프로그램을 발견했다.
Sony Ericsson MBW-150 Bluetooth Watch and Windows Mobile from moneytoo on Vimeo.
WM용 프로그램으로 WM 디바이스를 블루투스 시계와 연결해서 CID(발신자번호)나 SMS 통지 뿐 아니고 여러가지 다양한 역할을 할 수 있게 해 준다. 물론 무료 소프트웨어로 .NET compact framework 2.0 이상 버젼이 필요하고 이 링크에서 다운받을 수 있다.
다음이 기능 리스트이다.
- CID notification (number/name) or logo (NOL/BMP)
- SMS notification (name/text)
- E-mail notification (name/subject/text)
- Appointment reminder notification
- IM notification (IM+, Slick, Agile Messenger, Mundu IM, Pigeon)
- Media player control (WMP, Pocket Player, CorePlayer (up to 1.3.0), S2P, Kinoma, HTC Audio Manager, TouchFLO 3D, Xperia Music, FM Radio (HTC)...)
- Stopwatch
- Weather (SBSH, Spb 1.x...)
- Device lock when out of watch range
- English, Russian, Greek, German, Swedish, Norwegian fonts
- Czech, Slovak, Polish accents stripping
- Any language support for Caller ID/mail/sms/music/appointment (Chinese, Japanese... info)
- Custom 3rd party notifications
- Custom 3rd party plugin / menu item dll support NEW
- ...and other features
또한 스크립트를 이용해서 사용자가 원하는 기능을 추가할 수도 있다.
현재 호환되는 블루투스 시계는 다음과 같다.
- Sony Ericsson MBW-100 (usable, but complicated menu access or watch control)
- Sony Ericsson MBW-150 (recommended - no issues)
- Sony Ericsson MBW-200 (will check the compatibility soon)
- Abacus Caller ID Watch (or similar Fossil watch) (just notifications, no menu or control)
- Citizen i:VIRT (W71)
- LM Technologies LM957/LM958 (Bluetooth Watch Sports/Classic) (complicated connection/reconnection)
- LM Technologies LM959 (Bluetooth Vibrating Bracelet) (complicated connection/reconnection)
- LM Technologies Bracelet with LCD (currenly vibrate only, complicated connection/reconnection)
- Sony Ericsson HBH-DS980 (setup, just a test)
- Prada Link (LBA-T950)
* 블루투스 시계의 또 다른 활용법으로 예전 포스트에 올렸던 '블루투스 휴대폰의 할용법 - 컴퓨터의 RFID키로 사용하기' 가 있다. 블루투스 시계를 컴퓨터의 RFID키로 사용해서 컴퓨터 가까이에 있으면 컴퓨터를 사용할 수 있고 멀리 떨어지면 자동으로 화면 락이 걸려 다른 사람이 함부로 화면 내용을 보거나 컴퓨터를 사용하지 못하게 만들어 줄 수가 있다.
2009년 6월 12일 금요일
TTA24핀 - iPod 젠더 ver. 2 (TTA 24 pin to iPod Gender ver. 2)
대부분 PDA폰용 아답터의 경우는 5V를 사용하고 일반 휴대폰용 아답터의 경우는 4.2V를 사용한다. 그래서 원래 24핀 표준 커넥터의 주 목적인 아답터 공유에 문제가 생긴다.
어느 경우건 관계 없이 24핀 아답터를 단말기에 꼽아주면 충전을 해 줘야 하는데 PDA폰용 아답터를 일반 전화기에 꼽거나 반대의 경우 아예 동작 자체를 안하게 된다.
그래서 이번 ver. 2에서는 이전 포스트에 있는 wall adapter나 USB에서의 충전은 아예 빼 버리고 모든 24핀 아답터를 사용할 수 있게 하는걸 주 목적으로 하였다.
5V의 경우 아이팟에 바로 연결해주면 되지만 4.2V인 경우 전압이 낮아 아이팟의 충전 컨트롤러가 제대로 동작할 수 없게 된다. 그래서 Boost regulator인 MAX608을 사용하여 전압을 5V로 올려줘야만 한다.
이렇게 해 줌으로서 모든 종류의 TTA 표준 24핀 아답터를 다 사용할 수 있다.
기판의 크기는 2"(5.08cm) by 1"(2.54cm)이다.
위의 회로에서 U$4의 쇼트키 다이오드는 1N5187 호환 SMD타입의 NSD12이고 파워 인덕터는 Coilcraft의 DO3316P-223MLB 이다.
2009년 6월 10일 수요일
자동차의 상태를 읽어주는 OBD-II (OBD-II interface for reading car status)
자동차 정비소에 갔을 때 자동차의 운전석쪽 대시보드 아래쪽에 케이블을 꼽고 위의 사진과 같은 휴대용 테스터기나 컴퓨터에 연결해서 뭔가 작업하는걸 본 적이 있을텐데 그게 OBD-II 케이블이다. OBD는 On-Board Diagnostic의 약자로 문제가 생겼을 때의 에러코드 뿐 아니라 주행중 자동차의 상태(RPM, 속도, 엔진 온도 등등)도 읽어볼 수 있다.
저가형 제품인 경우 숫자로 된 에러코드만 보여주지만 고급형 제품인 경우 자동차 제조사/모델별로 그 에러코드의 의미까지도 알려준다.
가끔 Dealexterme (가격도 싸고 무료배송이고 믿을만한건 좋은데 단점은 배송에 시간이 좀 오래 걸리는 편이다) 사이트에 물건들을 구경하러 가는데 얼마전에 재미있는 제품을 하나 발견했다.
ELM327 Bluetooth OBD-II Wireless Transceiver Dongle ($54.67)로 자동차의 OBD-II 포트에 연결하면 블루투스로 컴퓨터나 PDA에 연결해서 동작시킬 수 있다.
전원은 OBD-II포트를 통해 자동차의 +12V배터리를 사용하기 때문에 별도의 배터리도 필요없다.
물론 이미 아이폰용으로는 유사한 제품을 사용한 소프트웨어(Rev)도 나와있다.
단 차이는 아이폰에는 아직까지 블투를 이용해서 데이터 전송을 할 수 없기 때문에 데이터 전송을 위해 무선랜 인터페이스를 가지고 있는 OBD-II 동글(몇가지가 나와 있는데 제일 싼게 $150 정도이다)을 아이폰에 연동해서 동작한다. 그렇기 때문에 이 프로그램은 jail-broken도 필요없다.
현재 Rev. + OBD-II 를 통해 측정할 수 있는 것들로는 Air intake temp., Barometric pressure, Boost pressure, Calculated Engine Load, Engine Coolant temp., EVAP pressure, Fuel consumption, Fuel level, Fuel pressure, Fuel trim, Intake manifold pressure, Mass Air Flow, RPM, Throttle position, Timing Advance, Vehicle speed 가 있다. 물론 OBD-II 모듈이 없는 경우에도 아이폰 자체의 GPS모듈과 가속도 센서를 사용해서 기본적으로 GPS tracking과 출발/정지시 가속능력을 측정할 수 있다.
위에 소개한 블투 OBD-II 동글과 arduino, GPS 모듈등을 사용해서 위의 프로그램과 같이 꾸며 볼 생각이다.
현재 구상한 블럭 다이어그램은 다음과 같다.
자동차에 블투 OBD-II 동글을 꼽아주고 아뒤노에 블투모듈(Serial port Bluetooth Module, $19.50), microSDHC 슬롯, GPS모듈, Nokia 6100에서 뜯어낸 LCD등을 arduino에 연결해 줄 예정이다. 이렇게 하면 차량 주행중의 연료소비, RPM, 속도, 온도, 연료소비, 이동경로등을 microSD카드에 기록해서 나중에 컴퓨터에서 분석하거나 구글맵에 연동해서 지도상에 이동경로 표시등 여러가지 재미있는 일들을 할 수 있게 된다. 또한 주행중이라도 차량에 문제가 발생시 바로 에러코드를 확인해서 원인을 파악해서 좀 더 빠르고 정확한 처치가 가능해진다.
2009년 6월 9일 화요일
휴대폰 통합 24핀 - 아이폰 30핀 커넥터 젠더 제작 계획 (DIY TTA 24 to iPod 30 Gender plan)
디바이스마트에서 판매하는 ipod-30p-conn-wire 의 경우 30 pin male 커넥터와 케이스가 일체로 되어 있다.
이 경우 케이스 뒤쪽에 약 7.5mm정도가 남는다. 이에 비해 TTA 24 pin 커넥터의 경우 길이가 8.2mm이기 때문에 케이스 바깥쪽으로 조금 튀어 나온다고 해도 배선을 땜질하거나 저항을 붙일만한 공간을 확보하기 힘들다.
그래서 동일한 케이스를 사용하는 대신 ipod-30p-BS 커넥터를 사용하면 된다.
두개를 동일한 각도에서 동일 축적으로 찍은건 아니어도 커넥터 뒤로 양쪽으로 튀어나온 프라스틱 날개만 봐도 A보다 B의 길이가 반 정도로 짧은걸 대강 확인할 수 있다. 이렇게 해 주면 약 2~3mm정도의 공간을 더 확보해 줄 수 있다.
두번째는 24핀 커넥터 폭이 케이스에 맞는가 확인해 보았다.손이 둘 뿐이라 정확하게 맞춰서 찍지는 못했지만 24핀 커넥터의 폭(18.05mm)이 아이팟 커넥터 내부에 들어가는 금속 프레임보다 약간 짧아 들어가는데 문제가 없는게 확인되었다.
그러므로 케이스의 뒤쪽 케이블이 나오는 구멍을 위의 사진과 같이 직사각형으로 넓혀주면 된다.
내부의 저항회로는 칩 저항을 사용해서 가위로 자를 수 있는 만능기판에 땜질을 해서 넣어주고 24핀-30핀간 케이블을 연결해 준 후 실리콘건으로 내부를 고정하고 케이스를 덮어주면 된다.
이 경우 케이스 1000원, 24핀 커넥터 1500원, 30핀 커넥터 1500원이 필요하고 그 이외에 아주 작은 만능기판 쪼가리, 칩저항 4개가 추가된다.
이렇게 하면 작고 깔끔한 젠더를 만들어 줄 수 있다.
모바일 프로세싱 - 휴대폰에서 프로세싱을 사용하기 (Mobile Processing runnng on a cellphone)
그에 비해 휴대폰에서 사용할 수 있는 mobile processing은 국내 휴대폰에서 사용할수가 없어서인지 아직까지 사용하는 사람들을 별로 본 적이 없는거 같다. 해외용으로 출시된 LG, 삼성 휴대폰에는 잘 돌아가지만 국내 출시 휴대폰들은 통신사와 제조사의 여러가지 제한때문에 mobile processing을 사용할 수 있는 모델이 거의 없었다. 하지만 최근 출시된 노키아 6210의 경우 심비안 S60 플랫폼을 사용하기 때문에 mobile processing을 사용할 수 있게 되었다. Mobile processing은 현재 Mac OS X와 윈도우용이 있다.
아래가 삼성, LG모델중에 mobile processing을 사용할 수 있는 모델들인데 대부분 수출모델로 알고 있다. 혹시 자신의 휴대폰에서 실행해보고 되는 경우 알려주면 국내 휴대폰 모델들 리스트에 업데이트 해서 목록을 만들어 봤으면 한다.
기본적인 문법은 processing과 거의 동일하고 mobile processing에서 스케치 파일을 만들어 컴퓨터상의 에뮬레이터에서 실행해 볼 수 있고 컴파일해서 만들어 진 MIDlet을 microSD 카드에 복사해서 휴대폰에서 어플리케이션으로 실행할 수 있다. MIDlet은 J2ME플랫폼의 CLDC 1.0, MIDP 1.0에서 실행된다.
기본적으로 휴대폰 전화기능, 이미지, 사운드, 비디오, 네트웍, XML, Messaging, 블루투스등을 제어하기 위한 라이브러리가 제공된다. 또한 3rd party가 추가한 3D 그래픽, QR code, 웹, UI, Location 서비스 등등 다양한 라이브러리가 존재한다.
Arduino에 블루투스 모듈을 붙여 휴대폰과 블투로 통신하게 할 수도 있고 아니면 휴대폰의 시리얼 포트와 arduino의 시리얼 포트로 통신을 하게 해 줄 수도 있다. 이 경우 arduino에 별도의 LCD나 키패드를 붙이지 않아도 훌륭한 입출력 인터페이스를 만들어 줄 수 있다. 또한 휴대폰의 다양한 장치들을 arduino의 센서(디지털 나침판, GPS, 조도센서, 가속도센서 등등)로 사용하거나 휴대폰을 arduino의 네트웍 인터페이스(무선랜, 블루투스, 휴대폰 망)로 사용할수도 있게 된다. 또한 전화를 걸고 받기, 문자메세지 보내기 등등도 제어할 수 있기 때문에 센서 입력에 따라 문자를 보내거나 전화를 걸도록 할 수도 있다.
인터넷에서 발견한 mobile processing과 arduino를 시리얼로 연결한 예제 프로젝트이다. 그림에서처럼 arduino와 휴대폰은 시리얼로 연결하고 휴대폰은 휴대폰망의 무선데이터 전송을 통해 컴퓨터와 http로 연결해서 컴퓨터에서 arduino에 연결되어 있는 LED의 색깔을 제어하는 예제이다.
최근 노키아 6210이 매우 싼 가격(약 6개월 약정인 경우 1000원정도)에 풀렸다고 알고 있다. Arduino를 사용하는 사람들이라면 이번 기회에 mobile processing에도 관심을 가져 보는것도 나쁘지 않을 것이다. Arduino만으로 하기 힘든 다양한 아이디어의 응용 프로젝트가 가능해진다.