brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Sep 19. 2020

32. 디지털시계  만들기#1:RTC, LED 이용

DS1302와 TM1637 이용법

동작하는 장비의 내부 정보나 센서가 읽고 전달하는 수치를 표시하는 LED 디스플레이가 세상에 나온 이후 가장 많이 사용된 분야가 디지털시계일 것이다. 

이럴 적 처음 보았던 빨간 막대 7개로 0부터 9까지의 숫자를 표시하는 디지털시계의 디스플레이는 호기심 많던 내게 단순한 막대만으로 숫자를 표현하는 신비로운 물건이었다.


26번 강좌 LCD 패널에 온습도 표시하기에서 이미 TM1637에 대해서는 설명하였으므로 이를 이용하여 디지털시계를 만들어 보도록 하겠다.


이번 강좌에서 함께 이용될 RTC(Real Time Clock, 실시간 시계) 부품은 DS1302이다.

이번 강좌에서는 DS1302에 대하여 집중적으로 공부해 보자.


CP2032 전지로 동작하는 DS1302 모듈은 아두이노와 연결하여 매우 정밀한 현재 시간을 알려주는 역할을 한다.


먼저 DS1302만을 아두이노에 연결하여 Serial Monitor를 통하여 현재 시간을 세팅하고 확인하는 방법을 확인해 보자.


 각 핀의 연결을 확인해 보면 아래와 같다.

VCC-5V

GND-GND

CLK-pin 7

DAT-pin 6

RST-pin 5


DS1302를 이용하기 위한 라이브러리는 다양하지만 이 예제에서 이용하려는 라이브러리는 지금까지의 방법과는 다르게 설치하여야 한다.

https://github.com/msparks/arduino-ds1302 링크를 이용하여 나타난 github 사이트의 CODE 부분을 클릭하면 Download ZIP이라는 메뉴가 보이는데 이를 다시 클릭하면 arduino-ds1302-master.zip 파일이 다운로드된다.


아두이노 스케치 프로그램의 Sketch - Include Library 메뉴를 클릭하면 제일 위에 Add. ZIP Library... 메뉴가 나오는데 이를 다시 클릭하고 아까 다운로드한 arduino-ds1302-master.zip 파일을 선택하면 라이브러리가 설치된다.


이를 바탕으로 아래와 같이 코드를 작성하여 보자.

이 코드는 조금 전에 방문했던 사이트 그림의 중간에 보이는 examples 폴더에 있는 파일을 이용하여 작성하였고, 읽기 쉽게 정리한 것이다.

내용을 자세히 설명하기 이전에 Serial Monitor를 열어서 실제 시간이 출력되는 모습을 보자.


위와 같이 현재의 시간을 1초 단위로 보여주고 있다.

이제 코드를 자세히 읽어 보도록 하자.


Line 1~2는 사용할 라이브러리의 헤더 파일을 프로그램에 포함하는 코드이다.

   <stdio.h>는 C 언어의 가장 기본적인 입출력 함수에 대한 라이브러리이고,

   <DS1302.h>는 우리가 사용하는 RTC 모듈을 사용하기 위한 라이브러리이다.


Line 4~6의 코드는 해당 샘플 코드에 들어있던 코드를 그대로 가져와서 보여주는 코드인데,

    const에 대하여 코딩 초보자들을 위해 설명하자면 변수가 아닌 상수명을 정의하는 코드이다. 

    #define을 가지고도 해당 핀의 성격을 미리 규정할 수 있지만, const를 이용하여도 된다. 

    이럴 경우 해당 상수의 타입이 정확하게 규정되는 이점이 있기도 하다.


line 8은 우리가 사용하는 DS1302를 해당 핀에 연결하였다는 선언을 한 것이다.

   이렇게 선언된 rtc를 이용한 여러 함수들이 아래의 코드에 포함되어 있다.


line 10~21까지는 요일을 표기하기 위한 함수인데, 해당 내용은 라이브러리 내부 함수를 사용하는 것이므로

   비판 없이 사용해 보자. 이런 형식의 코드에 대해 차후에 설명할 기회가 있을 것이다.

   어찌 되었건 KSaturday와 같은 값을 넣을 경우 화면에 Saturday라고 표시되는 것을 알 수 있다.


line23~30까지의 printTime은 라이브러리 샘플 코드인데, rtctime에서 반환되는 값을 기반으로 

   시간을 표현하는 코드이다. snprintf 코드를 이용하여 출력되는 String의 형식을 정의하여 출력하는데,

   이를 통하여 읽기 쉽게 정리된 모습의 출력이 만들어진다.


line 32~44까지의 setup 함수는 보시는 바와 같이 코멘트 처리했는데, 38~42까지의 내용은 초기에 시간을 세팅하는 내용이다. 이는 프로그램이 실행할 때마다 필요한 것이 아니므로 처음 코드를 만들어 실행한 이후에는 더 이상 사용이 불필요하다. 그래서 한번 시간을 맞춘 이후에는 코멘트 처리하여 다시 실행하는 것이 필요하다.


loop 함수는 1초마다 printTime을 실행하는 코드만 들어 있다.


여기까지가 DS1302를 이용하는 방법을 설명한 내용이고, 이 코드를 바탕으로 LED에 시간이 표시되는 아래와 같은 디지털시계를 만드는 것은 다음 강좌에서 계속하겠다. 







매거진의 이전글 31. 일곱번째 장난감:룰렛 만들기-네오픽셀 사용법#2
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari