검색
홈으로 마이페이지 주문조회 장바구니
로그인
회원정보 게시판
회사소개 이메일
도서(BOOK)
키트(KIT)
특판 상품
졸업작품&전자기초
응용모듈
전자부품
모터
기구
엔클로져
고객센터 게시판
자유게시판
MCU 통합 게시판
강좌-RaspberryPi
강좌-드론(쿼드콥터)
강좌-아두이노(기초)
강좌-아두이노(응용)
신제품/신기술 소개
DIY 공작 게시판
윤교수의 연구실 칼럼
 ☎ : 02-776-4868

 F: 02-779-6757

☞ 평일 : 09~18시
☞ 주말 : 10~13시


국민822401-04-027758
☞ 예금주 : Ohm사
국민822401-04-027761
☞ 예금주 : R&C사
 
 
1 (주)알트소프트 사이트
 
2 LabVIEW 강좌 사이트
 
3 윤교수의 마이크로프로세서 월드
 
4 전자 엔지니어
 

 

 
강좌-아두이노(응용)
 
2014. 12. 08 (10:27)
제목[아두이노 응용] 4. GPS 쉴드 - 2
작성자 조회 : 5932

4. GPS 쉴드(Shield) – 2

 

이번 강좌에서는 GPS 쉴드를 이용한 간단한 GPS 시계를 만들어 보기로 한다. GPS 신호를 디코딩하면 날짜와 시간에 대한 정보를 얻을 수 있다. 이 정보를 이용해서 시간을 맞출 필요가 없는 GPS 시계를 만들 수가 있다.

시간 정보는 LCD에 출력을 하며, 한국의 경우 GPS에서 얻는 시간 정보에 +9시간을 해야 하기 때문에 시간에 대한 보정을 한 후에 출력하고, 날짜 보정은 조금 복잡하기 때문에 이번에는 다루지 않기로 한다.

 

전 강좌에서와 같이 아두이노와 GPS 쉴드는 D3, D4 포트를 이용해서 GPS 정보를 얻기로 하며, LCD가 연결되는 포트는 다음과 같이 구성한다.

 



 

기초 강좌에서 다뤘던 12강좌의 LCD 사용법과 이전 강좌의 TinyGPS라이브러리 예제를 조금 수정해서 간단한 코드를 작성해 보았다.

 

#include

 

#include

 

#include

 

LiquidCrystal lcd(12, 11, 8, 7, 6, 5);

TinyGPS gps;

SoftwareSerial nss(3, 4);

 

static bool feedgps();

static void print_date(TinyGPS &gps);

 

void setup()

{

  nss.begin(9600);

 

  lcd.begin(16, 2);

  lcd.setCursor(0, 0);

  lcd.print("  [ GPS Clock ]");

}

 

void loop()

{

  bool newdata = false;

  unsigned long start = millis();

 

  // Every second we print an update

  while (millis() - start < 1000)

  {

    if (feedgps())

      newdata = true;

  }

 

  print_date(gps);

}

 

static void print_date(TinyGPS &gps)

{

  int year;

  byte month, day, hour, minute, second, hundredths;

  unsigned long age;

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);

 

  hour += 9; // GMT +9 : Korea time

 

  if(hour > 24) hour -= 24;

  if(hour == 24) hour = 0;

 

  if (age == TinyGPS::GPS_INVALID_AGE){

    lcd.setCursor(0, 1);

    lcd.print("-----------------");

  }

  else

  {

    char sz[32];

    if(hour >= 12)

        sprintf(sz, "   PM %02d:%02d:%02d   ",  hour-12, minute, second);

    else

        sprintf(sz, "   AM %02d:%02d:%02d   ",  hour, minute, second);

 

   

    lcd.setCursor(0, 1);

    lcd.print(sz);

  }

 

 // feedgps();

}

 

static bool feedgps()

{

  while (nss.available())

  {

    if (gps.encode(nss.read()))

      return true;

  }

  return false;

}

 

 

위 코드는 TinyGPS의 예제에서 불필요한 함수는 삭제하고, print_date() 함수만 이용하기로 한다.

crack_datetime() 함수에서 얻어진 시간 정보를 한국 시간에 맞게 보정을 한 후에, 시간을 LCD에 출력했다. 여기서 시간만 표시한 이유는 날짜 보정은 조금 복잡한 부분이 있기 때문에, 간단히 시간만 표시했다.

 

LiquidCrystal lcd(12, 11, 8, 7, 6, 5);

 

LCD 초기화 부분의 핀 연결을 확인 한 후에, print_date() 함수를 이용하여 시간을 얻는다.

 

           gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);

 

컴파일 후에 업로딩 해 보면, 멋진(?) GPS 시계가 동작하는 것을 볼 수 있을 것이다.

처음 의도는 날짜와 시간이 표시가 되는 시계를 만들려고 했지만, 시간을 보정하는 부분에서 날

짜 보정이 생각보다 복잡하게 코딩을 해야 돼서 시간만 하게 되었지만, 기회가 되면 시간을 맞출

필요가 없는 GPS 시계를 만들어서 공개를 하겠다.

 

 

비밀번호 확인 닫기
name password
  Content name date hits
[아두이노 응용] 4. GPS 쉴드 - 2  
2014/12/08 5932
상호명 : R&C사 사업자등록번호 : 106-02-43112 통신판매업신고번호 : 용산 03564
대표 : 곽민수 사업장소재지 : 서울시 용산구 갈월동 17-1번지 세기빌딩 101호
전화 : ☎ : 02-776-4868 ,F: 02-779-6757 개인정보담당자 : 곽민수
[회사소개] [이용안내] [이용약관] [개인정보취급방침]
Copyright ⓒ 도서출판 OHM사와 학습기기 R&C사 All Rights Reserved.