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

아두이노 나노 아날로그 시계: DS3231 RTC & 1mA 아미터로 만든 정밀 우드 타이머

부품 및 소모품

부품수량비고
아두이노 나노 R31메인 컨트롤러
Maxim DS3231M RTC 모듈 (±5ppm, I2C)1고정밀 실시간 클록
1mA 아날로그 아미터3시/분/초 표시용
5kΩ 저항3아미터 PWM 구동용 (미터 특성에 따라 조정 필요)
10kΩ 저항2풀업/풀다운용
12mm 택트 스위치2시간 설정용 (상/하 버튼)

소프트웨어

프로젝트 개요

아두이노 나노와 1mA 아날로그 패널 미터(아미터) 3개를 사용해 우드 케이스에 장착된 아날로그 스타일 시계를 제작했습니다. 초 표시 기능과 시동 시 풀 스케일 캘리브레이션 루틴이 포함되어 있습니다.

주의: 사용되는 아미터마다 특성이 다르므로 PWM 값(코드 내 `analogWrite` 파라미터)은 본인의 미터에 맞춰 반드시 조정해야 합니다. 제공된 코드는 제작자의 미터에 최적화된 값입니다.

회로 구성

주요 코드 로직

시간 읽기 및 표시

DS3231에서 BCD 형식으로 시간 데이터를 읽어 10진수로 변환 후, 각 미터에 해당하는 PWM 듀티 사이클을 출력합니다. 시 미터는 12시간 주기로 12단계(0, 29, 52... 255)로 매핑하고, 분/초 미터는 선형 보간(분: ×4.75, 초: ×4.25)으로 PWM 값을 계산합니다.

버튼으로 시간 설정

시동 시 캘리브레이션

부팅 시 3개 미터를 순차적으로 풀 스케일(HIGH → 1초 → LOW)로 구동해 기계적 영점과 최대치를 확인할 수 있습니다.

코드

/* Analog Panel Meter - Clock ONLY Mode
 * Instructables: https://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/
 * Credits: bildr - DS1307 RTC code
 */
#include <Wire.h>
#define DS1307_ADDRESS 0x68
byte zero = 0x00;

int downButton = 2;
int upButton = 3;
int hours = 0, minutes = 0, seconds = 0;
int lastMinute = 0, lastSecond = 0;
int leftMeter = 5, rightMeter = 6, secMeter = 9;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  pinMode(leftMeter, OUTPUT);
  pinMode(rightMeter, OUTPUT);
  pinMode(secMeter, OUTPUT);
  // 시동 테스트
  digitalWrite(leftMeter, HIGH);
  digitalWrite(rightMeter, HIGH);
  digitalWrite(secMeter, HIGH);
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(leftMeter, LOW);
  digitalWrite(rightMeter, LOW);
  digitalWrite(secMeter, LOW);
  digitalWrite(13, LOW);
  delay(1000);
}

void loop() {
  printDate();
  delay(75);
  // 버튼 처리 로직 생략 (원본 참조)
}

byte decToBcd(byte val) { return (val/10*16) + (val%10); }
byte bcdToDec(byte val) { return (val/16*10) + (val%16); }

void printDate() {
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  seconds = bcdToDec(Wire.read());
  minutes = bcdToDec(Wire.read());
  hours = bcdToDec(Wire.read() & 0b111111); // 24시간제

  if (lastMinute != minutes) {
    // 시 미터 PWM 설정 (12단계)
    // 분 미터 PWM 설정 (minutes * 4.75)
    // 초 미터 PWM 설정 (seconds * 4.25)
    lastMinute = minutes;
    lastSecond = seconds;
  }
}

전체 코드는 원문 참조. 본인의 아미터 특성에 맞춰 PWM 매핑 값(시/분/초)을 반드시 조정하세요.

회로도

제공된 회로도 이미지 참조 (배선 상세).

제작 팁

제조공정

  1. 아두이노 POV 클락: 퍼시스턴스 오브 비전 LED 디스플레이 제작
  2. DIY 아두이노 워드 클럭 – 세련된 실시간 텍스트 시계 만들기
  3. 아두이노 실시간 시계로 이슬람 기도 시간 알림 장치 만들기
  4. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  5. 아두이노 나노 번들: 크레이지서킷, DFRobot 센서 및 도구 – 자신 있게 프로젝트 제작하기
  6. 아날로그 스타일 LED POV 시계 - 아두이노 나노 DIY 프로젝트
  7. 아두이노 나노로 플라이트기어(FlightGear)용 컴팩트 아날로그 트림 탭 휠 만들기
  8. 패널 미터: 기계 인터페이스 및 제어를 위한 비용 효율적인 솔루션
  9. 올바른 패널 선택: 디지털 vs 아날로그 솔루션 비교
  10. 패널 미터 완벽 가이드: 산업 장비 모니터링 및 제어 원리