loading

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:

PartSupplier (pictures are clickable!)
Fingerprint scanner (and JST connector)SparkfunSparkfun
Serial LCD kit (w/ATmega328)Sparkfun
ATtiny85Sparkfun
NPN transistor SparkfunRadioshack
BuzzerSparkfunRadioshack
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

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.

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

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

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

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.

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.

<p>we have to code approx how much</p>
<p>If you use my code, none =). But it's broken right now for newer versions of the Arduino IDE. If you'd like to help pursue a fix, please read the comments below</p>
<p>Thanks greatly for the write-up! I'm having trouble with the FPS. The FPS blink example works when the serial monitor is not opened. Upon opening the serial monitor, the FPS blinking stops. </p><p>Further, I have been unable to get the sketch that saves a fingerprint to work reliably. Unusually, it randomly did work once. I am using a SainSmart Uno clone, instead of the ATMega 328. Is it perhaps a problem using the SainSmart?</p>
Thanks for reading!! I don't think the SainSmart is the problem. For the serial monitor problem, I know when it's opened up, the program is restarted. Can you try replacing the FPS blink in the code with a simple LED? That way you can test to see if that that actually works. As for the enrolling problems, try powering the dos from the 3.3v line and see if that helps! I've also had some very mysterious problems with this FPS, but only in the development stage&mdash;it's weird.
<p>Hello again! After trying a friend's Arduino, buying another FPS, and running off a few different computers, I am still running into the same problem. The blink example seems to work fine when the serial monitor is not open. Although, as soon as I open the serial monitor, the text below is output, the FPS stops blinking, and nothing more happens. Any ideas?</p><p>FPS - Open</p><p>FPS - SEND: &quot;55 AA 01 00 00 00 00 00 01 00 01 01&quot;</p><p>Also, I could be wrong, but I think the placement of the 560 Ohm resistor in the provided above schematic is incorrect. A different image that you provide shows it in the correct position (series with the 1K Ohm). Is this accurate?</p><p>Thanks!</p>
<p>I am facing exactly same problem. When I upload the blink program to the arduino, it displays Done Uploading; but the blinking doesn't start until I disconnect &amp; reconnect the arduino from usb port. Then, the blink program runs fine until either serial monitor is opened or reset button is pressed.</p><p>Enroll program doesn't run at all. No display on Serial Monitor; no blinking; nothing!</p><p>Sometimes, while blinking, the tx light on the arduino blinks everytime the fps blinks, but sometimes it doesn't happen at all.</p><p>Please help me with this.</p>
<p>Hey sorry <a href="http://www.instructables.com/member/JonathanM231" style="">JonathanM231</a> for the late reply. So I just compiled the sketch with warnings enabled and I got a flood of errors! To see what I mean, go to Preferences-&gt;Compiler Warnings-&gt;More and scroll up in the console on the bottom of the Arduino window after compiling. You'll see a bunch of orange text with warnings and error messages.</p><p>I don't know c++ well enough to update the library, but you guys can definitely nicely ask Joshua Hawley, the creator of the FPS Library, to update his library! His blog can be found at <a href="http://wordpress.hawleyhosting.com/ramblings/?p=375">http://wordpress.hawleyhosting.com/ramblings/?p=375</a>. If he updates the library, please let me know!!</p>
<p>thanks for the great instructables.<br>I have one issue with the sw - I tried to use the gt511 library , and even the simplest blink test program doesn't compile . there's some compatibility issue with softwareserial.h on esp8266 and arduino . do you have an idea on how to deal with this ? I'm just learning arduino esp programming now, but I had a longer history with older controllers. </p>
Hmmm... I would try a different a different implementation of SoftwareSerial like <a href="https://github.com/esp8266/Arduino/issues/143" rel="nofollow">this one</a>. If that doesn't work, you can try sending the fps commands manually. You can check the datasheet for the codes to send the fps. Let me know if you have any more questions!
<p>Hi,</p><p> Great post! Im currently trying this at home, I have all the hardware built, but when I try to compile the blink example, it just says, 'no such file or directory' </p><p> Is there something else I need to do other than just upload the program</p><p>(I'm new to this as you can probably tell!) Many thanks for any advice you can give!</p><p> Thanks, Andy</p>
<p>Double check you've downloaded <a href="https://github.com/sparkfun/Fingerprint_Scanner-TTL/archive/master.zip">the FPS library</a>. To install the library, follow instructions given <a href="https://www.arduino.cc/en/Guide/Libraries#toc5">here</a>. Inside the zip, you should move the file called &quot;FPS_GT511C3&quot; to your arduino libraries folder. Let me know if you have any more questions!</p>
<p>Hi nodcah, thanks for the reply.</p><p> I did do lots of forum searching and eventually moved them here which I thought would solve it, but it didn't.</p><p>I have attached a picture of where I have put the files, I think I have them in the right place..?</p><p> Thanks again :)</p>
Try moving the FPS_GT511C3 directory into the libraries directory. Arduino doesn't like libraries with a &quot;-&quot; in them. Also, you may need to restart the Arduino program for it to work
<p>Hi nodcah,</p><p> I have moved it to the correct location, but still having the same problem! Do you have any other suggestions? Im guessing it must be something simple, but just cant see what. I really appreciate your help on this :)</p>
<p>Do you see the library in examples? Also, would you mind sending me the full error message plaese?</p>
<p>Hi nodcah,</p><p> No the library doesn't seem to be appearing on that list on the arduino example...I guess its a case of just moving it somewhere, I experimented with putting them in a few different places but still doesn't seem to work :( Here is the full error message...Thanks again!</p>
<p>I included a zip file with this comment. First, download the zip file. Go to the menu &quot;Sketch-&gt;Include Library-&gt;Add .ZIP Library...&quot; then select the zip file. Hope this helps!!</p>
<p>Hi nodcah,</p><p>I have moved it now it is definitely in the Arduino libraries folder, but it is still saying the same thing! :( Really struggling now, do you have any thing else I could try?</p><p> Thanks..again! :) :) </p>
On the serial monitor
<p>Thanks for including a picture! The problem you are having probably means there is a communication issue with the fingerprint scanner. Does the blink sketch from step 6 work?</p>
<p>Are the same Arduino library (GT-511C1R) &amp; </p><p>(GT511-C3)???????</p>
<p>Yup!</p>
When I test the program enroll there is nothing
Is it necessary to use the attiny for the project if I ve an arduino ATmega
<p>can you tell me why do you use the attinypin in your program</p>
I'm not sure I understand your question. But the reason there is a pin that connects the ATtiny and the ATmega is so they can communicate to each other. If you follow the schematics and upload the code, I think your problems will be solved. Let me know if you have any more questions! :-)
<p>with the ATmega</p>
<p>HI,<br>I start with the arduino and I would like to use your project but I have a problem to record an ID and I don't arrive to use your program </p>
Can you be more specific please? Are you having trouble uploading code or running the fps enroll program?
<p>Hi nodcah I've a problem with the Gt511-C3 can you give your email adress to ask you one thing?</p>
<p>Please see the <a>product page</a> for more information about the fps. If you are still having trouble, please post a comment publicly so everyone can benefit from your question!</p>
<p>can anyone send me pdf file? i cant see</p>
Which part do you need a odd of? The entire instructable?
<p>*Which part do you need a PDF of?</p>
<p>Hello</p><p>I can not get the FPS is possible to use another sensor? For example https://www.adafruit.com/products/751</p><p>Which library should I use?</p>
<p><a href="https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library">https://github.com/adafruit/Adafruit-Fingerprint-S...</a></p><p>It will require quite a few code changes from the code I wrote in step 8, but it's possible! Please share if you end up getting it working!!! =D</p>
<p>I solder a USB cable at the back of the scanner and when I used the demo software I successfully managed to enrol two prints. However, when I used the FPS_Enrol example file, I am not getting any thing at the serial monitor ? Any feedback will be much appreciated. </p>
<p>Can you send a picture of your setup please? It should be the same as mine in the picture attached, but using an Uno instead of the serial LCD.</p>
<p>Hi Nodcah</p><p>thanks for this instructable. I'm have the same problem, I am not getting anything at the serial monitor. any help please!!</p><p>thank you</p>
<p>If the FPS light doesn't go on, that means the code line <em>fps.open(); </em>didn't run properly. This means there is a bad connection somewhere because the Arduino can't communicate with the fps. </p><p>I can help you find the problem if you send a more zoomed out picture of your wiring (with the arduino and fps in the picture)! </p>
<p>Hi nodcah</p><p>I manage to fix the problem. secondly. i'm trying to use a servo like in step 12. should I still program the ATtiny. any help with how to go about it. </p>
<p>The use of the ATtiny85 is for extra security through a wall. If your implementation allows for just the fingerprint sensor to be showing, then the ATtiny is unnecessary. I don't have code pre-written for the ATtiny in a box, but using a servo library for ATtinys (I don't know one off-hand), you should be able to tweak the code found in step 7. Hope it helped!</p>
<p>Thanks for the quick respond. I really appreciate it.</p><p>These are the zoomed out pictures. I hope they are helpful.</p><p>i.e The last picture is what happens when I upload FPS_blink. LED still ain't on. </p>
<p>Hi nodcah</p><p>I manage to fix the problem. secondly. i'm trying to use a servo like in step 12. should I still program the ATtiny. any help with how to go about it.</p>
<p>And can you please send me the final Code that controls the servo. thanks. bigestbear@hotmail.com</p>
<p>Hi nodcah</p><p>I manage to fix the problem. secondly. i'm trying to use a servo like in step 12. should I still program the ATtiny. any help with how to go about it.</p>
<p>I am working with the same scanner and an arduino uno, however, I am not getting anything at the serial mointor </p>
<p>I am having the Same problem. di you manage solve it?</p>
<p>I love this concept. If the Arduino is optional how do you program the ATtiny85 without it though? Is also possible the concept of having two different outputs. Say opening a door or a garage door? I'm guessing I'll need two ATtiny and some different programming on the ATmega.</p>
Without an official arduino, you would need to use the at mega on the serial lcd kit to program the ATtiny. So follow the same steps for the normal arduino, but with the serial lcd kit. <br>Also, the ATtiny has multiple outputs, so you can definitely hook up another output to it! <br>Thanks for commenting!<br>-Nodcah =D

About This Instructable

341,956views

3,135favorites

License:

Bio: I am a senior in high school and a member of a FIRST robotics team. I love to tinker on my own, which is mostly ... More »
More by nodcah:Turn Your Entire Phone into a Touchscreen DIY Glowing Bracelet Fix Any Video Game Controller 
Add instructable to: