모든 장소의 정확한 위치를 제공하는 데 사용되는 많은 GPS 위성이 지구 주변에 있습니다. 위치 좌표 (위도 및 경도)와 함께 시간, 날짜, 고도, 방향 추적 각도 등과 같은 다른 데이터도 제공합니다. 우리는 이미 Arduino를 사용하여 위성에서이 GPS 데이터를 읽는 방법을 배웠습니다. 따라서 GPS 위성의 '시간 및 날짜'데이터를 사용하여 GPS 시계를 만들 것입니다. GPS 업데이트 시계 는 매우 정확하며 밀리 초 단위의 정밀도로 실시간 데이터를 제공합니다.
구성품:
- Arduino Uno
- GPS 모듈
- 16x2 LCD
- 전선 연결
- 전원 공급
작동 설명:
GPS 모듈 은 NMEA 형식으로 데이터를 전송합니다. 아래 스크린 샷에서 GPS 데이터 출력을 참조하십시오. NMEA 형식은 여러 문장으로 구성되며 날짜와 시간을 추출하려면 한 문장이 필요합니다. 이 문장은 $ GPRMC 에서 시작 하며 좌표, 시간 및 기타 유용한 정보를 포함합니다. 이 $ GPRMC 는 권장되는 최소 특정 GPS / Transit 데이터를 참조 하며이 문자열의 길이는 약 70 자입니다. 위도 및 경도 좌표를 찾기 위해 차량 추적 시스템에서 이전에 $ GPGGA 문자열을 추출했습니다. 다음은 GPS 출력입니다.
그리고 $ GPRMC 문자열은 주로 속도, 시간, 날짜 및 위치를 포함합니다.
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, 위도, N, 경도, E, 속도, 각도, 날짜, MV, W, CMD
식별자 |
기술 |
RMC |
권장 최소 문장 C |
HHMMSS.SSS |
시간 (시간 분 초 및 밀리 초 형식) |
ㅏ |
상태 // A = 활성 및 V = 무효 |
위도 |
위도 49도 16.45 분 북쪽 |
엔 |
방향 N = 북, S = 남 |
경도 |
경도 (좌표) |
이자형 |
방향 E = 동쪽, W = 서 |
속도 |
매듭 속도 |
각도 |
추적 각도 (도) |
데이트 |
DATE (UTC) |
MV |
자기 변화 |
W |
E / W 변화 방향 |
CMD (* 6A) |
체크섬 데이터 |
문자열의 쉼표를 세어 $ GPRMC 문자열에서 시간과 날짜를 추출 할 수 있습니다. Arduino 및 프로그래밍의 도움으로 $ GPRMC 문자열을 찾아 배열에 저장하면 쉼표 1 개 뒤에 시간 (24 시간 형식)을, 쉼표 9 개 뒤에 날짜를 찾을 수 있습니다. 시간과 날짜는 문자열에 추가로 저장됩니다.
GPS 위성은 협정 세계시 (UTC)로 시간과 날짜를 제공하므로 그에 따라 변환해야합니다. 인도 시간에 따라 변환하기 위해 인도 시간이 UTC / GMT보다 5 시간 30 분 빠르기 때문에 UTC 시간에 5:30을 추가했습니다.
회로도:
Arduino GPS Clock 의 회로 연결 은 간단합니다. Arduino는 전체 프로세스를 제어하는 데 사용되며 GPS 모듈을 통해 위성에서 GPS 데이터를 수신하고 $ GPRMC 문자열에서 날짜와 시간을 추출하여 LCD에 표시합니다.
16x2 LCD의 데이터 핀 D4, D5, D6, D7은 핀 번호에 연결됩니다. Arduino의 5, 4, 3, 2와 LCD의 명령 핀 RS와 EN은 각각 Arduino의 핀 7과 6에 연결됩니다. GPS 수신기 모듈 Tx 핀은 Arduino의 Rx 핀 10에 연결됩니다. Arduino의 Ground PIN과 GPS는 서로 연결되어 있습니다. 여기에서는 9800 bps 전송 속도로 작동하는 SKG13BL GPS 모듈을 사용했습니다. 또한 Arduino는 "Serial.begin (9800)" 기능을 사용하여 9800 bps 전송 속도로 구성됩니다 .
프로그래밍 설명:
프로그래밍 부분에서 먼저 라이브러리를 포함하고 LCD 및 소프트웨어 직렬 통신을위한 핀을 정의합니다. 또한 데이터를 저장하기 위해 배열로 일부 변수를 정의하십시오. 여기서 소프트웨어 직렬 라이브러리를 사용하여 핀 10과 11에서 직렬 통신을 허용하고 각각 Rx 및 Tx로 만들었습니다. 기본적으로 Arduino의 핀 0과 1은 직렬 통신에 사용되지만 SoftwareSerial 라이브러리를 사용하면 Arduino의 다른 디지털 핀에서 직렬 통신을 허용 할 수 있습니다.
#포함
이후 설정 기능 에서 시리얼 통신과 LCD를 초기화하고 LCD에 환영 메시지를 표시했습니다.
그런 다음 수신 된 문자열에서 시간과 날짜를 추출했습니다.
동안 (x
그런 다음 시간과 날짜를 십진수로 변환하고 인도 시간 (UTC +5: 30)으로 수정합니다.
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int 날짜 = UTC_date.toInt (); int 월 = UTC_month.toInt ();……………
마지막으로 lcd.print 기능을 사용하여 시간과 날짜가 LCD에 표시되었습니다. 아래의 전체 코드를 확인하십시오.