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

아두이노로 만드는 신뢰할 수 있는 주방 타이머 with LCD 디스플레이

부품 및 소모품

아두이노 우노 × 1
Adafruit 16x2 LCD (흰색/파란색) × 1
SparkFun 푸시버튼 스위치 12mm × 4
저항 10kΩ × 4
저항 220Ω × 2
싱글 턴 포텐셔미터 100kΩ × 1
부저 × 1
브레드보드 (일반) × 1
점퍼 와이어 (일반) × 1

프로젝트 소개

아두이노 스타터 키트 부품만으로 직접 주방 타이머를 만들어보세요. 상용 제품처럼 작동하지만, 내부 동작 원리를 완전히 이해하고 커스터마이징할 수 있습니다.

아두이노로 만드는 신뢰할 수 있는 주방 타이머 with LCD 디스플레이

필요한 것들

동작 원리: 4가지 모드

타이머는 한 번에 하나의 모드로만 동작합니다:

코드 구조

라이브러리 포함

#include <LiquidCrystal.h>
#include <TimeLib.h>  // Paul Stoffregen의 Time 라이브러리 필요

LCD 및 핀 초기화

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buzzerPin = 10;
const int resetButtonPin = 6;      // S4: 리셋/설정 진입
const int startStopButtonPin = 7;  // S3: 시작/정지/선택
const int downButtonPin = 8;       // S2: 감소
const int upButtonPin = 9;         // S1: 증가

버튼 상태 감지 (디바운싱 포함)

각 버튼마다 이전 상태와 비교해 변화 감지:

startStopButtonPressed = false;
startStopButtonState = digitalRead(startStopButtonPin);
if (startStopButtonState != startStopButtonPrevState) {
  startStopButtonPressed = startStopButtonState == HIGH;
  startStopButtonPrevState = startStopButtonState;
}

S4(리셋 버튼)는 길게 누르기(약 1초) 감지 로직이 추가되어 있습니다.

모드 관리 (상태 머신)

switch(currentMode) {
  case MODE_IDLE:
    if (resetButtonPressed) Reset();
    if (resetButtonLongPressed) currentMode = MODE_SETUP;
    if (startStopButtonPressed) {
      currentMode = (currentMode == MODE_IDLE) ? MODE_RUNNING : MODE_IDLE;
      if (currentMode == MODE_RUNNING) startTime = now();
    }
    break;
  case MODE_SETUP:
    // 설정 모드 로직: 데이터 선택, 값 증감, 저장 후 IDLE 복귀
    break;
  case MODE_RUNNING:
    if (startStopButtonPressed) currentMode = MODE_IDLE;
    if (resetButtonPressed) { Reset(); currentMode = MODE_IDLE; }
    break;
  case MODE_RINGING:
    if (anyButtonPressed) currentMode = MODE_IDLE;
    break;
}

시간 관리 및 부저 제어

case MODE_RUNNING:
  currentTime = setupTime - (now() - startTime);
  if (currentTime <= 0) currentMode = MODE_RINGING;
  break;
case MODE_RINGING:
  analogWrite(buzzerPin, 20); delay(20);
  analogWrite(buzzerPin, 0);  delay(40);  // 비프음 패턴
  break;

LCD 표시 관리

각 모드별로 적절한 문자열과 시간 정보를 16x2 LCD에 출력합니다. 실행 모드에서는 00:00:00 형식으로 카운트다운을 표시합니다.

회로도

브레드보드 회로도와 핀아웃 다이어그램이 제공됩니다. 10kΩ 풀다운 저항으로 버튼 입력을 안정화하고, 부저는 PWM 핀(10번)에 연결해 음량 조절이 가능합니다.

완성 코드

/**************************************************
 * Arduino Kitchen Timer v1.0 - 2016/01/27
 * By Angelo Fiorillo (Rome, IT)
 * GNU GPL v3+
 **************************************************/
#include <LiquidCrystal.h>
#include <TimeLib.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buzzerPin = 10;
const int resetButtonPin = 6;
const int startStopButtonPin = 7;
const int downButtonPin = 8;
const int upButtonPin = 9;

// 변수 선언들... (설정 시간, 현재 시간, 버튼 상태, 모드 등)

void setup() {
  lcd.begin(16, 2);
  pinMode(resetButtonPin, INPUT);
  pinMode(startStopButtonPin, INPUT);
  pinMode(upButtonPin, INPUT);
  pinMode(downButtonPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 1. 버튼 상태 읽기 및 변화 감지 (모든 버튼)
  // 2. 모드별 상태 머신 처리
  // 3. 시간 계산 및 모드 전환 (RUNNING → RINGING)
  // 4. 부저 제어 (RINGING 모드)
  // 4. LCD 표시 업데이트
  delay(10);
}

void Reset() {
  currentMode = MODE_IDLE;
  currentHours = setupHours;
  currentMinutes = setupMinutes;
  currentSeconds = setupSeconds;
}

팁: 배선은 자유롭게 변경 가능합니다. LCD 핀 순서를 바꿔 와이어 교차를 줄일 수 있습니다. 코드 내 핀 상수만 맞춰주면 됩니다.

제조공정

  1. 스마트 식물 갈증 알림기 – DIY 토양 수분 센서로 최적의 수분 관리
  2. 아두이노 나노와 노키아 5110 LCD로 20kHz 오실로스코프 만들기: 쉬운 DIY 가이드
  3. 스마트 블라인드: 아두이노와 태양광으로 자동 조명 제어
  4. 이탈리안 워드 클럭(Word Clock) 제작: 아두이노 나노 + 네오픽셀 + LCD + RTC
  5. 스파크펀 7-세그먼트 디스플레이로 신뢰할 수 있는 아두이노 카운트다운 타이머 만들기
  6. 아두이노 MKR Fox 1200으로 신뢰성 높은 시그폭스 kWh 미터 만들기
  7. 블루투스 온도 모니터: 아두이노 나노와 NTC 서미스터로 구현
  8. 터치프리 제스처 잠금장치: APDS-9960과 아두이노로 보안 액세스 구현
  9. 아두이노용 절연 아날로그 입력 회로 만들기
  10. 아두이노 우노로 정밀 반응 속도 테스터 만들기