Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Электронный кодовый замок на 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 имеют общую землю.

Производственный процесс

  1. Внутри банковских хранилищ: история, дизайн и будущее безопасности
  2. Распашные двери: Конструкция, история и энергосберегающие преимущества
  3. Каналы и шлюзы: инженерия, история и будущее водного транспорта в США
  4. Эволюция и производство современных цилиндровых замков с пин-тумблерами
  5. DIY солнечная метеостанция на Raspberry Pi
  6. Создание умного автозамка двери с использованием Bluetooth-близости смартфона
  7. Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
  8. Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
  9. WiFi-умный замок на Arduino и ESP8266 — открывание с телефона
  10. Конфигурация двигателя: полное руководство по типам и особенностям