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

터치리스 손 씻기 타이머: 음악 알림으로 20초 지키기

부품 및 소모품

부품명수량
아두이노 우노1
ProtoStax 아두이노용 인클로저1
ProtoStax 브레드보드/커스텀 보드용 인클로저1
ProtoStax 수평 스태킹 키트1
초음파 센서 HC-SR04 (일반)1
ProtoStax HC-SR04용 키트1
에이다프루트 0.56" 4자리 7세그먼트 디스플레이 (I2C 백팩, 파란색)1
에이다프루트 피에조 부저 PS12401
납땜 없는 브레드보드 (하프 사이즈)1

앱 및 온라인 서비스

프로젝트 소개

손 씻기는 질병 예방과 건강의 중요한 수단이지만, 코로나19 팬데믹 이후 그 중요성이 더욱 부각되었습니다. CDC 가이드라인에 따르면 이상적으로 20초간 손을 문질러 씻어야 합니다.

이 프로젝트는 초음파 센서 앞에 손을 대면 작동하는 터치리스 손 씻기 타이머입니다. 7세그먼트 디스플레이에 카운트다운이 표시되고, 20초짜리 징글(jingle)이 재생되어 지루하지 않게 시간을 지킬 수 있습니다. 미리 프로그래밍된 4가지 징글이 순환 재생되며, 악보만 있으면 나만의 음악을 쉽게 추가할 수 있습니다.

시연: 4가지 징글

캐나다 쥐스탱 트뤼도 총리도 '생일 축하 노래 두 번'으로 20초를 쟀고, 테레사 탐 보건국장은 'We Will We Will Wash You'를 추천하기도 했습니다. 이 두 곡 모두 포함되어 있습니다!

1단계: 회로도

아두이노 우노, 7세그먼트 LED 백팩(I2C), HC-SR04 초음파 센서, 피에조 부저를 사용합니다. 회로도는 아래 이미지를 참조하세요.

2단계: 기획 및 세팅

회로와 프로그래밍 외에도 '완성품'으로서의 사용성을 고려해 인클로저에 넣는 계획을 세웠습니다. ProtoStax 인클로저는 스택형으로 아두이노, 라즈베리파이, 브레드보드를 지원합니다. 아두이노와 브레드보드 회로를 수평 스태킹 커넥터로 연결해 프로토타이핑 플랫폼을 만들었습니다.

초음파 센서는 인클로저 외부에서 접근 가능하도록 사이드월(ProtoStax HC-SR04 키트)에 고정했습니다. 프로토타입 완성 후 사이드월과 나머지 커넥터, 커버를 조립해 인클로저를 완성했습니다.

3단계: 프로그래밍 및 테스트

작동하는 프로토타입 플랫폼이 준비되면 코드 개발에 들어갑니다. 테스트 영상에서 아이폰 11이 초음파 센서의 소나 핑 소리를 선명하게 포착한 점이 흥미로웠습니다. 모든 기능 확인 후 인클로저를 마무리했습니다.

코드 이해하기

컴포넌트 초기화

Adafruit_7segment matrix = Adafruit_7segment();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
matrix.begin(0x70);

메인 루프 개요

  1. 초음파 센서 거리 측정으로 타이머 작동 여부 확인
  2. 작동 시 현재 시간 기록, 카운트다운 타이머 초기화(20초), 다음 징글 선택
  3. 라운드 로빈 방식으로 징글 순환 재생
if (distance < 10 && !startMusic) {
  startMusic = 1;
  countDown = 20;
  currentTime = millis();
  melodyNum = (melodyNum + 1) % NUM_MELODIES;
}

delay() 없이 동시 처리하기

카운트다운 시계 업데이트와 징글 재생을 동시에 해야 하므로 delay()를 쓸 수 없습니다. tone() 함수는 논블로킹이라 Timer2를 사용해 지정된 시간 동안 신호를 보내고, 그 사이 다른 처리가 가능합니다. millis()와 로컬 변수로 경과 시간을 계산해 delay() 없이 두 작업을 병행합니다.

악보를 쉽게 전사하기: 음표와 길이

아두이노 음악 예제는 보통 음표 배열과 지속시간(ms) 배열을 따로 둡니다. 이를 간소화하기 위해 음표와 길이를 묶는 구조체와 상대적 길이 매크로를 정의했습니다.

typedef struct Note { int frequency; float duration; } Note;
#define NOTE_WHOLE 1
#define NOTE_HALF 0.5f
#define NOTE_QUARTER 0.25f
#define NOTE_EIGHTH 0.125f
#define NOTE_SIXTEENTH 0.0625f
#define DOTTED(X) (X * 1.5f)

'생일 축하 노래' 전사 예시

Note melody[] = {
  {NOTE_G6, DOTTED(NOTE_EIGHTH)}, {NOTE_G6, NOTE_SIXTEENTH},
  {NOTE_A6, NOTE_QUARTER}, {NOTE_G6, NOTE_QUARTER},
  {NOTE_C7, NOTE_QUARTER}, {NOTE_B6, NOTE_HALF},
  // ... 이하 생략
};

실제 지속시간(ms) 대신 온음표, 2분음표, 4분음표 등 상대적 길이로 적습니다. DOTTED() 매크로로 붙임표(1.5배)도 표현 가능합니다.

멜로디 구조체

typedef struct Melody {
  Note *notes;
  int numNotes;
  int wholeNoteDurationMs;
} Melody;

MELODY_LENGTH 매크로로 음표 개수를 자동 계산합니다. 여러 멜로디를 배열로 관리합니다.

재생 루프 핵심 로직

if (startMusic) {
  Melody mel = melodies[melodyNum];
  Note *m = mel.notes;
  int mSize = mel.numNotes;
  int speedUp = 1;
  noTone(TONE_PIN);
  
  for (int thisNote = 0; thisNote < mSize; thisNote++) {
    int noteDuration = mel.wholeNoteDurationMs * m[thisNote].duration / speedUp;
    unsigned long noteTime = millis();
    tone(TONE_PIN, m[thisNote].frequency, noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    
    // delay() 없이 카운트다운 업데이트
    while (millis() - noteTime <= pauseBetweenNotes) {
      countDown = 20 - (int)((millis() - currentTime) / 1000);
      matrix.print(countDown);
      matrix.writeDisplay();
      delay(10);
    }
    noTone(TONE_PIN);
    matrix.print(countDown);
    matrix.writeDisplay();
  }
}

징글이 20초보다 짧으면 20초가 될 때까지 반복 재생하고, 20초가 지나도 징글이 끝나지 않으면 끝까지 재생합니다. 전체 코드는 GitHub에서 확인하세요.

프로젝트 확장 아이디어

  1. 좋아하는 곡을 위 매크로 방식으로 전사해 추가 (메모리 관리 위해 기존 곡 주석 처리 필요)
  2. SRAM 부족 문제 해결: PROGMEM으로 Note/Melody 배열을 플래시 메모리에 저장. 3곡 기준 동적 메모리 76% → 22%로 감소, 훨씬 많은 곡 저장 가능

전체 코드: GitHub 저장소

회로도

터치리스 뮤지컬 손 씻기 카운트다운 타이머 회로도

제조공정

  1. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  2. 플릭모트(FlickMote): 스마트 홈을 위한 제스처 제어 IR 리모컨
  3. DIY 아두이노 TV B-Gone: 모든 TV를 끄는 만능 리모컨
  4. 워치독 타이머 이해하기: 마이크로컨트롤러 행 방지 원리
  5. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  6. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'
  7. 아두이노 프로젝트를 위한 최적화된 전원 솔루션
  8. 아두이노 틱택토 게임 - MAX7219 LED 매트릭스와 골판지 케이스
  9. 스마트 아두이노 4족 보행 로봇 제작: 단계별 완벽 가이드
  10. 손 씻기 스테이션 점검·관리 모범 사례: 호스·탱크·분지 일일/주간/월간 플랜