RTC(Real Time Clock)

by Steve | 2017-04-05 13:16
rtc 아두이노

[RTC란 무엇]일까요?

풀이하자면, Real Time Clock 모듈입니다.

즉,  실시간으로 시간이 흐르는 것을 제어하기 위한 부품!  

배터리에 의해 동작되는 시계라고 생각할 수 있죠!!

(시계 기능이 있는 전자기기에 내장되어 있다.) 



이 RTC 모듈을 활용해서

특정한 시간에 어떠한 작동을 한다던가~ (예를 들면, 알람이 울린다? 불빛을 낸다? 등)

일정 시간 단위로 입력되는 값을 저장하고 출력할 수 있답니다!!


[RTC 모듈의 가장 큰 장점]

1.  외부의 전원이 꺼져 있어도 자체에 내장되어있는 배터리로 시간의 유지가 가능하다. (시간 정보 유지)

2.  전력의 소비가 낮다.

3.  RTC 모듈은 날짜, 시간, 요일을 카운팅하고 이 디지털 카운터 회로 구성으로 시간 카운터 동작을 유지한다.


[RTC모듈 DS1302]

   RTC모듈은 여러가지가 있지만, 제가 사용한 제품은 DS1302 입니다.

RTC 모듈은 대표적으로 

모델명 [DS1302 - DS1307 - DS3231] 세 종류가 있는데요

--------------------------->>>>>>>>>>>>  오른쪽 방향으로 갈수록 더욱 정밀하게 시간을 측정할 수 있답니다!!

한마디로 성능이 좋은거겠죠?!

물론, 사용하는데 회로나 코드에도 약간의 차이점이 있구요~ 가격은 그렇게 차이는 나지 않는 걸로 알고 있어요!!


RTC 모듈이 무엇인지, 어떻게 사용되는지 이제 조금 감이 오시나요???

그럼, 이제 아두이노 UNO 보드와 연결해서 직접 연결해봐야겠죠?!


원래... 이론 수업은 항상 재미없죠 ㅠ.ㅠ

이제 실제 코드를 입력하고, 연결해볼까요???


[아두이노 UNO와 RTC모듈 연결]


Arduino UNORTC DS1302       
+5VVCC
GNDGND
D4CLK
D3DAT
D2RST

위의 표와 같이 연결하면,



[RTC모듈 소스코드]

#include <DS1302.h> //DS1302 라이브러리 헤더파일 포함

/*

  GND-GND

  VCC-5V

  CLK-D4

  DAT-D3

  RST-D2

*/

DS1302 rtc(2, 3, 4); // DS1302모듈을 init해주는 역할(init: 시스템이 종료될 때까지 계속 실행되는 데몬 프로세스)


void setup() {                    //초기설정

  Serial.begin(9600);      //시리얼 통신

  rtc.halt(false);               //시간을 run-mode로 설정

  rtc.writeProtect(false); // 쓰는 것을 방지하는 비활성화 역할

  //false로 설정해주어야 시간 설정을 자유롭게 할 수 있다. 00시00분00초가 되면 다시 reset되어 처음부터 카운팅


  // MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY

  rtc.setDOW (WEDNESDAY);        // 수요일(요일)

  rtc.setTime(23, 59, 30);              // 23시 59분 30초(시간)

  rtc.setDate(05, 04, 2017);        // 2017년 4월 5일 (날짜)

}

void loop() {                                        //무한 동작

  Serial.print(" Today is ");

  Serial.print(rtc.getDOWStr());    // 요일을 출력


  Serial.print(" -- ");

  Serial.print(rtc.getDateStr());   // 날짜를 출력


  Serial.print(" Time : ");

  Serial.println(rtc.getTimeStr());  // 시간을 출력


  delay (1000);  //1초마다 출력 시간 설정

}


[RTC모듈 동작] 



RTC DS1302 모듈을 아두이노 UNO와 연결하고,

위의 소스 코드를 입력 후

시리얼 모니터로를 확인하게 되면


Today is Wednesday -- 05.04.2017 Time : 23:59:30

Today is Wednesday -- 05.04.2017 Time : 23:59:31

Today is Wednesday -- 05.04.2017 Time : 23:59:32

.

.

.

Today is Wednesday -- 05.04.2017 Time : 23:59:59

Today is Thursday --  06.04.2017 Time : 00:00:00

Today is Thursday --  06.04.2017 Time : 00:00:01

.

.

.

이렇게 처음 설정해준 요일, 날짜, 시간 순으로 1초마다 출력이 되는 것을 확인할 수 있구요~

수요일 23시 59분 59초 이후

바로 다음 날짜로 넘어가면서 카운팅되는 것을 확인할 수 있죠!!!


[오류]


가끔 위의 코드를 업로드하고, 아두이노와 연결도 아무런 문제가 없는데도 불구하고...

위의 모습처럼 시리얼 모니터에 출력이 오류가 나는 경우가 있어요 ㅠ.ㅠ


저도 처음에 무척이나 당황했답니다ㅋㅋㅋ


우선문제의 해결방법으로는

1. 아두이노 UNO에 +5V부분이 아닌, 3.3V와 연결했는지 확인!

2. DS1302 모듈에 CLK와 연결된 점퍼선의 문제일 수도 있어요!!

워낙 예민하다보니... 다른 점퍼선을 한번 재 연결해보면, 아마 해결하실 수 있을 겁니다!!



이번 시간에는 RTC모듈 DS1302 모델을 사용했는데요,

다음 프로젝트에선 조금 더 정밀하게 측정되는 RTC모듈 DS3231을 알아보도록 할게요!!!


오늘은 식목일이네요~

전에는 휴일이었지만... 마음의 나무에 양분을 준다는 생각으로... 말도 안 되지만 ㅠ.ㅠ

오늘도 모두들 화이팅 하시길 바랄게요~


to be continue...

댓글 0

MADE BY

Steve

3d printing, design thinking, diy, 아두이노, 앱인벤터2
OLED(Organic Light Emitting Diode) 다음글 RTC(Real Time Clock)현재글