Beveiliging is een belangrijk aandachtspunt in ons dagelijks leven en digitale sloten zijn een belangrijk onderdeel geworden van deze beveiligingssystemen. Een dergelijk digitaal codeslot wordt in dit project nagebootst met behulp van een Arduino-bord en een matrix-toetsenbord.
Componenten
- Arduino
- Toetsenbordmodule
- Zoemer
- 16x2 LCD
- BC547-transistor
- Weerstand (1k)
- Broodplank
- Kracht
- Draden aansluiten
In dit circuit hebben we de multiplextechniek gebruikt om het toetsenbord te koppelen voor het invoeren van het wachtwoord in het systeem. Hier gebruiken we een 4x4-toetsenbord dat 16 toetsen bevat. Als we 16 sleutels willen gebruiken, hebben we 16-pins nodig voor verbinding met Arduino, maar in de multiplextechniek hoeven we slechts 8-pins te gebruiken voor het koppelen van 16 sleutels. Zodat het een slimme manier is om een toetsenbordmodule te koppelen.
Multiplexing-techniek: Multiplexing-techniek is een zeer efficiënte manier om het aantal pinnen te verminderen dat wordt gebruikt met de microcontroller voor het leveren van invoer of wachtwoord of cijfers. In principe wordt deze techniek op twee manieren gebruikt: de ene is het scannen van rijen en de andere is het scannen van de dubbele punt. Maar in dit op arduino gebaseerde project hebben we een toetsenbordbibliotheek gebruikt, dus we hoeven geen multiplexcode voor dit systeem te maken. We hebben alleen de toetsenbordbibliotheek nodig om invoer te leveren.
Circuit Beschrijving
Circuit van dit project is heel eenvoudig en bevat Arduino, toetsenbordmodule, zoemer en LCD. Arduino bestuurt de complete processen, zoals het aannemen van een wachtwoord in de toetsenbordmodule, het vergelijken van wachtwoorden, het aansturen van de zoemer en het verzenden van de status naar het LCD-scherm. Toetsenbord wordt gebruikt voor het nemen van een wachtwoord. Zoemer wordt gebruikt voor indicaties en LCD wordt gebruikt om de status of berichten erop weer te geven. De zoemer wordt aangestuurd door een NPN-transistor te gebruiken.
Kolompennen van de toetsenbordmodule zijn rechtstreeks verbonden met pen 4, 5, 6, 7 en rijpennen zijn verbonden met 3, 2, 1, 0 van arduino uno. Een 16x2 LCD is verbonden met arduino in 4-bit modus. Controle pin RS, RW en En zijn direct verbonden met Arduino pin 13, GND en 12. En data pin D4-D7 is verbonden met pin 11, 10, 9 en 8 van Arduino. En een zoemer is aangesloten op pin 14 (A1) van arduino via een BC547 NPN-transistor.
Werken
We hebben de ingebouwde arduino's EEPROM gebruikt om het wachtwoord op te slaan, dus wanneer we dit circuit voor de eerste keer uitvoeren, lees dan een afvalgegevens uit de ingebouwde arduino's EEPROM en vergelijk het met het invoerwachtwoord en geef een bericht op het LCD-scherm dat toegang geweigerd is omdat het wachtwoord niet overeenkomt. Om dit probleem op te lossen, moeten we voor de eerste keer een standaardwachtwoord instellen door onderstaande programmering te gebruiken:
voor (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Voer uw wachtwoord in:"); lcd.setCursor (0,1); voor (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Dit zal het wachtwoord "1234" instellen op EEPROM van Arduino.
Nadat we het de eerste keer hebben uitgevoerd, moeten we dit uit het programma verwijderen en opnieuw de code in de arduino schrijven en uitvoeren. Nu werkt uw systeem prima. En het voor de tweede keer gebruikte wachtwoord is nu “1234”. Nu kunt u het wijzigen door op de knop # te drukken en vervolgens uw huidige wachtwoord in te voeren en vervolgens uw nieuwe wachtwoord in te voeren.
Wanneer u uw wachtwoord invoert, zal het systeem uw ingevoerde wachtwoord vergelijken met dat wachtwoord dat is opgeslagen in de EEPROM van arduino. Als er een overeenkomst is opgetreden, zal het LCD-scherm "toegang verleend" tonen en als het wachtwoord onjuist is, zal het LCD-scherm "Toegang geweigerd" tonen en zal de zoemer een tijdje continu piepen. En zoemer is ook een piep een enkele keer wanneer de gebruiker op een knop op het toetsenbord drukt.
Programmering Beschrijving
In code hebben we de toetsenbordbibliotheek gebruikt voor het koppelen van het toetsenbord met arduino.
# omvatten
const byte RIJEN = 4; // vier rijen const byte COLS = 4; // vier kolommen char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // maak verbinding met de rij-pinouts van het toetsenbord byte colPins = {4, 5, 6, 7}; // maak verbinding met de kolom-pinouts van het toetsenbord // initialiseer een instantie van de klasse NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
We hebben een LCD-bibliotheek opgenomen voor LCD-interfacing en voor de interfacing van EEPROM hebben we bibliotheek EEPROM.h. Opgenomen, en vervolgens geïnitialiseerde variabele en gedefinieerde pinnen voor componenten.
#define zoemer 15 LiquidCrystal lcd (13,12,11,10,9,8); char wachtwoord; char pass, pass1; int i = 0; char customKey = 0;
En toen initialiseerden we het LCD-scherm en gaven we richting aan pinnen in de instellingsfunctie
leegte setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (zoemer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("elektronisch"); lcd.setCursor (0,1); lcd.print ("Toetsenbordvergrendeling"); vertraging (2000); lcd.clear (); lcd.print ("Voer uw wachtwoord in:"); lcd.setCursor (0,1);
Hierna lezen we toetsenbord in lusfunctie
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {wachtwoord = customKey; lcd.print (customKey); piep (); }
En vergelijk vervolgens het wachtwoord met het wachtwoord opslaan met behulp van de methode voor stringvergelijking.
if (i == 4) {vertraging (200); voor (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (wachtwoord, pass, 4))) {digitalWrite (led, HIGH); piep (); lcd.clear (); lcd.print ("Passkey geaccepteerd"); vertraging (2000); lcd.setCursor (0,1); lcd.print ("#. Verander wachtwoord"); vertraging (2000); lcd.clear (); lcd.print ("Enter Passkey:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Dit is de functie voor het wijzigen van het wachtwoord en de zoemer-piepfunctie
ongeldige verandering () {int j = 0; lcd.clear (); lcd.print ("UR Huidige Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (key) {pass1 = key; lcd.print (sleutel); void piep () {digitalWrite (zoemer, HIGH); vertraging (20); digitalWrite (zoemer, LOW); }