산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

암호 기반 도어록

구성품 및 소모품

Arduino UNO
× 1
멤브레인 키패드
× 1
Texas Instruments 듀얼 H-Bridge 모터 드라이버 L293D
× 1
선형 액추에이터
× 1

이 프로젝트 정보

이 프로젝트를 게시한 수많은 웹사이트가 있으며 다양한 YouTube 채널에 게시되어 있으며 이 웹사이트에도 이러한 프로젝트가 몇 개 있을 수 있습니다. 그래서 솔직히 말해서 원래 아무것도 아닙니다. 하지만 더 간단하고 유익한 방식으로 설명하고 표시할 수 있습니다.

이 프로젝트의 주요 구성 요소는 매트릭스 키패드입니다. 다음과 같은 4x4 멤브레인 키패드를 사용했습니다.

키패드의 키는 기본적으로 푸시 버튼입니다. 이 버튼 스위치는 누르면 '닫히고' 힘이 풀리면 '열림'과 같은 자연스러운 상태로 돌아갑니다.

이것은 키패드가 내부적으로 행과 열로 연결되는 방식입니다. 1을 눌렀을 때 1열과 1행이 연결된다고 가정하자. 9를 누르면 r3과 c3이 함께 연결됩니다.

스캔은 출력으로 구성된 4개의 키와 입력으로 구성된 4개의 키를 사용하여 수행됩니다. 입력 풀업 저항을 사용하여 모든 열을 입력으로 만들고 모든 행을 출력으로 만들었습니다. 프로그래밍을 사용하면 모든 행이 1초에 여러 번 LOW가 됩니다. 따라서 키를 누르면 해당 열이 LOW가 됩니다. 모든 열이 연결된 입력 핀의 상태를 여러 번 읽습니다. LOW 상태를 읽을 때마다 해당 열의 키가 눌렸다는 의미입니다. 특정 행이 낮고 동시에 특정 열이 낮으면 누른 키를 판별합니다.

예를 들어 1을 누르면 열 1이 낮아집니다. 그리고 각 행이 너무 빨리 LOW로 만들어지기 때문에 하나씩 키를 아주 짧게 눌러도 1행이 언젠가는 LOW로 발견되고 1이 눌린 것으로 판단됩니다. row1==low &&column1==low이면 1을 눌렀다는 뜻입니다.

이는 코드 1에 표시됩니다. . 이 코드는 stm32 보드에 업로드하고 싶었고 KEYPAD 라이브러리가 호환되지 않았기 때문에 직접 작성했습니다. 이 코드를 사용하면 위에서 설명한 내용을 이해할 수 있습니다. 또는 단순히 키패드 라이브러리를 사용하고 'customkeypad' 예제를 실행할 수 있습니다. 둘 다 같은 목적을 수행할 것입니다. 그러나 그 코드는 작동을 설명하지 않습니다.

시리얼 모니터를 사용하여 누르는 각 키가 화면에 표시됩니다. 이것은 동영상 1에 표시됩니다. .

키 결정이 제대로 작동하면 암호를 작업할 시간입니다. 너무 간단합니다. 내가 한 것은 - 문자열 "1234"를 만든 것입니다. 제가 설정한 비밀번호입니다. 이제 다른 배열을 만들었습니다. 키 값이 무엇이든 이 배열에 저장됩니다. count가 4에 도달하면 두 문자열이 모두 비교됩니다. 일치하면 암호가 정확하고 그렇지 않으면 정확하지 않습니다. 이는 코드 2에 표시됩니다. . 11번 핀에 LED를 연결했습니다. 비밀번호가 맞으면 불이 들어오도록 했습니다. 동영상 2에 나와 있습니다. .

이제 잠금으로 사용할 구성 요소:12V 선형 액추에이터. 이렇게 생겼습니다.

이것은 일반적으로 '모터 드라이버' IC로 알려진 L293d IC를 사용하여 작동됩니다. 이 IC는 12v 전원에 연결됩니다. Arduino, 즉 5v 입력에서 입력을 받고 12v를 출력 핀(액츄에이터가 연결된)으로 출력합니다. 따라서 비밀번호가 정확하면 핀 11은 높게 설정되고 핀 12는 낮게 설정됩니다. 핀 11과 12는 l293d의 입력에 연결됩니다. 따라서 액추에이터가 안쪽으로 당겨지고 문이 열립니다. 동영상 3에 표시됨 .

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 코드 1
  • 코드 2
  • 코드 1Arduino
    Scanning
    int rows=4;int columns=4;char readkey(void);char nfunc(void);#define c3 9#define c2 8#define c1 7#define c0 6#define r3 5#define r2 4 #define r1 3#define r0 2void setup() { Serial.begin(9600); 핀모드(c0,INPUT_PULLUP); 핀모드(c1,INPUT_PULLUP); 핀모드(c2,INPUT_PULLUP); 핀모드(c3,INPUT_PULLUP); 핀모드(r0, 출력); 핀모드(r1, 출력); 핀모드(r2,출력); 핀모드(r3, 출력); 핀모드(11, 출력); pinMode(12,OUTPUT);}문자 읽기 키(void){digitalWrite(r0,LOW);digitalWrite(r1,HIGH);digitalWrite(r2,HIGH);digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '1';}else if(digitalRead(c1)==LOW){delay(500);return '2';}else if(digitalRead(c2)==LOW){지연 (500);return '3';}else if(digitalRead(c3)==LOW){delay(500);return 'A';}digitalWrite(r0,HIGH);digitalWrite(r1,LOW);digitalWrite(r2 ,HIGH);digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '4';}else if(digitalRead(c1)==LOW){delay(500); return '5';} else if(digitalRead(c2)==LOW){delay(500); return '6';}else if(digitalRead(c3)==LOW){delay(500);return 'B';}digitalWrite(r0,HIGH);digitalWrite(r1,HIGH);digitalWrite(r2,LOW); digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '7';}else if(digitalRead(c1)==LOW){delay(500);return '8';}else if (digitalRead(c2)==LOW){delay(500);return '9';}else if(digitalRead(c3)==LOW){delay(500);return 'C';}digitalWrite( r0,HIGH);digitalWrite(r1,HIGH);digitalWrite(r2,HIGH);digitalWrite(r3,LOW);if(digitalRead(c0)==LOW){delay(500);return '*';}else if (digitalRead(c1)==LOW){delay(500);return '0';}else if(digitalRead(c2)==LOW){delay(500);return '#';}else if(digitalRead(c3) )==낮음){지연(500);return 'D';}return 'o';}char nfunc(void){ char key='o'; while(key=='o') key=readkey();반환 키;}무효 루프(){char key1=nfunc();if(key1){ Serial.print(key1);}}
    코드 2Arduino
    password
    int rows=4;int columns=4;int count=0;char readkey(void);char nfunc(void);#define c3 9#define c2 8#define c1 7#define c0 6#define r3 5#define r2 4#define r1 3#define r0 2char password[5]="1234";char typed[5];void setup() { Serial.begin(9600); 핀모드(c0,INPUT_PULLUP); 핀모드(c1,INPUT_PULLUP); 핀모드(c2,INPUT_PULLUP); 핀모드(c3,INPUT_PULLUP); 핀모드(r0, 출력); 핀모드(r1, 출력); 핀모드(r2,출력); 핀모드(r3, 출력); 핀모드(11, 출력); pinMode(12,OUTPUT);}문자 읽기 키(void){digitalWrite(r0,LOW);digitalWrite(r1,HIGH);digitalWrite(r2,HIGH);digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '1';}else if(digitalRead(c1)==LOW){delay(500);return '2';}else if(digitalRead(c2)==LOW){지연 (500);return '3';}else if(digitalRead(c3)==LOW){delay(500);return 'A';}digitalWrite(r0,HIGH);digitalWrite(r1,LOW);digitalWrite(r2 ,HIGH);digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '4';}else if(digitalRead(c1)==LOW){delay(500); return '5';} else if(digitalRead(c2)==LOW){delay(500); return '6';}else if(digitalRead(c3)==LOW){delay(500);return 'B';}digitalWrite(r0,HIGH);digitalWrite(r1,HIGH);digitalWrite(r2,LOW); digitalWrite(r3,HIGH);if(digitalRead(c0)==LOW){delay(500);return '7';}else if(digitalRead(c1)==LOW){delay(500);return '8';}else if (digitalRead(c2)==LOW){delay(500);return '9';}else if(digitalRead(c3)==LOW){delay(500);return 'C';}digitalWrite( r0,HIGH);digitalWrite(r1,HIGH);digitalWrite(r2,HIGH);digitalWrite(r3,LOW);if(digitalRead(c0)==LOW){delay(500);return '*';}else if (digitalRead(c1)==LOW){delay(500);return '0';}else if(digitalRead(c2)==LOW){delay(500);return '#';}else if(digitalRead(c3) )==낮음){지연(500);return 'D';}return 'o';}char nfunc(void){ char key='o'; while(key=='o') key=readkey();반환 키;}void 루프(){char key1=nfunc();if(key1){typed[count]=key1; 카운트++; Serial.print(key1);}if(count==4){if(strcmp(typed,password)==0){ Serial.println("정확한"); 디지털 쓰기(11, 높음); 디지털 쓰기(12,LOW); 지연(250); digitalWrite(11,LOW);}else{ Serial.println("침입자");}count=0;}}

    회로도

    모터가 연결된 액츄에이터를 연결합니다.
    핀 8을 12v에 연결 화면에 표시된 키를 누름 비밀번호가 정확하면 VID_20160924_195032.mp4led가 켜집니다. VID_20160924_200016.mp4액츄에이터는 정상적인 경우(즉, 문이 잠겨 있음) 밖으로 당겨집니다.
    비밀번호가 맞으면 안으로 당기면 문이 열립니다 VID_20160924_201528.mp4

    제조공정

    1. 은행 금고
    2. 회전문
    3. 운하 및 자물쇠
    4. 잠금
    5. Raspberry Pi 기반 기상 관측소
    6. 스마트폰 근접 센서로 사무실 문 자동 잠금 만들기
    7. Windows IoT:얼굴 인식 도어
    8. Arduino 및 OLED 기반 Cellular Automata
    9. WiFi 로그인 페이지를 사용하는 스마트 도어록 by Arduino &ESP8266
    10. 엔진 구성 이해