아두이노 7세그먼트(TM1637)시계 만들기
안녕하세요. 오늘은 아두이노를 이용한 간단한 시계를 만들어 볼까합니다.
먼저 오늘 만들어볼 시계는 시계의 클럭을 유지시켜줄수 있는 보드를 사용하지 않았기 때문에 아두이노 전원이 꺼지면 시계또한 초기화 된다는 점을 먼저 알려드립니다.
아두이노 시계를 만들기 위해서 오늘 사용할 부품은 7세그먼트로 그냥 부품을 사용하는 것이 아닌 TM1637보드가 내장되어 있는 모듈을 사용합니다.
이 보드를 사용하면 단 4개의 케이블만으로 세그먼트 연결이 가능하며 제어또한 간단해집니다.
1. 회로도
회로를 아두이노에 연결한 모습입니다.
아두이노 5v -- + 세그먼트
아두아노 gnd -- - 세그먼트
아두이노 D2 -- CLK 세그먼트
아두이노 D3 -- DIO 세그먼트
위와 같이 연결하면 되겠습니다.
2. 라이브러리 다운로드
먼저 위의 두 라이브러리를 다운로드받은 후 아두이노 라이브러리 폴더에 추가합니다.
3. 소스코드
위 파일은 아래의 소스코드 파일입니다.
#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 00;
unsigned char hour = 20;
#define CLK 2//pins definitions for TM1637 and can be changed to other ports
#define DIO 3
TM1637 tm1637(CLK,DIO);
void setup()
{
tm1637.set();
tm1637.init();
Timer1.initialize(500000);//timing for 500ms
Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
}
void loop()
{
if(Update == ON)
{
TimeUpdate();
tm1637.display(TimeDisp);
}
}
void TimingISR()
{
halfsecond ++;
Update = ON;
if(halfsecond == 2){
second ++;
if(second == 60)
{
minute ++;
if(minute == 60)
{
hour ++;
if(hour == 24)hour = 0;
minute = 0;
}
second = 0;
}
halfsecond = 0;
}
// Serial.println(second);
ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
if(ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);
TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;
Update = OFF;
}
소스는 위와같습니다.
여기서 시간을 설정하는 부분은 가장 위쪽에
이부분 입니다. minute, hour변수에 현재 시간을 입력하고 업로딩하면 시간을 출력할 수 있습니다.
많은 사람들이 사용하는 예제 프로그램으로 시계를 만들어 보았습니다. 제대로 된 시계는 아니지만 예제파일로 얼마든지 이런 프로그램을 만들어 낼 수 있습니다.
다음 시간에는 시계의 클럭값을 저장해서 전원이 꺼졌을 때도 시간이 초기화 되지않는 진짜 시계를 함께 만들어보겠습니다.