Ulimate GPS Logger 쉴드의 시리얼 TTL출력을 아두이노 직접 연결하기

Ulimate GPS Logger 쉴드의 시리얼 TTL출력을 아두이노 직접 연결하기

GPS의 시리얼 TTL출력을 아두이노의 USB-Serial 변환칩에 직접 연결을 할 수 있습니다. 이 방법은 명령어를 직접 전송하여 실험하기를 원할 때, 혹은 윈도우 소프트웨어를 사용할 때 좋은 방법입니다. 이때는 아두이노는 USB-UART 브릿지처럼 동작합니다.

스위치를 이용하여 직접연결(Uno/Mega)

아두이노 Uno/Duemilanove/Diecimila/Mega를 사용하고 있다면, 쉴드상의 스위치를 이용하여 직접 연결이 가능합니다. 레오나르도는 USB/UART 칩이 없기 때문에 직접 연결은 불가능합니다.

먼저 아두이노에 아래와 같은 빈 스케치를 로드합니다.
// this sketch will allow you to bypass the Atmega chip
// and connect the GPS directly to the USB/Serial
// chip converter.
 
// Connect VIN to +5V
// Connect GND to Ground
// Connect GPS RX (data into GPS) to Digital 0
// Connect GPS TX (data out from GPS) to Digital 1
 
void setup() {}
void loop() {}
 
이 코드는 atmega칩을 바이패스하여 GPS를 직접 USB-Serial 칩에 연결할 수 있게 합니다. 이 코드를 업로드하면 쉴드를 뒤집어 스위치를 Direct로 옮겨 놓으십시오.

direct.jpg

레오나르도에서 점퍼를 이용하여 직접 연결

만약 레오나르도에 Ultimate GPS logger 쉴드를 직접 연결하고자 한다면 약간의 트릭을 써야합니다. 레오나르도에는 별도의 USB/Serial 칩이 없어 프로세서 칩이 USB/Serial칩처럼 동작해야 하기 때문에 결선 방법을 변경하여 주어야 합니다.

쉴드 뒷면의 스위치를 Software Serial으로 변경합니다. 아래와 같이 TX 패드의 와이어를 디지털 0번으로 RX 패드의 와이어를 디지털 1번으로 연결합니다.

leodirect.jpg
마지막으로 Adafruit_GPS->leo_echo 스케치를 레오나르도에 업로드합니다. 이렇게 하면 GPS의 데이터가 USB포트로 셔플될 것입니다.

연결 테스트하여 보기



위와 같이 쉴드와 아두이노를 연결하였으면, USB케이블을 연결하고 아두이노 IDE에서 시리얼 모니터를 실행합니다. 보드레이트가 9600인지 확인하십시오. 그러면 아래와 같은 화면이 보일 것입니다. 

rawGPSout.gif

위에 보이는 데이터는 raw GPS 데이터로 "NMEA sentence"라고 합니다. 이 NMEA 출력은 두세개의 다른 종류가 있는데, 사람들이 사용하는 가장 흔한 종류는 $GPRMC(Global Positioning RecommendedMinimum Coordinates)와 $GPGGA 가 있습니다. 이 NMEA 출력은 시간, 날짜, 위도, 경도, 고도, land speed, fix type등을 알려줍니다. fix type은 GPS가 위성 데이터에 락되었는지 위치를 결정하기 위한 충분한 데이터(2D fix 혹은 위치+고도의 3D fix)가 수신되었는지를 표시합니다.

NMEA sentences에 대해 더 알고 싶으신 분은 이 링크를 참고하십시오.

위 그림의 데이터를 보면, 많은 콤마가 있고, 콤마 사이에 아무런 데이터가 없는 것이 보이실 것입니다. 이것은 지금 테스트하는 GPS모듈이 실내에 있어 fix 되지 않았기 때문입니다. fix을 얻기위해서는 모듈을 실외로 들고 나가야 합니다.

GPS모듈은 fix를 얻지 못해도 데이터를 항상 내보냅니다. 유효한 데이터를 얻기 위해서는 반드시 GPS모듈을 실외로 들고 나가 사각형 모양의 세라믹 안테나가 하늘을 향하도록 위치 시켜야 합니다. 베스트 케이스에서 GPS모듈은 보통 45초 이내에 fix를 얻을 수 있습니다. 하지만 지역이나 위성 설정, 태양표면 폭발, 인접한 큰 빌딩, RF노이즈, 등등 환경이 좋지 않은 경우는 fix를 얻기 위해 30분 이상이 걸릴 수 도 있습니다. 하지만 이것이 GPS모듈이 고장난 것을 의미하는 것은 아니니 안심하십시오.

GPS모듈을 실외나 창문 가까이에 놓게 되면, GPS가 fix를 얻게 되고 아래와 같은 데이터를 유효한 데이터를 보게 됩니다.

fixed.gif

그럼 다음 라인을 살펴볼까요? $GPRMC,194509.000,A,4042.6142,N,07400.4168,W,2.03,221.11,160412,,,A*77
이 라인은 RMC(Recommended Minimum) sentence라 불리며 필요한 거의 모든 데이터를 담고 있습니다. 각각의 데이터는 콤마로 구분이 됩니다.

첫번째 부분 194509.000은 GMT 현재 시간입니다. 처음의 19는 시간(19시), 그 다음 두개의 숫자는 분, 그 다음 두개의 숫자는 초를 의미하며, 그 다음의 숫자는 milisecond를 의미합니다. 위의 그림이 캡쳐될때의 시간은 오후 7:45 9초가 되겠습니다. GPS는 GPS모듈이 위치하고 있는 지역의 타임존을 모르기 때문에 GMT시간을 계산하여 위치한 지역의 시간대로 변경해 주어야 합니다.

두번째 부분은 상태코드입니다. V는 Void로 유효하지 않은 것을 의미하며, A는 Active를 의미합니다.

다음의 4개의 데이터는 지리적인 데이터입니다. 4042.6142,N (위도 40, 42.6142 decimal minutes North) & 07400.4168,W. (경도 74 s, 0.4168 decimal minutes West)를 의미하며 이것이 현재 GPS모듈의 위치입니다.

가끔 GPS가 수 킬로미터 오차가 난다고 헷갈려 하시는 분들이 계신데, 대부분 이는 경도와 위도 데이터 파싱을 잘못해서 발생하는 경우입니다. 위도는 DDMM.MMMM포맷으로 맨 앞의 두 글짜가 degree입니다. 경도는 DDDMM.MMMM포맷으로 맨 앞의 세 글자가 degree입니다.

다음 데이터는 knot로 표시된 속도입니다. 2.03 노트로 가고 있네요.

다음은 움직임 각도입니다. 이것은 대략적인 값으로 기존의 움직임을 기반으로 어떤 방향으로 가고 있는지를 알려줍니다.

그다음의 160412 은 현재 날짜 입니다. 12년도 04월 16일입니다.

마지막으로 *표시 뒤에 숫자가 나오는데 이것은 데이터 체크섬값입니다.

NMEA 명령을 보내보기


GPS모듈의 데이터쉬트를 보면 여러 명령들이 나와 있습니다. GPS 쉴드가 아두이노에 다이렉트로 연결되어 있기 때문에 시리얼 모니터를 통해 GPS모듈에 명령을 보낼수 있습니다. 예를 들어, $PMTK 명령을 시리얼 모니터를 통해 GPS로 보낼 수 있습니다 시리얼 모니터에서 명령을 치고 Both NL & CR을 눌러 명령을 보냅니다.

Comments