Электронный кодовый замок на Arduino с клавиатурой и линейным приводом
Компоненты и материалы
| Arduino UNO | ×1 |
| Мембранная клавиатура 4×4 | ×1 |
| Драйвер двигателей L293D (Dual H-Bridge) | ×1 |
| Линейный привод 12В | ×1 |
О проекте
Проект демонстрирует принцип работы матричной клавиатуры и управление линейным приводом для открытия двери по паролю. Ничего принципиально нового, но подробно объяснено сканирование клавиш и логика проверки пароля без библиотек.
Как работает клавиатура
Кнопки организованы в 4 строки и 4 столбца. Нажатие замыкает соответствующую строку и столбец. Arduino опрашивает строки по очереди (ставит LOW), читает столбцы (INPUT_PULLUP). Если столбец LOW — нажата клавиша на пересечении текущей строки и этого столбца.
Код 1: Сканирование клавиатуры (без библиотеки)
int rows=4; int columns=4;
#define c3 9 #define c2 8 #define c1 7 #define c0 6
#define r3 5 #define r2 4 #define r1 3 #define r0 2
void setup() {
Serial.begin(9600);
pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP);
pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP);
pinMode(r0,OUTPUT); pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT); pinMode(r3,OUTPUT);
pinMode(11,OUTPUT); pinMode(12,OUTPUT);
}
char readkey(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){delay(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)==LOW){delay(500); return 'D';}
return 'o';
}
char nfunc(void) {
char key='o';
while(key=='o') key=readkey();
return key;
}
void loop() {
char key1= nfunc();
if(key1){ Serial.print(key1); }
}
Код 2: Проверка пароля и управление приводом
char password[5]="1234";
char typed[5];
int count=0;
void loop() {
char key1= nfunc();
if(key1){
typed[count]=key1;
count++;
Serial.print(key1);
}
if(count==4){
if(strcmp(typed,password)==0) {
Serial.println(" correct");
digitalWrite(11,HIGH); digitalWrite(12,LOW);
delay(250);
digitalWrite(11,LOW);
} else{
Serial.println(" intruder");
}
count=0;
}
}
При правильном пароле на пине 11 — HIGH, пин 12 — LOW. Эти пины идут на входы L293D, который запитывается от 12В и управляет приводом. Привод втягивается — дверь открывается. В обычном состоянии привод выдвинут (дверь заперта).
Схема подключения
Клавиатура: строки — D2..D5, столбцы — D6..D9 (с подтяжкой). L293D: питание 12В на пин 8, входы управления — D11, D12, выходы — к приводу. Arduino и L293D имеют общую землю.
Производственный процесс
- Внутри банковских хранилищ: история, дизайн и будущее безопасности
- Распашные двери: Конструкция, история и энергосберегающие преимущества
- Каналы и шлюзы: инженерия, история и будущее водного транспорта в США
- Эволюция и производство современных цилиндровых замков с пин-тумблерами
- DIY солнечная метеостанция на Raspberry Pi
- Создание умного автозамка двери с использованием Bluetooth-близости смартфона
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
- WiFi-умный замок на Arduino и ESP8266 — открывание с телефона
- Конфигурация двигателя: полное руководство по типам и особенностям