Ultimate GPS logger 쉴드의 소프트시리얼 연결 및 데이터 파싱

Ultimate GPS logger 쉴드의 소프트시리얼 연결

Ultimate GPS logger쉴드를 아두이노와 직접연결하여 테스트하였으면, 이제 soft serial 연결로 셋업할 수 있습니다. 소프트 시리얼 연결은 디지털 핀 7, 8번의 두번째 UART를 셋업하여 동작되게 만듭니다. 두번째 UART를 사용하면, 첫번째 메인 UART는 스케치를 디버깅하고 업로딩하는 용도로 계속사용할 수 있습니다.

소프트 시리얼 연결은 아두이노 Uno/Duemilanove/Diecimila/Leonardo에서 동작이 가능하지만 Mega의 경우 핀 7,8번에 소프트 시리얼을 지원하지 않아 Mega에서는 동작하지 않습니다.

softserial.jpg

다음으로 Adafruit GPS 라이브러리를 다운로드 받습니다. 이 라이브러리를 사용자를 대신하여 GPS데이터를 받고 파싱을 처리하는 여러 일을 처리하여 줍니다. 다음의 링크에서 다운로드 받습니다. visit the GitHub repository and click the ZIP button 다운로드 받은 ZIP파일의 압축을 풀어 Adafruit_GPS 폴더로 이름을 변경합니다. 폴더내에 Adafruit_GPS.cpp와 Adafruit_GPS.h가 있는지 확인합니다.

다운 받은 폴더를 sketchbookfolder/libraries 폴더에 위치시킨 후, IDE를 재시작합니다. sketchbookfolder의 위치를 모를 경우에는 아두이노 IDE의 Preference탭에서 위치를 확인 할 수 있습니다.

File→Examples→Adafruit_GPS→leo_echo 스케치를 열고 아두이노에 업로드 한 후 시리얼 모니터를 엽니다. 이 스케치는 단순히 소프트 시리얼 포트(핀7,8번)에서 데이터를 읽어와 USB에 연결된 하드웨어 시리얼 포트에 출력하는 코드입니다.

setup()함수에 있는 내용을 코맨트 처리하여 출력을 설정 할 수 있습니다. 예를 들어 GPS에게 다른 sentence로 보내달라고 요청하거나 얼마나 자주 데이터를 보내줄 것인지를 변경할 수 있습니다. 10Hz가 최고 속도(초당 10번)이지만 9600보드레이트가 빠르지 않기때문에 모든 데이터를 받을 수 는 없습니다.

Ultimate GPS logger 쉴드의 GPS데이터 파싱

모든 GPS는 NMEA sentence를 출력합니다. 설치한 GPS라이브러리를 이용하면 GPS데이터를 파싱하는데 드는 많은 수고를 줄일 수 있습니다.

아두이노 Uno/Duemilanove/Diecimila 사용시

아두이노의 스위치가 SoftSerial위치에 있는지 확인 한 후

File→Examples→Adafruit_GPS→parsing 에서 스케치 코드를 연 후 다음 라인을 아래와 같이 변경합니다.

SoftwareSerial mySerial(3, 2);

을 아래와 같이 변경

SoftwareSerial mySerial(8, 7);

변경을 하였으면 아두이노에 업로드한 후 시리얼 모니터를 엽니다.

아두이노 Leonardo 사용시

아두이노의 스위치가 SoftSerial위치에 있는지 확인 한 후

SoftwareSerial mySerial(3, 2); 부분을 SoftwareSerial mySerial(8, 7); 과 같이 변경한 후, 아래의 부분을 변경합니다.
useInterrupt(true);
을 아래와 같이 변경
useInterrupt(false);

레오나르도에서는 소프트시리얼, 인터럽트, USB를 통한 출력 에코를 동시에 쓸수 없습니다. 그래서 이와 같이 변경합니다.

GPS가 fix를 받을때가지 기다립니다. GPS는 창가로 놓아두는 것이 좋습니다.

parsed.gif

이 스케치에서, milisecond당 한번씩 인터럽트를 사용하고 GPS.read()함수를 호출하거나, 메인 루프에서 GPS.read()함수를 체크할 수 있습니다. 메인루프에서는 GPS.newNMEAreceived()함수를 사용하여 새로운 데이터가 수신되었는지를 GPS모듈에게 물어 볼수 있습니다. 만약 true가 리턴된다면 새로운 데이터를 GPS.parse(GPS.lastNMEA())함수를 사용하여 파싱할 수 있습니다.

메인 루프에서 새로 수신된 GPS데이터가 있는지 확인하고 파싱해주는 일을 계속해주어야 하는데, 인터럽트로 이 일을 할경우에는 GPS데이터를 놓칠 수 있기 때문에 인터럽트로는 처리가 불가능합니다.

일단 데이터가 파싱되면, GPS.day, GPS.month, GPS.year등의 함수를 이용하여 현재 날짜를 얻어 올수 있습니다. GPS가 fix를 얻게 되면 GPS.fix는 1이 됩니다. fix를 얻게 되면 GPS.latitude, GPS.longitude, GPS.speed, GPS.angle, GPS.altitude, GPS.satelites(위성 숫자) 등을 사용하여 관련 값을 얻어 올수 있습니다.

추가로 GPS데이터 업데이트 주기는 1Hz를 권장합니다.

제품정보: http://vctec.co.kr/front/php/product.php?product_no=872&main_cate_no=161&display_group=1

가치창조기술

Comments