Bezpieczeństwo jest głównym problemem w naszym codziennym życiu, a zamki cyfrowe stały się ważną częścią tych systemów bezpieczeństwa. Jeden z takich cyfrowych zamków szyfrowych jest imitowany w tym projekcie przy użyciu płyty arduino i klawiatury matrycowej.
składniki
- Arduino
- Moduł klawiatury
- Brzęczyk
- Wyświetlacz LCD 16x2
- Tranzystor BC547
- Rezystor (1k)
- Deska do chleba
- Moc
- Przewody łączące
W tym obwodzie wykorzystaliśmy technikę multipleksowania do połączenia klawiatury w celu wprowadzenia hasła w systemie. Tutaj używamy klawiatury 4x4, która zawiera 16 klawiszy. Jeśli chcemy użyć 16 kluczy, potrzebujemy 16 pinów do połączenia z arduino, ale w technice multipleksowania musimy użyć tylko 8 pinów do połączenia 16 kluczy. Dzięki temu jest to inteligentny sposób na połączenie modułu klawiatury.
Technika multipleksowania: Technika multipleksowania to bardzo skuteczny sposób na zmniejszenie liczby pinów używanych z mikrokontrolerem do podawania danych wejściowych, hasła lub liczb. Zasadniczo ta technika jest używana na dwa sposoby - jeden to skanowanie wierszy, a drugi to skanowanie okrężnicy. Ale w tym projekcie opartym na arduino użyliśmy biblioteki klawiatury, więc nie musimy tworzyć żadnego kodu multipleksującego dla tego systemu. Do wprowadzania danych potrzebujemy tylko biblioteki klawiatury.
Opis obwodu
Obwód tego projektu jest bardzo prosty i zawiera Arduino, moduł klawiatury, buzzer oraz wyświetlacz LCD. Arduino kontroluje kompletne procesy, takie jak pobieranie hasła z modułu klawiatury, porównywanie haseł, sterowanie buzzerem i wysyłanie stanu na wyświetlacz LCD. Klawiatura służy do pobierania hasła. Brzęczyk służy do wskazań, a wyświetlacz LCD służy do wyświetlania stanu lub komunikatów na nim. Buzzer jest sterowany tranzystorem NPN.
Kołki kolumny modułu klawiatury są bezpośrednio połączone z pinami 4, 5, 6, 7, a szpilki Row są połączone z 3, 2, 1, 0 arduino uno. Wyświetlacz LCD 16x2 jest połączony z arduino w trybie 4-bitowym. Piny sterujące RS, RW i En są bezpośrednio podłączone do pinu 13, GND i 12 arduino. Piny danych D4-D7 są połączone z pinami 11, 10, 9 i 8 arduino. Jeden brzęczyk jest podłączony do styku 14 (A1) arduino przez tranzystor NPN BC547.
Pracujący
Użyliśmy wbudowanej pamięci EEPROM arduino do zapisania hasła, więc kiedy uruchamiamy ten obwód po raz pierwszy, program odczytuje dane śmieci z wbudowanej pamięci EEPROM arduino i porównuje je z hasłem wejściowym i wyświetla komunikat na wyświetlaczu LCD, który brzmi Odmowa dostępu, ponieważ hasło nie pasuje. Aby rozwiązać ten problem, musimy po raz pierwszy ustawić domyślne hasło za pomocą programu podanego poniżej:
for (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Wprowadź klucz Ur:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Spowoduje to ustawienie hasła „1234” do pamięci EEPROM Arduino.
Po uruchomieniu go po raz pierwszy musimy usunąć to z programu i ponownie zapisać kod w arduino i uruchomić. Teraz twój system będzie działał dobrze. Twoje drugie hasło to teraz „1234”. Teraz możesz je zmienić, naciskając przycisk #, a następnie wprowadź swoje aktualne hasło, a następnie wprowadź nowe hasło.
Kiedy wprowadzisz swoje hasło, system porówna wprowadzone hasło z tym, które jest przechowywane w pamięci EEPROM arduino. Jeśli dojdzie do dopasowania, na wyświetlaczu LCD pojawi się komunikat „przyznano dostęp”, a jeśli hasło jest nieprawidłowe, na wyświetlaczu LCD pojawi się komunikat „Odmowa dostępu” i brzęczyk będzie nieprzerwanie emitowany przez pewien czas. Brzęczyk również wydaje pojedynczy dźwięk, gdy użytkownik naciśnie dowolny przycisk na klawiaturze.
Opis programowania
W kodzie wykorzystaliśmy bibliotekę klawiatur do połączenia klawiatury z arduino.
#zawierać
stały bajt ROWS = 4; // cztery wiersze bajt stały COLS = 4; // znak czterech kolumn hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; bajt rowPins = {3, 2, 1, 0}; // połącz się z pinoutami wierszy bajtu klawiatury colPins = {4, 5, 6, 7}; // połącz się z pinoutami kolumn keypad // zainicjuj instancję klasy NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Dołączyliśmy bibliotekę LCD do interfejsu LCD, a do połączenia z EEPROM włączyliśmy bibliotekę EEPROM.h., A następnie zainicjowaliśmy zmienne i zdefiniowane piny dla komponentów.
# zdefiniować buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); hasło char; char pass, pass1; int i = 0; char customKey = 0;
Następnie zainicjowaliśmy wyświetlacz LCD i nadaliśmy kierunek pinom w funkcji konfiguracji
void setup () {lcd.begin (16,2); pinMode (led, WYJŚCIE); pinMode (buzzer, OUTPUT); pinMode (m11, WYJŚCIE); pinMode (m12, WYJŚCIE); lcd.print („Elektroniczny”); lcd.setCursor (0,1); lcd.print ("Blokada klawiatury"); opóźnienie (2000); lcd.clear (); lcd.print ("Wprowadź klucz Ur:"); lcd.setCursor (0,1);
Następnie odczytujemy klawiaturę w funkcji pętli
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {hasło = customKey; lcd.print (customKey); brzęczyk(); }
Następnie porównaj hasło z zapisanym hasłem za pomocą metody porównywania ciągów.
if (i == 4) {opóźnienie (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (hasło, hasło, 4))) {digitalWrite (led, HIGH); brzęczyk(); lcd.clear (); lcd.print („Zaakceptowano klucz”); opóźnienie (2000); lcd.setCursor (0,1); lcd.print ("#. Zmień klucz dostępu"); opóźnienie (2000); lcd.clear (); lcd.print ("Wprowadź klucz:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Jest to funkcja zmiany hasła i dźwięk brzęczyka
void change () {int j = 0; lcd.clear (); lcd.print ("Bieżąca przepustka UR"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (klucz) {pass1 = klucz; lcd.print (klucz); void beep () {digitalWrite (brzęczyk, WYSOKI); opóźnienie (20); digitalWrite (buzzer, LOW); }