Кодовый замок построен на базе Arduino, содержит минимальный набор элементов, выполнен в основном из модулей, прост в сборке.
Кодовый замок выполнен из следующих компонентов:
- Плата LGT8F328p (можно применить Arduino Nano)
- Гибкая матричная клавиатура 4 на 3 кнопки
- Модуль реле 5 В
- Модуль активного зуммера для Arduino
- Электромагнитный замок 12 В
- 6-и разрядный семисегментный дисплей на базе драйвера TM1637
LGT8F328p |
Гибкая матричная клавиатура 4 на 3 кнопки |
Модуль реле |
Модуль активного зуммера для Arduino |
Электромагнитный замок 12 В |
6-и разрядный семисегментный дисплей на базе драйвера TM1637 |
Схема кодового замка
Работа кодового замка достаточно проста, на клавиатуре необходимо ввести код и есть он верен сработает реле которое в свою очередь оправляет запирающим механизмом (электромагнитный замок 12 В).
Вводимый код отображается на дисплее, код может состоять от 1 до 6 цифр.
Режим ожидания
Ввод кода
После введения кода необходимо нажать кнопку:
Кнопка # позволяет сбросить код на ноль.
Код введен не верно
Код введен верно, срабатывание запирающего механизма (электромагнитный замок 12 В)
Срабатывание запирающего механизма будет активно в течении 3 секунд, после реле управляющее запирающим механизмом будет неактивно.
Скетч содержит MASTER код, этот код можно изменить только через повторную прошивку платы микроконтроллера. Этот код позволяет собственного говоря задать код открытия двери.
#define MASTER 345623 // (необходимо изменить на свой код перед прошивкой микроконтроллера)
При вводе этого кода на дисплее появится следующая надпись:
Далее вводим код который Вы в дальнейшем будете использовать для открытия двери. Нажимаем * , происходит открывание запирающего механизма и занесение этого кода в EEPROM.
#define MASTER 345623 #define TIME_OPEN 3000 #include <iarduino_KB.h> // https://github.com/tremaru/iarduino_KB.git #include <TM1637_6_LED.h> #include <EEPROM.h> TM1637_6_LED tm(9, 10); // CLK, DIO iarduino_KB KB(8,7,6,5,4,3,2); /// 8765 432 long code[8],ccc,i,i1,times,master,user; int start; bool w,w1,cod; void setup(){ Serial.begin(9600); pinMode(13,OUTPUT);// output pinMode(11,OUTPUT);// tone KB.begin(KB3); tm.brig(1); // ЯРКОСТЬ 0...7 tm.print(0, 0, 0b01000000, 0b00111001, 0b01011100, 0b01011110, 0b01111001, 0b01000000); EEPROM.get(0, user); } void loop(){ if(KB.check(KEY_DOWN )){ if(KB.getNum==15){i=0;ccc=0;for(i1=0;i1<8;i1++){code[i]=0;}Serial.println(ccc); tone(11, 400, 100);tm.print(ccc, 0, -1, -1, -1, -1, -1, -1);} // # стереть число if(KB.getNum==14&&cod==1){Serial.println(ccc);delay(200);cod=0;start=1;user=EEPROM.put(0, ccc); times=millis();w=1;tone(11, 400, 300);} // start master if(KB.getNum==14&&cod==0){Serial.println(ccc);delay(200);w1=1;start=1;tone(11, 400, 300);} // start user //////////////////////////////////////////////////////////// if(KB.getNum<10&&i<8){times=millis();w=1; code[i] = KB.getNum; tone(11, 500+code[i]*50, 200); switch(i){ case 0: ccc = code[0];break; case 1: ccc = code[0]*10 + code[1];break; case 2: ccc = code[0]*100 + code[1]*10 + code[2];break; case 3: ccc = code[0]*1000 + code[1]*100 + code[2]*10 + code[3];break; case 4: ccc = code[0]*10000 + code[1]*1000 + code[2]*100 + code[3]*10 + code[4];break; case 5: ccc = code[0]*100000 + code[1]*10000 + code[2]*1000 + code[3]*100 + code[4]*10 + code[5];break; }i++; if(i>5){i=7;}delay(200);Serial.println(ccc); tm.print(ccc, 0, -1, -1, -1, -1, -1, -1);} } //////////////////////////////////////////////////////////// if(millis()-times>5000&&w==1){w=0; i=0;ccc=0;w=0;for(i1=0;i1<8;i1++){code[i]=0; tm.print(0, 0, 0b01000000, 0b00111001, 0b01011100, 0b01011110, 0b01111001, 0b01000000);} Serial.println(ccc);} // -code- if(start==1&&ccc==MASTER){start=0;cod=1;i=0;ccc=0;w=0;for(i1=0;i1<8;i1++){code[i]=0;} tm.print(0, 0, 0b01000000, 0b01110110, 0b01110110, 0b01110110, 0b01110110, 0b01000000); } // -hhhh- if(start==1&&ccc==user&&w1==1){start=0;w1=0;digitalWrite(13,HIGH); tm.print(0, 0, 0b01000000, 0b00111111, 0b01110011, 0b01111001, 0b01010100, 0b01000000); i=0;ccc=0;w=0;for(i1=0;i1<8;i1++){code[i]=0;} tone(11, 1000, 1000);delay(TIME_OPEN);digitalWrite(13,LOW);times=millis()-5000;w=1;}// -open- if(start==1&&ccc!=user&&w1==1){start=0;w1=0; times=millis()-4000;w=1; tm.print(0, 0, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000);}// ------ }//loop