산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

발렌타인데이 선물: DIY 교제일수 카운터 만들기

부품 및 소모품

DS3231 실시간 클록(RTC) 모듈 × 1
아두이노 KYX-5461AS 4자리 7세그먼트 디스플레이 × 1
브레드보드 (범용) × 1
점퍼 와이어 (범용) × 1
아두이노 우노 (Arduino UNO) × 1
1kΩ 저항 × 1

프로젝트 소개

2017년 9월, 대학 2학년이던 저는 한 여학생을 만나게 되었습니다. 그녀와 그녀의 친구들이 사는 숙소로 이사했는데, 마침 저희 둘만 한 층을 쓰게 되었죠. 자연스럽게 가까워져 절친이 되었고, 몇 달 뒤 연인이 되었습니다. 우리가 사귀기 시작한 날은 2017년 12월 10일(영국 날짜 표기)이었습니다.

약 1년이 지나고 기념일을 앞두고 무엇을 할까 고민하다가, 전자공학을 전공하는 제 특기를 살려 선물을 만들기로 했습니다. 교제한 일수를 세서 사진 액자에 넣고, 우리 사진을 함께 두면 의미 있겠다고 생각했습니다.

이 글을 보시는 분이 기념일 선물 아이디어를 찾고 계시든, 단순히 흥미로운 프로젝트를 찾고 계시든, 직접 만들어 볼 만한 재미있는 프로젝트입니다. 모든 제작 과정을 자세히 공유하겠습니다.

이 프로젝트에서 가장 어려운 부분은 코드입니다. 컴파일하고 업로드하면 제 기념일이 표시되는 샘플 템플릿을 만들었고, 여러분의 기념일로 쉽게 수정할 수 있도록 코드에 주석을 달아두었습니다.

즐겁게 만들어 보세요!

코드 (DaysCounter.ino)

아래 라이브러리들을 아두이노 IDE 라이브러리 폴더에 설치해야 합니다:

아두이노 IDE에서 스케치 → 라이브러리 포함 → .ZIP 라이브러리 추가로 설치하세요.

날짜 설정 방법: 코드 7번째 줄의 DateTime dtBegin (2017, 12, 9, 0, 0, 0); 부분에서 앞의 세 숫자(년, 월, 일)를 여러분이 사귄 날짜로 변경하세요. 예: 2014년 4월 6일이면 2014, 4, 6으로 수정.

#include <RTClib.h>
#include <SevSeg.h>

SevSeg sevseg;
RTC_DS3231 rtc;
DateTime dtBegin (2017, 12, 9, 0, 0, 0); // !!!! 여기 날짜 수정 !!!!
TimeSpan tsPassed;

void showInfo(const DateTime& dt) {
  Serial.print("NOW:");
  Serial.print(dt.year(), DEC); Serial.print('/');
  Serial.print(dt.month(), DEC); Serial.print('/');
  Serial.print(dt.day(), DEC); Serial.print(' ');
  Serial.print(dt.hour(), DEC); Serial.print(':');
  Serial.print(dt.minute(), DEC); Serial.print(':');
  Serial.print(dt.second(), DEC); Serial.print("\tPASSED:");
  Serial.print(tsPassed.days(), DEC); Serial.print(' ');
  Serial.print(tsPassed.hours(), DEC); Serial.print(':');
  Serial.print(tsPassed.minutes(), DEC); Serial.print(':');
  Serial.print(tsPassed.seconds(), DEC); Serial.println();
}

void delayWithUpdate(uint32_t parDelay) {
  uint32_t started = millis();
  while (millis() < started + parDelay) {
    sevseg.refreshDisplay();
  }
}

void setup() {
  Serial.begin(9600);
  Serial.println(__TIME__);

  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  delay(1000);

  // 시간 설정용 (최초 1회만 주석 해제 후 업로드, 다시 주석 처리 후 업로드)
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  byte numDigits = 4;
  byte digitPins[] = {7, 8, 9, 10};
  byte segmentPins[] = {2, 3, 4, 5, 11, 12, 13, 6};
  bool resistorsOnSegments = false;
  byte hardwareConfig = COMMON_CATHODE;
  bool updateWithDelays = false;
  bool leadingZeros = false;
  bool disableDecPoint = true;

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,
               resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
  sevseg.setBrightness(100);
  sevseg.setNumber(1234, 1);
  delayWithUpdate(1000);
  sevseg.setNumber(8888, 1);
  delayWithUpdate(1000);
}

void loop() {
  sevseg.refreshDisplay();
  DateTime now = rtc.now();
  tsPassed = now - dtBegin;

  static uint32_t nextReportMillis = 0;
  static uint16_t prevDaysPassed = 0;

  if (tsPassed.days() != prevDaysPassed) {
    prevDaysPassed = tsPassed.days();
    sevseg.setNumber(prevDaysPassed, 0);
  }
  sevseg.refreshDisplay();

  if (millis() > nextReportMillis) {
    showInfo(now);
    nextReportMillis = millis() + 5000;
  }
}

회로도

Circuito.io 회로도 링크를 복사해 브라우저에 붙여넣으세요.

  1. "Add Components" 클릭
  2. 검색: RTC 추가
  3. 검색: 7 segment display 20mm (Generic 선택, SparkFun 아님)
  4. 다이어그램대로 점퍼 와이어 연결
발렌타인데이 선물: DIY 교제일수 카운터 만들기

제조공정

  1. 아두이노 디지털 주사위: LCD 기반 랜덤 넘버 제너레이터 만들기
  2. 아두이노 아이언맨 제작: 부품, 센서, 단계별 가이드
  3. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'
  4. 아두이노 구동 3D 프린팅 로봇 팔 만들기: 단계별 가이드
  5. 아두이노 릴레이 제어 가습기 자동화 – 고전압 안전 설계
  6. 스마트 주차 카운터: 아두이노, 프로세싱, PHP로 실시간 차량 추적
  7. 아두이노 고속 RPM 카운터 – 레이저 + IR 센서 싱글샷 알고리즘으로 40ms 초고속 측정
  8. 아두이노 나노와 네오픽셀 매트릭스로 만드는 네온 퐁 게임
  9. 게이밍용 커스텀 아두이노 조이스틱 스티어링 휠 만들기
  10. 아두이노와 TEA5767 모듈로 만드는 고성능 FM 라디오 수신기