본문 바로가기

Electronics

GPS Logger 자작기

GPS Logger를 만들기로 마음 먹은지 6개월은 더 지난 것 같다. 마냥 미루고만 있다가 갑자기 지난 주 산행에 앞서 급 필 받아서 만들게 되었다. GPS Logger란 GPS 위성신호를 받아서 여정 내내 이동한 궤적을 좌표로 기록하는 장치이다. 그걸 기록해서 뭐하냐고? 별 대단한 이득은 없다. 그냥 여정(트랙)을 올리는 사이트에 올려서 내가 이런 곳을 다녀왔다라는 걸 알려보겠다는 거다. 거기엔 다른 사람들이 등산을 하는데 내 등산 기록이 도움이 되길 바라는 마음도 있고, 사진과 GPS좌표를 연동시켜서 웹에 올리는 재미도 있다.

내 주변에 김 모군도 그런걸 뭐하러 올리고 xx인지 모르겠다고 한마디 하지만, 올리고 싶은 사람은 또 올린다는 거다. 사회심리학적으로 어떤 동기부여가 있어서 사람들이 그러는지는 불확실하지만 지난 주에 이어 오늘도 열심히 다운받고 변환해서 올리고 있는 나를 보니 이거 왠지 모르게 재미있다. 블로그에 놀러갔다온곳 사진올리는 것도 그거 올려서 뭐하냐? 누가 돈주냐? 뭐 이러면 별 할말은 없지만 그래도 열심히들 올리고 있지 않은가?

사진이나 글 말고도 올릴것 하나 가 늘어난 셈이라고 할까? 사진이나 동영상 올리는 것하고 또 다른 맛이있다. 지금은 당장 내가 올린 트랙을 받아서 등산할때 쓸 수 있는 휴대용 기기가 변변치 않지만, 아이폰이나 안드로이드 폰이 나오면 바로 가능할 것 같다. 그렇게 된다면 다른 사람이 올린 GPS트랙을 내가 받아서 그런 기기에 열려서 지도 보면서 길 잃지 않게 잘 써 먹을 수 있을 것 같다. 내가 올린 트랙이 당장은 쓸모가 없을지라도 언젠가 그렇게 쓰이거나, 아니면 그냥 지도에 표시된 트랙 자체 만으로도 산행전에 보게 된다면 좋겠다는 바램이 있는 것이다.

오늘도 서론이 매우 길어졌다. GPS로거는 Ladyada.net에 Arduino보드에 끼워서 쓰는 쉴드 제작법이 올려져 있고, 키트를 판매도 한다. 하지만 미국에 있는 사이트에서 그정도를 주문하기도 그렇고, 그 사이트에 나온대로 만들면 사이즈가 너무 커져서 나는 나름대로 소형으로 만들어 보려고 했다.

Ladyada의  Arduino용 GPS Shield

사실 부품 중 Arduino Pro Mini는 미국에서 주문하긴 했다. 예전에 Sparkfun에서 몇 가지 살것이 있어서 나중에 GPS로거 만들려는 심산으로 함께 구매해두었던 것이다. 내가 산 Arduino Pro Mini는 3.3v에 8Mhz의 클럭 스피드로 작동하는 Atmega168v 칩이 들어간 녀석이다. 당시에는 GPS로거에는 적절하다고 생각하고 샀으나 나중에 보니 S RAM이 딸려서 Aruino를 수정해줘야 하는 꽁수를 부려야만 했다. Atmega328이 들어간 것으로 샀어야 했다.

Sparkfun의 Arduino Pro Mini

기본 구조는 GPS모듈에서 시리얼포트를 통해 받은 데이타를 SD 메모리 카드에 저장하는 단순한 구조다. 일단 GPS모듈과 Arduino를 3.3v용으로 사서 3.7v인 1셀짜리 리튬폴리머 배터리를 전원으로 쓰려고 했다. 그렇게 되면 GPS 모둘과 Arduino의 전압이 달라서 써야하는 여러 부품들을 쓰지 않아도 되기 때문에 더 Arduino Pro Mini보드와 GPS모듈을 바로 직결할 수 있다. 나중에 보니 SD메모리카드도 동작전압이 3.3v여서 아주 안성마춤으로 부품들이 궁합이 맞았다.

GPS모듈은 디바이스마트에서 산 Ublox 칩셋을 사용한 것을 썼는데, 웹사이트의 제품 설명이나 첨부된 매뉴얼에는 5V용이라고 써 있고, 화일로 올려져 있는 PDF로 된 데이타 쉬트에는 3.3v용이라고 써 있어서 제작사에 전화해보니전화도 꺼져 있다. 답답한 마음에 그냥 5V를 연결해 보니 모듈이 너무 뜨거워 지는게 아닌가? 불안해서 다시 3.3v로 연결해보니 여전히 잘 작동하면서 발열도 줄어들었다. 그러나 MTK칩셋을 쓴 freenavi.co.kr에서 판매하는 모듈보다는 발열이 심하다. 그냥 실내에서 켜보면 거의 100mA정도의 전력을 소모한다. GPS신호가 잡히면 약간 줄어들긴 하겠지만 야외에서도 만져보면 약간 따듯한 것이 전기좀 먹겠다 싶다.

제작시 문제가 되었던 부분은 SD메모리 카드 소켓의 단자 번호 였다. 3,6번이 GND라고 회로도에 있길래 한쪽부터 순서대로 3번째와 6번째 단자에 테스터를 대보니 전기가 통하길래 제대로 찾았구나 싶어서 그대로 연결을 했더니 안되는 것이다. 나중에 이상해서 데이타쉬트를 찾아보니 아래와 같이 맨앞이 9번이고 그 다음부터 1번이 시작되어 거꾸로 8번에서부터 세어도 6번과 3번은 세번째와 여섯번째 단자가 되는 기이한 우연의 일치를 보이는 것이었다. 결과적으로 8번을 1번으로 알고 연결을 햇으니 될리가 없지 --; 이런 우연은 없어줬으면 한다. 무슨 막장 드라마도 아니고 이게 뭐냐? 데이타쉬트 확인은 기본 아닙니까 이런 댓글은 삼가해주기 바란다 --;



위와 같은 문제만 없다면 아래에 있는 Ladyada의 GPS쉴드 회로도만 보고도 충분히 GPS로거를 만들 수 있다. 라고 말하면 좀 무리가 있다. 이 회로도는 Arduino용 쉴드 회로도 이기 때문에 Arduino의 포트 번호가 표시되어 있지 않아서, 회로도만 봐서는 Arduino의 몇번 포트로 연결되는지를 쉽게 알 수 없다.

Ladyada의 GPS쉴드 회로도

그래서 내가 매핑해 놓은 것을 회로도로 보여주고싶지만 그려 놓지를 않아서 그냥 글로 써보겠다. 앞이 SD카드 소켓 번호이고 뒤가 Arduino포트 번호이다. 1-10, 2-11, 3-GND, 4-VCC, 5-13, 6-GND, 7-12 이렇게 연결된다.
GPS모듈의 TX는 Arduino의 RX로, GPS모듈의 RX는 Arduino의 TX로 연결해 주고, VCC는 VCC끼리 GND는 GND끼리 연결해준다.

Arduino의 아날로그 0번(A0) 포트에 LED를 하나 연결해서 SD카드에 기록할때 마다 한 번씩 깜빡이도록 했다. LED에는 100오옴짜리 저항 하나를 직렬로 달아서 마이너스는 GND에 연결하고 플러스는 Arduino A0 포트에 연결한다.

배터리는 디바이스마트에서 싸게 파는 500mA짜리 리튬폴리머 배터리를 두개 병렬로 연결해서 용량을 늘렸다. 아직 최대 사용시간을 재보진 않았지만 경험상 7~8시간은 넘었으니 하루 등산 코스는 충분히 기록하겠다 싶다. 이틀은 무리이다.



케이스는 카세트테이프 케이스의 돌기를 잘라내고 이용했다. 흔들리지 않도록 포장용 완충재인 PE폼을 잘라서 빈공간을 채웠다. 파워 스위치조차 없다. 배터리 끼우면 켜진다. --;

Arduino 프로그램은 아래에 올렸다.
원래 프로그램은 Sirf칩셋을 쓰는것을 전제로 만들어져서 GPS모듈을 제어 하는 코드까지 들어 있으나 나는 Ublox칩셋을 썼기 때문에 해당 제어코드를 쓸 수가 없어서 프로그램을 약간 손봤다. Ublox칩셋은 요상한 듣보잡인 GPTXT라는 출력을 내보내는 등의 문제가 있어서,  쓸데없는 메시지라인은 다 무시하고 위성신호 잡힌 상태에서 GPRMC 라인만 기록하도록 해놨다.

슬립기능도 귀찮은 관계로 그냥 빼버렸기 떄문에 GPS모듈의 전원제어도 안된다. 5초로 되어 있는 슬립카운트는 단지 5초 마다 기록을 시도할 것인지만을 의미한다. 이런게 자작의 맛이 아닌가? 또 오픈소스의 장점이기도 하고.  내 멋대로 바꿀수 있다는거 ^^

이렇게 기록된 GPS로그 데이타는 MNEA라는 표준에 의한 텍스트화일이다. 그 화일을 GPSVisualizer.com이란 사이트에 가면 여러가지 포맷으로 변환해주고 Everytrail이라는 사이트에 올릴 수 있도록 연동해주기도 한다.

KML이나 GPS로 변환하면 상오기 님의 gpson.kr 사이트에 올릴 수도 있다. 그리고 Geotag란 프로그램을 쓰면 사진이 찍힌 시간에 매치되는 위치 정보를 사진화일에 첨부시켜 준다. 나는 리눅스를 쓰는데 exiftool이라는게 더 필요하다길래 시냅틱패키지 관리자에서 찾아서 깔아줬더니 잘 돌아간다. 윈도우즈에서는 음.. 은퇴한 빌게이츠에게 물어보시길~ 그게 귀찮으시면 리눅스로 세계로 오시라~