Introduction: DIY Fingerprint Scanning Garage Door Opener
As a person without a car, I don't need to carry keys around everywhere I go. Because of this, I've been locked out of my own house several times. It's a pain to wait for someone with a key, so I thought I would do something about it.
This project is my way of solving this problem, while getting the chance to interface with an awesomefingerprint scanner (aka: FPS).
Also, this module isn't restricted to just garage doors, for you can create different kinds of simple motorized locks to suit your needs.
Step 1: Materials
Electronics:
Here is a list of almost all of the parts (It's a Sparkfun wishlist).
Tools:
- Soldering iron/solder
- Electrical tape
- Hook up wire/ jumpers
- Wire cutter/stripper
- Perfboard
- Assorted resistors
- Screws
- Drill
- A few LEDs for testing
- 5V FTDI board (
)
- Hot glue gun
- Access to a 3D printer
- Optional: IC holder (8 pin for ATtiny and 28 pin for ATmega)
- Optional: Another Arduino board/10uF capacitor (see step 5 for details)
Step 2: The Circuit
The serial LCD kit sold by Sparkfun comes with an ATmega328 to control the LCD. The ATmega has extra processing power to be used for other tasks besides controlling the LCD. Because of this, we can use it as an Arduino to communicate with the fingerprint scanner, send an ATtiny85 commands, control the LCD, and use a buzzer to play tones.
To prevent the module from running continuously, I've added a limit switch to detect when the case is closed. If it's closed, power will not be supplied to it (saves battery power).
Important note:The fingerprint scanner communicates at a 3.3V level, so it is recommended to use a voltage divider to bring the signal from the ATmega to 3.2V. The voltage divider consists of a 560Ω resistor between D10/FPS pin 2 and a 1KΩ resistor between GND/FPS pin 2.
Serial LCD Pinout:
D10 | FPS pin 1 (black wire) |
D11 | FPS pin 2 (through voltage divider) |
D12 | ATtiny85 |
D13 | Buzzer |
ATtiny85 Pinout:
Pin 5 (0 in code) | Input from ATmega |
Pin 3 (4 in code) | Transistor/yellow LED |
Pin 7 (2 in code) | Indicator LED |
NOTE:A pull-down resistor is recommended on Pin 5 on the ATtiny for reliability (thanks to max921pointing it out)
Step 3: Assemble the Serial LCD Kit
Title says it all... This is a nice little kit to solder (I, personally, love to solder).
Sparkfun has a handy-dandy quick start/assembly guide if you would like.
You can optionally solder a 28 pin IC holder to the board, which will allow you to take the ATmega out and use it again in another non-LCD project.
Step 4: Assembling the Circuit Boards
The arrangement of the board is up to you, but remember to try to keep the FPS' wires facing the same direction so they don't break (they are really thin).
Next, I covered the the top and bottom with hot glue for both support and insulation. Using a high temperature hot glue is fine (nothing was burned/melted/ruined for me).
As with the main board, solder everything on the ATtiny's board together and optionally insulate/support it with hot glue. The voltage regulator might get a bit hot, so it would probably be a good idea not to let any hot glue get near it. You also might want to avoid covering the ATtiny in case you decide to take it out or reprogram it.
Step 5: Programing the ATmega328
As mentioned in step 2, the ATmega328 has enough processing power and pins to drive the LCD while driving other things. To take advantage of this, you will need to have some way to program the chip.
If you own an Arduino Uno or Duemilanove, you can simply take off the chip already on the board and replace it with the one provided in the kit. Alternatively, you can use Sparkfun's FTDI Basic Breakout (5V) and solder headers to the side (see the pictures of step 3 for details).
Also, you need to upload the code as a "Duemilanove w/ ATmega328."
See below for an example sketch to make sure it is working.
Attachments
Step 6: Setting Up the Fingerprint Scanner
For communicating with the FPS, I will use this Arduino library by Josh Hawley (direct download for the library here).
To make sure communication with your fingerprint scanner is working, I would upload this blink example.
The fingerprint scanner has its own memory to store the fingerprint data. So, after you have verified the fps is working, upload this example sketch to add your fingerprint to the database under id #0. Open the serial console and simply follow the instructions.
Step 7: Programing the ATtiny85
The ATtiny85 is basically a cheap and small Arduino condensed onto one chip (aka: one of the best things ever)! It can be programmed with another Arduino, including the ATmega328 in the serial LCD kit.
In this project, it will be used to execute very simple commands: check for a signal from the ATmega and open the garage door if the signal is legitimate.
To program it, connect it as seen in the picture above. Then, download all of the required files and follow the instructions by High-Low Tech.
After uploading this code, pin 13 on the Arduino (build-in LED) should be set to HIGH to signify that the code is working.
Attachments
Step 8: The Final Code
Below is an Arduino program I have written for this project using the FPS and LCD libraries. I've done my best to write comments in code to describe what each part does, but if you have any questions, feel free to ask me!
After this code is uploaded, everything should be working. Now all that needs to be done it to integrate it!
WARNING: Some people weren't able to get the FPS library to work. If this is the case, you can try downloading an older version of the Arduino IDE here.
Attachments
Step 9: The 3D Printed Case
To turn on the module, the case will need to be slid up, triggering the limit switch. As shown by the pictures, the limit switch needs to be wired to the common terminal (C), and the normally closed (NC) terminal.
Then, everything is glued to the case with hot glue. The limit switch is positioned with a slight tilt to make it easier to press.
Update (2/2/19): Thanks to JustinO60, there is a design outfitted for the new FPS that can be downloaded here (Main, Cover)
Step 10: Prepare the Garage
To open the garage door I wired the ATtiny85 to the button that normally opens the garage. Instead of a physical connection being made, the ATtiny uses a NPN transistor to "press" the button.
The wires should first be measured and cut to size, leaving a little extra wire just to be safe. Then, the hard part: soldering the wires from the button to the FPS module (shown in the pictures as an animated GIF). The wires should next be wrapped with a generous amount of tape.
To get the signal from the ATmega outside of the garage to the ATtiny inside the garage, three wires (power, ground and signal) will need to be fed through the wall. On my garage, there was a piece of wood that I just drilled right through (see the pictures).
Finally, screw on the case and boot it up!
Step 11: Testing!
Now is the fun part! Use the module's built-in enroll feature so family/friends can open the garage. Then, create personalized messages for each one! Watch the video for a visual explanation of functionality.
Step 12: Making It Portable
The fingerprint scanner and LCD can be integrated into something like a chest, because it runs on batteries! I took the module off the garage door (temporarily), and combined with a servo to lock this chest with the power of my finger!
Note: I found the 9V battery above doesn't supply enough current to power the module and the servo, so I used 6 AA batteries instead. Also, my lock design is for display purposes only. To make this more secure, I would recommend using a more rigid design.

Grand Prize in the
Sensors Contest

Grand Prize in the
Epilog Challenge VI

Participated in the
Battery Powered Contest
359 Comments
5 months ago
Great job on the DIY Fingerprint Scanning Garage Door Opener Instructable! The instructions are clear, concise, and easy to follow. Your use of affordable and readily available components makes this project accessible. Overall, it's an very cool project! Well done!
Question 3 years ago
Hello there , Plz answer .. iam very close to complete my project.
1: when i compile ur code there is no error , but when i add Waitforfinger() in my Code there is an error : " 'waitForFinger' was not declared in this scope"
My proj description(added img) :
using ultrasonic distance sensor if anyone arrives distance<10cm , u have to put ur finger on it to verify .it says access granted! if id is verified just that.... will add further variation in code with enrolling process just like u did .
Can u help me out with this problem!
3 years ago on Step 12
Hello, I hope you still are around to answer me :)
Very basic question: if I am interrupting the cable running from the the button to the garage with a transistor, will the button still be operational? I still want to be able to operate the garage with the button itself. Thanks!
Best Answer 3 years ago
Hi acautchy!
The instructions above actually allows for both the button and FPS to work! You just need to hook the button up in parallel (Step 10 is where I actually show this parallel connection).
Hope that helps!
4 years ago
How do I integrate it with my fridge door..and please the video on how you did it thank you
4 years ago
Hi, excellent your explain and project.
I need to make a project and i would like you a question.
It posible to have differents output for each fingerprint code?
for example
For finger 1(Person Walter) (code 25) output => drive a motor for 10 seconds and stop
For finger 9 (Person Smith) (code 55) output => drive a motor for 5 seconds and stop
For....
10, 12, 14 loops.
What would yhe right the right path for resolve this situation?
Thanks
Best Answer 4 years ago
Hey Daidesigns,
That’d be easily possible by adding more code after the line that says “access granted”, then use the id variable. Hope this helped!
4 years ago
100$ says you can't make it for ATmega32 and post full source code for me to copy.
Tip 4 years ago
I created CAD files for the new FPS's from Sparkfun while attempting to pursue this project.
Attached Below
Reply 4 years ago
Thanks for the great addition! I'll mention your comment in the Instrucbtable!
Question 5 years ago on Step 6
The Blink example and the Enroll example will not verify on my IDE.
Answer 5 years ago
I believe you need to upload it as an Arduino Uno. Also, have you properly installed the library? Google searching how to install an Arduino or see the README of the FPS library page
Answer 5 years ago
So I have already successfully loaded the main programs on the LCD and the ATtiny85. I guess that means I don't really need to mess with the others.
Answer 5 years ago
the error message I am getting for the enroll example is:
Error compiling for board Duemilanove or Diecimila
Arduino: 1.8.5 (Windows 7), Board: "Arduino Duemilanove or Diecimila, ATmega328P"
C:\Users\user11\Downloads\F24WRJCHW0FUO3Z\F24WRJCHW0FUO3Z.ino:10:25: fatal error: FPS_GT511C3.h: No such file or directory
#include "FPS_GT511C3.h"
^
compilation terminated.
exit status 1
Error compiling for board Arduino Duemilanove or Diecimila.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Answer 5 years ago
The FPS library I used is sadly not updated, so you may have to downgrade your IDE. What is the error you're getting?
Question 5 years ago
So I have already successfully loaded the main programs on the LCD and the ATtiny85. I guess that means I don't really need to mess with the others.
Question 5 years ago on Step 7
I have tested the LCD with my Arduino Uno board and it works nicely. I have downloaded the files for the AT Tiny85 but can not load them onto the chip. I keep getting this error message from IDE: Invalid library found in C:\Users\user11\Documents\Arduino\libraries\ArduinoProjectHandbook_CodeandLibraries:
Answer 5 years ago
I just tried this on my Arduino 1.6.12 IDE and it verified. Make sure you go to Tools>Board>ATtiny then Tools>Processor>ATtiny85. Let me know if you're still having trouble!
Question 5 years ago
RE: my question on step 7 from 4 weeks ago - I am now able to, and have loaded the ATtiny85, and have loaded the Final Code for the LCD unit. So its not a hardware problem on my end - I suspect a software/sketch problem??
Question 5 years ago on Step 12
the important note in step 1 says to add a voltage divider. Is there a schematic that shows this? in the schematic, D 10 on the LCD is connected to pin 1 on the FPS. the important note says to connect D 10 to pin 2 on the FPS. I understand the words of the note, but if I could see the connection lines of a schematic I would understand the connections better.