RedCrow + GreenBean

Feed Rss

Arduino 를 이용한 GPS Logger (with SD card)

10.22.2012, arduino, 만들기, by .

GPS Logger Posting

 

지금로부터 10년전 이 시각에 나는 어디서 무엇을 했나?

큰 사건이나 인상적인 일에는 내 머리가 기억을 하지만 과연 나의 거의 모든 발자취를 기억할 수 있을까?

 

엽기적인 그녀 마지막 부분에 이런 장면이 있다

차태현이 찍힌 사진인가? 전지현이 찍힌 사진인가 기억은 안나는데 수학여행지 사진이였다

헌데 그 배경 저~ 뒤로 상대방이 우연찮게 찍였었던 것이다

우리 삶에 스쳐 지나가는 사람이 얼마나 많겠나

그리고 그 중에서 한번 이상 스쳐지니간 사람은 또 얼마나 많겠나

나랑 인연이 있는 사람중에 과거에 스쳐지나친 사람은 또 얼마나 되겠나

옷깃만 스쳐도 인연인데 이렇게 여러번의 스친인연을 알아보고싶다

그 시작을 내가 먼저 해보고싶다

물론 이건 지극히 개인정보다

영화중에 자신의 삶 모두를 촬영하여 기록하는 영화가 있었다

이 방법이 제일 정확하겠지만 그 엄청난 데이터란…

그래서 생각한것이 특정 시간대에 어디쯤 있었다 만으로도 내 기억속에서 그때의 상황을 되살리기에 충분히 좋은 시발점이 되지 않을까 한다.

특정 시간과 위치라고 한다면 GPS가 딱일듯 하다

뭐 실내 까지 기록할순 없지만 현재의 기술로는 이정도만 생각 하기로 했다

 

그럼 어떻게 이 GPS 정보를 기록, 저장할것인가?

뭐 요즘 스마트폰은 기능이 좋아서 이정도는 쉽게 해낸다

단, 배터리 소진이 빠르다

몇년전에 PDA에 프로그램을 짜 넣고 GPS모듈을 연결해서 간단한 GPS Logger를 만든적이 있다

헌데 사용한 PDA가 폰 겸용이라 두께가 너무 두꺼워 벽돌이란 별명도 있는 폰이였다

그리고 이것 역시 배터리가 문제였다

이러한 시스템은 기본 시스템 구동과 화면 표출등으로 인해 배터리 용량이 큼에도 불구하고 배터리 소진이 빠르다

 

그래서 하나 만들자!!! 라는 생각을 하게 되었다

문제는…

마이크로 프로세서로 GPS신호를 받아 내는건 큰 문제가 아니였다

시리얼 통신이면 되니까

데이터 저장이 문제였다

정말 기본적인 마이크로 프로세서만 아는 나로선 혼자서 설계, 자작은 불가능 했다

이리저리 자료를 찾던중 Make잡지를 통해 이전에 들어봤던 Arduino를 조금 더 자세히 보게 되었다

그래 이거야!!!

기존에도 마이크로 프로세서 모듈들이 많이 판매되고 있었지만 Arduino는 좀 달랐다

오픈 소스에 많은 이들이 이것을 사용한다는 것이다

프로그램이나 예제, 하드웨어 등이 하나의 패키지화 되어 있는 것이다

다른 마이크로 프로세서들은 책 내용이 전부거나 일부 약간의 내용이 전부다

그래서 다양한 예제나 작품들을 볼 수 없다

특정 기능들을 찾으면 서로 다른 모듈로 소개를 해서 나같은 초보는 따라할수 없다

하지만 Arduino는 그 모듈 자체가 전 세계적으로 퍼져있고 많은 사람들이 여러가지를 자작을 하며 하드웨어 버젼별, 종류별 호환도 거의 다 이루어진다

이 얼마나 놀라운 시스템인가

찾자

분명 누군가 Arduino로 GPS Logger를 만들었을거야

아니나 다를까 있다

헌데 생각외로 없다

 

해외 1건, 그것을 보고 만든 국내 1건

해외 작품은 쉴드를 판매하는 곳이다

판매도 하지만 회로도, 프로그램까지 모두 오픈을 하였다

http://www.ladyada.net/make/gpsshield/

국내의 제작자는

http://blog.whattomake.co.kr/m/134

위 해외 작품을 보고 심플하게 바꾼 작업을 하였다

Arduino UNO를 Arduino Pro Mini로 바꾸고 GPS, SD 쉴드를 그냥 단순화 시켰다

약간의 회로도와 소스가 있지만 그외 그다지 자세한 내용은 없었다

 

그래 여기까지 있으니 나머지는 내가 해야겠지?

우선 기존 시스템을 보고 나의 시스템을 구성 하였다

LED 하나를 이용해서 에러와 데이터 입력을 다 표시하였다

그럼 나는?

시리얼 데이터가 잘 들어오는지 확인을 해야했다

저장이 잘 되는지도 확인해야했다

GPS 데이터의 분석으로 유효성도 알아야 했다

시리얼 데이터는 한줄이 완성되면 깜빡이게 했다

마찬가지로 데이터 저장이 성공하면 On, 실패하면 Off로서 데이터 저장 성공 여부를 파악할 수 있다

GPS 데이터 유효성은?

내가 이용한것은 GPS 데이터중 GSA에 이에 대한 간단한 내용이 있다

두번째 항목이다

1, 2, 3 세가지로 표현이 되며 1은 데이터 신뢰도가 없다는 뜻이다

2는 고도는 무시해야하는 값이다

3은 고도값까지 어느정도 신뢰를 할 수 있다는 뜻이다

GPS가 제대로 동작하고 데이터를 잘 받아서 위치를 잘 표시한다면 이 항목이 3일 것이다

적어도 2는 된다

이것을 데이터 유효성 체크로 사용해도 무방할것 같다

1, 2, 3 일때 각기 다른 형태로 표시를 하기로 했다

그외의 것은 대부분 원 제작자들을 따라갔다

 

다음은 대략의 구성도 이다

 

 

전체 회로도는 아래와 같다

 

뭐 복잡할것도 없다

아두이노가 다 해주니까

여기서 필요한건 아두이노와 SD카드의 연결이다

SD카드는 3.3V를 이용한다

필요하다면 전원이야 3.3V를 넣어주는게 문제가 되진 않지만 아두이노와의 통신이 문제다

Arduino Pro Mini 3.3V짜리가 있는데 싸게 클론을 사다보니 3.3V가 없었다

그렇기에 아두이노와 SD간의 통신 전압을 맞춰주기 위한 회로가 필요하다

정밀하고 안전하게 하기 위해서 복잡한 회로가 필요하지만 간단히 저항 몇개만으로도 가능하다

그외에 3.3V를 만들기 위한 회로가 필요하다

1117을 사용해서 3.3V를 만들 수 있다는 얘기와 회로를 접하게 되었다

효율도 좋은편이고 회로도 간단한 편이고…

부품 수급이 문제였다

그거 하나 사러나갈 시간도 없고 인터넷 주문하기도 좀 그렇고… ㅠㅜ

칩저항의 경우 보통 버리는 보드들에서 구하는 편이였다

메가패스 모뎀이 있었는데 그안에 1117이 있는 것이다

이런 재수가… ^^;

 

GPS는 사용전압이 자유로운 편이라 프로그램에서 통신 속도만 맞추면 큰 문제가 없다

LED인디케이트야 해당 포트에 맞춰서 LED랑 저항만 연결하면 된다

이렇게 아두이노 주변에 SD카드 통신 회로, 3.3V 전압강하 회로, GPS 연결부, 인디케이트용 LED, 전원 연결부가 전부이다

그리 복잡하지 않은 형태로 회로를 구성할 수 있다

향후엔 좀더 다양한 기능들을 넣기위해 추가적인 외부 회로를 구성해야할 것이다

 

스케치(프로그램 소스)는 그리 복잡하지 않다

사실 Blink하나 해보고 바로 이 단계로 넘어오다보니 제공된 소스가지고도 처음부터 동작되진 않았다

뭐가 문제인지 알겠지만 해결할 수 없는 답답함이란… ㅠㅜ

전체 에러를 표현하기 위한 함수와 스케치의 기본인 setup, loop부분이 전부다

loop에서 SD카드의 이상 유무를 체크한다

파일명을 연속적인 번호로 생성하기 위해 파일을 살펴보는것도 있다

PDA를 이용했을때는 기본적으로 PDA가 시간정보를 가지고 있으니 파일명을 시간으로 사용했었었다

하지만 아두이노에까지 시간정보를 넣기위해선 추가적인 회로가 필요하다

그래서 제외하였다

무론 첫번째 데이터를 활용해서 날짜를 이용할수도 있지만 그것도 현재는 제외하였다

SD카드를 체크하고 이상이 없다면 시리얼 데이터를 수신하면서 데이터를 분석한다

문자 하나씩 받아서 BUFFER에 저장을 한다

GPS데이터는 $로 시작해서 개행문자로 하나의 문장이 구성된다

그러므로 $를 젤 처음에 넣고 개행문자가 나오면 해당 데이터를 분석하고 저장한다

GPS 데이터는 여러가지 데이터를 표시한다

인디케이터에 사용할 데이터는 GSA로서 앞서 말한것처럼 데이터 신뢰도를 이용했다

Red, Green LED 두개를 이용해서

신뢰도 1 : Red-On, Green-Off

신뢰도 2 : Red-On, Green-On (Yellow)

신뢰도 3 : Red-Off, Green-On

의 형태로 나타낸다

그리고 SD카드에 성공적으로 데이터를 저장하면 또다른 Green LED를 On하고, 실패시엔 Off한다

그리고 데이터가 한줄 들어올때마다 Blue LED를 On/Off해준다

이로서 평소엔 세가지의 상태를 볼 수 있다

하드웨어도 다 구성하고 소프트웨어(스케치)도 다 구성했었다

파일 생성되고 데이터 입력되고 GPS신호도 잘 저장이 되었다

 

헌데 문제 발생!!! ㅠㅜ

이것 때문에 한참을 고생했다

물론 허무하게 해결했지만… ㅠㅜ

문제의 형태는…

아무튼 다 이상없이 잘 동작했다

하지만 몇분 지나지 않아서 데이터 저장에 문제가 생기는 것이다

저장을 못한다고 표시하거나 저장을 하다말고 뻗어 버리는 것이다

그러한 상황이면 SD카드안에 파일이름이 없는 파일 하나만 있고 그 크기는 약 4G가 되는것이다

사용하는건 256M인데 말이지…

특정 시간이나 특정 데이터 수와도 상관이 없는것이다

처음 고려한것은 BUFFER의 크기였다

처음 찾아본 스케치에선 73의 크기로 사용하고 있었다

하지만 GPS에 따라선 더 많은 데이터도 있었던 것이다

그래서 BUFFER의 크기를 늘리니 정상동작하는 시간이 좀 늘었지만 역시나 몇분내에 동작불가

처음 접했던 소스 전면 교체

일일이 손으로 다시 다 스케치를 짜고 이리저리 연구하고 물어보고… ㅠㅜ

그러다 http://www.ladyada.net/make/gpsshield 이 사이트에서 본 글귀 하나가 생각나는 것이다

[이름있는 SD카드를 사용해라]

혹시나 하고 샌디스크 32M짜리를 꽂았다

이런…!!!

테스트로 24시간 가량을 켜놨는데도 아무 이상없이 정상동작을 하는 것이다

모든 데이터 저장 잘되고 동작도 잘되고…

해결되서 기쁘긴 했다. ㅠㅜ

그 외엔 문제가 없었다

 

다음은 제작된 이미지 이다.

제작 과정이 없기는 하지만 뭐 그리 제작과정을 남길만큼 대작업이 아니다.

아두이노 프로 미니 이다.

아두이노 우노에 비하면 정말 작다.

길이는 손가락 두마디 정도로 작은 크기를 제작하기에 좋다.

뭐 우노 해도 별 상관은 없다.

어차피 만들어진 확장보드가 좀 큰편이라… ^^;

 

제작된 확장보드이다.

일종의 쉴드이다.

전원부에서 전원을 받아서 아두이노와 GPS에 직접 전원을 공급하고 SD 카드 쪽으로는 LD1117을 통해서 3.2V가 공급되게 된다.

납땜이 귀찮아져서 그냥 쌩 납으로 연결한 경우가 더러 있다. ^^;

SD 카드의 전원부와 통신부가 복잡할 뿐 나머지는 복잡할것도 없다.

아랫부분엔 LED가 4개 인데…

그중에 왼쪽에 두개는 빨간색과 녹색 두개를 3색 LED처럼 쓸려고 글루건으로 살짝 입였는데…

불이 들어와도 노란색 표시가 잘 안난다. ^^; 실패~

아두이노와 SD 카드를 장착하고나면 높이도 좀 높아지고 SD 카드로 인해 길이가 좀더 길어진다.

다음번 제작시에는 전체적인 크기에 대해 신경써서 만들어야 겠다.

 

전체 연결도지만 그리 보여줄게 없다.

전원과 GPS를 확장보드에 연결한것말고는… ^^;

 

마구잡이로 만들다보니 적당한 케이스가 없다.

테스트 할때는 명함케이스 안에 넣어 다녔는데…

GPS 모듈이 들어가질 않았다.

다이소에서 1000원주고 반찬통 하나 구입했다.

뭐 튼튼해 보이기도 하고…

더 작은 케이스에도 들어가지만 더 작은건 없다.

사실 있지만 뚜껑 채결방법도 맘에 들지 않고 무엇보다 4개 묶음인지라… ^^;

 

[ 향후 추가할 기능 ]

현재는 모든 데이터 기록(무식하다)한다.

건물내에 들어 가거나 GPS 신호를 잘 못잡더라도 무조건 기록하다보니 쓸데 없는 데이터들이 너무 많이 저장된다.

적어도 2D까지는 나와야 기록이 되는걸로…

1D가 특정 갯수만큼 연속 카운터 될때 그때 부터는 1D는 기록하지 않고 2D 이상이 나오면 바로 기록 재계하는 형태를 생각중에 있다.

뭐 프로그램으로 간단히 할 수는 있다.

카운터용 변수 하나와 if문 하나더… ^^;

하지만 귀차니즘으로 인해…

무엇보다 아직까지는 다시 GPS Logger를 다시 쓸일이 없을것 같다. ^^;





2 Responses to Arduino 를 이용한 GPS Logger (with SD card)

  1. 정말 잼나게 읽다 갑니다. ^^ 저도 시작하고 있는 단계라

    도움이 많이 되었습니다. 화이팅 하시고 정보 공유 많이 부탁드려요 ^^

    가까이 살면 물어보면서 같이 하고 싶을정도로 잼나게 보다 가요~

    응답
    • 2016-10-23 at 09:37 redcrow

      재미있었다니 다행입니다
      게으르다는 핑계로 정보가 늦네요~
      죄송합니다
      최대한 모든 정보 오픈을 기본으로 하고 있는데
      글 작성이 이렇게 힘든건줄 몰랐습니다 ^^
      저도 많은 분들 만나고 싶네요~
      서울 삽니다 ^^
      감사합니다

      응답

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.