Turvallisuus on tärkeä huolenaihe jokapäiväisessä elämässämme, ja digitaalisista lukoista on tullut tärkeä osa näitä turvajärjestelmiä. Yksi tällainen digitaalinen koodilukko on jäljitelty tässä projektissa arduino-kortilla ja matriisinäppäimistöllä.
Komponentit
- Arduino
- Näppäimistömoduuli
- Summeri
- 16x2 LCD
- BC547-transistori
- Vastus (1k)
- Leipälauta
- Teho
- Johtojen liittäminen
Tässä piirissä olemme käyttäneet multipleksointitekniikkaa näppäimistön liittämiseen salasanan syöttämiseen järjestelmään. Tässä käytämme 4x4-näppäimistöä, joka sisältää 16 näppäintä. Jos haluamme käyttää 16 avainta, tarvitsemme 16 nastaa arduinoon yhdistämiseen, mutta multipleksointitekniikassa meidän on käytettävä vain 8 nastaa 16 avaimen liittämiseen. Joten se on älykäs tapa liittää näppäimistömoduuli.
Multipleksointitekniikka: Multipleksointitekniikka on erittäin tehokas tapa vähentää mikrokontrollerin kanssa käytettävien nastojen määrää syötteen, salasanan tai numeroiden toimittamiseksi. Pohjimmiltaan tätä tekniikkaa käytetään kahdella tavalla - yksi on riviskannaus ja toinen kaksoispisteskannaus. Mutta tässä arduino-pohjaisessa projektissa olemme käyttäneet näppäimistökirjastoa, joten meidän ei tarvitse tehdä mitään multipleksointikoodia tälle järjestelmälle. Meidän on käytettävä vain näppäimistökirjastoa syötteen tuottamiseen.
Piirin kuvaus
Tämän projektin piiri on hyvin yksinkertainen, joka sisältää Arduinon, näppäimistömoduulin, summerin ja LCD: n. Arduino ohjaa kaikkia prosesseja, kuten salasanan ottaminen näppäimistömoduulista, salasanojen vertailua, summerin ajamista ja tilan lähettämistä LCD-näyttöön. Näppäimistöä käytetään salasanan ottamiseen. Summeriä käytetään merkkivaloihin ja nestekidenäyttöä tilan tai viestien näyttämiseen siinä. Summeri toimii NPN-transistorin avulla.
Näppäimistömoduulin saraketapit on kytketty suoraan nastoihin 4, 5, 6, 7 ja rivinastat on kytketty arduino unon 3, 2, 1, 0 liittimiin. 16x2-nestekidenäyttö on kytketty arduinoon 4-bittisessä tilassa. Ohjaustapit RS, RW ja En on kytketty suoraan arduino-nastoihin 13, GND ja 12. Ja datanapa D4-D7 on kytketty arduinon nastoihin 11, 10, 9 ja 8. Ja yksi summeri on kytketty arduinon tapiin 14 (A1) BC547 NPN -transistorin kautta.
Työskentely
Olemme käyttäneet sisäänrakennetun arduinon EEPROMia salasanan tallentamiseen, joten kun suoritamme tämän piirin ensimmäisen kerran, luemme roskatiedot sisäänrakennetun arduinon EEPROM: sta ja verrataan sitä syöttösalasanaan ja annamme nestekidenäytössä viestin, joka on estetty, koska salasana ei täsmää. Tämän ongelman ratkaisemiseksi meidän on asetettava oletussalasana ensimmäistä kertaa seuraavalla ohjelmoinnilla:
for (int j = 0; j <4; j ++) EEPROM. kirjoita (j, j + 49);
lcd.print ("Kirjoita Ur-salasana:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.luku (j);
Tämä asettaa salasanaksi “1234” Arduinon EEPROM.
Ensimmäisen käyttökerran jälkeen meidän on poistettava tämä ohjelmasta ja kirjoitettava koodi uudelleen arduinoon ja suoritettava. Nyt järjestelmäsi toimii hyvin. Ja toisen kerran käytetty salasana on nyt “1234”. Nyt voit vaihtaa sen painamalla # -painiketta, kirjoittamalla sitten nykyisen salasanasi ja kirjoittamalla sitten uuden salasanasi.
Kun annat salasanasi, järjestelmä vertaa syöttämääsi salasanaa siihen salasanaan, joka on tallennettu arduinon EEPROM-tiedostoon. Jos vastaavuus on tapahtunut, LCD-näytössä näkyy "pääsy myönnetty" ja jos salasana on väärä, LCD "Pääsy estetty" ja summeri piippaa jatkuvasti jonkin aikaa. Ja summeri piippaa myös kerran, kun käyttäjä painaa mitä tahansa näppäimistön painiketta.
Ohjelmoinnin kuvaus
Koodissa olemme käyttäneet näppäimistökirjastoa näppäimistön liittämiseen arduinoon.
#sisältää
vakiotavu ROWS = 4; // neljä riviä vakiotavu COLS = 4; // neljä saraketta char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; tavu riviPins = {3, 2, 1, 0}; // muodosta yhteys näppäimistötavun rivinappeihin colPins = {4, 5, 6, 7}; // muodosta yhteys näppäimistön sarakkeen pinoutsiin // alustaa luokan ilmentymä NewKeypad Näppäimistö customKeypad = Näppäimistö (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Olemme sisällyttäneet LCD-kirjaston LCD-liitäntään ja EEPROM-liitäntään, olemme sisällyttäneet kirjaston EEPROM.h. Ja sitten alustaneet muuttujat ja määritellyt nastat komponentteille.
#define summeri 15 LiquidCrystal lcd (13,12,11,10,9,8); char salasana; char pass, pass1; int i = 0; char customKey = 0;
Ja sitten aloitimme LCD: n ja annamme suunnan nastoille asetustoiminnossa
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (summeri, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("elektroninen"); lcd.setCursor (0,1); lcd.print ("Näppäimistön lukitus"); viive (2000); lcd.clear (); lcd.print ("Kirjoita Ur-salasana:"); lcd.setCursor (0,1);
Tämän jälkeen luemme näppäimistön silmukka-toiminnossa
customKey = customKeypad.getKey (); jos (customKey == '#') muuttuu (); if (customKey) {salasana = customKey; lcd.print (customKey); piippaus(); }
Ja sitten vertaa salasanaa tallennussalasanaan merkkijonovertausmenetelmällä.
if (i == 4) {viive (200); for (int j = 0; j <4; j ++) pass = EEPROM.luku (j); if (! (strncmp (salasana, passi, 4))) {digitalWrite (led, HIGH); piippaus(); lcd.clear (); lcd.print ("Salasana hyväksytty"); viive (2000); lcd.setCursor (0,1); lcd.print ("#. Vaihda salasana"); viive (2000); lcd.clear (); lcd.print ("Anna salasana:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Tämä on salasananvaihtotoiminto ja summerin äänimerkki
mitätön muutos () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (avain) {pass1 = avain; lcd.print (avain); void piippaus () {digitalWrite (summeri, HIGH); viive (20); digitalWrite (summeri, LOW); }