반응형

【 아두이노모듈#8】 DS1307 (RTC) 리얼타임클럭 모듈 배우기 #1


 지난시간 TM1637 FND 모듈로 시계를 만들어 보았다. 하지만 오차가 0.001 초만 나더라도 시간이 갈 수록 시간 오차가 커질 것이다. 이문제를 해결하기 위해서 좀더 정밀한 클럭을 지닌 RTC 모듈에 시간값을 동기화 시켜서 사용하게되는데,  오늘은 시계를 구성하기에 앞서 이 RTC 모듈에 대해 알아보도록 하자. 



▶ 선수 학습 :

   없음.


▶ DS1307 세부 스팩 



※ .라이브러리 다운로드

 - DS1307RTC:https://github.com/PaulStoffregen/DS1307RTC

 - RTClib : https://github.com/adafruit/RTClib  


  RTC(리얼 타임 클럭) 모듈은 DS1307과 DS3231 두 종류가 많이 사용된다. 두 모듈의 차이는 DS3231 모듈의 오차가 1년에 수분 정도로 조금 더 정밀도가 높아 진 것인데, DS1307을 사용해도 큰 오차가 나는 것이 아니기에 걱정말고 사용해보자.
(DS1307 : 한 달 약 5분 미만,  DS3231 : 1년 약 5분 미만 오차)


【 RTC 모듈 시계의 구동원리 】 

: 시계를 만들때 현재의 시간을 맞추어 주어야 하는데, RTC를 가지고 PC와의 시간을 동기화 시키면,그 시간이 RTC모듈의 메모리에 저장되며, 모듈에 있는 베터리로 인해 시계회로에 공급되는 전원이 차단 되어도 메모리에 저장된 기준시간은 유지된되게 된다.  시계회로에서는 이 RTC 모듈에서 보통 1초마다 현재 시간값을 가지고와서 출력(사용)하게 된다. 



▶ 실습 목표 :  

  1. [ RTC 모듈에 대해 이해할 수 있다. 

 2. [ PC의 현재 시간을 RTC모듈에 동기화 시킬 수 있다.]

 3. [ 동기화된 시간을 아두이노 IDE의 시리얼 모니터 창을 통해 출력할 수 있다. ]

 4. [ 2019/3/15(날짜)와 14:49:12(시간) 형태로 출력해 볼 수 있다. ]



▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 실습 절차  : 


1.   필요한 라이브러리 등을 '라이브러리 매니저'등을 통해서 설치한다. ( <RTClib.h> , <Wire.h>  )

2.   i2c 통신을 이용하는 모듈이기 때문에 <Wire.h> 라이브러리가 필요하며, 비교적 연결이 간단하고 쉽다.  브레드보드 없이 직접 연결이 가능하지만, 추후에 FND모듈을 함께 연결하려면 , 필요할 수 있으니 브레드보드를 사용해서 연결해본다. 
3. 시리얼모니터를 통해 설정된 날짜와 시간값을 확인하게 되는데, 에러가 날 경우에는 통신속도(보드레이트)를 서로 같도록 맞추어 주었는지 확인하도록 한다.  


▶ 프로그램 코드 및 설명 : 


/* RTC 모듈에 PC를 이용하여 현재의 일시를 동기화 하기 */


#include <RTClib.h> // RTC 기본 라이브러리

#include <Wire.h>   // i2c 통신 라이브러리

RTC_DS1307 RTC;    // RTC클래스 생성


void setup ( ) {

Serial.begin(9600);  

Wire.begin();

RTC.begin();

RTC.adjust(DateTime(__DATE__,__TIME__));

//연결된 pc의 현재시간을 RTC모듈 기억소자에 동기화 함

//위 동기화 명령라인은 처음 한 번만 실행하고 하고 이후로는 주석처리

}

void loop ( )  {

DateTime now=RTC.now(); // RTC에 저장된 값을 불러옴

// 시리얼 모니터창에 아래의 형식으로 출력함

Serial.print(now.year(), DEC); 

Serial.print('/'); 

Serial.print(now.month(), DEC); 

Serial.print('/'); 

Serial.print(now.day(), DEC); 

Serial.print(' '); 

Serial.print(now.hour(), DEC); 

Serial.print(':'); 

Serial.print(now.minute(), DEC); 

Serial.print(':'); 

Serial.print(now.second(), DEC); 

Serial.println(); 

delay(1000);    //1초마다 현재의 일시를 모니터로 출력.

}


▶ 참고 자료 :  

 없음.

▶ 실행영상 :  

(전체화면 보기로 보세요)



▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)


반응형