Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Onderdelen en benodigdheden

Arduino UNO 1
Membraan keypad 4x4 1
Texas Instruments Dual H-Bridge motor driver L293D 1
Lineaire actuator 12V 1

Over dit project

Er zijn talloze websites die dit project gepubliceerd hebben; het is ook op diverse YouTube-kanalen te vinden, en waarschijnlijk ook op deze site. Eerlijk gezegd is er niets origineels aan. Maar ik kan het misschien op een simpelere en informatiefere manier uitleggen en tonen.

Het belangrijkste onderdeel is de matrix-keypad. Ik gebruikte een 4x4 membraan-keypad die er zo uitziet:

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

De toetsen op het keypad zijn eigenlijk drukknoppen. Deze schakelaars zijn 'gesloten' wanneer ze ingedrukt worden en gaan terug naar hun natuurlijke staat 'open' zodra de kracht verdwijnt.

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Dit is hoe het keypad intern verbonden is als rijen en kolommen. Wanneer bijvoorbeeld 1 ingedrukt wordt, zijn kolom 1 en rij 1 met elkaar verbonden. Bij 9 zijn rij 3 en kolom 3 verbonden.

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Scannen gebeurt met 4 toetsen geconfigureerd als outputs en 4 als inputs. Ik maakte alle kolommen inputs met pull-up weerstanden, en alle rijen outputs. Via programmering worden alle rijen één voor één LAAG gemaakt, meerdere keren per seconde. Wanneer een toets ingedrukt wordt, wordt de bijbehorende kolom LAAG. De staat van de input-pins waar alle kolommen op aangesloten zijn, wordt meerdere keren gelezen. Wanneer een LAAG staat wordt gelezen, betekent dat dat een toets in die kolom ingedrukt is. Als een bepaalde rij LAAG is en tegelijkertijd een bepaalde kolom LAAG is, dan is de ingedrukte toets bepaald.

Bijvoorbeeld: als 1 ingedrukt wordt, is kolom 1 laag. Omdat elke rij zo snel één voor één LAAG gemaakt wordt, wordt zelfs bij een heel korte indruktijd rij 1 LAAG gevonden en vastgesteld dat 1 ingedrukt is. Als rij1==LAAG && kolom1==LAAG, dan is 1 ingedrukt.

Dit wordt getoond in code 1. Ik schreef deze code zelf omdat ik het naar een STM32-bord wilde uploaden en de KEYPAD-library niet compatibel was. Met deze code begrijp je de werking. Of je kunt gewoon de keypad-library gebruiken en het 'customkeypad'-voorbeeld draaien. Beide dienen hetzelfde doel, maar die code legt de werking niet uit.

Met de seriële monitor wordt elke ingedrukte toets op het scherm getoond. Dit is te zien in video 1.

Nadat de toetsbepaling werkt, is het tijd voor het wachtwoord. Het is zo simpel: ik maakte een string "1234" – dit is het ingestelde wachtwoord. Daarna maakte ik een andere array. Wat de toetswaarde ook is, wordt in deze array opgeslagen. Wanneer de teller 4 bereikt, worden beide strings vergeleken. Als ze overeenkomen – het wachtwoord is correct, anders niet. Dit is getoond in code 2. Ik had een LED aangesloten op pin 11, die oplicht wanneer het wachtwoord correct is. Dit is te zien in video 2.

Nu het onderdeel dat als slot dient: de 12V lineaire actuator. Die ziet er zo uit:

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Deze wordt bediend met de L293D IC, ook wel de 'motordriver' IC genoemd. Deze IC is aangesloten op de 12V voeding. Het neemt inputs van de Arduino (5V) en geeft 12V uit op de output-pins (waar de actuator op aangesloten is). Dus, wanneer het wachtwoord correct is, wordt pin 11 HOOG en pin 12 LAAG gezet. Pins 11 en 12 zijn verbonden met de inputs van de L293D. Hierdoor wordt de actuator naar binnen getrokken en opent de deur. Getoond in video 3.

Code

Code 1: Scannen (Arduino)

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 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); }
}

Code 2: Wachtwoord (Arduino)

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 2
char password[5]="1234"; char typed[5];

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){ 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;
  }
}

Schema's

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Sluit de actuator aan waar de motor aangesloten zit.
Verbind pin 8 met 12V

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

Ingedrukte toets getoond op scherm

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

LED brandt wanneer wachtwoord correct is

Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator

De actuator wordt naar buiten getrokken in normale toestand (deur gesloten).
Bij correct wachtwoord wordt hij naar binnen getrokken en opent de deur.

Productieproces

  1. Binnenkijken in bankkluizen: geschiedenis, ontwerp en toekomst van beveiliging
  2. Draaideuren: Ontwerp, Geschiedenis en Energiebesparende Voordelen
  3. Kanalen & sluizen: techniek, geschiedenis en toekomst van VS watervervoer
  4. De Evolutie en Fabricage van Moderne Pin-Tumbler Sloten
  5. Combinatieslot: Ontwerp, Productie en Historische Evolutie
  6. DIY Zonne-energie Weerstation Met Raspberry Pi
  7. Een Slimme Auto-vergrendelende Deur Bouwen met uw Smartphone's Bluetooth-bijnaheid
  8. Bouw een Veilige Gezichtsherkenning-deur met Windows IoT en Raspberry Pi
  9. Bouw Real-Time Cellulaire Automaten op Arduino met 128x64 OLED Display
  10. WiFi-ingeschakeld slim slot met Arduino & ESP8266 – Ontgrendel via je telefoon
  11. Motorconfiguratie: Uitgebreide Gids tot Typen en Kenmerken