Primjena NFC tehnologije u autentifikaciji

Величина: px
Почињати приказ од странице:

Download "Primjena NFC tehnologije u autentifikaciji"

Транскрипт

1 Primjena NFC tehnologije u autentifikaciji Kraš, Matija Undergraduate thesis / Završni rad 2019 Degree Grantor / Ustanova koja je dodijelila akademski / stručni stupanj: University North / Sveučilište Sjever Permanent link / Trajna poveznica: Rights / Prava: In copyright Download date / Datum preuzimanja: Repository / Repozitorij: University North Digital Repository

2 Završni rad br. 444/EL/2019 Primjena NFC tehnologije u autentifikaciji Matija Kraš, 0010/336 Varaždin, lipanj godine

3

4

5 Odjel Elektrotehnike Završni rad br. 444/EL/2019 Primjena NFC tehnologije u autentifikaciji Student Matija Kraš, 0010/336 Mentor doc. dr. sc. Ladislav Havaš, dipl. ing.el. Varaždin, lipanj godine

6

7 Sažetak Ovim radom predstavljen je sustav kontrole prolaska i evidentiranja koji se temelji na sklopu sa senzorom otiska prsta koji šalje potrebne podatke za evidenciju na MySQL bazu podataka. Ukratko, uređaj je namijenjen za korištenje na ulazu u neki objekt pomoću sigurne autentikacije korisnika s ispisom na LED zaslon o podacima zadnjeg ulaska. Objašnjeni su pojedini dijelovi sustava potrebni za realizaciju sklopa. Opisan je princip rada NFC tehnologije te optičkog senzora otiska prsta i njegovo povezivanje sa ostalim elementima. Uz to, opisana je komunikacija sklopa preko ESP8266 sa bazom podataka. Prikazan je unos novih korisnika, odnosno novih otisaka prstiju. Ključne riječi: Senzor otiska prsta NFC ESP8266 MySQL baza Log dolazaka Summary This paper presents an access control and register system based on a device with a fingerprint sensor, which sends all required data to MySQL database. Shortly, this device is to be used on an entrance point to a certain object using a secure authentication of a user with an LED display showing data of last entry. Furthermore, certain elements of the system required for the realization of the device are explained, along with functioning principles of NFC technology and optical fingerprint sensor, including how it connects to other elements. Additionally, device communication using ESP8266 with database is described, and admission of new users i.e., fingerprints is shown. Key words: Fingerprint sensor NFC ESP8266 MySQL database Entry log

8 SADRŽAJ 1. UVOD KOMPONENTE SUSTAVA I PRINCIP RADA ELEMENATA NFC SENZOR SENZOR OTISKA PRSTA LCD PRIKAZ 2004A ESP Glavne značajke ESP12-E Opis pinova i njihova funkcija SASTAVLJANJE UREĐAJA I ELEKTRIČNA SHEMA KUĆIŠTE MONTAŽA ELEMENATA SHEMA SKLOPA SQL BAZA PODATAKA Povijest baza podataka MySQL baza podataka za prijavu Model baze podataka RAD UREĐAJA I IZGLED MENIJA ZAKLJUČAK DODACI CENTRALNI DIO PROGRAMSKOG KODA SKRIPTA ZA POVEZIVANJE S WIFI MREŽOM SKRIPTA ZA POVEZIVANJE S MySQL BAZOM DIO PROGRAMSKOG KODA ZA RAD TIPKALA CONFIGURATION.CPP SLIKE POSTUPKA IZRADE UREĐAJA LITERATURA... 32

9 POPIS SLIKA I TABLICA Slika 1: Princip rada optičkog čitača Slika 2: Fingerprint Module Slika 4: 2004A LCD Display sa I2C modulom Slika 5: ESP12-E modul Slika 6: 2D model ESP12-E mikrokontrolera Slika 7. Kućište uređaja Slika 8:Montaža dijelova na prednju stranu kućišta Slika 9:Shema sklopa Slika 10: Bušena pločica s regulatorima napona, ESP-om i pull-down otpornicima Slika 11: Model baze podataka Slika 12: Početni zaslon kod uključivanja Slika 13: Glavni zaslon Slika 14: Identifikacija pomoću NFC uređaja Slika 15: Meni uređaja Slika 16: Meni za log dolazaka Slika 17: Registracija novog korisnika Slika 18: Kućište s montiranim LCD zaslonom Slika 19: Montaža tipkala za odabir autentifikacije i meni Slika 20: Spajanje elemenata Slika 21: Prva proba rada Tablica 1: Opis pinova i njihova funkcija

10 POPIS KRATICA I STRANIH RIJEČI Smartphone Access control NFC Near Field Communication RFID Radio Frequency Identification Tag QR Quick Response code Fingerprint senzor LED Light Emmitting Diode MHz DC Direct Current I2C Inter-integrated circuit GND Ground VCC Voltage Common Collector WiFi GPIO General Purpose Input/Output LCD Liquid Cristal Display SQL Structured Query Language DBMS Database Management System Open Source Boot up Float Pametni telefon Kontrola pristupa Komunikacija bliskog polja Identifikacija radijskom frekvencijom Oznaka Kod brzog odziva Senzor otiska prsta Svjetleća dioda Megaherc Istosmjerna struja Serijski protokol Uzemljenje Napajanje čipa Bežična mreža Ulaz/izlaz za opće korištenje Ekran tekućih kristala Strukturni upitni jezik Sustav baza podataka Otvoreni izvor Dizanje Plutati, plutajuće

11

12 1. UVOD U današnje vrijeme vrlo je bitno osigurati da samo određene osobe mogu pristupiti određenim objektima i resursima, kako u fizičkim tako i u elektroničkim sustavima. Kao neke od najćešćih primjera gdje je sigurnost od najveće važnosti možemo navesti: Korisnika na društvenoj mreži koji želi osigurati da samo on može pristupiti vlastitom računu i njime manipulirati, Bankukoja mora jamčiti vlasniku računa da samo on raspolaže svojim novcem na računu Vlasnikanekretninekoji želi osigurati da samo on može ući, Korisnika pametnog telefona (engl. Smartphone) koji različitim metodama osigurava da nitko osim njega nema pristup uređaju. Kontrola pristupa (engl. Access control) se može podijeliti na tri važna segmenta: identifikaciju, autentifikaciju i autorizaciju. Ovim koracima utvrđuje se identitet osobe koja pokušava pristupiti računu, objektu ili određenom resursu, potvrđuje se da je osoba zaista ta kojom se predstavlja, i razina prava tog korisnika, odnosno čemu ta osoba može pristupiti. Postoje različite metode autentifikacije korisnika, te svaka od njih ima svoje prednosti i nedostatke. Ako primjenimo autentifikaciju na fizički ulazak osobe u objekt, najbolje je odabrati metodu kojom svaka osoba ima jedinstven ključ. U ovom slučaju, primijenjene su dvije metode: Otisak prsta koji je jedinstven za svakog korisnika NFC (engl. Near Field Communication) gdje korisnik dobiva svoju karticu (primjena u bankarstvu kod beskontaktnog plaćanja) Da bi uspješno kontrolirali pristup objektu, potrebno je osmisliti uređaj koji ima željene mogućnosti. Uz to, potrebno je shvatiti način na koji različiti elementi i moduli rade te njihove karakteristike, zahtjeve i ograničenja. Kod projektiranja uređaja bilo je poželjno da se informacije o prolasku mogu negdje spremiti za kasnije čitanje, što omogućuje odgovornim osobama uvid u stanje podataka, vremena prolaska i eventualni neovlašteni pokušaj pristupa. 1

13 To je postignuto kreiranjem baze podataka u koju se svaki prolazak upisuje s odgovarajućim parametrima te povezivanjem baze sa fizičkim uređajem. poput: Na početku projektiranja takvog uređaja, bilo je potrebno uzeti u obzir nekoliko faktora dimenzija samog sklopa, potrošnje energije, opcija koje mora sadržavati za optimalan rad, vrsti računala koje dobivene podatke obrađuje i prosljeđuje, ostalih elemenata za jednostavno korištenje, cijene izgradnje. Cilj jednog takvog uređaja je da se sa što manjim financijskim izdavanjima i sa što jednostavnijom izvedbom omogući kompletan uvid u pristup mjestu na koje je uređaj instaliran. 2

14 2. KOMPONENTE SUSTAVA I PRINCIP RADA ELEMENATA 2.1. NFC SENZOR NFC je vrsta bežične tehnologije kratkog dometa, slobodno prevedena kao komunikacija bliskog polja. Razvila se kao kombinacija već postojećih bežičnih tehnologija, odnosno kao inačica RFID (engl. Radio Frequency Identification) tehnologije za upotrebu u neposrednoj blizini. Uređaji koji koriste NFC tehnologiju mogu biti pasivni ili aktivni. Pasivni uređaj, kao što je NFC oznaka (engl. Tag), u sebi sadrži informacije koje drugi uređaji mogu čitati ali sam uređaj ne čita nikakve informacije. Takav pasivni uređaj možemo usporediti sa QR kodom. Drugi mogu očitati informacije, ali sam kod ne radi ništa osim prenošenja informacije drugim uređajima. Aktivni NFC uređaji, poput pametnih telefona, osim čitanja informacija iz pasivnih uređaja mogu razmjenjivati informacije s drugim kompatibilnim uređajima, te mijenjati podatke NFC oznake ako je ovlašten za takve akcije. NFC radi na principu magnetske indukcije. Čitač emitira malu struju koja stvara elektromagnetsko polje i premošćuje fizički prostor između uređaja. Klijentski uređaj vraća električne impulse koji su informacije poput statusa, duljine podatka ili identifikacijskog broja. Pasivni NFC uređaji koriste energiju čitatelja za odgovor dok aktivni NFC uređaji imaju vlastiti izvor energije i reagiraju na čitač koristeći vlastita elektromagnetska polja. Kao i RFID, NFC radi u frekvencijskom spektru od 13,56 MHz i koristi manje od 15mA za prijenos podataka na male udaljenosti, odnosno na nekoliko centimetara. Oznake obično pohranjuju između 96 i 512 bajta podataka i prenose podatke brzinama od 106 Kb/s do 848 Kb/s, što je dovoljno za gotovo trenutni prijenos malih količina podataka. 3

15 2.2. SENZOR OTISKA PRSTA Senzore otiska prsta (engl. Fingerprint sensor) u današnje vrijeme možemo naći u mnogobrojnim elektroničkim uređajima. Najveću primjenu zadnjih godina imaju u pametnim telefonima te su postali sastavni dio svakog pametnog telefona. Lozinke poput niza znamenki ili različitih obrazaca više nisu najsigurnija metoda provjere autentičnosti, a otisak prsta je zbog svoje jedinstvenosti i nepromijenjivosti bolja metoda zaštite osobnih podataka i pristupa. Tipični sustavi sastoje se od samog čitača za skeniranje otiska, procesora ili niza procesora koji te same otiske sprema u vlastitu bazu podataka te softvera koji se sastoji od niza algoritama za analizu pojedinih elemenata. Tehnologije za očitavanje otiska prstiju: Kapacitivni senzori Optički senzori Mehanički senzori Termalni Senzori bez dodira Za potrebe ovog uređaja, korišten je optički senzor prepoznavanja otiska prsta. Optički čitač je relativno jednostavan i linearan za korištenje. Zasniva se na najstarijoj metodi, tj. stavljanja prsta na staklenu površinu koju osvjetljava LED dioda. Kada udubljenja i izbočine otiska dodirnu staklenu podlogu, svjetlost se apsorbira i pojavljuje se totalna refleksija. Rezultirajuća svijetla i tamna područja snimaju se u senzoru slike. Slika 1: Princip rada optičkog čitača 4

16 Problem ove tehnologije je korištenje lažnih prstiju čime se senzor može prevariti, no zbog relativno niske cijene uređaja i jednostavnosti još uvijek je u širokoj primjeni. Tip optičkog senzora korištenog u sklopu je Fingerprint Recognition Module. Sastoji se od optičkog senzora otiska prsta, brzih procesora, algoritma za pronalaženje otisaka prstiju visokih performansi i FLASH čipa velikog kapaciteta. LED dioda svijetli svaki put kada fotografira u potrazi za otiscima prstiju. Ovaj modul radi sa serijskim protokolom pa se može lako upravljati sa MSP430, PIC, ARM, FPGA, Arduino i sličnim mikrokontrolerima i razvojnim pločicama. Osim toga, ima i mogućnost usporedbe u bazi podataka i ažuriranje, te memoriju da pohrani 162 različitih otisaka prstiju. Slika 2: Fingerprint Module Glavne značajke modula: Radna frekvencija: 433 MHz/868 MHz/915MHz Napon napajanja: 3,6 6,0 VDC Radni napon: 1,9 3,6 VDC Veličina datoteke: 256 B Vrijeme pretraživanja: Manje od 1 s Radna struja: Manje od 120 ma Veličina prozora: 14 x 18 mm 5

17 2.3. LCD PRIKAZ 2004A LCD (engl. Liquid Crystal Display) je ekran koji se temelji na tehnologiji tekućih kristala. Za potrebe ovog rada korišten je ekran dimenzija 20x4, odnosno 20 znakova po svakom od 4 retka. Također ima pozadinsko osvjetljenje i I2C sučelje, a osvjetljenje se može regulirati pomoću potenciometra smještenog sa stražnje strane ekrana na modulu.ovakav standardni ekran dizajniran je upravo za korištenje kod uređaja male snage, jer troši relativno malo električne energije i malih je dimenzija. Slika 4: 2004A LCD Display sa I2C modulom Tehnički podaci: Napon napajanja: 5 VDC (maksimalno 10 VDC) Nazivna struja: 0.1 ma Sučelje: I2C Dimenzije modula: 98 x 60 x 14 mm Pinovi: GND, VCC, SDA, SCL 6

18 2.4. ESP8266 ESP8266 je sistem na čipu (engl. System on a Chip), proizveden od kineske kompanije Espresiff. Sastoji se od Wi-Fi primopredajnika i 32-bitnog mikrokontrolera (MCU), te ima 11 GPIO pinova (engl. General Purpose Input/Output Pins) i jedan analogni ulaz, što znači da se može programirati kao i svaki drugi Arduino mikrokontroler. Mnogo je različitih modula dostupno na tržištu, a razlikuju se prvenstveno u broju dostupnih pinova, Wi-Fi anteni ili količini FLASH memorije. Za potrebe ovog rada korišten je ESP8266MOD, odnosno ESP12-E koji ima 16 iskoristivih pinova. Slika 5: ESP12-E modul ESP8266 nudi cjelovito i samostalno mrežno rješenje, pa se može koristiti kao host aplikacije ili kao Wi-Fi adapter nekog drugog mikrokontrolera. Kada ESP8266 služi kao host, aplikacija se pokreće direktno s njegove FLASH memorije. Alternativno, kao Wi-Fi adapter, bežični pristup internetu može dati bilo kojem mikrokontroleru jednostavnim povezivanjem pomoću SPI/SDIO ili I2C/UART sučeljem. Slika 6: 2D model ESP12-E mikrokontrolera 7

19 Glavne značajke ESP12-E b/g/n Integrirani 32-bitni MCU male snage Integrirani 10-bitni ADC Integrirani TCP/IP skup protokola Integrirani prekidač, LNA, pojačalo snage i odgovarajuća mreža Regulatori za upravljanje i uštedu energije Wi-Fi 2,4 GHz, podržava WPA/WPA2 enkripciju SDIO 2.0, SPI, UART, I2C, I2S, IRDA, GPIO Radna temperatura od -40 C do 125 C Opis pinova i njihova funkcija BROJ PINA NAZIV FUNKCIJA 1 RST Reset modula 2 ADC Rezultat A/D pretvorbe; Napon 0-1V, opseg EN Pin za omogućavanje čipa 4 IO16 GPIO16; Mogućnost korištenja za buđenje čipa iz deep sleep moda 5 IO14 GPIO14; HSPI_CLK 6 IO12 GPIO12; HSPI_MISO 7 IO13 GPIO13; HSPI_MOSI; UART0_CTS 8 VCC Napajanje čipa 3,3V 9 CS0 Odabir čipa 10 MISO Glavni ulaz 11 IO9 GPIO9 12 IO10 GBIO10 13 MOSI Glavni izlaz 14 SCLK Clock 15 GND Ground 16 IO15 GPIO15; UART0_RTS 17 IO2 GPIO2; UART1_TXD 18 IO0 GPIO0 19 IO4 GPIO4 20 IO5 GPIO5 21 RXD UART0_RXD 22 TXD UART0_TXD Tablica 1: Opis pinova i njihova funkcija 8

20 3. SASTAVLJANJE UREĐAJA I ELEKTRIČNA SHEMA 3.1. KUĆIŠTE Kod odabira kućišta najbitnije je bilo odabrati odgovarajuće dimenzije, da svi potrebni elementi sklopa budu dovoljno odvojeni jedan od drugog radi zagrijavanja, ali da sklop još uvijek bude kompaktan te realnih dimenzija za jednostavnu montažu. Prema dimenzijama LCD zaslona, koji je najveći element u sklopu, širina kućišta mora biti najmanje 120 mm, dok je zbog senzora otiska prsta koji je montiran okomito na prednju stranu dubina kućišta barem 50 mm. Odabrano je kućište od plastičnog materijala dimenzija 150mm x 146mm x 60mm izvedeno kao dvije polovice koje se međusobno spajaju pomoću četiri kopče na stranama. Gornja i donja strana su lako zamjenjive te se po potrebi mogu maknuti. Uz to, na stranama kućišta su prorezi za cirkulaciju zraka čime se rješava problem prevelikog zagrijavanja elektroničkih elemenata, no gubi se zaštita od vanjskih utjecaja kao što su voda i prašina. Slika 7. Kućište uređaja 9

21 3.2. MONTAŽA ELEMENATA Montaža elemenata u kućište počela je montiranjem LCD zaslona pošto je dimenzijama najveći u sklopu. Nakon zaslona, određen je raspored senzora otiska prsta, NFC čitača i tri tipkala, pošto se svi navedeni elementi nalaze na prednoj strani sklopa. Slika 8:Montaža dijelova na prednju stranu kućišta Bušenjem rupa promjera 4 mm montiran je LCD zaslon i NFC čitač, dok je za tipkala bilo potrebno napraviti rupe promjera 12 mm i 16 mm. Senzor otiska prsta kao i relej na izlazu pričvršćen je na kućište vrućim ljepilom. 10

22 3.3. SHEMA SKLOPA Slika 9: Shema sklopa 11

23 Za potrebe sklopa iskorišteno je napajanje napona 12V. 12V koristi samo relej na izlazu, dok se za druge elemente napon po potrebi regulira na 3,3V i 5V. 3,3 VDC ESP 12-E modul i NFC čitač 5 VDC Senzor otiska prsta i LCD ekran Na bušenoj pločici nalaze se dva regulatora napona, LM1117 koji na izlazu daje 3,3V i LM7805 koji na izlazu daje 5V. Kod korištenja mikrokontrolera potrebno je osigurati željeno stanje logičkog kruga neovisno o uvjetima. Takva stanja postižemo s takozvanim pull-up i pull-down otpornicima, koji osiguravaju da se određeni pin čipa ne nađe u plutajućem (engl. Float) stanju. Otpornik koji je spojen između pina i 5V, odnosno napajanja zovemo pull-up, dok otpornik spojen između pina i mase zovemo pull-down otpornik. Uobičajena vrijednost takvih otpornika kreće se od 1kΩ sve do 10kΩ. Takve otpornike bilo je potrebno staviti na pinove mikrokontrolera na koje su spojena tipkala, te su isti pritegnuti prema masi, i na pinove GPI04 i GPI05 prema napajanju 3,3V koji se koriste za I2C komunikaciju. Slika 10: Bušena pločica s regulatorima napona, ESP-om i pull-down otpornicima 12

24 4. SQL BAZA PODATAKA SQL je programski jezik koji se koristi za komunikaciju i manipulaciju sa bazama podataka. Da bi se iskoristila većina prikupljenih podataka, mnoge tvrtke moraju se kompetentno koristiti SQL-om te znati manipulirati informacijama koje su pohranjene u njihove baze podataka. Da bi se u potpunosti shvatila uloga SQL-a, potrebno je prvo shvatiti što je baza podataka. Postoje mnoge definicije koje objašnjavaju bazu podataka, no u suštini je ona zbirka zapisa podataka organizirana tako da se podaci mogu jednostavno čitati, mijenjati, uspoređivati, brisati ili ažurirati. Ta zbirka podataka mora biti logički organizirana, te korisnik preko DBMS-a (engl. Database Management System) pristupa podacima uređenim u jedan od tri osnovna modela: Hijerarhijski model: Struktura podataka slična drvetu Mrežni model: Najbolji način prikazivanja objekata i njihovih veza, odnosi su definirani eksplicitno Relacijski model: Najčešća primjena danas, zasniva se na spremanju podataka u dvodimenzionalne tablice 4.1. Povijest baza podataka Raymond Boyce i Donald Chamberlin započeli su prvi razvoj SQL-a u kompaniji IBM početkom sedamdesetih godina prošlog stoljeća. Ranije verzije ovog upitnog programskog jezika, koji se nekada zvao SEQUEL (engl. Structured English Query Language) razvijane su sa svrhom manipuliranja i dohvaćanja podataka sa sistema R, tadašnjeg sustava IBM-a. Nakon nekoliko godina, SQL jezik postao je dostupan javnosti godine, tvrtka Relational Software, koja je kasnije preimenovana u Oracle, u prodaju pušta prvu komercijaliziranu verziju SQL jezika nazvanu Oracle V2. Od tada do danas SQL je standard za komunikaciju s bazom podataka. Nakon toga, Oracle svakih nekoliko godina unaprijeđuje svoj proizvod, no sljedeći veliki korak čini MySQL, najpoznatija DBMS koji se može koristiti besplatno. Upravo se MySQL koristi za potrebe spremanja i čitanja prijava kod ovog sklopa. 13

25 4.2. MySQL baza podataka za prijavu Baza podataka za ovaj rad kreirana je u programu MySQL Workbench. Program je intuitivan i relativno jednostavan za korištenje jer koristi vizualne alate koji uvelike olakšavaju manipuliranje bazom. Kod kreiranja tablica, bilo je potrebno voditi računa o nekoliko stvari. S obzirom da se uređaj koristi za potrebe ulaska u tvrtku, bilo je potrebno odrediti entitete i atribute tih entiteta koji nas zanimaju. Najprije je trebalo kreirati tablicu koja sadrži podatke o samom korisniku, a to su njegovo ime, prezime i najvažnije, njegov identifikacijski broj user_id. Ova tablica nazvana je user, te se u njoj trenutno nalaze podaci 4 zaposlenika tvrtke Barting d.o.o. i Admin, odnosno administrator. Sljedeća kreirana tablica bila je nfc_tag, gdje se spremaju kodovi NFC uređaja koje svaki korisnik koristi. Svaki broj NFC uređaja povezan je s korisničkim identifikacijskim brojem, odnosno s user_id. Za potrebe evidentiranja prolaska kroz vrata i evidencije neovlaštenih pokušaja prolaska, kreirane su dvije tablice. Prva od njih je log u koju se upisuju vremena i datum (stupac date_time ) uspješnog prolaska povezana sa identifikacijskim brojem korisnika, tako da možemo dohvatiti točno vrijeme kada je zaposlenik ušao ili izašao iz mjesta rada. Druga tablica koja se tiče evidencije nazvana je log_fail. Ovdje se upisuje datum i vrijeme svakog pokušaja prolaska koji nije autoriziran, odnosno neovlaštenog pokušaja ulaska u tvrtku. Zbog svoje jednostavnosti ovaj entitet nema vezu sa ostalim dijelovima baze podataka, te ga kod pregleda na uređaju dohvaćamo samog kao ispis zadnjih 10 neuspjelih pokušaja. 14

26 4.3. Model baze podataka Slika 11: Model baze podataka Ovaj model baze podataka kreiran je u programu MySQL Workbench, te prikazuje strukturu baze u formi objekata te njene atribute. 15

27 5. RAD UREĐAJA I IZGLED MENIJA Ovaj dio rada sadrži upute o tome kako se služiti uređajem, te objašnjava pojedine korake u radu. Meni uređaja je osmišljen tako da korisnik lako može dohvatiti podatke o prolascima, podatke o neovlaštenim pokušajima ili dodavati nove korisnike. Prije nego se osoba može koristiti uređajem, uređaj mora proći proceduru paljenja na početku, odnosno mora se dignuti (engl. Boot up). Kod paljenja, uređaj diže pojedine stavke programa po unaprijed zadanom redoslijedu (koracima): 1. NFC 2. Otisak prsta 3. Spajanje na WiFi mrežu 4. Spajanje na MySQL bazu podataka Ako bilo koji proces ne uspije, na primjer WiFi mreža je nedostupna te uređaj nema pristup Internetu, dizanje programa kreće ispočetka od prvog koraka, što znači da se mikrokontroler ponovno povezuje s NFC čitačem, nakon toga s čitačem otiska prsta te se zatim pokušava opet spojiti na mrežu. Slika 12: Početni zaslon kod uključivanja Ako na primjer uređaj ne uspije odraditi prvi korak, odnosno spajanje na NFC, na zaslonu se prikaže drugačiji status. Za uspješno spajanje ispis na ekranu je OK za svaki korak, dok za grešku prikaže NOK (NOT OK) te ga program prisiljava da pokuša ponovo. 16

28 Nakon što je dizanje programa i svih elemenata bilo uspješno, na zaslonu uređaja prikaže se glavna poruka, a to je ona za odabir otiska prsta ili NFC-a kojom korisnik odabire željenu metodu autentifikacije. Slika 13: Glavni zaslon Ovo je poruka na zaslonu koja je najčešće prikazana, te se odavde ulazi u meni i postavke. Princip odabira je takav da korisnik može sam odrediti čime će potvrditi svoj identitet pritiskom na gornje tipkalo odabire se metoda otiska prsta, dok se pritiskom na donje tipkalo odabire NFC čitač. Slika 14: Identifikacija pomoću NFC uređaja Kod pojavljivanja ove poruke, korisnik ima 10 sekundi vremena da prisloni svoju NFC karticu na mjesto označeno na uređaju. Ista poruka pojavi se kod odabira otiska prsta, samo što na zaslonu umjesto NFC uredaj piše prst. 17

29 Do sada je opisan rad uređaja koji se odnosi na osobe koje nemaju potrebu manipulirati podacima ili dohvaćati i pregledavati log dolazaka. Da bi se ušlo u meni i postavke uređaja, potrebno je pritisnuti srednje veće tipkalo i držati ga barem 3 sekunde. Nakon pritiska od 3 sekunde otvara se meni uređaja. Slika 15: Meni uređaja U meniju uređaja relativno je jednostavno doći do zapisa koji nas zanima, registrirati novog korisnika ili promijeniti postavke. Ako korisnik želi uvid u prolaske, za to mora srednjim tipkalom ući u sekundarni meni. U sekundarnom meniju otvaraju se mogućnosti za prikaz prolaska kronološki, prema korisniku te neovlaštenih prolazaka. Slika 16: Meni za log dolazaka Ovdje korisnik ima uvid u svaki prolazak koji ga zanima, neovisno da li se radi o njemu ili nekoj drugoj osobi. Radi lakše preglednosti i snalaženja u zapisima program dozvoljava najviše 10 informacija. 18

30 Za registraciju novih korisnika ulazi se u glavni meni, te se odabire opcija Registracija kor. Ulaskom u taj meni, na zaslonu se prikažu postojeći korisnici prema rednom broju, te se može dodati novi otisak prsta ili NFC za postojećeg korisnika ili napraviti novi korisnik pod sljedećim rednim brojem uz odabir jedne od metoda za autentifikaciju. Svaki korisnik ne mora imati obje metode za prolazak, odnosno ako netko koristi samo metodu otiska prsta, ne mora ujedno imati registriranu NFC karticu. Postojeći korisnici su jedan administrator i djelatnici tvrtke Barting d.o.o, redoslijedom: 1. Admin 2. Matija Kraš 3. Luka Bartoniček 4. Bojan Bartoniček 5. Zoran Gluhak Svakog novog korisnika moguće je jednostavno unijeti, no njegovo ime i prezime potrebno je upisati u bazu podataka. Slika 17: Registracija novog korisnika Što se tiče ostalih značajki menija, u podmeniju O programu nalazi se samo informacija o uređaju i verziji programa, te ime autora, dok se u podmeniju Postavke nalaze opcije mijenjanja jezika uređaja iz hrvatskog u engleski jezik, i opcija Reboot čime se uređaj resetira i ponovno kreće u dizanje programa. 19

31 6. ZAKLJUČAK Kao i svaki sustav za kontrolu prolaska i evidenciju, i ovaj sustav ima svoje prednosti i nedostatke. Prednosti ovakvog sustava su brojne. Na prvom mjestu je cijena same izrade sklopa i jednostavnost njegovih elemenata, pa se time ostvaruje značajna financijska ušteda, budući da su profesionalni sustavi kontrole prolaska skupi te zahtijevaju redovito održavanje. Uz to, ovaj uređaj ima vrlo malu potrošnju energije čime je njegov neprestani rad isplativ. Što se tiče software-a, sve što je korišteno u ovom radu je besplatno za preuzimanje s Arduino repozitorija GitHub te je otvorenog izvora (engl. Open Source) čime se dozvoljavaju bilo kakve preinake u kodu. Većina programskog koda su gotove programske knjižnice pojedinih elemenata te spojene u smislenu cjelinu, s nekoliko dodataka poput povezivanja uređaja s MySQL bazom podataka, povezivanja na WiFi mrežu i funkcije menija. Kao što je prije spomenuto, MySQL se koristi za potrebe spremanja i čitanja podataka ovog uređaja. Velika prednost je to što u slučaju kvara ili uništenja uređaja, podaci važni za sigurnost objekta na kojem se uređaj nalazi ostaju zapisani na serveru te se mogu dohvatiti u svakom trenutku. MySQL uvelike smanjuje kompleksnost uređaja u smislu da se podaci ne moraju spremati na sam uređaj, pa se može koristiti manji i jeftiniji mikrokontroler nego obično. Što se tiče nedostataka, njih ima nekoliko. Glavna mana je nedostatak enkripcije kod ulaska u meni uređaja, pa bi teoretski neovlaštena osoba mogla naći načina za registraciju, unos svojih podataka te na kraju ulazak koji bi uređaj smatrao dopustivim. Međutim, takvu manu je moguće izbjeći ovisno o tome gdje je sam uređaj montiran. Druga veća mana je materijal i sama izrada uređaja jer ne postoji zaštita od vanjskih utjecaja poput vode i prašine. Ovu manu možemo izbjeći kao i prvu, pravilnim i pametnim postavljanjem uređaja, pa time zaključujemo da uređaj ima veliku korisnost i funkcionalnost s obzirom na nedostatke. 20 U Varaždinu, 22. Listopada 2019.

32 7. DODACI 7.1. CENTRALNI DIO PROGRAMSKOG KODA /************************************************************************** ***** Ctrl Fingerprint Reader ver MYSQL Developed by BARTING d.o.o. Authors: Matija Kraš *************************************************************************** ****/ #include "Arduino.h" #include "config/configuration.h" #include "config/settings.h" #include "config/parameters.h" #include "display/display.h" #include "display/buttons.h" #include "control/fingerprint.h" #include "control/lock.h" #include "control/nfc.h" #include "communication/mysql.h" Configuration config; Settings settings; Parameters parameters; Display display; Buttons buttons; Frames frames; Fingerprint fingerprint; Lock lock; 21

33 NFC nfc; Mysql mysql; void setup() { Serial.begin(115200); while (!Serial) ; delay(500); Serial.print("Starting Application..."); settings.setup(); parameters.setup(&settings, &display, &fingerprint, &nfc, &mysql); frames.setup(&settings); display.setup(&settings, &parameters, &frames); buttons.setup(&settings, &display); nfc.setup(&settings, &display, &mysql, &lock); fingerprint.setup(&settings, &display, &mysql, &lock); lock.setup(&settings, &display); // MYSQL Setup mysql.setup(&display); void loop() { buttons.loop(); buttons.testloop(); display.loop(); fingerprint.loop(); nfc.loop(); // MYSQL Loop mysql.loop(); lock.loop(); 22

34 7.2. SKRIPTA ZA POVEZIVANJE S WIFI MREŽOM Mysql.cpp WiFi.begin(Configuration::WIFI_SSID, Configuration::WIFI_PASSWORD); // Connect to the network Serial.print("\nConnecting to "); Serial.print(Configuration::WIFI_SSID); Serial.print("..."); while (WiFi.status()!= WL_CONNECTED) { // Wait for the Wi-Fi to connect delay(500); Serial.print("."); Serial.println(); Serial.print("Connected, IP address: "); Serial.println(WiFi.localIP()); 7.3. SKRIPTA ZA POVEZIVANJE S MySQL BAZOM Mysql.cpp if (conn.connect(configuration::mysql_server_ip, 3306, Configuration::MYSQL_USER, Configuration::MYSQL_PASSWORD)) { else { statusmysql = -1; display->refreshallfields(); Serial.println("Connection to MYSQL failed."); 23

35 7.4. DIO PROGRAMSKOG KODA ZA RAD TIPKALA Buttons.cpp *************************************************************************** ****/ #include "Arduino.h" #include "Buttons.h" void Buttons::setup (Settings *set, Display *dsp) { settings = set; display = dsp; pinmode(configuration::push_button_display_up_pin, INPUT); pinmode(configuration::push_button_display_down_pin, INPUT); pinmode(configuration::push_button_display_set_pin, INPUT); uppushed = false; downpushed = false; setpushed = false; sethold = false; upstate = false; downstate = false; setstate = false; updebouncetime = 0; setdebouncetime = 0; downdebouncetime = 0; void Buttons::loop () { 24

36 unsigned long currenttime = millis(); Util::readInput(currentTime, setstate, Configuration::PUSH_BUTTON_DISPLAY_SET_PIN, setdebouncetime); if (!sethold && setstate) { if (!setpushed) { setpushed = true; setpushedtime = currenttime; else { if ((currenttime - setpushedtime) >= Buttons::HOLD_TIME) { sethold = true; onkeysethold(); else if (!setstate) { if (!sethold && setpushed) { onkeyset(); setpushed = false; sethold = false; Util::readInput(currentTime, upstate, Configuration::PUSH_BUTTON_DISPLAY_UP_PIN, updebouncetime); if (upstate) { if (!uppushed) { uppushed = true; uppushedtime = currenttime; uppushedtotaltime = currenttime; onkeyup(); else { if ((currenttime - uppushedtotaltime) > Buttons::PUSHED_TIME_X_LONG) { if ((currenttime - uppushedtime) >= PUSHED_CYCLE_XX_FAST) { uppushedtime = currenttime; 25

37 onkeyup(); else if ((currenttime - uppushedtotaltime) > Buttons::PUSHED_TIME_LONG) { if ((currenttime - uppushedtime) >= PUSHED_CYCLE_X_FAST) { uppushedtime = currenttime; onkeyup(); else if ((currenttime - uppushedtotaltime) > Buttons::PUSHED_TIME_SHORT) { if ((currenttime - uppushedtime) >= PUSHED_CYCLE_FAST) { uppushedtime = currenttime; onkeyup(); else { if ((currenttime - uppushedtime) >= Buttons::PUSHED_CYCLE_NORMAL) { uppushedtime = currenttime; onkeyup(); else if (!upstate) { uppushed = false; Util::readInput(currentTime, Configuration::PUSH_BUTTON_DISPLAY_DOWN_PIN, downdebouncetime); if (downstate) { if (!downpushed) { downpushed = true; downpushedtime = currenttime; downpushedtotaltime = currenttime; onkeydown(); else { 26 downstate,

38 if ((currenttime - downpushedtotaltime) > Buttons::PUSHED_TIME_X_LONG) { if ((currenttime - downpushedtime) >= PUSHED_CYCLE_XX_FAST) { downpushedtime = currenttime; onkeydown(); else if ((currenttime - downpushedtotaltime) > Buttons::PUSHED_TIME_LONG) { if ((currenttime - downpushedtime) >= PUSHED_CYCLE_X_FAST) { downpushedtime = currenttime; onkeydown(); else if ((currenttime - downpushedtotaltime) > Buttons::PUSHED_TIME_SHORT) { if ((currenttime - downpushedtime) >= PUSHED_CYCLE_FAST) { downpushedtime = currenttime; onkeydown(); else { if ((currenttime - downpushedtime) >= Buttons::PUSHED_CYCLE_NORMAL) { downpushedtime = currenttime; onkeydown(); else if (!downstate) { downpushed = false; void Buttons::testLoop() { while(serial.available() > 0) { char in = Serial.read(); if (in == 'q') { 27

39 onkeyup(); Serial.println("Key UP"); else if (in == 'a') { onkeydown(); Serial.println("Key DOWN"); else if (in == 's') { onkeyset(); Serial.println("Key SET"); else if (in == 'w') { onkeysethold(); Serial.println("Key SET HOLD"); else if (in == 'r') { Serial.println("Key RESET"); Util::softReset(); else if (in == 'c') { Serial.println("Key c"); void Buttons::onKeyUp() { display->onkeyup(); void Buttons::onKeyDown() { display->onkeydown(); void Buttons::onKeySet() { display->onkeyset(); void Buttons::onKeySetHold() { display->onkeysethold(); 28

40 7.5. CONFIGURATION.CPP Zbog sigurnosti radnog prostora, lozinke su izbačene iz programskog koda. Application configuration *************************************************************************** ****/ #include "Configuration.h" /* define floats example: const float Configuration::SCALE_GLUE_LOWER_LIMIT const float Configuration::SCALE_GLUE_UPPER_LIMIT */ = 0.f; = f; /************************************************************************** ***** MYSQL Configuration *************************************************************************** ****/ const char *Configuration::DEVICE_SERIAL_NUMBER = " "; byte Configuration::DEVICE_MAC_ADDRESS[] = { 0x84, 0x27, 0x19, 0x03, 0x00, 0x01 ; const char *Configuration::WIFI_SSID const char *Configuration::WIFI_PASSWORD = "barting_guest"; = "b4rt1ng!"; const char *Configuration::MYSQL_HOSTNAME = "sql.barting.hr"; char Configuration::MYSQL_USER[] = "matija"; char Configuration::MYSQL_PASSWORD[] = " "; IPAddress Configuration::MYSQL_SERVER_IP = IPAddress(216,14,120,37); 29

41 7.6. SLIKE POSTUPKA IZRADE UREĐAJA Slika 18: Kućište s montiranim LCD zaslonom Slika 19: Montaža tipkala za odabir autentifikacije i meni 30

42 Slika 20: Spajanje elemenata Slika 21: Prva proba rada 31

43 8. LITERATURA Internet izvori: elines_en.pdf df

44 Slike: NASC1-V8BU0Iy5yNOxrqO 33

45 34