아두이노 GPS

이 튜토리얼에서는 NEO-6M GPS 모듈에서 GPS 좌표(경도, 위도, 고도), GPS 속도(km/h), 날짜 및 시간을 얻는 방법을 배우게 됩니다. 또한, 현재 GPS 위치로부터 사전 정의된 GPS 좌표(예: 런던의 좌표)까지의 거리를 계산하는 방법도 배우게 됩니다.

준비물

1×아두이노 우노 R3 쿠팡 | 아마존
1×USB 2.0 타입 A-to-B 케이블 (USB-A PC용) 쿠팡 | 아마존
1×USB 2.0 타입 C-to-B 케이블 (USB-C PC용) 아마존
1×NEO-6M GPS module 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

NEO-6M GPS 모듈에 관하여

핀배열

NEO-6M GPS 모듈에는 4개의 핀이 포함되어 있습니다:

  • VCC 핀: VCC(5V)에 연결해야 합니다.
  • GND 핀: GND(0V)에 연결해야 합니다.
  • TX 핀: 직렬 통신에 사용되며, 아두이노의 Serial (또는 SoftwareSerial) RX 핀에 연결해야 합니다.
  • RX 핀: 직렬 통신에 사용되며, 아두이노의 Serial (또는 SoftwareSerial) TX 핀에 연결해야 합니다.
neo-6m GPS module 사용법 핀아웃

선연결

아두이노 GPS module 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

프로젝트를 오래 실행하거나 케이스 안에 넣을 경우, 전선을 나사로 고정하는 것이 좋습니다. Arduino는 Screw Shield V2와 Proto Screw Terminal Block Shield 모두와 함께 사용할 수 있습니다. 둘 다 헤더 핀을 나사 단자로 바꿔 줍니다. Screw Shield 버전은 아래 다이어그램을 참고하세요.

아두이노 GPS module 연결 배선도 (screw shield v2)

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아두이노 코드

GPS 좌표, 속도(km/h), 그리고 날짜 시간 읽기

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino 핀이 GPS 모듈의 TX에 연결됨 #define TX_PIN 3 // Arduino 핀이 GPS 모듈의 RX에 연결됨 TinyGPSPlus gps; // TinyGPS++ 객체 SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // GPS 모듈로의 직렬 인터페이스 void setup() { Serial.begin(9600); gpsSerial.begin(9600); // NEO-6M GPS 모듈의 기본 보드율은 9600임 Serial.println(F("Arduino - GPS 모듈")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { Serial.print(F("- 위도: ")); Serial.println(gps.location.lat()); Serial.print(F("- 경도: ")); Serial.println(gps.location.lng()); Serial.print(F("- 고도: ")); if (gps.altitude.isValid()) Serial.println(gps.altitude.meters()); else Serial.println(F("INVALID")); } else { Serial.println(F("- 위치: INVALID")); } Serial.print(F("- 속도: ")); if (gps.speed.isValid()) { Serial.print(gps.speed.kmph()); Serial.println(F(" km/h")); } else { Serial.println(F("INVALID")); } Serial.print(F("- GPS 날짜&시각: ")); if (gps.date.isValid() && gps.time.isValid()) { Serial.print(gps.date.year()); Serial.print(F("-")); Serial.print(gps.date.month()); Serial.print(F("-")); Serial.print(gps.date.day()); Serial.print(F(" ")); Serial.print(gps.time.hour()); Serial.print(F(":")); Serial.print(gps.time.minute()); Serial.print(F(":")); Serial.println(gps.time.second()); } else { Serial.println(F("INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("GPS 데이터 수신 안됨: 배선 확인")); }

사용 방법

  • Arduino IDE 열기
  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하십시오.
  • "TinyGPSPlus"를 검색한 다음, Mikal Hart의 TinyGPSPlus 라이브러리를 찾으십시오.
  • TinyGPSPlus 라이브러리를 설치하려면 Install 버튼을 클릭하십시오.
아두이노 tinyGPS++ 라이브러리
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 아두이노에 코드 업로드
  • 시리얼 모니터에서 결과 확인:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2

현재 위치에서 미리 정의된 위치까지의 거리 계산

아래 코드는 현재 위치와 런던(위도: 51.508131, 경도: -0.128002) 사이의 거리를 계산합니다.

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino 핀이 GPS 모듈의 TX에 연결됨 #define TX_PIN 3 // Arduino 핀이 GPS 모듈의 RX에 연결됨 TinyGPSPlus gps; // TinyGPS++ 객체 SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // GPS 모듈로의 직렬 인터페이스 const double LONDON_LAT = 51.508131; const double LONDON_LON = -0.128002; void setup() { Serial.begin(9600); gpsSerial.begin(9600); // NEO-6M GPS 모듈의 기본 보드레이트는 9600입니다 Serial.println(F("Arduino - GPS module")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { double latitude = gps.location.lat(); double longitude = gps.location.lng(); unsigned long distanceKm = TinyGPSPlus::distanceBetween(latitude, longitude, LONDON_LAT, LONDON_LON) / 1000; Serial.print(F("- latitude: ")); Serial.println(latitude); Serial.print(F("- longitude: ")); Serial.println(longitude); Serial.print(F("- distance to London: ")); Serial.println(distanceKm); } else { Serial.println(F("- location: INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); }

사용 방법

  • 위의 코드를 복사하고 Arduino IDE로 열기
  • 코드를 Arduino에 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하세요
  • 시리얼 모니터에서 결과를 확인하세요:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

WARNING

이 튜토리얼은 개발 중입니다.

관련 튜토리얼