Say goodbye to remembering long passwords and needing to type them each time for different logins! With this device, you will be able to login to your computer or application through the simple swipe of your finger or a quick capture of your face.
On showcase night, I presented my 2 Factor Authentication Login System to the audience. I was happy to see that my project was fully functional, and that I was able to show the audience how secured this method of login was. As I explained to them, my main challenge was getting the fingerprint scanner setup, as it was my first time using a breadboard. Additionally, I had barely any experience with resistors, so experimenting around and calculating which resistors to place was very challenging. However, through these past 6 weeks I have been able to gain a lot more knowledge on hardware as well as software. I was able to learn parts of C++ and Python without any past experience, and I believe this understanding will help me a lot with my future engineering endeavors. Lastly, I will look into adding modifications to this project, such as a 3D printed case as well as encryption for the passwords, to add another layer of security.
My final milestone for my main project is adding in facial recognition to allow another method to login to an account. The library I used to make this possible was OpenCV. OpenCV consists of many different types of libraries, from facial recognition all the way to traffic analyzers. The main reason I used this compared to other types of libraries is because it supports real time computer vision, which is necessary for the facial recognition to work. Additionally, OpenCV works with Python, so I was able to use that coding language to allow the program to interact with the Arduino Leonardo. The code that is within the create_data.py script file has the computer open a webcam, and take 30 greyscaled photos of what it sees, and if it finds a face, it surrounds it with a box to calculate the height and width of the rectangle that approximately surrounds it. After that, the face_recognize_arduino.py script can be run, where is searches through the faces to see if the same box can fit within that individual. If it recognizes the face, it will display the name of the dataset as well as the confidence level of its approximation(0 to 500). Additionally, it will then send a serial character over to the Arduino, which will then emulate the keyboard and type in the password. If the program cannot recognize the face, it will display “Face not recognized.”
The code for this can be found at my GitHub, under /Code/FacialRecognition: https://github.com/DebarshiB/BioMetricsLogin
The final bill of materials can be found here: https://docs.google.com/spreadsheets/d/1tfSZtAenpiQzwG5r80fMIsx2feBXdHk0K7CRkpm4KNo/edit?usp=sharing
The final schematic can be found at my GitHub, titled BioMetricsLogin.xml: https://github.com/DebarshiB/BioMetricsLogin
My second milestone for my main project is getting the fingerprint scanner to work alongside with the NFC card reader to work as a 2 factor authentication device to login. This means that in order for the Arduino Leonardo to type in the password, both the correct card and fingerprint must be scanned. The fingerprint scanner consists of a 32-bit running processor(works with data that is 32 bits wide) and communicates over TTL serial(transistor-transistor logic), in which one bit is transferred at a certain data rate, within the limits of 0V to 3 or 5V. It connects to the Arduino Leonardo with its 4 wires: power, ground, tx, and rx. The tx and rx ports are used to transmit and receive fingerprint data, while the power and ground are used for the main power itself. Since the NFC card reader was already attached to the Arduino, the wires had to be attached through the pass-through ports of the card, which are right in front of the ports where the headers were soldered for the NFC card reader. Additionally, since the tx and rx wires could only handle 3.3 V while the Arduino had current flowing at 5 V, one 560 Ohms and 1K Ohms resistor had to be placed in the breadboard wire management. Breadboards are used for temporary prototype testing. After putting together the hardware, the firmware had to be coded. Since the fingerprint sensor has its own ROM(read only memory) to store its own database of fingerprints(up to 200), a simple enrolling example given with the sensor library was able to get my index finger enrolled into the system. After that, a verification process needed to be coded to verify whether the finger scanned matched any in the database or not. Along with that, the code was combined with the past NFC code with the addition of a “&&” (logical and) to state that the password can only be typed if the correct card as well as fingerprint is scanned.
The code for this can be found at my GitHub, under /Code/NFC and Fingerprint Scanner: https://github.com/DebarshiB/BioMetricsLogin
This code does not contain the enroll code, as that is able to be done with an example sketch that is included within the GT-511C3 library.
My first milestone for my main project is getting the PN532 NFC card reader to work with the Arduino Leonardo in automatically logging into Windows by typing in a password. The Arduino Leonardo is a device similar to the Arudino UNO, however it does have a few key differences. It contains the ATmega32u4 microprocessor within it, and fewer usable tx/rx ports compared to the UNO. However, the biggest difference for this project is that it has the capability to emulate a keyboard and/or mouse, unlike the Arduino UNO. NFC stands for Near Field Communication, in which 2 devices that are close to each other can communicate with each other without any authentication. On the NFC card reader, the connection between Digital I/O port 2 and the IRQ port had to be cut, as the IRQ port needed to communicate with Digital I/O port 6. The IRQ port is used to stop any other hardware program(if two or programs are running at once) from running, and give direct priority to a certain program, in this case the one for the NFC card reader. A wire had to be soldered, connecting the IRQ and 6 port. This allowed the NFC card reader to communicate with the Leonardo. Finally, using the Arduino IDE, I made a sketch that would read the serial of the NFC card, and if it matched the one entered, then the leonardo would use its keyboard emulator feature to type in the password. A majority of the sketch was sourced from The Electrodog Show’s instructable, found here: http://www.instructables.com/id/NFC-Computer-Unlocker/
The code for this can be found at my GitHub, under /Code/NFC: https://github.com/DebarshiB/BioMetricsLogin
My Starter Project is the Big Time Watch. This device has a main display that shows the time when the button is pressed, to the right of the device. This project mainly taught me the skills of soldering. At first I was not too familiar with the process, but through the numerous amount of times needing to solder, I was finally able to master the process and get the right dome shape of the solder. Additionally, this project allowed me to become accurate in my work, as I had to follow instructions very slowly and carefully. Lastly, I was able to learn about the many components on the circuit board and its different functions. Some of these parts included the resistors, oscillator, as well as the capacitors. Most of these explanations can be found in the video.