SNS Term Project Final Report 3 Team knocking

  • Slides: 21
Download presentation
유비쿼터스컴퓨팅및실습 SNS를 활용한 스마트 도어 시스템 Term. Project Final Report 실습 3조 Team :

유비쿼터스컴퓨팅및실습 SNS를 활용한 스마트 도어 시스템 Term. Project Final Report 실습 3조 Team : knocking on heaven’s door

아두이노 적재코드 ■ 웹 설계 부분 웹에 접속시 클라이언트에게 보여줄 부분 client. println("HTTP/1. 1

아두이노 적재코드 ■ 웹 설계 부분 웹에 접속시 클라이언트에게 보여줄 부분 client. println("HTTP/1. 1 200 OK"); client. println("Content-Type: text/html"); client. println("Connection: close"); client. println("<!DOCTYPE HTML>"); client. println("<html>"); client. println("<head><title>Smart Door System</title></head>"); client. println("<body background='http: //210. 118. 64. 151: 8080/TJSSMSite/img/ubbg. png'>"); client. println("<br/><br/><br/><br/><br/><br/>"); client. println("<form method='get' name='LED' action='/'>"); client. println("<input type=checkbox name=L value=1> OPEN "); client. println("<input type=submit value=확인></form>"); client. println("<div id='ment. Box'></div>"); client. println("<script src='http: //code. jquery. com/jquery-latest. js' type='text/javascript'></script>"); client. println("<script type='text/javascript'>"); client. println("function myajax() {"); v HTML 구조 부분 소스 코드

아두이노 적재코드 ■ 아두이노 부분 동작 구현부분 knock. Sensor. Value = analog. Read(knock. Sensor);

아두이노 적재코드 ■ 아두이노 부분 동작 구현부분 knock. Sensor. Value = analog. Read(knock. Sensor); if(digital. Read(program. Switch) == HIGH){ program. Button. Pressed = true; digital. Write(red. LED, HIGH); } else { program. Button. Pressed = false; digital. Write(red. LED, LOW); } if(knock. Sensor. Value >= threshold){ listen. To. Secret. Knock(); } v 센서의 값을 읽어 스위치가 눌리면 빨간 LED를 켜주고 빨간 LED가 켜져 있지 않으면 꺼준다. v 이 센서의 범위가 3값 이상이면 listen. To. Secret. Knock() 함수를 실행시켜준다.

아두이노 적재코드 ■ 아두이노 부분 listen. To. Secret. Knock() void listen. To. Secret. Knock(){

아두이노 적재코드 ■ 아두이노 부분 listen. To. Secret. Knock() void listen. To. Secret. Knock(){ Serial. println("Knock Starting"); int i = 0; for(i = 0; i < maximum. Knocks; i++){ knock. Readings[i] = 0; } int current. Knock. Number = 0; int start. Time = millis(); int now = millis(); digital. Write(green. LED, LOW); if(program. Button. Pressed == true){ digital. Write(red. LED, LOW); } delay(knock. Fade. Time); digital. Write(green. LED, HIGH); if(program. Button. Pressed == true){ digital. Write(red. LED, HIGH); } do { knock. Sensor. Value = analog. Read(knock. Sensor); if (knock. Sensor. Value >= threshold){ Serial. println("knock"); now = millis(); knock. Readings[current. Knock. Number] = now - start. Time; current. Knock. Number++; start. Time = now; digital. Write(green. LED, LOW); if(program. Button. Pressed == true){ digital. Write(red. LED, LOW); } delay(knock. Fade. Time); digital. Write(green. LED, HIGH); if (program. Button. Pressed == true){ digital. Write(red. LED, HIGH); }} now = millis(); } while((now-start. Time < knock. Complete) && (current. Knock. Number < maximum. Knocks)); if (program. Button. Pressed==false){ if (validate. Knock() == true){ polling = 1; trigger. Door. Unlock(); } else { Serial. println("Secret knock failed. "); <중략> polling = 0; } } else validate. Knock(); Serial. println("New lock stored. "); <중략> } } } v 노크가 시작되고 노크되는 시간차를 이용하여 패턴을 배열에 저장 v 비밀번호가 유효하다면 문을 열어주고 유효하지 않다면 문을 열어주지 않는다. v 단계별로 LED를 통해서 정상 작동 되는지 확인 할 수 있다. (중략부분)

아두이노 적재코드 ■ 아두이노 부분 Trigger. Door. Unlock void trigger. Door. Unlock(){ Serial. println("Door

아두이노 적재코드 ■ 아두이노 부분 Trigger. Door. Unlock void trigger. Door. Unlock(){ Serial. println("Door unlocked!"); int i=0; digital. Write(lock. Motor, HIGH); digital. Write(green. LED, HIGH); // And the green LED too. delay (lock. Turn. Time); // Wait a bit. digital. Write(lock. Motor, LOW); // Turn the motor off. // Blink the green LED a few times for more visual feedback. for (i=0; i < 5; i++){ digital. Write(green. LED, LOW); delay(100); digital. Write(green. LED, HIGH); delay(100); }<중략> v 비밀번호가 맞을 시에 문을 열어주는 함수이다.

아두이노 적재코드 ■ 아두이노 부분 validate. Knock() boolean validate. Knock(){ <중략> for (i=0; i<maximum.

아두이노 적재코드 ■ 아두이노 부분 validate. Knock() boolean validate. Knock(){ <중략> for (i=0; i<maximum. Knocks; i++){ if (knock. Readings[i] > 0){ current. Knock. Count++; } if (secret. Code[i] > 0){ secret. Knock. Count++; } if (knock. Readings[i] > max. Knock. Interval){ max. Knock. Interval = knock. Readings[i]; }} if (program. Button. Pressed==true){ for (i=0; i<maximum. Knocks; i++){ secret. Code[i]= map(knock. Readings[i], 0, max. Knock. Interval, 0, 100); } digital. Write(green. LED, LOW); digital. Write(red. LED, LOW); delay(1000); digital. Write(green. LED, HIGH); digital. Write(red. LED, HIGH); delay(50); for (i = 0; i < maximum. Knocks ; i++){ digital. Write(green. LED, LOW); digital. Write(red. LED, LOW); if (secret. Code[i] > 0){ delay( map(secret. Code[i], 0, 100, 0, max. Knock. Interval)); digital. Write(green. LED, HIGH); digital. Write(red. LED, HIGH); } delay(50); } return false; } if (current. Knock. Count != secret. Knock. Count){ return false; } v 비밀번호가 유효한지 판단하는 함수 v 각 노크 노드의 시간을 정하여 유효시간을 결정 v 이를 통해서 노크의 패턴을 확인한다. int totaltime. Differences=0; int time. Diff=0; for (i=0; i<maximum. Knocks; i++){ // Normalize the times knock. Readings[i]= map(knock. Readings[i], 0, max. Knock. Interval, 0, 100); time. Diff = abs(knock. Readings[i]secret. Code[i]); if (time. Diff > reject. Value){ // Individual value too far out of whack return false; } totaltime. Differences += time. Diff; } if (totaltime. Differences/secret. Knock. Co unt>average. Reject. Value){ return false; }

Thank you

Thank you