보안은 일상 생활에서 주요 관심사이며 디지털 잠금은 이러한 보안 시스템의 중요한 부분이되었습니다. 우리 집을 보호하기 위해 사용할 수있는 보안 시스템에는 여러 가지가 있습니다. 몇 가지 예로는 PIR 기반 보안 시스템, RFID 기반 보안 시스템, 디지털 잠금 시스템, 바이오 매트릭스 시스템, 전자 코드 잠금이 있습니다. 이 글에서는 아두 이노 를 사용하여 문을 두드리는 패턴을 감지 할 수 있는 Secret Knock Detecting Door Lock을 구축해 보겠습니다. 제대로 작동하는 데모를 보려면 끝에 있는 비디오 를 확인하십시오.
구성품:
- Arduino Uno
- 누름 단추
- 부저
- 1M 저항기
- 힘
- 전선 연결
- 상자
- 서보 모터
회로 설명:
이 Knocking Pattern Detector 의 회로도 는 프로젝트, 푸시 버튼, 부저 및 서보 모터의 전체 프로세스를 제어하기위한 Arduino가 포함 된 매우 간단합니다. Arduino는 Buzzer 또는 Sensor에서 암호를 가져오고, 패턴을 비교하고, Servo를 구동하여 게이트를 열고 닫고, 패턴을 Arduino에 저장하는 등의 전체 프로세스를 제어합니다.
푸시 버튼은 접지와 관련하여 Arduino의 핀 D7에 직접 연결됩니다. 그리고 부저 는 접지와 관련하여 Arduino의 아날로그 핀 A0에 연결되고 A0과 접지 사이에도 1M 저항으로 연결됩니다. 서보 모터는 또한 PWM 핀의 Arduino의 D3에 접속되어있다.
Arduino에서 노킹 패턴 먹이기:
이 회로에서는 Buzzer 또는 Peizo Sensor 를 사용 하여 시스템에서 노크 입력 패턴을 가져 왔습니다. 여기서는 센서에서 입력을 받아 Arduino에 저장할 수 있도록 푸시 버튼을 사용하고 있습니다. 이 시스템은 모스 부호 패턴에서 아이디어를 취하여 설계되었지만 정확히 유사하지는 않습니다.
여기에서는 데모를 위해 카드 보드 상자를 사용했습니다. 입력을 받기 위해 푸시 버튼을 누른 후 보드를 두드립니다. 여기서 우리는 500ms라는 시간을 염두에 두었습니다. 이 500ms는 코드에서 고정했기 때문에 입력 패턴에 따라 달라집니다. 이 500ms의 기간은 입력이 1 또는 0임을 정의합니다.이 내용을 이해하려면 아래 코드를 확인하십시오.
노크하면 Arduino는 첫 번째 노크에서 두 번째 노크까지의 시간을 모니터링하기 시작하여 배열에 넣습니다. 여기이 시스템에서는 6 번의 노크를합니다. 그것은 우리가 5 개의 기간을 가질 것이라는 것을 의미합니다.
이제 우리는 기간을 하나씩 확인합니다. 먼저 첫 번째 노크와 두 번째 노크 사이의 시간 차이가 500ms 미만이면 0이되고 500ms보다 크면 1이되고 변수에 저장됩니다. 이제 두 번째 노크와 세 번째 노크 사이의 시간 간격 등을 확인합니다.
마지막으로 0 및 1 형식 (이진)으로 5 자리 출력을 얻습니다.
작동 설명:
의 근무 노크 기반 스마트 잠금 프로젝트 것은 간단합니다. 먼저 시스템에 패턴을 저장해야합니다. 그래서 6 번 노크 할 때까지 누름 버튼을 누르고 있어야합니다. 이 프로젝트에서는 6 번의 노크를 사용했지만 사용자가 원하는대로 변경할 수 있습니다. 6 번 노크 후 Arduino는 노크 패턴을 찾아 EEPROM에 저장합니다. 이제 입력 패턴을 저장 한 후 센서에서 Arduino로 입력을받는 푸시 버튼을 눌렀다가 즉시 놓아 잠금을 엽니 다. 이제 6 번 노크해야합니다. 그 후 Arduino는이를 디코딩하고 저장된 패턴과 비교합니다. 일치가 발생하면 Arduino는 서보 모터를 구동하여 게이트를 엽니 다.
참고: 푸시 버튼을 누르거나 길게 누르면 Arduino가 10 초 타이머를 시작하여 6 개 노크를 모두 수행합니다. 사용자가이 10 초 이내에 노크해야 함을 의미합니다. 그리고 사용자는 시리얼 모니터를 열어 로그를 볼 수 있습니다.
프로그래밍 설명:
프로그램에서 먼저 헤더 파일을 포함하고 입력 및 출력 핀을 정의하고 매크로 및 선언 된 변수를 정의합니다. 아래 코드 섹션의 전체 코드에서 볼 수 있습니다.
이후 설정 기능에서 정의 된 핀에 방향을 부여하고 서보 모터를 시작합니다.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
그 후 입력을 받아 입력 패턴 또는 노크 시간을 배열에 저장합니다.
void loop () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("시작"); 지연 (1000); long stt = millis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> 민감도 && flag == 0 && i <= patternLenth) {…………..
그 후 입력 패턴을 디코딩합니다.
for (int i = 0; i
그런 다음 누름 버튼이 계속 눌러져 있으면 저장합니다.
if (digitalRead (sw) == 0) {for (int i = 0; i
푸시 버튼이 아직 눌리지 않으면 Arduino는 입력 디코딩 된 패턴과 저장된 패턴을 비교합니다.
else {if (knok == 1) {for (int i = 0; i
암호가 일치하면 서보가 게이트를 엽니 다. 그렇지 않으면 아무 일도 일어나지 않지만 사용자는 직렬 모니터를 통해 결과를 볼 수 있습니다.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Accepted"); myServo.write (openGate); 지연 (5000); myServo.write (closeGate); } else Serial.println ("거부 됨"); }
데모 비디오로 아래 의 전체 코드를 확인할 수 있습니다.