아두이노 - 7-세그먼트 클록 | Arduino - 7-segment Clock
이 튜토리얼에서 우리는 아두이노를 사용하여 7-세그먼트 시계를 만드는 방법을 배우려고 합니다. 구체적으로, 우리는 두 가지 경우를 배울 것입니다:
- Arduino는 DS3231 RTC 모듈에서 시간(분과 초)을 읽어서 TM1637 4자리 7세그먼트 모듈에 표시합니다.
- Arduino는 DS3231 RTC 모듈에서 시간(시와 분)을 읽어서 TM1637 4자리 7세그먼트 모듈에 표시합니다.
코드 한 줄만 바꾸면 DS3231 RTC 모듈 대신에 DS1307 RTC 모듈도 사용할 수 있습니다. DS3231 대비 DS1307 참고하세요.
준비물
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | TM1637 4-digit 7-segment Display | Amazon | |
1 | × | Real-Time Clock DS3231 Module | Amazon | |
1 | × | (Alternatively) Real-Time Clock DS1307 Module | Amazon | |
1 | × | CR2032 battery | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
TM1637 디스플레이, DS3231 및 DS1307 RTC 모듈에 대하여
TM1637 7-세그먼트 디스플레이, DS3231 및 DS1307(핀배열, 작동 방식, 프로그래밍 방법 등)에 대해 모른다면, 다음 튜토리얼에서 배우세요:
TM1637 및 RTC 라이브러리 설치
- Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
- “TM1637”을 검색한 다음, Avishay Orpaz가 만든 TM1637Display 라이브러리를 찾으세요.
- Install 버튼을 클릭하세요.
- “RTClib”을 검색한 다음, Adafruit에서 제공하는 RTC 라이브러리를 찾으세요. 이 라이브러리는 DS3231과 DS1307 모두에서 작동합니다.
- RTC 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
- 다른 라이브러리 종속성을 설치하라는 요청을 받을 수 있습니다.
- 모든 라이브러리 종속성을 설치하려면 Install All 버튼을 클릭하십시오.
선연결
아두이노, TM1637 4자리 7세그먼트 디스플레이 및 DS3231 RTC 모듈 간의 배선도.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노, TM1637 4자리 7세그먼트 디스플레이 및 DS1307 RTC 모듈 간의 배선도.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 코드 - 7세그먼트 디스플레이에서 분과 초 표시
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-7-segment-clock
*/
#include <TM1637Display.h>
#include <RTClib.h>
// 연결 핀 정의
#define CLK 9
#define DIO 10
// TM1637Display 타입의 디스플레이 오브젝트 생성
TM1637Display display = TM1637Display(CLK, DIO);
RTC_DS1307 rtc;
// RTC_DS3231 rtc; // DS3231 모듈을 사용하는 경우 이 줄의 주석을 해제하고 위의 줄을 주석 처리하세요.
unsigned long time_m = 0; // 분을 저장할 변수
unsigned long time_s = 0; // 초를 저장할 변수
unsigned long last_s = 0; // 마지막으로 업데이트된 초를 저장할 변수
void setup() {
Serial.begin(9600);
display.clear();
display.setBrightness(7); // 밝기를 7로 설정합니다 (0:가장 어둡게, 7:가장 밝게)
// RTC 모듈 설정
if (!rtc.begin()) {
Serial.println("RTC를 찾을 수 없습니다.");
Serial.flush();
while (true)
;
}
// 이 스케치가 컴파일된 PC의 날짜 & 시간으로 RTC를 자동으로 설정
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
time_m = now.minute();
time_s = now.second();
if (time_s != last_s) { // 변경된 경우에만 업데이트
unsigned long time = time_m * 100 + time_s;
display.showNumberDecEx(time, 0b11100000, false, 4, 0);
Serial.print(time_m);
Serial.print(":");
Serial.println(time_s);
last_s = time_s;
}
}
사용 방법
- 위의 코드를 복사하고 Arduino IDE로 열기
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하십시오.
- 시리얼 모니터와 TM1637 디스플레이에서 결과를 확인하십시오.
코드 설명
소스 코드의 주석 라인에서 줄별 설명을 읽으세요!
DS3231 RTC 모듈 대신 DS1307 RTC 모듈을 사용하고 싶다면 코드에서 지정된 줄을 주석 처리하거나 주석 처리를 해제하기만 하면 됩니다.
아두이노 코드 - 7 세그먼트 디스플레이에서 시간과 분 표시
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-7-segment-clock
*/
#include <TM1637Display.h>
#include <RTClib.h>
// 연결 핀 정의
#define CLK 9
#define DIO 10
// TM1637Display 타입의 디스플레이 객체 생성
TM1637Display display = TM1637Display(CLK, DIO);
RTC_DS1307 rtc;
// RTC_DS3231 rtc; // DS3231 모듈을 사용하는 경우 위의 줄을 주석 처리하고 이 줄의 주석을 해제하세요
unsigned long time_h = 0; // 시간을 저장할 변수
unsigned long time_m = 0; // 분을 저장할 변수
unsigned long last_m = 0; // 마지막 업데이트된 시간을 저장할 변수
void setup() {
Serial.begin(9600);
display.clear();
display.setBrightness(7); // 밝기를 7로 설정 (0:가장 어둡게, 7:가장 밝게)
// RTC 모듈 설정
if (!rtc.begin()) {
Serial.println("RTC를 찾을 수 없습니다");
Serial.flush();
while (true)
;
}
// 이 스케치가 컴파일된 PC의 날짜 & 시간으로 RTC 자동 설정
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
time_h = now.hour();
time_m = now.minute();
if (time_m != last_m) { // 변경된 경우에만 업데이트
unsigned long time = time_h * 100 + time_m;
display.showNumberDecEx(time, 0b11100000, false, 4, 0);
Serial.print(time_h);
Serial.print(":");
Serial.println(time_m);
last_m = time_m;
}
}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.