Sikkerhed er et stort problem i vores daglige liv, og digitale låse er blevet en vigtig del af disse sikkerhedssystemer. En sådan digital kodelås efterlignes i dette projekt ved hjælp af arduino-kort og et matrix-tastatur.
Komponenter
- Arduino
- Tastaturmodul
- Summer
- 16x2 LCD
- BC547 Transistor
- Modstand (1k)
- Brødbræt
- Strøm
- Tilslutning af ledninger
I dette kredsløb har vi brugt multipleksningsteknik til at interface tastaturet til indtastning af adgangskoden i systemet. Her bruger vi 4x4 tastatur, der indeholder 16 nøgler. Hvis vi vil bruge 16 nøgler, har vi brug for 16 ben til forbindelse til arduino, men i multiplexeringsteknik skal vi kun bruge 8 ben til interface 16 nøgler. Så det er en smart måde at interface et tastaturmodul på.
Multiplexing-teknik: Multiplexing-teknik er en meget effektiv måde at reducere antallet af ben, der bruges sammen med mikrocontrolleren til at levere input eller adgangskode eller tal. Dybest set bruges denne teknik på to måder - den ene er række scanning og den anden er kolon scanning. Men i dette arduino-baserede projekt har vi brugt tastaturbibliotek, så vi behøver ikke lave nogen multiplexing-kode til dette system. Vi behøver kun at bruge tastaturbiblioteket til at levere input.
Kredsløbsbeskrivelse
Kredsløbet til dette projekt er meget simpelt, som indeholder Arduino, tastaturmodul, summer og LCD. Arduino styrer de komplette processer som at tage adgangskodeformular tastaturmodul, sammenligne adgangskoder, køre summer og sende status til LCD-skærm. Tastatur bruges til at tage adgangskode. Buzzer bruges til indikationer, og LCD bruges til at vise status eller meddelelser på den. Summer drives ved hjælp af en NPN-transistor.
Tastaturmodulets søjlestifter er direkte forbundet til pin 4, 5, 6, 7 og Row pins er forbundet til 3, 2, 1, 0 af arduino uno. En 16x2 LCD er forbundet med arduino i 4-bit tilstand. Kontrolstift RS, RW og En er direkte forbundet til arduino pin 13, GND og 12. Og datapind D4-D7 er forbundet til ben 11, 10, 9 og 8 i arduino. Og en summer er tilsluttet ved pin 14 (A1) i arduino gennem en BC547 NPN-transistor.
Arbejder
Vi har brugt indbygget arduino's EEPROM til at gemme adgangskode, så når vi kører dette kredsløb første gangs program, skal du læse skraldata fra indbygget arduinos EEPROM og sammenligne det med inputadgangskode og give en besked på LCD, der er Adgang nægtet, fordi adgangskoden ikke stemmer overens. For at løse dette problem skal vi indstille en standardadgangskode for første gang ved hjælp af programmeringen nedenfor:
for (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Indtast Ur adgangsnøgle:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Dette indstiller adgangskoden "1234" til EEPROM fra Arduino.
Efter at have kørt det første gang skal vi fjerne dette fra programmet og igen skrive koden til arduino og køre. Nu kører dit system fint. Og for din anden gang er adgangskoden nu “1234”. Nu kan du ændre det ved at trykke på knappen # og derefter indtaste din nuværende adgangskode og derefter indtaste din nye adgangskode.
Når du indtaster din adgangskode, sammenligner systemet din indtastede adgangskode med den adgangskode, der er gemt i EEPROM i arduino. Hvis der opstår match, vil LCD-displayet vise "adgang tildelt", og hvis adgangskoden er forkert, vil LCD "Adgang nægtet" og summer kontinuerligt bippe i nogen tid. Og summer bipper også en gang, hver gang brugeren trykker på en vilkårlig knap fra tastaturet.
Programmeringsbeskrivelse
I kode har vi brugt tastaturbibliotek til grænseflade mellem tastatur og arduino.
#omfatte
const byte RÆGER = 4; // fire rækker med byte COLS = 4; // fire kolonner char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // opret forbindelse til rækkeudskæringerne på tastaturbyte colPins = {4, 5, 6, 7}; // opret forbindelse til kolonnens pinouts på tastaturet // initialiser en forekomst af klasse NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Vi har inkluderet LCD-bibliotek til LCD-interface og til interface EEPROM har vi inkluderet bibliotek EEPROM.h., Og derefter initialiseret variable og definerede ben til komponenter.
#define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); char adgangskode; char pass, pass1; int i = 0; char customKey = 0;
Og så initialiserede vi LCD og gav retning til ben i installationsfunktionen
ugyldig opsætning () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (summer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("elektronisk"); lcd.setCursor (0,1); lcd.print ("Tastaturlås"); forsinkelse (2000); lcd.clear (); lcd.print ("Indtast Ur adgangsnøgle:"); lcd.setCursor (0,1);
Herefter læser vi tastaturet i loop-funktion
customKey = customKeypad.getKey (); hvis (customKey == '#') ændres (); hvis (customKey) {password = customKey; lcd.print (customKey); bip (); }
Og sammenlign derefter adgangskode med gem adgangskode ved hjælp af streng sammenligningsmetode.
hvis (i == 4) {forsinkelse (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (password, pass, 4))) {digitalWrite (led, HIGH); bip (); lcd.clear (); lcd.print ("Adgangskode accepteret"); forsinkelse (2000); lcd.setCursor (0,1); lcd.print ("#. Skift adgangsnøgle"); forsinkelse (2000); lcd.clear (); lcd.print ("Indtast adgangskode:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LAV); }
Dette er funktion til ændring af adgangskode og summerlydfunktion
ugyldig ændring () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); mens (j <4) {char key = customKeypad.getKey (); hvis (nøgle) {pass1 = nøgle; lcd.print (nøgle); void bip () {digitalWrite (summer, HIGH); forsinkelse (20); digitalWrite (summer, LAV); }