Keselamatan menjadi perhatian utama dalam kehidupan kita sehari-hari, dan kunci digital telah menjadi bahagian penting dalam sistem keselamatan ini. Satu kunci kod digital seperti itu ditiru dalam projek ini menggunakan papan arduino dan papan kekunci matriks.
Komponen
- Arduino
- Modul Pad Kekunci
- Buzzer
- LCD 16x2
- Transistor BC547
- Perintang (1k)
- Papan roti
- Kuasa
- Menyambung wayar
Dalam litar ini, kami telah menggunakan teknik multiplexing untuk memadankan papan kekunci untuk memasukkan kata laluan dalam sistem. Di sini kita menggunakan pad kekunci 4x4 yang mengandungi 16 kekunci. Sekiranya kita ingin menggunakan 16 kekunci maka kita memerlukan 16 pin untuk sambungan ke arduino tetapi dalam teknik multiplexing kita hanya perlu menggunakan 8 pin untuk menghubungkan 16 kekunci. Oleh itu, ia adalah kaedah yang bijak untuk menghubungkan modul keypad.
Teknik Multiplexing: Teknik multiplexing adalah kaedah yang sangat berkesan untuk mengurangkan bilangan pin yang digunakan dengan mikrokontroler untuk memberikan input atau kata laluan atau nombor. Pada asasnya teknik ini digunakan dalam dua cara - satu adalah pengimbasan baris dan satu lagi adalah pengimbasan usus besar. Tetapi dalam projek berasaskan arduino ini, kami telah menggunakan perpustakaan papan kekunci sehingga kami tidak perlu membuat kod multiplexing untuk sistem ini. Kita hanya perlu menggunakan pustaka papan kekunci untuk memberikan input.
Huraian Litar
Litar projek ini sangat mudah yang mengandungi Arduino, modul papan kekunci, buzzer dan LCD. Arduino mengawal proses lengkap seperti mengambil modul papan kekunci bentuk kata laluan, membandingkan kata laluan, memandu buzzer dan menghantar status ke paparan LCD. Pad kekunci digunakan untuk mengambil kata laluan. Buzzer digunakan untuk petunjuk dan LCD digunakan untuk memaparkan status atau mesej di atasnya. Buzzer digerakkan dengan menggunakan transistor NPN.
Pin Tiang modul papan kekunci disambungkan secara langsung ke pin 4, 5, 6, 7 dan pin Baris disambungkan ke arduino uno 3, 2, 1, 0. LCD 16x2 disambungkan dengan arduino dalam mod 4-bit. Pin kawalan RS, RW dan En disambungkan secara langsung ke arduino pin 13, GND dan 12. Dan pin data D4-D7 disambungkan ke pin 11, 10, 9 dan 8 arduino. Dan satu bel disambungkan pada pin 14 (A1) arduino melalui transistor BC547 NPN.
Bekerja
Kami telah menggunakan EEPROM inbuilt arduino untuk menyimpan kata laluan, jadi ketika kami menjalankan litar ini program kali pertama membaca data sampah dari EEPROM inbuilt arduino dan membandingkannya dengan kata laluan input dan memberikan mesej pada LCD yang Akses Ditolak kerana kata laluan tidak sesuai. Untuk menyelesaikan masalah ini, kita perlu menetapkan kata laluan lalai untuk pertama kalinya dengan menggunakan pengaturcaraan yang diberikan di bawah:
untuk (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Masukkan Ur Passkey:"); lcd.setCursor (0,1); untuk (int j = 0; j <4; j ++) lulus = EEPROM.read (j);
Ini akan menetapkan kata laluan "1234" ke EEPROM dari Arduino.
Setelah menjalankannya kali pertama kita perlu mengeluarkannya dari program dan menulis semula kod ke arduino dan jalankan. Sekarang sistem anda akan berjalan dengan baik. Kata laluan yang digunakan untuk kali kedua adalah "1234". Sekarang anda boleh mengubahnya dengan menekan butang # dan kemudian masukkan kata laluan semasa anda dan kemudian masukkan kata laluan baru anda.
Apabila anda memasukkan kata laluan anda, sistem akan membandingkan kata laluan yang anda masukkan dengan kata laluan yang disimpan di EEPROM of arduino. Sekiranya kecocokan berlaku maka LCD akan menunjukkan "akses diberikan" dan jika kata laluan salah maka LCD akan "Akses Ditolak" dan bel terus berbunyi untuk beberapa waktu. Dan buzzer juga berbunyi bip satu kali setiap kali pengguna akan menekan butang apa pun dari papan kekunci.
Penerangan Pengaturcaraan
Dalam kod, kami telah menggunakan perpustakaan papan kekunci untuk menghubungkan papan kekunci dengan arduino.
#sertakan
const byte ROWS = 4; // empat baris const byte COLS = 4; // empat lajur char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // sambungkan ke pinout baris keypad byte colPins = {4, 5, 6, 7}; // sambungkan ke pinout lajur keypad // mulakan contoh kelas NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Kami telah memasukkan perpustakaan LCD untuk antaramuka LCD dan untuk antarmuka EEPROM, kami telah memasukkan perpustakaan EEPROM.h., Dan kemudian memulakan variabel dan pin yang ditentukan untuk komponen.
#define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); kata laluan char; char char, pass1; int i = 0; char customKey = 0;
Dan kemudian kami menginisialisasi LCD dan memberi arahan kepada pin dalam fungsi persediaan
persediaan tidak sah () {lcd.begin (16,2); pinMode (dipimpin, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("Elektronik"); lcd.setCursor (0,1); lcd.print ("Kunci Pad Kekunci"); kelewatan (2000); lcd.clear (); lcd.print ("Masukkan Ur Passkey:"); lcd.setCursor (0,1);
Selepas ini kita membaca papan kekunci dalam fungsi gelung
customKey = customKeypad.getKey (); jika (customKey == '#') ubah (); jika (customKey) {kata laluan = customKey; lcd.print (customKey); bip (); }
Dan kemudian bandingkan kata laluan dengan kata laluan simpan menggunakan kaedah membandingkan rentetan.
jika (i == 4) {kelewatan (200); untuk (int j = 0; j <4; j ++) lulus = EEPROM.read (j); jika (! (strncmp (kata laluan, lulus, 4))) {digitalWrite (dipimpin, TINGGI); bip (); lcd.clear (); lcd.print ("Kata Laluan Diterima"); kelewatan (2000); lcd.setCursor (0,1); lcd.print ("#. Tukar Kata Laluan"); kelewatan (2000); lcd.clear (); lcd.print ("Masukkan Kata Laluan:"); lcd.setCursor (0,1); i = 0; digitalWrite (dipimpin, RENDAH); }
Ini adalah fungsi menukar kata laluan dan fungsi bip buzzer
perubahan kekosongan () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); sementara (j <4) {char key = customKeypad.getKey (); jika (kunci) {pass1 = kunci; lcd.print (kunci); bip kosong () {digitalWrite (buzzer, TINGGI); kelewatan (20); digitalWrite (buzzer, RENDAH); }