도난 경보장치(아두이노 프로젝트 기록)

도난 경보장치(아두이노 프로젝트 기록)

시연 영상 학교 프로젝트로 제출했던것을 정리한거라 다른 내용이 많이 있습니다.

#include const byte rows = 4; const byte cols = 3; int wrong =0; // 비밀번호 관련 변수 int turnin = 0; int speakerPin = 3; //부저 관련 변수들 int numTones = 8; int tones[] = {261, 277, 294, 311, 330, 349, 370, 392}; byte rowPins[rows] = { 8, 7, 6, 5 }; //키패드 관련 byte colPins[cols] = { 9, 10, 11 }; char password[4] = {'0','0','0','0'}; char changepass[4]; int inputPin = 2; // pir 센서 신호핀 char keys[rows][cols] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; int ledInput = 13; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); // 키패드 설정 void setup() { Serial.begin(9600); pinMode(ledInput, OUTPUT); setLocked(1); } int setLocked(int locked){ // 잠금상태와 해제상태를 설정하고 그에 맞는 LED를 세팅해 주는 함수 if(locked) { digitalWrite(ledInput,HIGH); return 1; } else digitalWrite(ledInput,LOW); return 0; } void blink(int a){ // LED가 틀린횟수에 맞게 깜빡이는 함수 for(int i=0; i='0' && key <='9')|| (key == '*' )){ //키값이 눌렀는지 확인문 if(key == "*"){ tone(speakerPin, tones[0]); noTone(speakerPin); turnin =0; wrong = 0; setLocked(1); } else if(key == password[turnin]){ tone(speakerPin, tones[0]); noTone(speakerPin); turnin++; wrong =0; } else if(key != password[turnin]){ // 비밀번호가 틀렸을시 몇번 틀렸는지 확인 후 틀린 횟수 LED 로 알려주기 tone(speakerPin, tones[0]); noTone(speakerPin); turnin = 0; setLocked(1); wrong++; blink(wrong); } } if(turnin ==4){ // 비밀번호를 맞췄을시 잠금장치를 푸는 조건문 setLocked(0); digitalWrite(ledInput,LOW); if(key == '#'){ // 비밀번호 변경 tone(speakerPin, tones[0]); noTone(speakerPin); keypad.setHoldTime(2000); // 키패드 2초동안 기다림 for(int i=0; i<4; i++){ changepass[i]=key; password[i] = changepass[i]; } }} if(wrong == 4){ // 4번 틀리면 LED 깜빡인 후 8번 부저 울리기 for(int i = 0; i < numTones; i++){ tone(speakerPin, tones[i]); blink(wrong); delay(500); } noTone(speakerPin); delay(1000); wrong = 0; } }

이번에 소수전공 수업으로 아두이노를 배우면서 결과 프로젝트로 노드로 웹 서버를 만들고 통신하는 장치를 만들어보고 싶었지만 시간의 문제도 있고 실력의 문제도 있어서 방향을 바꾸어 자물쇠를 만들어 보았습니다. 위의 코드는 이번 프로젝트 결과물인데 몇몇 부분만 따로 뜯어내서 보고 나머지는 주석을 봐주세요.

위 코드에 따른 아두이노 장비 결과물

byte rowPins[rows] = { 8, 7, 6, 5 }; //키패드 관련 byte colPins[cols] = { 9, 10, 11 };

이 부분은 제가 처음에 상당히 헷갈렸던 부분인데 그냥 키패드를 받아오는 핀 번호입니다.

char key = keypad.getKey(); int val = digitalRead(inputPin); int a = setLocked(1); if(key){ Serial.println(key); } if(val && a){ blink(wrong); for(int i = 0; i < numTones; i++){ tone(speakerPin, tones[i]); delay(500); } noTone(speakerPin); delay(1000); } if ((key>='0' && key <='9')|| (key == '*' )){ //키값이 눌렀는지 확인문 if(key == "*"){ tone(speakerPin, tones[0]); noTone(speakerPin); turnin =0; wrong = 0; setLocked(1); } else if(key == password[turnin]){ tone(speakerPin, tones[0]); noTone(speakerPin); turnin++; wrong =0; } else if(key != password[turnin]){ // 비밀번호가 틀렸을시 몇번 틀렸는지 확인 후 틀린 횟수 LED 로 알려주기 tone(speakerPin, tones[0]); noTone(speakerPin); turnin = 0; setLocked(1); wrong++; blink(wrong); }

메인 부분의 코드입니다. 키패드 헤더에 있는 getkey() 를 이용하면 키패드에 입력이 들어올때 1을 반환 없을때 0을 반환합니다. 따라서 키를 눌렀을때 반응하게끔 짰으며 turnin, wrong 을 이용하여 맞으면 turnin 의 값을 증가시켜 다음 순의 번호를 맞추게 하고 틀리면 wrong 의 수를 증가 후 turnin 을 초기화 시켜 틀린 횟수를 기록하고 다시 처음부터 비밀번호를 입력하게 만들었습니다.

if(val && a){ blink(wrong); for(int i = 0; i < numTones; i++){ tone(speakerPin, tones[i]); delay(500); } noTone(speakerPin); delay(1000); }

이 부분이 프로젝트의 특이한 점인데 바로 pir 센서를 이용한 부분입니다. 이 센서를 이용해 보안 장치가 풀리지 않은 상태에서 소위 말해서 들고 튀기? 를 방지하기 위해 특정 거리를 이동하면 pir 센서가 감지해 장치가 울리게 만들고 싶었습니다.

https://kogun.tistory.com/30

제작할때 참고한 사이트입니다.

자외선을 이용해 인체를 감지하는 pir 센서

하지만 실패했죠. pir 센서가 연결되고 실행이 되자마자 주변 사물을 감지해 계속해서 부저가 울리게 구현이 돼버렸습니다. 다음엔 더 노력해서 바꿔봐야겠습니다.

from http://404notonc.tistory.com/23 by ccl(A) rewrite - 2021-12-30 19:00:39