Instructables

DIY Fingerprint Scanning Garage Door Opener

FeaturedContest Winner

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.

 
Remove these adsRemove these ads by Signing Up

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

FPS garage door opener - New Page (1).png
breadboardedCircuit.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

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
 *
 *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
 *
 *Opens a garage door if the scanned fingerprint is in
 *the FPS' database of prints.  
 */
#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
int timer = 0; //this is for when there is too long of a delay, it turns off

//output pins
const int buzzerPin = 13;
const int backlightPin = 9;
const int attinyPin = 12;

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();
  timer = 0; //resets timer for timeout
  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 < 20){
    lcd.print(" Access granted "); //success message
    lcd.setCursor(0,1);

    //one line personalized messages
    //messages can't be more than 16 chars!!!
    switch(id){
    case 0:
      lcd.print("    Hi self!    ");
      break;
    case 1:
      lcd.print("    Hey Bro!    ");
      break;
    case 2:
      lcd.print("Wat up homeslice");
      break; 
    case 3:
      lcd.print("    Hi Mom!     ");
      break;
    case 4:
      lcd.print("    Hey Dad!    ");
      break;
    case 5:
      lcd.print("   Hi Auntie!   ");
      break;
    case 6:
      lcd.print("  Hi Grandma!   ");
      break;
    case 7:
      lcd.print("   Hi Zeide!    ");
      break;
    }
    tone(buzzerPin, 262, 1000);
    delay(1500);

    //sends simple pattern to attiny inside garage  (for security)
    digitalWrite(attinyPin, HIGH);
    delay(100);
    digitalWrite(attinyPin, LOW);
    delay(50);
    digitalWrite(attinyPin, HIGH);
    delay(50);
    digitalWrite(attinyPin, LOW);
    delay(50);
    digitalWrite(attinyPin, HIGH);
    delay(50);
    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(" So you want to ");
      lcd.setCursor(0,1);
      lcd.print("scan a new one? ");
      delay(2000);

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

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

      waitForFinger(); //waits for the fps to be pressed
      if(fps.IsPressFinger() == true){
        lcd.clear();
        lcd.print("       1?       ");
        delay(1000);
        if(fps.IsPressFinger() == true){
          lcd.clear();
          lcd.print("       2?       ");
          delay(1000);
          if(fps.IsPressFinger() == true){
            lcd.clear();
            lcd.print("       3?       ");
            delay(1000);
            if(fps.IsPressFinger() == true){
              lcd.clear();
              lcd.print("       4?       ");
              delay(1000);
              if(fps.IsPressFinger() == true){
                lcd.clear();
                lcd.print("       5?       ");
                delay(1000);
                if(fps.IsPressFinger() == true){
                  lcd.clear();
                  lcd.print("       6?       ");
                  delay(1000);
                  if(fps.IsPressFinger() == true){
                    lcd.clear();
                    lcd.print("       7?       ");
                    delay(1000);
                    if(fps.IsPressFinger() == true){
                      lcd.clear();
                      lcd.print("       8?       ");
                      delay(1000);
                      if(fps.IsPressFinger() == true){
                        lcd.clear();
                        lcd.print("       9?       ");
                        delay(1000);
                        if(fps.IsPressFinger() == true){
                          lcd.clear();
                          lcd.print("      10?       ");
                          delay(1000);
                          enrollid = 10; //can be expanded to up to 20
                        }
                        else enrollid = 9;
                      }
                      else enrollid = 8;
                    }
                    else enrollid = 7;
                  }
                  else enrollid = 6;
                }
                else enrollid = 5;
              }
              else enrollid = 4;
            }
            else enrollid = 3;
          }
          else enrollid = 2;
        }
        else enrollid = 1;
      }

      //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?  ");

        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(){
  timer = 0; //resets the timer everytime this function starts
  while(fps.IsPressFinger() == false){ //timeout
    timer++;
    delay(100); 
    if (timer>=80){
      timer = 0; //reset timer
      break;
    }
  }
  if(fps.IsPressFinger() == false)beep(); 
  timer = 0; //resets the timer everytime this function ends
}

Step 9: The 3D Printed Case

Picture of The 3D Printed Case
gluedCase.JPG
limitSwitch.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.

Step 10: Prepare the Garage

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

Thanks for reading!

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.

1-40 of 133Next »

Hey, How did yoy make the pictures clickable for the links on sparkfun and radioshack?

Also how did you make a table for all the parts on the instructables editor

nodcah (author)  theedisoneffect1 month ago

For both of these, I edited the HTML of the page. The code can be downloaded here.

Be aware, the pictures look horrible on the Instructables app.

How did you edit the html of the page?

Can you make an instructable out of this. Im sure it will be a very popular instructable

nodcah (author)  theedisoneffect5 days ago

Your wish has been granted

(credit was given)

nodcah (author)  theedisoneffect1 month ago

I don't think I have enough information about it to make an Instructable. But, I might sometime this summer since you asked...

To edit the HTML (HyperText Markup Language) of an Instructable, you need to have a pro account (which you do). Then, click on the "</>" (see the picture for example). Finally, write your HTML! I found a reference by w3schools to be really helpful.

Note: not all tags/attributes are supported here is brief list of some that are:

<table border="1"><a><button><img><fieldset><samp><strong><code><kbd><dfn><var><em><sub><sup><textarea><u><ol><ul>

nodcah (author)  nodcah1 month ago

Sorry, I forgot the picture. XD

Screen shot 2014-06-27 at 10.17.06 AM.png
marios854317 days ago

Hi again, Nodcah. Sorry for the late reply. I've decided to use an arduino uno and an lcd screen not the I2C SainSmart shield so all I wanted to ask will your oringinal code for the Serial LCD work. Also to connect the lcd will I do it with the oringinal arduino diagram ? This one. If not please could you upload the code and the connection diagram cause i realised that the pins 11,12 are already used by the fingerprint module and the Attiny.

P.S Please the schematics on a fritzing breadboard thing.

MANY THANKS

LCD_bb.png
nodcah (author)  marios854316 days ago

I just added a diagram to step 2 showing how to wire the LCD the same way the Serial LCD does, so the original code should work fine! =)

moomooman029 days ago

This was a great project..

I was trying to make it so that only user 0, could add other users to the data base.

could i add a line in prior to the while(true); with something like..

if verify(0);

while(true);

else if

beep();

Im defiantly not a great at code:

maybe there is an better way , thanks again so much really enjoyed this project a lot..

nodcah (author)  moomooman027 days ago

Thanks!!

To only allow user 0 to add a print, you can add:

if(id==0){
//The enroll code goes here
}
else beep();

You can also condense this down to one line, which would be put right before the waitForFinger():

if(id!=0)beep(); //if id is not equal to 0, go straight to beep()

Thanks for the reply , that was defiantly muck more eloquent than the way I had come up with.. now that i have that part working like it should on to the attiny85 .. i have flashed it with the blink program and it works just fine , but when i have it flashed with the code above the red led comes on at boot up, but the yellow pin flashes the pattern that is on the input side ie. pin 12 on the mega. i get three flashes and if i change the delays on the mega side the flashes correspond on the yellow light..dont think that is right so might have an 85 flash problem, i am assuming that the yellow light should be giving me the response from pin 3 on the 85. cause end result right now im not getting the door to pop, even though i am getting flash responce on the yellow led..

nodcah (author)  moomooman024 days ago

If the blink sketch works, then there shouldn't be any problems programming the ATtiny.

The first thing I noticed was that you mentioned pin 3 (which is unused). So, you might need to check your wiring (unless that was a typo).

Secondly, I would recommend removing the transistor and see if the yellow LED is still acting up.

Lastly, you can try uploading this code to the Serial LCD and this to the ATtiny85.

Hope it helps

-Nodcah:-)

following the diagram above attiny85 pin3 connects to the base on the npn and the yellow light tied to ground ...hmmm .. am I reading that wrong.?

the attiny85 code attached above is the same as the serial code attached above is that a boo boo ?

Never mind got it...Wire problem didn't have the resistor tied in between (physical pin 3) on the 85 and the base on the npn..

Great project thanks very much for the help and sharing..

nodcah (author)  moomooman024 days ago

Yeah sorry about the pin 3 thing (I didn't know you were talking about physical pin 3).

But I'm glad you got it!!

Thanks!

-Nodcah

marios85431 month ago

Hi nodcah, Great ible dude. Can I use an arduino uno and an lcd shield instead of this serial lcd ? I mead an arduino is more easy to program instead of this serial lcd because it does not need an external ftdi breakout board. Thanks

nodcah (author)  marios85431 month ago

It depends what kind of shield. The coding might need to be changed if it uses I2C like the Adafruit one. Reply back with a link to the shield you have and I'll let you know. =)

You can also use a smaller Arduino board (Arduino Micro, mini, etc.) and an LCD.

Hi nodcah, I'm sending you the link to my lcd shield. If it needs recoding can you send me the code? Thats the link: http://goo.gl/eBtRhe

P.S: I'm not really good at reading these kind of schematics so can you send me the same schematics but on a breadboard so i can open it with fritzing

Many thanks nodcah.

nodcah (author)  marios85431 month ago

Hmmm... this shield uses I2C, which will need a few changes in the code. One of the changes was adding this library.

Code and Fritzing files below.

Note: I haven't had a chance to test the code, so let me know if it works. Also, be sure to ask if you have any more questions! =D

fps_schem.jpg
nodcah (author)  nodcah1 month ago

Whoops! The 220ohm resistor is actually supposed to be a 1kohm. Here is the updated stuff:

fps_schem.jpg

Hi nodcah, I'm sending you the link to my lcd shield. If it needs recoding can you send me the code? Thats the link: http://goo.gl/eBtRhe

P.S: I'm not really good at reading these kind of schematics so can you send me the same schematics but on a breadboard so i can open it with fritzing

Many thanks nodcah.

riicardoo1 month ago

Hi nodcah, what about how to delete a fingerprint that is already registered? which is the command? I would greatly appreciate your response

nodcah (author)  riicardoo1 month ago

The command is fps.DeleteID(idToBeDeleted). fps is the object and idToBeDeleted is the ID of the fingerprint you want deleted.

In my code, you will be prompted before overwriting a fingerprint, then it will be deleted/rewritten to.

if(fps.CheckEnrolled(enrollid)){

lcd.clear();

lcd.print(" Warning! ID #");

lcd.print(enrollid);

lcd.setCursor(0,1);

lcd.print(" has data. OK? ");



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



fps.DeleteID(enrollid); //delete data

delay(100);

}
brmarcum1 month ago
How long does the scanner take to register a print? I just got mine in the mail and I'm planning on using it where speed of accessibility is a concern
nodcah (author)  brmarcum1 month ago

The datasheet says it takes less than 1.5 seconds. Through my experience, it seemed to take around half a second or less. I believe this also depends on how many fingerprints are stored on the device (less fingerprints = more speed) :-)

brmarcum nodcah1 month ago
Yeah, datasheets aren't always real world though. That's a good point. I imagine sorting out 200 prints could take some time. Thanks.

hi im doing eee can i do it easily and i want to knw how much this whole set costs

nodcah (author)  thivakarsivan1 month ago

Around $70. Here is a list with prices.

ijako91 month ago

So If i'm understanding this correctly you could essentially program with just using the Arduino board instead of the ATtiny85 chip is that right?

nodcah (author)  ijako91 month ago

You could replace the ATtiny85 with an Arduino board and it would work fine!

But, if you only want to use the ATmega328 on the Serial LCD Kit, you would need to protect it well. =D

whunckler1 month ago

Very cool, I'm in the process of building a version of this right now! How did you go about controlling a servo with the ATtiny85? I'm having trouble getting the a servo library onto the chip. Did you have to manually code the pulses?

nodcah (author)  whunckler1 month ago

Sorry for the confusion, but the ATtiny85 isn't actually controlling anything in the example with the chest; it is simply supplying power (the ATmega328 sends the servo commands). But I was looking into using the Software Servo library as an option for controlling the servo using the ATtiny. Hope that helped! =D

Thanks, I saw that library too. It seems that the first version I'm building will substitute the ATiny85 with an arduino, it's overkill but I can add some extra features as well. I plan to try and have my Phillips Hue lights turn on in my room when I scan my finger, and that requires a bit more power than the tiny. Let me know if you make any progress, I always like a simpler approach. Great instructions!

nodcah (author)  whunckler1 month ago

Thanks! If you don't end up using the ATtiny, you should look into the Micro or the bare ATmega328. They are each below 10 USD and pretty small.

jack19861 month ago

there is an alike fingerprint lock here: http://www.instructables.com/id/Arduino-Fingerprin...

it seems yours is more beautiful...

nodcah (author)  jack19861 month ago

Thanks for the compliment! The one you linked was beautifully simple (in a good way). A lot of the times, the easiest route is better (quicker to build, easier to operate, etc.)! =D

Darthorso1 month ago

Congratulations for your grand prize, my friend!

I voted for you and you absolutely deserve this! :D

nodcah (author)  Darthorso1 month ago
Thanks! =D
1-40 of 133Next »