코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-25 16:54:01
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 | 1 | 아두이노 pro mini |
2 | 압력 센서 | 1 | |
3 | 피에조 부저 | 1 | |
4 | 점퍼 케이블 | 10 | |
5 | 220Ω 저항 | 1 | |
6 | 리튬배터리 | 1 | 3.7v |
부품명 | 아두이노 | 압력 센서 | 피에조 부저 | 점퍼 케이블 | 220Ω 저항 | 리튬 배터리 |
파트 |
#include <core_build_options.h>
#include <swRTC.h>
swRTC rtc;
int piezo = 3; //피에조부저의 핀번호 설정
int afk_minutes, afk_seconds;
boolean sit = false;
void setup() {
//rtc세팅
rtc.stopRTC();
rtc.setTime(0,0,0);
rtc.setDate(1,1,2000);
Serial.begin(9600); //시리얼통신 초기화
pinMode(piezo, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A0); //압력센서에서 값을 읽어온다
//압력센서의 Output값이 100이상일 경우 앉은걸로 간주하고 타이머를 시작한다.
if(sensorValue > 100) {
Serial.println("sitdown");
rtc.startRTC(); //rtc시작(시간 측정)
sit = true; //앉아있는 상태로 변경
}
//압력센서의 측정값이 계속 100이상이고 앉아있는 상태일 경우 while루프 반복
while(sensorValue > 100 && sit) {
delay(1000);
sensorValue = analogRead(A0); //압력센서의 값을 읽어온다
Serial.print(rtc.getMinutes(), DEC);
Serial.print(":");
Serial.println(rtc.getSeconds(), DEC)
//잠깐 자리에서 비웠을 때(1분이내로 자리를 비울 경우)
if(sensorValue < 100) { //앉아있다가 압력센서의 값이 100이하로 떨어진 경우
afk_minutes = rtc.getMinutes(); //일어난 시간을 저장
afk_seconds = rtc.getSeconds();
while(sensorValue < 100 && sit) {
delay(1000);
sensorValue = analogRead(A0);
Serial.println(rtc.getSeconds());
//3분이 지나면 자리를 떠난것으로 간주
if(afk_minutes+3 == rtc.getMinutes() && afk_seconds == rtc.getSeconds()) {
sit = false; //상태를 false로 변환
Serial.println("away");
rtc.stopRTC(); //rtc정지 및 시간 초기화
rtc.setTime(0,0,0);
rtc.setDate(1,1,2000);
}
}
}
//50분이 지났을 경우
if(rtc.getMinutes() == 50) {
//압력센서의 값이 100이상일 경우 피에조부저를 울린다
while(sensorValue > 100) {
Serial.println("standUP!!");
buzz(piezo);
sensorValue = analogRead(A0);
}
//자리에서 일어났을 경우 피에조부저의 소리를 끄고 rtc를 다시 초기화 시킨다
Serial.println("INITIALIZE");
analogWrite(piezo, 0);
rtc.stopRTC(); //정지
rtc.setTime(0,0,0); //시간, 분, 초 초기화
rtc.setDate(1,1,2000); //일, 월, 년도 초기화
sit = false;
}
}
}
void buzz(int pinNum) {
analogWrite(pinNum, 64);
delay(1000);
analogWrite(pinNum, 128);
delay(1000);
}
//잠깐 자리에서 비웠을 때(1분이내로 자리를 비울 경우) if(sensorValue < 100) { //앉아있다가 압력센서의 값이 100이하로 떨어진 경우 afk_minutes = rtc.getMinutes(); //일어난 시간을 저장 afk_seconds = rtc.getSeconds(); while(sensorValue < 100 && sit) { delay(1000); sensorValue = analogRead(A0); Serial.println(rtc.getSeconds());
//3분이 지나면 자리를 떠난것으로 간주 if(afk_minutes+3 == rtc.getMinutes() && afk_seconds == rtc.getSeconds()) { sit = false; //상태를 false로 변환 Serial.println("away"); rtc.stopRTC(); //rtc정지 및 시간 초기화 rtc.setTime(0,0,0); rtc.setDate(1,1,2000); } } }
if(rtc.getMinutes() == 50) {
//압력센서의 값이 100이상일 경우 피에조부저를 울린다 while(sensorValue > 100) { Serial.println("standUP!!"); buzz(piezo); sensorValue = analogRead(A0); }
//자리에서 일어났을 경우 피에조부저의 소리를 끄고 rtc를 다시 초기화 시킨다 Serial.println("INITIALIZE"); analogWrite(piezo, 0); rtc.stopRTC(); //정지 rtc.setTime(0,0,0); //시간, 분, 초 초기화 rtc.setDate(1,1,2000); //일, 월, 년도 초기화 sit = false; }
수박쨈