Sicherheit ist ein wichtiges Anliegen in unserem täglichen Leben, und digitale Schlösser sind zu einem wichtigen Bestandteil dieser Sicherheitssysteme geworden. Eine solche digitale Codesperre wird in diesem Projekt unter Verwendung einer Arduino-Karte und einer Matrixtastatur nachgeahmt.
Komponenten
- Arduino
- Tastaturmodul
- Summer
- 16x2 LCD
- BC547 Transistor
- Widerstand (1k)
- Brotbrett
- Leistung
- Kabel anschließen
In dieser Schaltung haben wir die Multiplextechnik verwendet, um die Tastatur für die Eingabe des Passworts in das System zu verbinden. Hier verwenden wir eine 4x4-Tastatur, die 16 Tasten enthält. Wenn wir 16 Tasten verwenden möchten, benötigen wir 16 Pins für die Verbindung mit Arduino, aber in der Multiplextechnik müssen wir nur 8 Pins für die Verbindung von 16 Tasten verwenden. Damit ist es eine clevere Möglichkeit, ein Tastaturmodul anzuschließen.
Multiplexing-Technik: Die Multiplexing-Technik ist eine sehr effiziente Methode, um die Anzahl der Pins zu reduzieren, die mit dem Mikrocontroller zur Bereitstellung von Eingaben, Passwörtern oder Nummern verwendet werden. Grundsätzlich wird diese Technik auf zwei Arten verwendet - eine ist das Zeilenscannen und die andere das Doppelpunktscannen. In diesem Arduino-basierten Projekt haben wir jedoch eine Tastaturbibliothek verwendet, sodass wir für dieses System keinen Multiplex-Code erstellen müssen. Wir müssen nur die Tastaturbibliothek für die Eingabe verwenden.
Schaltungsbeschreibung
Die Schaltung dieses Projekts ist sehr einfach und enthält Arduino, Tastaturmodul, Summer und LCD. Arduino steuert die gesamten Prozesse wie das Aufnehmen des Passworts über das Tastaturmodul, das Vergleichen von Passwörtern, das Fahren des Summers und das Senden des Status an das LCD-Display. Die Tastatur dient zur Eingabe des Passworts. Der Summer wird für Anzeigen verwendet und das LCD wird zur Anzeige von Status oder Meldungen verwendet. Der Summer wird mit einem NPN-Transistor angesteuert.
Die Spaltenstifte des Tastaturmoduls sind direkt mit Pin 4, 5, 6, 7 verbunden, und die Zeilenstifte sind mit 3, 2, 1, 0 von Arduino Uno verbunden. Ein 16x2 LCD ist im 4-Bit-Modus mit Arduino verbunden. Die Steuerstifte RS, RW und En sind direkt mit den Arduino-Stiften 13, GND und 12 verbunden. Der Datenstift D4-D7 ist mit den Stiften 11, 10, 9 und 8 des Arduino verbunden. Ein Summer ist an Pin 14 (A1) des Arduino über einen BC547-NPN-Transistor angeschlossen.
Arbeiten
Wir haben das EEPROM des eingebauten Arduino verwendet, um das Passwort zu speichern. Wenn wir diese Schaltung zum ersten Mal ausführen, lesen Sie die Garbage-Daten aus dem EEPROM des eingebauten Arduino, vergleichen Sie sie mit dem eingegebenen Passwort und geben Sie auf dem LCD eine Meldung mit dem Titel Zugriff verweigert, da das Passwort nicht übereinstimmt. Um dieses Problem zu lösen, müssen wir zum ersten Mal ein Standardkennwort mithilfe der folgenden Programmierung festlegen:
für (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Geben Sie Ihren Passkey ein:"); lcd.setCursor (0,1); für (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Dadurch wird das Passwort "1234" für das EEPROM von Arduino festgelegt.
Nach dem ersten Ausführen müssen wir dies aus dem Programm entfernen und den Code erneut in das Arduino schreiben und ausführen. Jetzt läuft Ihr System einwandfrei. Und für Ihr zweites Mal lautet das verwendete Passwort jetzt "1234". Jetzt können Sie es ändern, indem Sie die Taste # drücken und dann Ihr aktuelles Passwort und dann Ihr neues Passwort eingeben.
Wenn Sie Ihr Passwort eingeben, vergleicht das System Ihr eingegebenes Passwort mit dem Passwort, das im EEPROM von arduino gespeichert ist. Wenn eine Übereinstimmung auftritt, zeigt das LCD "Zugriff gewährt" an, und wenn das Passwort falsch ist, zeigt das LCD "Zugriff verweigert" an und der Summer piept einige Zeit lang ununterbrochen. Der Summer ertönt auch ein einziges Mal, wenn der Benutzer eine beliebige Taste auf der Tastatur drückt.
Programmierbeschreibung
Im Code haben wir die Tastaturbibliothek verwendet, um die Tastatur mit Arduino zu verbinden.
#einschließen
const byte ROWS = 4; // vier Zeilen const byte COLS = 4; // vier Spalten char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; Byte rowPins = {3, 2, 1, 0}; // Verbindung zu den Zeilenbelegungen des Tastaturbytes herstellen colPins = {4, 5, 6, 7}; // Verbindung zu den Spaltenbelegungen der Tastatur herstellen // eine Instanz der Klasse NewKeypad initialisieren Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Wir haben die LCD-Bibliothek für die LCD-Schnittstelle und für die Schnittstelle zum EEPROM aufgenommen. Wir haben die Bibliothek EEPROM.h. Eingefügt und dann die Variablen und definierten Pins für die Komponenten initialisiert.
#define Summer 15 LiquidCrystal lcd (13,12,11,10,9,8); char Passwort; char pass, pass1; int i = 0; char customKey = 0;
Und dann haben wir LCD initialisiert und den Pins in der Setup-Funktion die Richtung gegeben
void setup () {lcd.begin (16,2); PinMode (LED, OUTPUT); pinMode (Summer, OUTPUT); PinMode (m11, OUTPUT); PinMode (m12, OUTPUT); lcd.print ("elektronisch"); lcd.setCursor (0,1); lcd.print ("Tastensperre"); Verzögerung (2000); lcd.clear (); lcd.print ("Geben Sie Ihren Passkey ein:"); lcd.setCursor (0,1);
Danach lesen wir die Tastatur in der Schleifenfunktion
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {password = customKey; lcd.print (customKey); Piep(); }}
Vergleichen Sie dann das Passwort mit dem Passwort zum Speichern mithilfe der String-Vergleichsmethode.
if (i == 4) {delay (200); für (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (Passwort, Pass, 4))) {digitalWrite (LED, HIGH); Piep(); lcd.clear (); lcd.print ("Passkey Accepted"); Verzögerung (2000); lcd.setCursor (0,1); lcd.print ("#. Passkey ändern"); Verzögerung (2000); lcd.clear (); lcd.print ("Passkey eingeben:"); lcd.setCursor (0,1); i = 0; digitalWrite (LED, LOW); }}
Dies ist die Passwortänderungsfunktion und die Summer-Beep-Funktion
void change () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (Schlüssel) {pass1 = Schlüssel; lcd.print (Schlüssel); void beep () {digitalWrite (Summer, HIGH); Verzögerung (20); digitalWrite (Summer, LOW); }}