loading
Picture of DIY Fingerprint Scanning Garage Door Opener
gluedCase.JPG

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 awesome fingerprint 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

Picture of Materials
53a2e8f2ec8d83ae9d000051.jpg

Electronics:

Part Supplier (pictures are clickable!)
Fingerprint scanner (and JST connector) Sparkfun Sparkfun
Serial LCD kit (w/ATmega328)Sparkfun
ATtiny85Sparkfun
NPN transistor Sparkfun Radioshack
BuzzerSparkfun Radioshack
Speaker wireRadioshack
3D printed caseSee step 9 for files
Copper tapeSparkfunAmazon
5V voltage regulatorSparkfunRadioshack
9V batterySparkfunRadioshack
9V battery connector SparkfunRadioshack
SPDT limit switch
SparkfunRadioshack

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 (Sparkfun)
  • 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

Picture of The Circuit
FPS garage door opener - New Page (1).png
breadboardedCircuit.JPG
mainCircuit.JPG
ATtinyCircuit.JPG
schem.jpg

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 2 (through voltage divider)
D11 FPS pin 1 (black wire)
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

Step 3: Assemble the Serial LCD Kit

Picture of 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

Picture of Assembling the Circuit Boards
hotGluedBack.JPG
539a1a622f7cc6f5c9000087.jpg
ATtinyCircuit.JPG

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

Picture of 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.

Code:

LCD Test:

//LCDTestExample by Nodcah 
//A simple sketch to make sure your Serial LCD Kit from Sparkfun
//is working

#include "LiquidCrystal.h"

LiquidCrystal lcd(2,3,4,5,6,7,8);

void setup() {
  pinMode(9, OUTPUT); //the backlight
  pinMode(13, OUTPUT); //the buzzer
  
  lcd.begin(16, 2); //16 chars wide, 2 tall
  
  digitalWrite(9, HIGH); //set the backlight to HIGH
  
  lcd.print("  Hello world!  "); //use spaces to center the text
  delay(2000);
}

void loop() { 
  //buzzer turns on and off and its status is displayed on the LCD
  lcd.clear();
  lcd.print("  Buzzer is on  ");
  tone(13, 262, 1000);
  delay(1000);
  lcd.clear();
  lcd.print(" Buzzer is off  ");
  delay(1000);
  }

Step 6: Setting Up the Fingerprint Scanner

Picture of 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.

Code:

Blink Example:

/* 
 Library example for controlling the GT-511C3 Finger Print Scanner (FPS)
 Created by Josh Hawley, July 23rd 2013
 Licensed for non-commercial use, must include this license message
 basically, Feel free to hack away at it, but just give me credit for my work =)
 TLDR; Wil Wheaton's Law
 
 This simple sketch turns the LED on and off similar to the Arduino blink sketch.
 It is used to show that communications are working.
 */

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

//Hardware setup - FPS connected to:
//digital pin 10(arduino rx, fps tx)
//digital pin 11(arduino tx - 560ohm resistor fps tx - 1000ohm resistor - ground)
//this brings the 5v tx line down to about 3.2v so we dont fry our fps

FPS_GT511C3 fps(10, 11);

void setup(){
  Serial.begin(9600);
  fps.UseSerialDebug = true; // so you can see the messages in the serial debug screen
  fps.Open();
}

void loop(){
  // FPS Blink LED Test
  fps.SetLED(true); // turn on the LED inside the fps
  delay(1000);
  fps.SetLED(false);// turn off the LED inside the fps
  delay(1000);
}

Enroll Example:

/* 
 FPS_Enroll.ino - Library example for controlling the GT-511C3 Finger Print Scanner (FPS)
 Created by Josh Hawley, July 23rd 2013
 Licensed for non-commercial use, must include this license message
 basically, Feel free to hack away at it, but just give me credit for my work =)
 TLDR; Wil Wheaton's Law
 */

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

//Hardware setup - FPS connected to:
//digital pin 10(arduino rx, fps tx)
//digital pin 11(arduino tx - 560ohm resistor fps tx - 1000ohm resistor - ground)
//this brings the 5v tx line down to about 3.2v so we dont fry our fps

FPS_GT511C3 fps(10, 11);

void setup(){
  Serial.begin(9600);
  delay(100);
  fps.Open();
  fps.SetLED(true);
  Enroll();
}

void Enroll(){
  // Enroll test
  // find open enroll id
  int enrollid = 0;
  fps.EnrollStart(enrollid);

  // enroll
  Serial.print("Press finger to Enroll #");
  Serial.println(enrollid);
  while(fps.IsPressFinger() == false) delay(100);
  bool bret = fps.CaptureFinger(true);
  int iret = 0;
  if (bret != false)
  {
    Serial.println("Remove finger");
    fps.Enroll1(); 
    while(fps.IsPressFinger() == true) delay(100);
    Serial.println("Press same finger again");
    while(fps.IsPressFinger() == false) delay(100);
    bret = fps.CaptureFinger(true);
    if (bret != false)
    {
      Serial.println("Remove finger");
      fps.Enroll2();
      while(fps.IsPressFinger() == true) delay(100);
      Serial.println("Press same finger yet again");
      while(fps.IsPressFinger() == false) delay(100);
      bret = fps.CaptureFinger(true);
      if (bret != false)
      {
        Serial.println("Remove finger");
        iret = fps.Enroll3();
        if (iret == 0)
        {
          Serial.println("Enrolling Successfull");
        }
        else
        {
          Serial.print("Enrolling Failed with error code:");
          Serial.println(iret);
        }
      }
      else Serial.println("Failed to capture third finger");
    }
    else Serial.println("Failed to capture second finger");
  }
  else Serial.println("Failed to capture first finger");
}

void loop(){
  delay(100000);
}

Step 7: Programing the ATtiny85

Picture of Programing the ATtiny85
programmingAttiny85.png

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.

Code:

Final Code:

//fpsAttiny by Nodcah
//Recieves a brief signal from the main module to close a relay

void setup(){
  pinMode(2,OUTPUT); //indicator led through 10K resistor
  pinMode(4,OUTPUT); //trasistor pin that opens the garage
  pinMode(0,INPUT); //input 
  delay(500); //give things time to start up
  digitalWrite(2, HIGH); //indicator LED
}

void loop(){

  if(digitalRead(0)){ //simple pattern to trigger the transistor 
    delay(125);
    if(digitalRead(0)==false){ 
      delay(55); //the timings are off because the ATtiny's timer isn't perfect
      if(digitalRead(0)){
        delay(55);
        if(digitalRead(0)==false){ 
          delay(55);
          if(digitalRead(0)){
            delay(55);
            if(digitalRead(0)==false){
              digitalWrite(4, HIGH); //transistor "presses" the button
              delay(1000);
              digitalWrite(4,LOW);
              digitalWrite(2,LOW);
              delay(1000);
              digitalWrite(2, HIGH);
            }
          }
        }
      } 
    }
  }
}

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!

Code:

Code for ATmega238:

/**
 *FPSGarageDoorOpenner by Nodcah
 
 *Opens a garage door if the scanned fingerprint is in
 *the FPS' database of prints. 
 *
 *FPS_GT511C3 library created by Josh Hawley, July 23rd 2013
 *Licensed for non-commercial use, must include this license message
 *basically, Feel free to hack away at it, but just give me credit for my work =)
 *TLDR; Wil Wheaton's Law
 *
 * Version 1.00: Initial release
 * Version 1.01: Fixed bug with openning the garage door on boot and Attiny timing
 * Version 1.02: 
 + Made transmission between ATtiny and ATmega timing more reliable (line 115)
 + Names are now associated with an ID
 */

#include "LiquidCrystal.h" //for the screen
#include "FPS_GT511C3.h" //the fps (fingerprint scanner) library
#include "SoftwareSerial.h" //used by fps library

//Setting up the pins for the LCD and the fps
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8); //pinouts for LCD
FPS_GT511C3 fps(10, 11); //RX, TX

boolean isFinger = false; //true if the fps detects a finger on the scanner

//output pins
const int buzzerPin = 13;
const int backlightPin = 9;
const int attinyPin = 12;
const String idNames[] = 
{
  "self","Bro", "Ryan", "Mom", "Dad", "Auntie", "Grandma", "Zeide", "Person", "person", "Thumb"};

void setup(){
  //set outputs
  pinMode(buzzerPin, OUTPUT);
  pinMode(backlightPin, OUTPUT);
  pinMode(attinyPin, OUTPUT);

  //for debugging
  //Serial.begin(9600);
  fps.UseSerialDebug = false; //set to true for fps debugging through serial

  //initializing the libraries
  lcd.begin(16,2);
  digitalWrite(backlightPin, HIGH); //the LCD backlight
  fps.Open();
  fps.SetLED(true); //the fps LED
  //boot up sound
  for(int i=0; i<30; i++){
    tone(buzzerPin, 50+10*i, 30);
    delay(30);
  }
  tone(buzzerPin, 350);

  //print starting message
  lcd.print("Put your finger "); //the command to print to the LCD
  lcd.setCursor(0, 1); //sets the cursor to the 0th column in the 1st row
  lcd.print(" on the scanner ");
  delay(150);
  noTone(buzzerPin); //stops the startup sound

}
void loop(){
  //scan and identify the finger when one is put on it
  waitForFinger();

  lcd.clear(); //clears the screen and sets the cursor to 0,0
  fps.CaptureFinger(false); //captures the finger for identification
  int id = fps.Identify1_N(); //identifies print and stores the id

  if(id <= 10){
    lcd.print(" Access granted "); //success message
    lcd.setCursor(0,1);

    //prints name when the garage is opening 
    String message = "  Hey " + idNames[id] + "!";
    lcd.print(message);

    tone(buzzerPin, 262, 1000);
    delay(1500);

    //sends a signal to open the garage door
    digitalWrite(attinyPin, HIGH); //first pulse syncs the delays (10ms)
    delay(5);
    digitalWrite(attinyPin, LOW);
    delay(3);
    digitalWrite(attinyPin, HIGH); //next two open the garage
    delay(15);
    digitalWrite(attinyPin, LOW);
    delay(5);
    digitalWrite(attinyPin, HIGH);
    delay(10);
    digitalWrite(attinyPin, LOW);
    delay(1000);

    lcd.clear();
    lcd.print("Don't forget to ");
    lcd.setCursor(0,1);
    lcd.print("  shut me off!  ");
    delay(2000);

    waitForFinger(); //tap to continue to enroll

    while(true){ //save a new fingerprint
      //prints message to lcd
      lcd.clear();
      lcd.print(centerText("So you want to"));
      lcd.setCursor(0,1);
      lcd.print(centerText("scan a new one?"));
      delay(2000);

      //Copied and slightly modified from the enroll example:
      int enrollid = 11;

      //choosing which id to overwrite/create
      //release your finger when you want to write to the id/name printed on the screen

      waitForFinger(); //waits for the fps to be pressed

      while(enrollid==11){
        for (int i = 1; i<=10; i++){
          if((fps.IsPressFinger() == true)){
            lcd.clear();
            String str = "ID " + String(i) + ": " + idNames[i]; //concats a string w/the id
            lcd.print(centerText(str));
            delay(1000);
          }
          else if(i>1){
            lcd.print(i);
            enrollid = i-1;
            break;
          }
        }
      }

      //warning if there is already data in this id slot
      if(fps.CheckEnrolled(enrollid)){ 
        lcd.clear();
        lcd.print(" Warning! ID #");
        lcd.print(enrollid);
        lcd.setCursor(0,1);
        lcd.print(" has data. OK?  ");
        delay(2500);

        waitForFinger(); //waits for the fps to be pressed

        fps.DeleteID(enrollid); //delete data
        delay(100);
      }

      //Enroll
      fps.EnrollStart(enrollid);
      lcd.clear(); 
      lcd.print("Place finger to ");
      lcd.setCursor(0,1);
      lcd.print("enroll #");
      lcd.print(enrollid); //prints id that is being enrolled
      waitForFinger(); //waits for the fps to be pressed

      //captures the finger and saves to memory three times for accurate data
      bool bret = fps.CaptureFinger(true); //high quality pic for enrollment
      int iret = 0; //error stuff

      if (bret != false){ //first enroll
        lcd.clear();
        lcd.print(" Remove finger  ");
        fps.Enroll1();
        while(fps.IsPressFinger() == true) delay(100); //waits until no finger
        lcd.clear();
        lcd.print("  Press again   ");
        waitForFinger(); //waits for the fps to be pressed
        bret = fps.CaptureFinger(true);

        if (bret != false){ //second enroll
          lcd.clear();
          lcd.print(" Remove finger  ");
          fps.Enroll2();
          while(fps.IsPressFinger() == true) delay(100);
          lcd.clear();
          lcd.print("Press yet again ");
          waitForFinger(); 
          bret = fps.CaptureFinger(true);

          if (bret != false){ //third enroll
            iret = fps.Enroll3();
            if (iret == 0){ //checks to see if there are any errors
              lcd.clear();
              lcd.print("    Success!    ");
              delay(2000);
              beep(); //shuts arduino off
            }
            else{ //if the enrollment fails in any way
              lcd.clear();
              lcd.print("Fail. Try again ");
              delay(1000);
            }
          }
          lcd.clear();
          lcd.print("   Failed 3rd   "); //error on 3rd
          delay(1000);
        }
        lcd.clear();
        lcd.print("   Failed 2nd   "); //error on 2nd
        delay(1000);
      }
      lcd.clear();
      lcd.print("   Failed 1st   "); //error on 1st
      delay(1000);
    }
  }

  else{
    lcd.print("Fingerprint is"); //if print isn't recognized
    lcd.setCursor(0,1);
    lcd.print("   unverified   ");
    delay(2000);
    lcd.clear();
    lcd.print("Please try again");
    lcd.setCursor(0,1);
    lcd.print("Use your pointer"); //I scanned everyone's pointer finger
    delay(500);
  }
  delay(250);
}


void beep(){ 
  //beeps in hopes of someone closing the case
  lcd.clear();
  lcd.print("Please close the");
  lcd.setCursor(0,1);
  lcd.print("     case!      ");
  for(int i=0;i<8;i++){
    tone(buzzerPin, 262, 500);
    delay(1000);
  }
  delay(5000); //wait for someone to close the case

  //if no one does, shut everything off
  lcd.clear();
  digitalWrite(backlightPin, LOW);
  fps.SetLED(LOW);
  while(true) delay(10000);
}

void waitForFinger(){
  static int timer; //contains timeout counter
  timer = 0; //resets the timer everytime this function starts
  while(!fps.IsPressFinger()){ //timeout of eight seconds
    timer++;
    delay(100); 
    if (timer>=80 && !fps.IsPressFinger()){
      beep();
    }
  } 
  timer = 0; //resets the timer everytime this function ends
}

String centerText(String s) { //centers text on the LCD to look better
  while(16-s.length()>1){ //if the text needs to be centered
    s = " " + s + " "; //creates space on both sides evenly
  }
  return s;
}

Step 9: The 3D Printed Case

Picture of The 3D Printed Case
gluedCase.JPG
limitSwitch.JPG
mainSlider.JPG
mainCase.JPG

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.

FPSMainCase.STL

FPSCover.STL

Step 10: Prepare the Garage

Picture of Prepare the Garage
garageWiring.JPG
meSoldering.JPG
drilling.JPG
feedingWiresThrough.JPG
overview.JPG

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!

Picture of Testing!
insideGarage.JPG

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

Picture of Making it Portable
chestInside.JPG
53b818f7d535cfacb2000005.jpg

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.

 

 

 
1-40 of 221Next »
owatson2 months ago

you could maybe use a relay instead of a transistor

The thing is, a relay needs a transistor and a diode. The whole setup is bigger and bulkier than just using a transistor. A transistor can be controlled directly from a microcontroller (with a resistor), but a relay cannot.

Why would a relay need a transistor and a diode?

Might be, but I´m not that into Arduino projects, just up to clarification ;)

nodcah (author)  owatson1 month ago

A relay would work fine! And you would only need a resistor (diode and transistor are extraneous in this setup)

Truthis12 months ago

WOW, as a newbie this is a bit beyond me for the moment but I'm learning so forgive me if these questions are "dumb."

I don't have a garage, but love the chest idea to practice, but ultimately want to put it on an armoire door, which I use as a home office.

1. I don't understand about the part about the sero needing more power since the trunk is a movable item. Is that because its not hardwired into the garage's electrical system?

2. What happens when the battery dies? Are you locked out? How many opens/closes do you think you will get on 6AA bateries? Since, there's no way of telling when the battery is low, or is there?

3. Is a fingerprint scanner as easy to break into with just a clear transparency sheet like in the movies? Is it more or less secure than a digital pin lock?(I don't need bank level security, but I plan on moving the hinges to the inside of my armoire to eliminate any super easy break ins.)

4.How (besides not having any wires exposed and drilling the plastic case to the armoire) would you suggest to make it more secure? I'm thinking of a wooden case for the outside, which would also be less noticeable therefore less appealing to thieves if attached to the door with metal clamps and screws.

Thanks so much if anyone replies to these pain in the neck questions on a post that's a year old!!

NickA6 Truthis129 days ago

If you're worried about security and getting locked out, maybe you could design yours so that it operates a pre-existing lock. If you put a lock that can be turned on the inside with your fingers and with a key on the outside, you could then rig a servo to turn the inside portion of the lock. This way, the lock is more secure and if the batteries die, you can just use your key.

nodcah (author)  Truthis11 month ago

1.) The setup will need more power for a longer life

2.) Yes, you are locked out, but a built in battery detector shouldn't be too hard to code.

3.) I'm not quite sure. If you wipe the sensor off after use, then you're guaranteed much better security. It sounds like you need something with a bit more rigidity than I can offer, so I'd recommend maybe buying a commercial lock than hacking it.

4.) For the best security, everything besides the edge of the fingerprint scanner and the screen should be in the case. This would require a modified case.

Thanks for commenting! :-D

lights01232 months ago

Wow. I found this instructable 7 months ago. I was using a Yun, which does not support SoftwareSerial, only AltSoftSerial. So, I reversed the connections and pumped 5V into a 3V3 pin... Now, 7 months later, I found out that it worked! I'm probably going to modify it so that it works on a Yun (datalogging? or integrate with our home automation system?).

nodcah (author)  lights01232 months ago

Cool idea! Let me know how that turns out! I haven't used the the yun before, but it looks pretty cool!

lights0123 nodcah2 months ago

Wow. I said "I was using a Yun, which does not support SoftwareSerial, only AltSoftSerial." I was doing something wrong. It does actually work with no changes...

nodcah (author)  lights01231 month ago

Well I was saying let me know how it turns out if you decide to expand on the project and add data logging or integrate it with a home automation system.

mikefromspace2 months ago

wow...thank you... I'm putting this on my truck.

nodcah (author)  mikefromspace2 months ago

Ohh that's awesome!

JayRed2 months ago

Wow...thats exactly what I am looking for! How many different fingerprints you think are possible to store?

nodcah (author)  JayRed2 months ago

20 for the low cost module and 200 for the expensive one (both are offered from sparkfun.com).

rab427012 months ago

Hey, I'm also from a FIRST team, I was wondering whether you were in FRC or FTC, and what is your team number?

nodcah (author)  rab427012 months ago

FRC team 3182 (Athena's Warriors). Don't expect to see me at worlds or anything, but I love the experience!

Mjtrinihobby2 months ago

beyond impressive. Also beyond my capabilities!

aiden22 months ago

cool

CianR3 months ago

my fps seems to give up after about 1min of being on. i turned on the serial debugging and just before it stops working it spits out:

loopingFPS - IsPressFinger

FPS - SEND: "55 AA 01 00 6C 63 6F 6D 26 00 D1 02"

please help

nodcah (author)  CianR3 months ago

I see a few possibilities here:

1.) The FPS is overheating because it's running off of 5V (it has been a problem for some others, not me though).
2.) The capacitive touch pad is defective
3.) The code is constantly checking for a finger somewhere, then not doing anything else

I don't know how helpful that is, but if you give me a little more information, I can help you out a little more.

CianR nodcah3 months ago
Thank you very much for your speedy response. I realised that the fps had stability issues when I powered the Arduino via a wall wart but not when connected to the usb port. I realised this could have been because of the voltage provided by the wall wart allowed the Arduino to output it's full 5v. So I just put a 1N4001 rectifier diode on the power line to the fps which knocked a volt or two off the supply and also added some 7805 voltage regulators with 4700uf capacitors to the power supply and this fixed the stability issues.
nodcah (author)  CianR3 months ago
Thanks for posting your solution! :-D
JeromeA23 months ago
Hi nodcah. Thanks for this great guide. There's just one question though, is there a way to make this accept just any fingerprint and not the ones which have been stored.
nodcah (author)  JeromeA23 months ago
Well you could call the enroll function and see if it returns an error (not recognized as a fingerprint). If fps.CaptureFinger(true) returns true, then a fingerprint is recognized by the system.
Or you could use fps.IsPressFinger(), which just detects if the capacitive touch is triggered.
-Nodcah:-D
JeromeA2 nodcah3 months ago
Thanks a bunch sir. Just what I needed.
ihsan.kirkali4 months ago

Nodcah,

How can I reset fingerprint scanner? I had to unplug usb cable of arduino after each uploading.

nodcah (author)  ihsan.kirkali4 months ago
I had a limit switch to turn off the module that cuts the power. You can also make a switch that triggers a reset in the code using a watchdog timer.
-Nodcah:-D

so usar o PIC com esse módulo?


nodcah (author)  carlos.junior.7144 months ago

This project is actually made with the Arduino platform, not PIC. If you could find out how to do it with PIC, post your results here and I'll be sure to link it in my Instructable! =)

Ok... Farei e enviarei para a sua avaliação. Vamos ir trocando ideia, meu endereço de e-mail é: carlos.rufinoj@gmail.com

RizalR5 months ago

hi thank you very much for writing this article, it really cools!

but how do i get the Unique ID of each fingerprint? because i don't want to store the fingerprint id to arduino database. I'm planning to combine fingerprint scanner with php mysql database through the Internet. So, my idea is to read the unique ID of each fingerprint, than send that ID to my php script.

Maybe the concept is like RFID. As you know every RFID card has its own unique ID.

nodcah (author)  RizalR4 months ago

The only way to do that would be to first share the fingerprint that is associated with that ID (if it's only one scanner, that's not a problem). Then, you should be able to link each ID recieved when you use fps.Identify1_N() to a person, this should achieve what you want. (I changed the code above to do just that actually) :-D

AjinkyaJ16 months ago

Hey nodcah!

I would like to know if there is anyway i could delete and replace the fingerprint scans on the gt 511 module. Does the library provide us with that functionality?

Thanks so much!

nodcah (author)  AjinkyaJ14 months ago

Sorry for the late reply. To delete a scan, use fps.DeleteID(IDNumber). IDNumber being the numeric ID of the fingerprint.

Nodcah,

Bought the FPS GT-511C1R and would like to do some tests.

What I need is simple, but do not know how to do. I need to save the digital in a variable to send over the network. It would be possible to help me with the commands "GetTemplate / settemplate"?

IMG_20150211_123400320.jpg
nodcah (author)  vinicius_borges4 months ago

Sorry, but to my knowledge, you can only do this with the computer program, not the arduino.

aizirt7 months ago

hi, I have tried the codes but it keeps on giving me this errors:

FPS_GT511C3\FPS_GT511C3.cpp.o: In function Command_Packet::GetPacketBytes()': C:\Users\Documents\New folder\arduino-1.0.6\libraries\FPS_GT511C3/FPS_GT511C3.cpp:17: undefined reference tooperator new'
FPS_GT511C3\FPS_GT511C3.cpp.o: In function FPS_GT511C3::GetResponse()': C:\Users\Documents\New folder\arduino-1.0.6\libraries\FPS_GT511C3/FPS_GT511C3.cpp:735: undefined reference tooperator new'

louisheng.047 months ago

hi
i would like to ask is it okie for me not to put that board ?i circle in pic.

F5C6DXGHWJJZ3DA.LARGE.jpg
nodcah (author)  louisheng.047 months ago

Yes, but It will need to be replaced by an Arduino or similar. If you're looking to keep the small form factor, you can try this.

1-40 of 221Next »