코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-05-15 08:53:27
평소 우리들은 생각보다 많은 것을 짐작, 추측에 의존하며, 생활하고 있습니다.
예를 들어, 음식을 만드는 경우에도, 정확히 시간을 맞추는 것이 아니라, '이 정도면 되겠구나'라는 짐작으로 요리를 하는 경우가 많습니다.
하지만 최고의 결과를 얻기 위해서는 짐작과 추측(guesswork)에 의존해서는 안됩니다. 실제로 유명한 쉐프라도 완벽한 요리를 위해 타이머를 사용한다고 하네요.
우리 주변에 일어나는 일 중에 무의식적으로 짐작, 추측에 의존하여 행동하는 것이 무엇이 있을까 고민하다가 '양치질'이 생각났습니다.
보통 '3분 이상 양치를 해야 치아 건강에 좋다' 라는 말을 어디선가 한 번씩은 들어보셨죠? 하지만 타이머로 시간을 재며, 양치질을 하는 사람은 드뭅니다.
'이정도면 됐다.'라고 생각하고, 양치질을 마무리하죠.
이번 프로젝트는 칫솔 홀더에서 칫솔을 빼는 순간부터 시간을 재고, 3분이 지나면 알람을 통해 알려주는 타이머를 만들었습니다.
굉장히 간단한 재료들로 만들었으니 쉽게 만드실 수 있을겁니다!
이미지 출처 : www.hoochootong.com
kocoafab에 있는 튜토리얼을 참고해 기본 사용법을 익혀두세요!
- 디지털 출력을 통해 RGB led 제어하기(RGB led의 연결 방법과 동작 원리 참고
이번 프로젝트에서는 결과물의 부피를 줄이기 위해 오렌지 보드 대신 pro micro를 사용하였습니다.
NO | 부품명 | 수량 | 상세 설명 |
1 | 아두이노 | 1 | pro micro |
2 | led | 1 | RGB led |
3 | 피에조 부저 | 1 | |
4 | 버튼 | 1 | slide button |
5 | coin cell | 3 | 3V |
6 | coin cell holder | 1 | |
7 | 브레드보드 | 1 | mini |
8 | 점퍼케이블 | 10개 이상 | |
9 | 칫솔 홀더 | 1 |
부품명 | 아두이노 | led | 피에조부저 | 버튼 | coin cell | coin cell holder | 칫솔 홀더 |
사진 |
브레드 보드 레이아웃과 회로도에서 digital 6번 핀에 연결된 버튼은 칫솔 홀더를 의미합니다.
즉 홀더가 닫힐 때 접촉 되는 두 면을 각 각 pin과 gnd에 연결하면 됩니다.
const int SETTIME = 180; // set timer(second)
boolean isOpen = false;
boolean toggleState = false;
int togglePin = 6;
int buzzerPin = 8;
int ledPin = 10;
int getMin, getSec;
int countTime;
int elapseTime;
int tones[] = {
261, 294, 330, 349, 392, 440, 494, 523 };
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(togglePin, INPUT_PULLUP);
pinMode(A0, OUTPUT); //blue
pinMode(A1, OUTPUT); //red
pinMode(A2, OUTPUT); //green
Serial.begin(9600);
}
void loop() {
ledColor(0, 255, 0); //green LED ON
toggleState = digitalRead(togglePin);
//Serial.println(toggleState);
// open a toothbrush holder
if (toggleState==true) {
isOpen = true; //holder is Open
countTime = 0; //initialize Count time
//Serial.println("open holder");
ledColor(255, 0, 0); //red LED ON
}
while (isOpen) {
if(digitalRead(togglePin)==false){
isOpen = false;
}
elapseTime = SETTIME - countTime; //calculate Time
//cnt = constrain(cnt, 0, sec);
getMin = elapseTime / 60; //1minutes = 60seconds
getSec = elapseTime % 60; //remainder
delay(960); //1000ms = 1 Seconds
countTime++; //this variable(count Time) will increase until same SETTIME
ledBlink();
Serial.println(elapseTime); //print elapse time
if (countTime == SETTIME) {
for (int i = 0; i < 8; i++) { //blink blue LED and piezo buzzer echoing
ledColor(0, 0, 255);
tone(buzzerPin, tones[i]);
delay(500);
ledColor(0, 0, 0);
delay(500);
}
noTone(buzzerPin); //stop piezo
isOpen = false;
Serial.println("clear");
}
}
}
void ledColor(int red, int green, int blue) { //set Led Color(3 parameter)
analogWrite(A0, blue);
analogWrite(A1, red);
analogWrite(A2, green);
}
void ledBlink(){
ledColor(255,0,0);
delay(10);
ledColor(0,0,0);
delay(10);
}
브레드 보드와 칫솔 홀더를 결합한 모습입니다.
크기를 줄이기 위해, pro micro 보드를 사용하였고, 배터리 어답터 대신 코인셀 3개를 사용하였습니다.
거울에 탈부착 할 수 있도록, 브레드 보드 뒷면에 압착 고무를 부착하였습니다.
다음은 칫솔 홀더의 모습입니다. 칫솔 홀더가 닫힐 때 접촉되는 두 면에 선을 연결하여, 칫솔 홀더를 버튼처럼 사용하였고, 특별한 센서 없이도 열리고, 닫히는 것을 감지할 수 있는 것입니다.
동영상에서는 시간상의 이유로 타이머를 10초로 설정하고 촬영하였습니다.
칫솔을 홀더에서 분리한 후, 초를 세는 동안에는 초마다 led가 빨간색으로 깜빡이고, 10초가 지나면 led가 파란색으로 변하고, 부저에서 소리가 납니다. 칫솔을 홀더에 다시 넣으면, led가 초록색으로 변하는 것을 확인 할 수 있습니다.
현재 타이머 기능 뿐만 아니라 이를 닦으면서 재미를 줄 수 있는 요소를 고민하고 있습니다.
예를 들어 타이머를 재다가 LED 불빛이 달라졌을 때 피에조 부저를 INPUT 모드로 전환하여, 노크센서를 사용하여,
피에조를 터치하면 점수가 올라간다거나 하는 것입니다.
coding by jh
Klant