Embedded/Arduino

아두이노 나노(Arduino Nano) 33 IoT를 이용한 GY-GPSV3-7M GPS 수신 모듈 테스트(SZH-NT07)

변화의 물결1 2024. 6. 5. 00:04

 

 

 

안녕하세요. 

 

 이번에는 아두이노 나노 33 IoT에 GPS를 연결해 보도록 하겠습니다. 조금 저가형이지만 간단하게 테스트할 수 있는 모듈입니다. 그러나 결론적으로 보면, GPS 수신은 되지만, 외부에서 사용할 경우 추가적인 안테나가 필요해 보였습니다.

 GPS 가짜 제품을 알아내는 법, 구글맵에서 검색하는 방법 등 이런저런 내용으로 구성해 보았습니다.

 


 

1. GPS(Global Positioning System) 란

 

 

GPS(Global Positioning System 글로벌 포지셔닝 시스템[*]) 또는 범지구 위치 결정 시스템은 현재 GLONASS와 함께 완전하게 운용되고 있는 범지구 위성항법시스템 중 하나이다. 미국 국방부에서 개발되었으며 공식 명칭은 NAVSTAR GPS(NAVSTAR는 약자가 아니지만 종종 NAVigation System with Timing And Ranging이라고 하기도 한다.)이다. 무기 유도, 항법, 측량, 지도 제작, 측지, 시각 동기 등의 군용 및 민간용 목적으로 사용되고 있다.

 

  GPS에서는 중궤도를 도는 24개(실제는 그 이상)의 인공위성에서 발신하는 마이크로파를 GPS 수신기에서 수신하여 수신기의 위치 벡터를 결정한다.

 

  GPS 위성은 미국 공군 제50 우주비행단에서 관리하고 있다. 노후 위성의 교체와 새로운 위성 발사 등 유지와 연구, 개발에 필요한 비용은 연간 약 7억 5천만 달러에 이른다. 그러나 GPS는 전 세계에서 무료로 사용 가능하다. 

 

 

2. 모듈 구성

 

  - 안테나와 GPS 수신 모듈로 이루어져 있습니다.

  - 4p 헤더 핀은 포함되어 있지 않아서 별도로 구매해야 합니다.

 

 

 

1) 스 펙

 

  - GPS modules NEO-7M, 3V-5V power supply

  - Using imported NEO-7M-0-000 GPS module

  - Module with ceramic destined antenna, signal super

  - EEPROM power down to save the configuration parameter data

  - With data backup battery

  - There are LED lights

  - High quality Immersion Gold PCB

  - Antenna Size: 25*25mm/0.98*0.98"

  - Module Size: 25*35mm/0.98*1.37"

  - Installation Diameter: 3mm

  - Supply Voltage: 3V-5V

  - The default baud rate: 9600

  - Receiver type : 56-channel u-blox 7 engine

  - Navigation Update rate : up to 10Hz

  - Oscillator : crystal (NEO-7M)

  - RTC crystal : Built-In

  - Noise figure : On-chip LNA(NEO-7M);Extra LNA for Lowest noise figure

  - Memory : ROM(NEO-7M)

  - Supported antennas : Active and passive

 

 

    GPS GLONASS
Accuracy  Position  2.5m CEP 4m
SBAS 2.0m CEP N.A.
Acquisition Cold starts 29s 30s
Aided starts 5s N.A.
Reacquisition 1s 3s
Sensitivity Tracking & Nav -162 dBm -158 dBm
Cold starts -148 dBm -139 dBm
Warm starts -148 dBm -145 dBm

  

 

3. 연결하기

 

  - 아두이노 나노 33 IoT와 연결했을 경우입니다. 다른 아두이노 모듈과 연결할 시에도 Rx와 Tx를 교차해서 연결하면 문제없을 것입니다. 전원은 3.3V ~ 5V를 지원하니 전원 둘 중 한 곳에 연결하면 됩니다.

  - GPS를 설정할 것이 아니라면  전선 3가닥만 연결하면 됩니다. GPS 모듈 입장에서 RX 핀은 연결하지 않아도 수신하는 것에는 문제가 없습니다.

 

Arduino Nano GY-GPSV3-7M
+3V3 VCC
GND  GND
RX0   TX
TX1   RX (옵션)

 

 

 

 

실제 연결

 

 

4. GPS 수신하기

 

   NMEA0183 프로토콜을 통해서 통신합니다. 그러나 여기서는 NMEA 0183은 시간, 위치, 방위 등의 정보를 전송하기 위한 규격이다. NMEA 0183은 미국의 NMEA(The National Marine Electronics Association)에서 정의해 놓았다. 이 데이터들은 주로 자이로 컴퍼스, GPS, 나침반, 관성항법장치(INS)에 사용된다. NMEA 0183은 ASCII코드로 직렬 방식의 통신을 사용한다.

 

  NMEA 0183은 3가지 레이어로 구성되어 있으며, 이것은 각각 물리 계층, 데이터링크 계층, 애플리케이션 계층이다. 물리 계층은 RS-232, RS-422 등의 전기적인 전송 규격을 뜻한다. 데이터링크 계층은 Baud rate, Data bit, Parity bit, Stop bit 등을 정해 놓는다. Application Layer는 데이터를 전송하는 Sentence에 대한 규약이 이며 GPS 등에서 표준 프로토콜이다.

- 참조 : https://ko.wikipedia.org/wiki/NMEA

 

 

1) 기본 값 출력하기

 

  - 기본적으로 NMEA0183 프로토콜로 날아오는 신호를 바로 출력해서 볼 수 있습니다.

  - Serial 통신으로 연결하면 기본적인 출력 값이 나타납니다.

 

#include <Arduino.h>

void setup() {
  Serial.begin(9600);
  Serial.println("Start Serial...");

  Serial1.begin(9600); // Hardware Tx1, RX0 Pin
}

void loop() {
  if(Serial1.available())
  {
    Serial.write(Serial1.read());
  }
}

 

 

- GPS 수신 데이터를 Serial1 포트로 받아 USB 시리얼 포트로 출력해 봅니다.

 

 

 

2) TinyGPS 라이브러리 사용해 보기

 

  - Raw 데이터 상 데이터를 보기 힘들기 때문에 문자열로 파싱 해놓은 예제 소스가 있어서 이용해서 출력해 봅니다.

  - https://github.com/mikalhart/TinyGPS로 가서 “Code” -> “Download ZIP”으로 해서 소스를 다운로드합니다.

 

 

 

  - 다운로드한 압축파일을 아두이노 라이브러리에 추가합니다. “스케치”->”라이브러리 포함하기” -> “.ZIP 라이브러리 추가…” 눌러 다운로드한 Tiny-GPS-master.zip을 불러옵니다.

 

 

 

  - 라이브러리가 적용될 수 있도록 업데이트해 줍니다. 방법은 “툴” -> “라이브러리 관리…” 눌러줍니다. 그러면 아두이노 IDE에서 검색해서 등록되게 합니다.

 

 

 

  - “예제” -> “TinyGPS-master”->”test_with_gps_device” 메뉴가 생성된 것을 확인할 수 있습니다. 그런 test_with_gps_device를 선택하면 기본 예제 소스가 나타납니다.

 

 

 

  - 통신 속도 포트 등을 조금 수정해야 합니다. 그리고 Arduino nano 33 IoT 버전을 사용하고 있다면 SoftwareSerial.h 도 지원하지 않기 때문에 주석 처리를 해야 합니다. nano 33 IoT 기준으로 최소 수정하는 방향으로 해보겠습니다.

 

 

 

- 수정해야 할 부분 4곳  

// #include <SoftwareSerial.h>

 

//SoftwareSerial ss(4, 3);

#define ss Serial1  // 소프트웨어 시리얼 부분을 물리적 Serial1로 바꿔 사용합니다.

 

//Serial.begin(115200);

Serial.begin(9600);  // 시리얼 통신 모니터링하는 통신속도로 9600으로 통일합니다. 115200으로 해도 됨

 

//ss.begin(4800);

ss.begin(9600);  // GPS 모듈 초기 통신 속도가 9600bps 이므로 설정 필요

 

  - 수정을 다 했다면 아두이노 나노 보드에 다운로드합니다.

 

  - GPS 정상 값을 수신받지 못하면 **** 로 표시됩니다.

 

 

 

  - 정상적으로 값을 수신하기 시작하면 GPS 녹색 불이 깜박이며  

    Sats / HDOP /  Latitude / Longitude / Fix / Date / Time / Date... 순서대로 표시됩니다.

 

 

 

5. 구글 지도 맵에서 찾는 방법

 

  - GPS에서 나온 값을 확인해 보려면 우선 구글 맵으로 이동합니다.

    https://www.google.co.kr/maps

  에서 측면 검색 창에 위도, 경도 순으로 복사해서 넣습니다. 예는 서울역 위치 값입니다.

  그리고 검색을 하면 자신이 작업하고 있는 위치를 가리키고 있는 것을 확인할 수 있습니다.

 

 

 

6. GPS 가짜 판별방법

 

  - ublox GPS 모듈 자료를 찾으면서 확인 한 내용인데, 가끔 Fake 제품이 있다고 합니다. 기본 데이터가 들어오는 것처럼 속여서 진짜로 작동되는 것처럼 데이터를 출력합니다.

 

 - 확인 방법은 Raw 데이터를 받는 상태로 펌웨어(위의 내용 참고)를 올리거나 UsbToSerial 모듈을 사용해서 가장 처음 나오는 펌웨어 데이터를 확인하는 것입니다.

 

 - $GPTXT 부분에 UBX-G 시리즈라고 나타나지 않고 AT 등으로 시작한다면 가짜 제품으로 생각하면 됩니다.  또 이 방법도 해결해서 다르게 했을 수도 있으나 현재 알아낸 방법 중 하나입니다.

 

 

 

7. 수신 안 되는 경우 및 GPS 안테나 관련 추가 내용

 

  - 모듈이 가짜일 경우  위에서 나온 것처럼 모듈 자체가 가짜로 수신되는 값으로 인해 나오지 않는 경우가 있습니다.

   - GPGGA에 9999로 나오거나 GPGLL에 위도, 경도가 정상적으로 나오지 않는 것은 GPS에서 수신되지 않는 경우입니다.

  우선, 안테나의 방향을 철판이 위쪽으로 향하게 합니다. 뒤집을 경우 수신율이 떨어져서 값이 나타나지 않을 수 있습니다.

 

 

 

  - 실내인 경우 수신되지 않을 수 있습니다. 그러나 창쪽에서 작업할 경우 수신이 가능합니다. 그러나 주변 환경에 따라 다를 수 있으니 실외나 안테나를 창밖에 놓고 먼저 테스트해 보기 바랍니다.

 

  - 수신되는 시간 필요, 전원 인가 즉시 바로 GPS 위성과 연결되는 것이 아니기 때문에 최소 1~2분 정도는 기다려 보시기 바랍니다. 수신하면 녹색불이 깜박입니다.

 

  - 안테나를 외부로 노출시키길 위해서 별도로 구매합니다. GPS 안테나로 주파수 대역이 1575.42 Mhz입니다. 그리고 기본 제공해 주는 안테나보다 뒤집어도 수신이 되고 접속 속도도 빠른 것으로 확인했습니다.

  구매 시 주의할 점은 안테나 연결 커넥터 타입을 잘 확인하셔야 합니다. 안테나가 SMA 타입이므로 UFL 타입에서 SMA 타입으로 변환해 주는 케이블이 별도로 필요합니다.

  참고 삼아, 구매했던 케이블과 안테나를 적어 두겠습니다.

 

  <안테나 연장선 - 연결 케이블 (PN-CABLE-UFL-SMABJ) -  UFL(IPX) / SMA F-Mail>

  <안테나 GPS Car [AKA150] - 초소형 GPS 안테나, 고성능 Active Antenna 내장>

 

  

 

  이제 위도와 경도를 정보를 나타낼 수 있는 장비를 만들 수 있게 되었습니다. ^^

 

감사합니다.

 

 

<참고 사이트>

1. GPS 란

https://ko.wikipedia.org/wiki/GPS

2. NEO-7M 아두이노 GPS 수신 모듈 [SZH-NT07]

https://www.devicemart.co.kr/goods/view?no=10895400

3. NeoGPS

https://www.arduinolibraries.info/libraries/neo-gps

4. [흥프로] 아두이노 NEO-6M GPS 모듈 사용하기

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=no1_devicemart&logNo=221539131418

5. 구글맵에서 GPS 좌표(위도, 경도) 사용하기

https://tttsss77.tistory.com/147

6.Tragedy of Chinese fake GPS module

https://www.youtube.com/watch?v=buyFIcgee5w  

 

 

반응형