본문으로 바로가기

아두이노 GPS모듈 NEO 6M/7M 응용편


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.


참고로 중급편 부터는 응용편이 없습니다. 

왜냐하면 고급편에서 중급에 사용했던 부품의 응용편을 다룰 예정이기 때문이죠!!



안녕하세요. 애드라이프 입니다. 

이전 포스팅에서 GPS모듈의 사용법에 대해서 알아봤습니다.

하지만 기본적인 정보가 알아보기 힘들게 나와서 좀 불편한 점이 있었습니다.

이번 포스팅에서는 라이브러리를 이용하여 좀더 보기편하게 프로그램을 수정해서 라이브러리 이용편을 다루겠습니다.


이전 포스팅을 참고하고 싶으시면 아래 링크를 참고해주세요.

[아두이노/아두이노 중급] - 아두이노(Arduino) 중급 GPS모듈 NEO 6M/7M



아두이노 GPS모듈 NEO 6M/7M 응용편아두이노 GPS모듈 NEO 6M/7M 응용편

모듈은 동일하게 Waveshare의 NEO-6M/7M GPS입니다. ▲


아두이노 GPS모듈 NEO 6M/7M 응용편

회로 구성도 이전 포스팅과 동일하지만 참고용으로 한번도 올리겠습니다. ▲

실제로 저는 7M IC를 쓰고 있지만 회로에는 6M입니다. 핀배열은 똑같으니 크게 신경쓰지 않으셔도 됩니다.


그럼 오늘에 메인인 프로그램을 살펴보도록 하겠습니다.▼

필요한 라이브러리는 파일 첨부해 놓겠습니다.(라이브러리 추가법은 공지글에 개발환경을 참고해주세요.)


TinyGPS-master.zip




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <SoftwareSerial.h>            //라이브러리 추가(기본라이브러리)
#include <TinyGPS.h>                //라이브러리 추가 필요
         
// Arduino에서 GPS와 통신하기 위해 사용할 핀을 정의합니다. 
// 이 경우 GPS 모듈의 TX 핀이 Arduino의 RXPIN(핀 3)에 연결됩니다.
#define RXPIN 2
#define TXPIN 3
//이 값을 GPS의 보드 속도와 동일하게 설정합니다.
#define GPSBAUD 9600
 
// TinyGPS 개체의 인스턴스 생성
TinyGPS gps;
// 위에서 정의한 핀으로 NewSoftSerial 라이브러리 초기화
SoftwareSerial uart_gps(RXPIN, TXPIN);
 
// 여기서 TinyGPS 라이브러리를 사용할 기능의 프로토타입을 선언합니다.
void getgps(TinyGPS &gps);
 
// 설정 기능에서는 두 개의 직렬 포트를 초기화해야 합니다. 
// 터미널 프로그램과 통신하려면 표준 하드웨어 직렬 포트(시리얼())를 초기화해야 합니다. 
void setup()
{
  //통신속도 9600 속도를 더느리게 하면 오류가 날 수 있습니다.
  Serial.begin(9600);    
  //GPS의 보드 속도를 설정합니다.
  uart_gps.begin(GPSBAUD);
  
  Serial.println("");
  Serial.println("WaveShare NEO 6M/7M GPS Module TEST");
  Serial.println("       ...waiting for Data...           ");
  Serial.println("");
}
void loop()
{
  while(uart_gps.available())     // GPS모듈에서 신호가 수신 될 경우
  {
      int c = uart_gps.read();    // 변수에 데이터를 저장
      if(gps.encode(c))              // 새로운 문장이 있다면
      {
        getgps(gps);                 // 데이터를 수집
      }   
  }
}
 
void getgps(TinyGPS &gps)
{
  // 변수정의
  float latitude, longitude;
  // 기능호출
  gps.f_get_position(&latitude, &longitude);
  // 위도(latitude)경도(longitude )출력 가능상태
  Serial.print("Lat/Long: "); 
  Serial.print(latitude,5); 
  Serial.print(", "); 
  Serial.println(longitude,5);
  
  // 날짜랑 시간 데이터도 동일한 포멧입니다.
  int year;
  byte month, day, hour, minute, second, hundredths;
  gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
  Serial.print("Date: "); Serial.print(month, DEC); Serial.print("/"); 
  Serial.print(day, DEC); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(hour, DEC); Serial.print(":"); 
  Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); 
  Serial.print("."); Serial.println(hundredths, DEC);
  
  // 여기서 고도와 코스 값을 직접 인쇄할 수 있습니다
  Serial.print("Altitude (meters): "); Serial.println(gps.f_altitude());  
  Serial.print("Course (degrees): "); Serial.println(gps.f_course()); 
  Serial.print("Speed(kmph): "); Serial.println(gps.f_speed_kmph());
  Serial.println();
  
  // 여기서 문장에 대한 통계를 인쇄할 수 있습니다.
  unsigned long chars;
  unsigned short sentences, failed_checksum;
  gps.stats(&chars, &sentences, &failed_checksum);
  //Serial.print("Failed Checksums: ");Serial.print(failed_checksum);
  //Serial.println(); Serial.println();
  delay(1000);
}
cs
프로그램의 전체적인 흐름은 프로그램을 참고해 주세요.


프로그램이 길어보이지만 거의 모든 부분이 데이터 출력부분입니다.

위도,경도 뿐만 아니라 날짜,시간,각도,속도 등의 정보를 출력해주고 출력되는 데이터가 보기편하게 되어있습니다.

실제로 출력되는 화면을 확인해보겠습니다.(실제 위치정보라 모자이크 처리했습니다.)

예전에 찍어놓았던 로그입니다.▼


아두이노 GPS모듈 NEO 6M/7M 응용편


이전 포스팅을 보신분은 아시겠지만 구글지도에 위치를 검색할 경우에도 데이터를 수정해서 적어줘야 

위치가 검색되는 단점이있었지만 이번 예제에서는 Lat/Long : 위도, 경도 부분의 위도,경도를 그대로 복사해서

구글 지도에 붙여 넣으면 바로 위치 검색이 됩니다.▼



아두이노 GPS모듈 NEO 6M/7M 구글지도


지금까지 아두이노(Arduino) 중급 GPS모듈 NEO 6M/7M 라이브러리 이용편 포스티이였습니다.

계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.

By 애드라이프