Creative Commons images are CC BY-NC-SA 3.0

Description: Fingerprint scanners are awesome. Why use a key when you have one right at the tip of your finger? Unfortunately, they’re usually unreliable or difficult to implement. Well not anymore! We’ve found this great fingerprint module from ADH-Tech that communicates over TTL Serial so you can easily embed it into your next project.

The module itself does all of the heavy lifting behind reading and identifying the fingerprints with an on-board optical sensor and 32-bit CPU. All you need to do is send it simple commands. To get started, just register each fingerprint that you want to store by sending the corresponding command and pressing your finger against the reader three times. The fingerprint scanner can store different fingerprints and the database of prints can even be downloaded from the unit and distributed to other modules. As well as the fingerprint “template,” the analyzed version of the print, you can also retrieve the image of a fingerprint and even pull raw images from the optical sensor!

This is the updated version of the GT-511 which has an increased memory capacity. The module can store up to 200 different fingerprints (that’s 10x more than the old version!) and is now capable of 360° recognition.

The module is small and easy to mount using two mounting tabs on the side of the sensor. The on-board JST-SH connector has four signals: Vcc, GND, Tx, Rx. A compatible JST-SH pigtail can be found in the related items below. Demo software for PC is available in the documents below, simply connect the module to your computer using an FTDI Breakout and start the software to read fingerprints!

Note: The module does not come with a cable, check below for an appropriate one.

Dimensions: 37 x 17 x 9.5 mm

Features:

  • High-Speed, High-Accuracy Fingerprint Identification using the SmackFinger 3.0 Algorithm
  • Download Fingerprint Images from the Device
  • Read and Write Fingerprint Templates and Databases
  • Simple UART protocol (Default 9600 baud)
  • Capable of 1:1 Verification and 1:N Identification

Documents:

Replaces:SEN-11651

Recommended Products

Customer Comments

  • Finally got this working on arduino! I’ll post some stuff when I’ve got a sketch working perfectly, but in the meantime here’s what I did:

    byte highbyte = 0;
    byte lowbyte = 0;
    byte command = 1;
    word checksum = 0;
    byte highcheck = 0;
    byte lowcheck = 0;
    
    //Here comes the part you want to put in void loop that sends the command to the device
    
      command = 0x12; //The command goes here. This is the command for the LED.
      valueToWORD(0); //This value is the parameter being send to the device. 0 will turn the LED off, while 1 will turn it on.
      calcChecksum(command, highbyte, lowbyte); //This function will calculate the checksum which tells the device that it received all the data
      Serial2.write(0x55); //Command start code 1
      Serial2.write(0xaa); //Command start code 2
      Serial2.write(0x01); // This is the first byte for the device ID. It is the word 0x0001
      Serial2.write(0x00); // Second byte of Device ID. Notice the larger byte is first. I'm assuming this is because the datasheet says "Multi-byte item is represented as Little Endian"
      Serial2.write(lowbyte); //writing the largest byte of the Parameter
      Serial2.write(highbyte); //Writing the second largest byte of the Parameter
      Serial2.write(0x00); //The datasheet says the parameter is a DWORD, but it never seems to go over the value of a word
      Serial2.write(0x00); //so I'm just sending it a word of data. These are the 2 remaining bytes of the Dword
      Serial2.write(command); //write the command byte
      Serial2.write(0x00); //again, the commands don't go over a byte, but it is sent as a word, so I'm only sending a byte
      Serial2.write(lowcheck); //Writes the largest byte of the checksum
      Serial2.write(highcheck); //writes the smallest byte of the checksum
    
    //Now for the functions
    
    void valueToWORD(int v){ //turns the word you put into it (the paramter in the code above) to two bytes
      highbyte = highByte(v); //the high byte is the first byte in the word
      lowbyte = lowByte(v); //the low byte is the last byte in the word (there are only 2 in a word)
    }
    
    void calcChecksum(byte c, byte h, byte l){
      checksum = 256 + c + h + l; //adds up all the bytes sent
      highcheck = highByte(checksum); //then turns this checksum which is a word into 2 bytes
      lowcheck = lowByte(checksum);
    }
    

    It’s pretty rough, but I hope this helps someone who was struggling with this as much as I was.

    If you’re not familiar with some of this:

    A byte stores 256 values. A word consists of 2 bytes, and a Dword consists of 4 bytes. The bytes to be sent here were represented in hexadecimal, which is base 16. A word can be split into 2 bytes to be sent. For example: 0x1234 is made up by the bytes 0x12 and 0x34. highByte(0x1234) = 0x12 and lowByte(0x1234) = 0x34.

    Hope this helps!

    • Hi FI, You’ve helped me out an awful lot with this! Thank you! I’ve converted most of your code into C for PIC, and got it working. I’m wondering if you may be able to post your code on enrolling a new user? I’ve managed to do it with PIC, but for some reason I can only enrol users under the ID of 9?! Any help would be greatly appreciated! Thanks!

    • I am still having problems with getting this to work with my arduino. How should I go about initializing the Serial communication? What baud rate should I use and should I have it use HEX or something else?

      • Yes, you do have to initialize the serial communication. I’ll write you a quick sketch to help you understand.

        byte highbyte = 0;
        byte lowbyte = 0; 
        
        word checksum = 0;
        
        byte highcheck = 0;
        byte lowcheck = 0;
        
        byte response = 0;
        
        
        
        word parameterin = 0;
        word checksumReply = 0;
        
        boolean communicationError = false;
        boolean checksumCorrect = true; 
        boolean ack = true;
        
        byte lbyte = 0;
        byte hbyte = 0;
        byte checklbyte = 0;
        byte checkhbyte = 0;
        
        const int transmitDelay = 500;
        
        
        void setup(){
          Serial2.begin(9600); 
          /* begins serial communication at 9600 baud rate (default) Also, I'm using the 2nd serial port on my Mega, if you have an
          uno, you might want to use Serial instead. If you have a Leonardo, you can use Serial1 which is separate from the serial
          used to communicate over USB. The uno only uses only one set of TX and RX to communicate, the same one it uses for
          USB. */
        }
        
        void loop(){
        scannerCommand(0x01, 0); //I have written a function for sending command packets. All you have to do is type in the command and the the parameter.
        waitForReply(); //I wrote this function to output the response of the device. checksumCorrect tells you if the checkSum matches the data sent. If it doesn't, there was an error. The variable parameterin is the parameter that the fingerprint scanner has sent the arduino. The variable ack tells whether the the scanner has sent an acknowledgemnt. If it is false, there has been an error, and you must check parameterin to see which error code has been sent. The variable communicationError tells if the arduino has read any bytes that are out of place. This should be false. Have a look at the function at the bottom for more info.
        
        //Now we have initialized the device by sending it the code to "open." You can write your own function to handle any of the responses I have detailed above.
        
        scannerCommand(0x12, 1); //command turns on the LED in the sensor.
        waitForReply(); //Again, you can do whatever you want with the variables here.
        
         //that's the end of this demo. If it worked properly, the light on the device should turn on.
        
        while( 1 == 1){} //This just ends the code without looping it.
        }
        
        //OK, now here are the functions I used.
        
        
        void scannerCommand(byte com, int param){ //This is the function that sends data to the device
          valueToWORD(param);
          calcChecksum(com, highbyte, lowbyte);
          Serial2.write(0x55);
          Serial2.write(0xaa);
          Serial2.write(0x01);
          Serial2.write(0x00);
          Serial2.write(lowbyte);
          Serial2.write(highbyte);
          Serial2.write(0x00);
          Serial2.write(0x00);
          Serial2.write(com);
          Serial2.write(0x00);
          Serial2.write(lowcheck);
          Serial2.write(highcheck);
        }
        
        void waitForReply(){ //This is the function that receives data from the device.
          communicationError = false;
          while(Serial2.available() == 0){}
          delay(transmitDelay);
          if(Serial2.read() == 0x55){
          } else {
            communicationError = true;
          }
        
          if(Serial2.read() == 0xAA){
          } else {
            communicationError = true;
          }
        
          if(Serial2.read() == 0x01){
          } else {
            communicationError = true;
          }
        
          if(Serial2.read() == 0x00){
          } else {
            communicationError = true;
          }
        
          lbyte = Serial2.read();
          hbyte = Serial2.read();
        
          parameterin = word(hbyte, lbyte);
        
          Serial2.read();
          Serial2.read();
        
          response = Serial2.read();
        
          if(response == 0x30){
            ack = true;
          } else {
            ack = false;
          }
          Serial2.read();
        
          checklbyte = Serial2.read();
          checkhbyte = Serial2.read();
        
          checksumReply = word(checkhbyte, checklbyte);
        
          if(checksumReply == 256 + lbyte + hbyte + response){
            checksumCorrect = true;
          } else {
            checksumCorrect = false;
          } 
        }
        
        void calcChecksum(byte c, byte h, byte l){ //Also uses this function I have shown above
          checksum = 256 + c + h + l; //adds up all the bytes sent
          highcheck = highByte(checksum); //then turns this checksum which is a word into 2 bytes
          lowcheck = lowByte(checksum);
        }
        
        void valueToWORD(int v){ //turns the word you put into it (the paramter in the code above) to two bytes
          highbyte = highByte(v); //the high byte is the first byte in the word
          lowbyte = lowByte(v); //the low byte is the last byte in the word (there are only 2 in a word)
        }
        

        I hope that helps! If you’re not familiar with functions, you should check here: http://arduino.cc/en/Reference/FunctionDeclaration

        I have tried it and it works. If you are using a different set of Serial pins, make sure to change Serial2 wherever it appears in the code. (You can use command F on a Mac or control F on a PC to easily replace them all if you didn’t already know) The baud rate also might be 115200 because I have a different model. So try that.

        I tested the code and it has worked for me.

        If you have any other questions, feel free to ask! I could also post my function for enrolling a finger if you want, but that will have to be modified since it is made to work with an LCD display. If you need help connecting the device to the serial pins of your arduino, let me know which one you have and I’ll let you know which pins should work.

        Good luck!

        • @FutureInventions can you please send me your code for enrolling using this fingerprint scanner. I am struggling to make it work on the raspberry pi

        • Hello… I’m using an Arduino Uno board. In this code you posted, I noticed that the serial pin numbers that the scanner is connected to on the Arduino board isn’t included…

          Isn’t it necessary to include the pin nos also in the code so that the Scanner will be able to communicate with the Arduino using those digital pin nos?

          Pls How do I go about including the pin nos needed to communicate?

        • Thankyou, this helped a lot and worked perfectly.

          • could you tell me the answer for your question:

            leonardoliceranzu@gmail.com

            I´m new with this and i need to connect this device to my arduino UNO. i need the code program just to copy and to work with it.

  • Hi need to some help! I need this for my final year project and I was just wondering if this device would work with an android application for an android device like a tablet. Would this device connect directly to the tablets micro usb port? or do i need some sort of circuit to bridge the connection?

    • If you find any solution bro ,please let me know as well as I,m stuck with the same problem of how to use it in an android app.Does it has a SDK or not? ahsan856jalal@gmail.com

  • Does it work with raspberry pi?

  • Any arduino code, I’m struggling with this one.

    • I just posted a library for this device. have a look at my blog http://wordpress.hawleyhosting.com/ramblings/?p=375

      • Hi Josh Very interested in the sections you commented out in the code, please advise if they would work and what i would need to run them?

        int GetTemplate(int id); int SetTemplate(byte* tmplt, int id, bool duplicateCheck);

        Thanks for the code, have your current script working nicely with a web server. If you can assist on above will be able to upload the template image to a web server and then download from the web server to another one of the scanners.

        • I always wanted to write out those sections. The problem is memory. It has been a while since I have looked at the code. iirc there is not enough memory to download the template from the FPS, and there is no flow control on the serial comms. It is theoretically possible to download the data in a streaming format, and push it off of the arduino faster than it comes in, but I have yet to make that work.

    • I posted a quick explanation that should help if you’re still stuck. :)

  • I had problems with the previous version C2 ( could also be user related :) but this C3 works great . The speed is around 550ms , quite fast . Works for me !

  • Fingerprint Scanner - TTL GT511-C3

    We don’t sell the cable with the GT-511C3 fingerprint scanner https://www.sparkfun.com/products/11792. You would need to get the 4 wire JST SH jumper cable separately https://www.sparkfun.com/products/10359. There is more than one way to create a connection between the fingerprint scanner and your system. For a more secure connection with the thin gauged wire, I recommend modifying the cable. Any loose connections can have issues powering the sensor and sending reliable data. Check below for more information:

    Serial UART Connection w/ 4 Wire JST SH Cable

    For a secure connection, I recommend soldering the ends of the wire to some header pins [like these https://www.sparkfun.com/products/116 ] so that the connection is not loose when inserting it into a standard female header sockets on an FTDI or the RedBoard/Arduino Uno. This will provide easy access to the small 4-pin JST-SH connector that is on the fingerprint scanner. After checking the connections of the scanner in the datasheet, I soldered connections from the JST -SH connector labeled J2 from the scanner to the header pins. I used some heat shrink in order to use it with the FTDI to reinforce the solder joint. As a note, make sure to remove the JST-SH SMD connector that is on the 4-wire jumper wire assembly. This is the same connector that is on the fingerprint scanner. You should be able to remove the connector easily with your hands without cutting any of the assembly off. The connections with the header pins are based on the footprint of the 3.3V FTDI basic breakout https://www.sparkfun.com/products/9873 w/ a mini-B cable https://www.sparkfun.com/products/11301 :

    Pin #    Fingerprint Scanner    <-> FTDI 3.3V
    1          UART_TX (3.3V TTL)   <->   RX
    2          UART_RX (3.3V TTL)   <->   TX
    3          GND                  <->   GND
    4          Vin (3.3V~6V)        <->   3.3V
    

    Note: If you were using the JST-SH cable, you would be wiring the black wire to pin 1 (next to the notch indicating the polarity on the fingerprint scanner to the Rx pin of your FTDI, For an example of the modified cable assembly, I suggest checking out the images from our Google drive:

    https://drive.google.com/open?id=0B0jwgLkjMWzDfnktUkt5ekQxQi1TcXk3QnhMN2J0Q3VXT2Y4NXRZdG9wa05EemZjY0dCazg

    Demo Software Development Kit (SDK)

    For basic operation with the demo software, I recommend checking out the demo software that is linked in the documents section of the product page. Each demo software is unique to that version of the fingerprint scanner and it will not work with the other versions. After connecting the fingerprint scanner to the FTDI, I was able to utilize all of the features as stated in the datasheet. These features in the demo software are based on the protocol commands.

    To operate on a computer using the SDK, just open the SDK_DEMO.exe executable, select the COM port that the FTDI enumerated to from the serial port number’s drop down menu, and click on the Open button. You would need to enroll your finger 3 times for the ID before the scanner can save it as a template.

    Example Code for Arduino

    If you were using a microcontroller with the fingerprint scanner, you would need to write code based off of the demo software and the protocol commands. Luckily, there was someone in the community that wrote some example code to blink the blue LED, enroll, and identify the fingerprint that was saved in a template. It is posted in a GitHub Repository https://github.com/sparkfun/Fingerprint_Scanner-TTL .This code works with the GT511C3, GT511C1, and GT511C1R. This code is incomplete and would require more code to utilize all the features of the fingerprint scanner like in the SDK. Here are the connections that you would need to make using a bi-directional logic level converter https://www.sparkfun.com/products/12009:

    Pin #    Fingerprint Scanner     <-> Logic Level Converter <-> Arduino Uno
    1          UART_TX (3.3V TTL)    <->      LV4 <-> HV4            <->  RX (pin 4)
    2          UART_RX (3.3V TTL)    <->       LV1 <-> HV1           <->  TX (pin 5)
    3          GND                    <->       GND <-> GND         <->     GND
    4          Vin (3.3V~6V)         <->           HV                <->      5V
                                                  LV                    <->     3.3V
    

    Software Serial with the Arduino Mega 2560

    The demo code was designed for the Atmega328P on the Arduino Uno. If you were using it with an Arduino Mega2560, you would need to re-configure the software serial pin definitions. The reason why is because not all the pins on the Arduino Mega can support change interrupts for a serial Rx pin as stated in the limitations => https://www.arduino.cc/en/Reference/SoftwareSerial. Just change this section of code on line 18:

     FPS_GT511C3 fps(4, 5); //software serial pins for Arduino's / Atmega328P's
    

    to

    FPS_GT511C3 fps(10, 11); //software serial acceptable pin for the Arduino Mega
    

    Troubleshooting

    Scanner Not Recognizing your Fingers?

    There have been issues trying to enroll with the Arduino example code. This is usually due to fingers being dry and not having good contact on the scanner. The timing of your finger on the scanner is a little tricky too. I had to try enrolling a few times before it was able to enroll or identify my finger. This is common with any fingerprint scanner like the one that is on my smartphone. Try re-enrolling your finger.

    Hardware Connections

    Also, make sure that there are no loose connections. The last thing to check is the connection between your scanner and Arduino. Each of the fingerprint scanners use the same command protocols so the Arduino example code in the Instructables tutorial can be used for any of the scanners.

  • This is a Python driver for FPS GT511C3, enjoy!

    http://quickgroup.github.io/pyGT511C3/

  • This is a Python driver for FPS GT511C3, enjoy!

    http://quickgroup.github.io/pyGT511C3/

  • im selling this & my customer is having hard time. can someone from sparkfun release a manual to follow?

  • Does anybody know if the templates are repeatable?

    For example, if I use the same finger in the same position, will I be able to create multiple identical templates? (REALLY identical, as in template1 = template2).

  • Hi, does anybody know which format has the template? or, is it possible to obtain an svg directly from the scanner? Thanks

  • Does it come with the wires?

  • What are those solder pads beside the jst connector?? the video shows an IC soldered to the solder pads? Any information about that.

  • For anyone curious why they can’t get valid images from their GT-511C3 scanner, it’s because the device, at the default baud rate of 9600, will not output the correct number of bytes for the image (it sends ~3250 of 52116 and stops).

    To grab images from the device, you need to first set the device baud rate to something like 115200.

    I spent way too long trying to figure out why images wouldn’t download, only to discover this just now. Wish it was mentioned somewhere.

  • Hi. I just want to use this to turn fingerprints into templates, send the template to my computer and use my software to make the 1:N matching. This way i would be able to have much more fingerprints and have faster comparison times.

    IS THIS POSIBLE?

    Thank you.

  • I’m thinking about using this with a raspberry Pi as part of an access control system. putting aside the lack of tutorials to help with that my main question has to do with using a few of these possibly on different doors. Is there anyway to enroll on one and have other devices grab the data so that the same fingerprint can work on more than one device without having to reregister?

  • I bought 2 fingerprint scanners (C3) and have managed to get the windows software working with my arduino. I am able to execute most of the functions (enroll, verify, get image etc), but I am having trouble setting templates. I can get the template from 1 scanner no problem, but when I try to set the template to the second device, I can see that the scanner is receiving data (through Rx led on arduino), but the software eventually says “communication error”. Same issue with set database. Does anyone experienced this issue or have any advice for solving this problem?

  • Dear,

    I bought the Finger Print Scanner (GT-511C3) I am developing a project where I need to store the biometrics on a server. Then need to check the biometrics registered in the database. I want to know how to store biometrics in a string to send to the server. I’m doing this with the Arduino Mega 2560

    Thank U

  • Dear,

    I bought the Finger Print Scanner (GT-511C3) I am developing a project where I need to store the biometrics on a server. Then need to check the biometrics registered in the database. I want to know how to store biometrics in a string to send to the server. I’m doing this with the Arduino Mega 2560

    Thank U

  • Hi everyone. I wanna make a project with GT-511C3 and Ethernet Shield.. But i could not make.. If i remove fps or ethernet then project is working correctly.. could you help me?

  • hi, is generated template unique? and for a finger that use same time the template is same?

  • I’m a bit confused about the numbers (fingerprints stored and users)… in the description it says it can store up to 200 fingerprints but in the video the software can only store 20 “users” (which I take to mean “one finger”). Assuming that each “user” requires 3 fingerprints, that’s only 60 fingerprints. Is the 20 users just a limitation of the software? I looked through the supplied datasheet but couldn’t find anything.

    • I too would like this storage discrepancy explained. It is worrisome that that specification in the datasheet is in RED type. Does that mean that 200 templates is a future goal because some of the other red type information is “Not supported” or “Deleted”.

      Is there anyone out there whose got this working that can tell us what the max template is? Thx.

    • Or maybe there is a way to store more fingers to one user?

  • Hey guys, I’m trying to interface this fingerprint scanner with an AtMega324pa microcontroller (no arduinos are allowed in our senior design). I’m having a lot of trouble just getting the LED to turn on. I have the baud rate set to 9600 (confirmed with an LSA), data bit length is 8 bit, 1 stop bit, and parity disabled. Could any of you please look at the hex values that I am transmitting just to confirm that they are correct? Also if anyone has code that they used for an Atmel AVR or PIC I would really appreciate it. int main(void) {
    USART_init();

    while(1)
    {   
    USART_Transmit(0x55); //Command start code 1
    USART_Transmit(0xAA); //Command start code 2
    USART_Transmit(0x01); // This is the first byte for the device ID. It is the word 0x0001
    USART_Transmit(0x00); // Second byte of Device ID
    
    USART_Transmit(0x01); //1st byte of parameter
    USART_Transmit(0x00); //2nd byte of parameter
    USART_Transmit(0x00); //3rd byte of parameter
    USART_Transmit(0x00); //4th byte of parameter
    
    USART_Transmit(0x01); //1st byte of command
    USART_Transmit(0x00); //2nd byte of command (always 00)
    
    USART_Transmit(0x02); //low check byte
    USART_Transmit(0x01); //high check byte
    ////////// Command to turn on LED
    USART_Transmit(0x55);
    USART_Transmit(0xAA);
    USART_Transmit(0x01);
    USART_Transmit(0x00);
    
    USART_Transmit(0x01);
    USART_Transmit(0x00);
    USART_Transmit(0x00);
    USART_Transmit(0x00);
    
    USART_Transmit(0x12);
    USART_Transmit(0x00);
    
    USART_Transmit(0x13);
    USART_Transmit(0x01);
    }
    

    }

    • I can send the rest of my code that I am using to initialize the USART if any of you would like to check that as well.

      • I was wondering if you ever got your project to work? I’m trying to interface the scanner with my Atmel AVR and I’m struggling to get the LED to turn on. I’m using similar hex #s, using a UART lib to open the serial port connection, and have double checked my hardware to make sure the pinout is correctly connected to the microcontroller.

  • Good afternoon. Tell me how to solder wire if I do not have a jumper? On the reverse side of the board is the pads are not labeled. Thank you

  • I’ve been unable to get the Blink sketch to work on an Arduino Yun and a 2560 Mega. I’m using the bidirectional line converter from Sparkfun and I’ve verified the scanner is sending and receiving 3.3V and the Arduino is sending and receiving 5V.

    When I run the blink sketch I see this in the serial monitor FPS - Open FPS - SEND: “55 AA 01 00 00 00 00 00 01 00 01 01”

    In the FPS_GT511C3.cpp file in the library I added a line at the end of the Open() function to do a serial print and it doesn’t show up so it’s getting hung somewhere in the Open() function.

    I also moved to pins 10 and 11 because the Mega doesn’t support interrupts on 4 and 5. I’m completely out of ideas at this point. Could it be a bad unit?

    • I am having the same issue. Using an arduino UNO as specified here http://wordpress.hawleyhosting.com/ramblings/?p=375

      Here is my code

      #include "FPS_GT511C3.h"
      #include "SoftwareSerial.h"
      
      FPS_GT511C3 fps(2, 3);
      
      void setup()
      {
        Serial.begin(9600);
        Serial.println("Initialized");
        delay(100);
        fps.UseSerialDebug = true;
        Serial.println("Initialized2");
        fps.Open();
        Serial.println("Initialized3");
        fps.SetLED(true);
        Serial.println("Initialized4");  
      }
      
      void loop()
      {
        if (fps.IsPressFinger())   // fingerprint identity test
        {
          fps.CaptureFinger(false);
          int id = fps.Identify1_N();
          Serial.println("Testing");
          if (id <200) // if the fingerprint is correct
          {
            Serial.print("Verified ID:");
            Serial.println(id);
          }
      
          else
          {
            Serial.println("Finger not found");
          }
        }
        else
        {
          Serial.println("Please press finger");
        }
        delay(100);
      }
      

      The output on the serial window looks like this

      Initialized Initialized2 FPS - Open FPS - SEND: “55 AA 01 00 00 00 00 00 01 00 01 01”

      The LED on the finger print scanner never turns on so I feel my code is getting stuck somewhere in the OPEN() function as well. Josh, do you have any ideas?

    • Did you ever figure this out? Do you still need help with it?

      • Hello, I have the same problem. The LED never turns on and I have the same message sent in the serial port. I Have tried with several configurations. I’m using an arduino uno (with the wiring specified in your blog ) and arduino 1.6.1 IDE. None of the examples from the library work.

        Any help will be really appreciated.

        thanks Jean Philippe

      • I dont know about these guys, but I still have this problem. I have the exact same setup as Member #590855 reported above (dual line converter). I also have the same problem (no blink) and also get:

        FPS - Open FPS - SEND: “55 AA 01 00 00 00 00 00 01 00 01 01”

        In the serial monitor, nothing more. Any help would be greatly appreciated.

        Kind regards, Tjarco

  • I want to share with everyone here, it worked perfectly for the Netduino plus 2 (NET Micro Framework v4.2). A code example follows:

        public void Executar()
        {
            ConfigurarRede();            
    
            EnviarFrequencia Enviar = new EnviarFrequencia();
            Enviar.Send(1,1,DateTime.Now);
    
            // initialize the serial port for COM1 (using D0 & D1)        
            serial = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
    
            // open the serial-port, so we can send & receive data        
            serial.Open();
            //serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
    
            Abrir();
            Thread.Sleep(200);
            LerPortaSerial();
    
            if (resposta)
            {
                AscenderLedIdentificacao();
                Thread.Sleep(200);
                QtdeIdentificadores();
                Thread.Sleep(200);
    
                while (true)
                {
                    CaptureFinger();
                    Thread.Sleep(100);
                    IdentificarLeituraBiometrica();
                    Thread.Sleep(100);
                    LerPortaSerial();
                }
    
            }
    
        }
    
    • Please could you share with me all your code example in Microframework ? My email is LucaMenghini at lucamenghini .com Think you very much!!!

  • Extremely fast, accurate and easy to use. Fingerprint Scanner - TTL (GT-511C3) exceeded my expectations. I want to congratulate the entire team sparkfun. Thank you very much.

  • I would like to know if anyone has managed to make this fingerprint scanner work with the raspberry pi, i have been struggling to make it work

    • There is a python port of my library out there that you might try. They claim to have wrote it themselves, but if you look at the code it is pretty clear lol.

  • hey, what about delete a fingerprint registration already exists? I would appreciate your response

  • Is it possible to expand the number of fingerprints saved? Can it be configured to access external storage (eg. SD Card)?

    Thanks Gabe

  • Hi, Is anyone succesfull in getting to feed the template data which the device is sending through UART. I have already written my functions for performing most of the operations but struggling with this. The device is giving me a NACK_INVALID_PARAM error. Please help.

  • What cable to I get with this? Its kinda BS that it doesnt come with one… seriously. Theres no reason to justify that

  • Has anybody tried to download the fingerprint template from the reader? What format is it in? is it a set of raw 506 bytes that can be stored in an array of bytes?

  • I’m trying to use the GT-511C3 in pcDuino however gives me an error, it’s something related to “SoftwareSerial.h” apparently is not implemented in pcDuino. Could you recommend something? thanks

  • Guys, I need help Did you try that? I tried gt511c1 . it wasn’t same..

    Does anybody know if the templates are repeatable?

    For example, if I use the same finger in the same position, will I be able to create multiple identical templates? (REALLY identical, as in template1 = template2).

  • can i get live image of the finger with this sensor??

  • help: this C3 support get live image ?????

  • for those interested, I have two arduino scripts that i have written…. one is already listed here and uses an Arduino Mega via Serial2 and the new one has been tested on a Lilypad and an Uno. The difference between the two is that I am using SoftwareSerial on non-mega boards to communicate with the sensor

    Mega - https://github.com/cultcreative/fingerprint_gt511c3 SoftwareSerial - https://github.com/cultcreative/krista_purse_proto/blob/master/krista_finger_lilypad/krista_finger_lilypad.ino

    • pictures of the connections will be coming soon to the second one, and note that it also has a servo on it. and you can’t write 0x00 to softwareserial, it is changed to (byte)0 around line 400
  • This sensor works with any pic or pic must be a host because it tried to make it work and I have not gotten’m using a 16F887 pic, the only thing I’ve accomplished so far is to send basic commands like start the device, turn on the LED but when receiving the data sends the fingerprint can not read because all data send 0x55 for me. I hope your help thank you very much

  • can i use it in EVM

  • can i use it as fingerprit sensor in electronic voating machine and how can it start with aurdino and can i use alarm

  • OK, which is the real baud rate for the GT-511C3, 115200 or 9600? The datasheet says 9600, however, in the video application we can see clearly running with 115200.

  • OK guys, I´ve seen that there is a lot of people out there struggling with this. I´m PIC user, I like it because it´s very cheap where I live. I like it Arduino too. Nonetheless, I wanna run this attached to a PIC.

    First of all let´s start understanding the Protocol and how to send it. When I first read I noticed that part that it´s says Multibyte item is represented as Little Endian, according with some research that I did this mean that I have to send the LSB (Least significant Byte) first. Please, correct me if I´m wrong.

    Command Packet (Command)
    
    Command Start
    0X55----> TYPE: BYTE 1----> Command Start Code1
    0XAA----> TYPE: BYTE 2----> Command Start Code1
    
    DEVICE ID (WORD)
    0X01----> TYPE: BYTE 3----> Device ID: default is 0x0001, always fixed
    0X00----> TYPE: BYTE 4----> Device ID: default is 0x0001, always fixed
    
    PARAMETER (DWORD). In this case is the Parameter Open
    0X00----> TYPE: BYTE 5----> PARAMETER
    0X00----> TYPE: BYTE 6----> PARAMETER
    0X00----> TYPE: BYTE 7----> PARAMETER
    0X01----> TYPE: BYTE 8----> PARAMETER
    
    COMMAND (WORD). OPEN
    0X01----> TYPE: BYTE 9----> COMMAND OPEN
    0X00----> TYPE: BYTE 10----> COMMAND OPEN
    
    CHECKSUM (WORD). BYTE ADDITION, OFFSET 0 +….+ OFFSET 9
    0X01----> TYPE: BYTE 11----> COMMAND OPEN
    0X01----> TYPE: BYTE 12----> COMMAND OPEN
    

    Guys, please. If I have a mistake, do not hesitate to point it out.

    So far, it seems kind of easy. I haven´t try to program it yet. I´ll try this week. However, I do not yet which functions should I use to use with a PIC.

    OK, I will be posting my progress. :dance:

  • has anyone tried this module using PIC? I know that here is a lot of people how has tried? I just got mine and I want to start. Thank you.

  • Hi everybody!! I have a question here… So, I can only register 20 people on the device, but up, in the Description area says that it can store up to 200 images. Can someone please clarify this for me? I need this for a project that need to register aproximately 50 people…is it possible with just one device? Thanks a lot!!! :D

  • Wow. Thank you Josh. I was able to convert the lib to C# in a few hours, and it is up and running.

  • note sure if i am the only one that couldn’t get everything consistently working using of the libraries that are available and the comments below, but i pieced together a combination of what I found in the lib and what is in the comments into a script that is working great for me. Hope this helps

    https://github.com/cultcreative/fingerprint_gt511c3

  • I know this has been asked before, but has anyone been able to get this device to work with a Raspberry Pi using the Python programming language? The RPi GPIO supports UART and there is a Serial library for Python so I assume it wouldn’t be that difficult to get this working on the RPi using Python.

    • Raspberry Pi

      I got a very basic Python script working that turns the LED on/off with the fingerprint scanner hooked up to the GPIO port of the Raspberry Pi. I’m still working on the code but I think I should have something fully functional in a week or two and I will post the code and configuration schematic here. FYI - I purchased the 3.3V model from Versamodule (http://www.versamodule.com/nano_nvmf.html) since this allowed me to attach the scanner directly to the RPi without using a voltage splitter or resistors (which I don’t really understand). Special thanks to J Hawley and Futureinventions for their code posted in this forum which to a large extent, I am reverse engineering into Python.

      • Have you completed the above project? We are working on a similar project. Did that fingerprint module work well with RPi? Can you help us? Can you share your email-id here?

  • Hey Guys!! I have started my senior project and it is about clocking machine that will get fingerprints inputs, compare it to the stored data and if there is a match will display the corresponding name clocking the employee in and releasing a hooked up door for the employee to enter. My questions: What kind of arduino microcontroller should I use along with this fingerprint scanner, a lcd display and what kind of camera? Thank you!!

    • Any Arduino “board” will work with that (actually all Micro-controller with Serial communication support it), about the LCD?! what kind of info you want to display “Colored images, Non colored, small text, interactive (touch) lcd or just as a display…etc” and for the camera, Actually I couldn’t find any use of a camera in your project description! Sorry if being rude but, I’d suggest you to start from concept rather than jumping to the last step “Implementation”.

      • Good to know any arduino will do the job. No worries my friend you are not being rude. Me and my group have the design everything and I am only using the discussion board here to get feedbacks which i started to get. The display needs to be color if possible. The display will show the name of the employee entering and exiting the facility and the camera is to record everything that is happening during on and off office hours.

  • what does “360° recognition” mean?! it’s a planar surface so the max detection angle should be 180°,right?

  • Guys need help. I cannot run the software on my windows 7 with visual studio 2012. Whats the compiler to run demo software?

  • is there anyway to waterproof this? for instance, if i wanted to use it to open a car door?

  • I have purchased this sensor and every thing is working perfect with the library from GitHub, but unfortunately I lost a bet.

    The bet was that you cannot fool the sensor if you put your finger in the ink-pad, make a mirror copy of that finger print and print in black and withe on a white paper. Unfortunately the sensor detect that finger. Now I search for a rematch, so my questions are the following: Is it possible to make check for a confidence level when detecting a finger print? Is there a new firmware which can avoid this kind of fooling?

    Thank you for support.

  • The Arduino code posted on GitHub, doesn’t seem to work with Arduino Uno when changing;

    fps (4,5);

    to the tx and rx on the uno;

    fps(0, 1);

    Am I doing something wrong here?

    • Pins 0 and 1 on the Uno connect to the hardware serial port, while pins 4 and 5 are initialized as a Software Serial port. You’d need to update all your code to reflect this from a software serial port to the hardware port.

  • I am new to this whole area, but learn quickly and have some great ideas. One specifically was using a device like this, a fingerprint scanner, to replace the power button on a PC case mod I am working on. Would it be possible to do this? I’ve been told it can work, but no successful attempts out there to reference :\

    Any ideas?

    • Ok, after a little research, it’s virtually impossible to do the scanner as a power button since it would need a separate always-on micro-controller, and I was told I’d need a computer engineer or hardware engineer to even design and program it. Next idea, how about rigging this to just work as a logon for Windows? I’ve been looking at pre-assembled USB scanners out there, and most get bad reviews, except the corporate level $500+ ones. What all would I need to do to get this working in my PC? Is anyone experienced in this and able to help?

  • I seem to be having a moment of stupidity here but can anyone tell me where can the pin diagram be found? On the board all I see is a little triangle on the first pin from left to right with the module facing front: sensor up and connector down. Thanks in advance for the help.

    • Thanks for the reply! I saw that before and found it to be unclear. I decided to take my chances at the risk of frying the module and fortunately it worked! :) Here’s the pin-out for future reference: From left to right with the module facing front and up: Pin 1: TX, Pin 2: RX, Pin 3: GND, Pin 4: VCC Tip: The TX (Pin 1) pin is the one marked with a tiny arrow pointing to the right.

    • You can find the pin diagram on the last page of the datasheet linked above.

  • I think supply and communication voltages should be better specified. According to the latest version of the datasheet, GT-511C3_datasheet_V1 1_20130411[4].pdf, the module has an “Operating voltage” in the range 3.3-6V. With just this information one could conclude that the supply and communication voltages are equal and in that range, so this module could be used at both 3.3V and 5V without any level converter. But this may not be the case. Please improve the description on this matter.

    EDIT: the datasheet specifies on the last pages the pinout and there it also specifies that supply is 3.3-6V while communication is 3.3V. Also, i measured the idle voltage of the TX pin with 5V supply and it was 3.3V. This confirms such data.

  • I have completed and tested all of the basic functions of the library that I wrote for this device. I posted all of the details on my blog: http://wordpress.hawleyhosting.com/ramblings/?p=375

  • What if a fingerprint is left behind on the device? How does it handle that?

  • I have this working on my Arduino! (using a voltage divider and softwareserial) I have a library completed for this, but it needs cleanup and documentation. I will post it once done. Maybe I could get one of the spark fun people to link to it in the documents above? I will post it in a couple of days.

    • We are trying to move towards getting all of our files onto GitHub, so if you do want to share it with us, I’d recommend posting it there and then sending us a link for that. It makes it easier to share information and track changes than the comments.

      • and it’s done. See my blog post for detailed information: http://wordpress.hawleyhosting.com/ramblings/?p=375

        Using it is pretty simple declaration:

        FPS_GT511C3 fps(4, 5); // (rx pin, tx pin) make sure to adjust the voltage some how
        

        in setup:

        fps.Open(); // starts communications
        

        After that you can use one of many commands with it:

        fps.SetLED(true);
        
        bool fingerpressed = fps.IsPressFinger();
        
        fps.CaptureFinger(false);
        
        int id = fps.Identify1_N();
        
        etc... there are many commands see my blog link above for more info, and download
        
  • Do I need a logic level converter(https://www.sparkfun.com/products/8745) to use this on an Arduino? or can I just put a resistor on the TX from the arduino?

    • I tried hooking it up with a voltage divider to ensure that it did not exceed 3.3v, but I still can not get it to communicate. Has anyone actually gotten this to communicate with an arduino?

  • Why does this not come with the cable? I just got mine, was all excited to mess with it today, and now I cannot /grumpy

    • +1 … a fifty dollar item that does not include a one dollar cable? please add in future, Sparkfun! I admit it was my mistake to not see that it’s not included, but that’s only because I was in the middle of a feeding frenzy!

  • Do you have any experience working the C3 along with microcontrollers? Because I have had a hard time sometimes even communicating with the computer through the MAX232 interface; at least there sometimes it does the functions, just gets lost. But with the microcontrollers I haven’t had success trying to use the commands (hex) on the datasheet statements.

    • Hello, I used a microcontroller and I sent the bytes in the order that I supposed and I get the data that the module send to the microcontroller and I show the data in a LCD, so in I got it with that, how to send the byte. Be sure how format you recive the data, for exmaple I show the data like a caracter in a LCD and saw the data like a hex, so I send the data like caracter. (when I send the data like a HEX no work for me). Be sure the voltage for Tx and RX is 3.3 you can put a divisor in the out RX pin , the TX you can connect direct to the microcontroller (this if you working with 5 volts microcontroller)

      So you have to send the data like a little endian respresentation (LSB firt).

      for example, this the way to send a command packet (comand OPEN: 0x01). byte1:0x55 //tell is a command packet byte2:0xaa //tell is a command packet byte3:0x01 // device Id 0x00001 send firts the lsb BYTE: 01 byte4:0x00 // device Id 0x00001 byte5:0x00 // Parameter DWORD(if you want to send a parameter nozero send this bit with the value) byte6:0x00 // Parameter byte7:0x00 //Parameter byte8:0x00 //Parameter byte9:0x01 // comand word (OPEN: 0x0001) byte10:0x00 //comand byte11:0x01 //checksum word (sum each byte) 55+aa+01+1 : 0x0101 byte11:0x01 //checksum

      then you can send the others command like onLed () you will see the led on if you dont get a error

      byte1:0x55 //tell is a command packet byte2:0xaa //tell is a command packet byte3:0x01 // device Id 0x00001 send firts the lsb BYTE: 01 byte4:0x00 // device Id 0x00001 byte5:0x01 // Parameter DWORD (parameter nozero ledOn) byte6:0x00 // Parameter byte7:0x00 //Parameter byte8:0x00 //Parameter byte9:0x12 // comand word (CMOSLED: 0x0012) byte10:0x00 //comand byte11:0x13 //checksum word (sum each byte) 55+aa+1+1+12 : 0x0113 byte11:0x01 //checksum

      Other thing that maybe can help you, the command ispressFinger only work if the led is on(I dont know if always happen, but for me was like that).

      Sorry my english is not strong. greetings from Colombia.

      • What microcontroller and lcd display did you use please? and why?? I have a similar senior project to finish before graduation.

      • ups the format text change any way open command 55 aa 01 00 00 00 00 00 01 00 01 01 send first: 55 sec; aa …. so on send last: 01

        ledOn 55 aa 01 01 00 00 00 00 12 00 13 01

        • Nuevamente: GRACIAS! Ya pude realizar varias funciones, sólo me estoy familiarizando, pero vamos de maravilla :D Excelente ilustración. En efecto, venía en el datasheet pero no le había tomado sentido, puesto que nunca manejé así la comunicación. Ojalá aún puedas auxiliarme con un par de dudas, pero definitivamente trajiste luz a mi proyecto haha Bendiciones desde México

          • Escribí una libreria en Visual C++ para el modulo GT511C1 solo tienes que cambiar algunas lineas en la funcion open del archivo gt511c1.cpp en la parte correspondiente al firmware para que sea compatible con el modulo GT511C3 ademas si vas a usar la funcion de recibir la imagen de la huella y el template cambiar los tamaños de los arreglos, mas adelante voy a escribir la libreria espeficicamente para este módulo cuando llegue a mis manos.. El código fuente esta en rapidshare en mi blog esta el link http://fernandezajp.blogspot.com/2013/07/modulo-biometrico-gt-511c1.html

        • Caray! Haberlo dicho antes colega! haha Soy de México. ¿Podría ponerme en contacto contigo directamente? Porque sí me sería de mucha ayuda, ya que estoy trabajando con un 18F2550, aunque en realidad no me preocupa mucho mientras sea más o menos de esa familia (18F). Medio entiendo lo que me comentas acerca del envío y sí noto una diferencia sustancial a lo que yo he manejado para enviarle comandos al dispositivo. Muchísimas gracias!

          • Saludos desde Colombia también. Estuve viendo que tuvieron éxito con este módulo. Bueno, apenas estoy empezando, pero la verdad. No se como enviar bien los paquetes, podrian ilustrarme con algo de código? Ha sido dificil encontrar algo con PIC, pues casi todo mundo está usando Arduino, lo bueno del PIC es que es barato, y fácil de manejar. Una ayuda de parte de ustedes me vendría muy pero muy bien Saludos.

  • Hi , the module can be connected directly to an Arduino pro mini 5v or I need a converter from 5V to 3.3V ? At the end of the datasheet it show that the voltage of Tx and Rx is 3.3V and the main from 3,3v to 6v.

    Somebody have experience with this module?

    • In deed. You must apply an input voltage of 3.3-6V, but either you use a resistante arrangement before the Rx (of the Fingerprint Reader) so you have an 3.3V signal in that input. Otherwise you might experience bad communication issues. Also you must be VERY CAREFUL about the connections. Good luck!

  • Any idea if it can be used with Raspberry Pi? Any library/sdks?

  • I bought GT-511C3 sensor and i tried with demo software on PC through a FTDI 5V breakout. when i push Get Image button i got fingerprint and i could save it on PC. But when i tried to enroll first id, i got an error (Sensor ask me to put finger 1, then finger 2, then finger 3 and here i got an error “The enrollment is faild !”. Why i got such an error ? Cause may be FTDI 5V breakout ? It is working only with FTDI 3.3V breakout ?

  • can someone please tell me how to connect the scanner to the FTDI Basic Breakout - 3.3V.

    i have the jumper 4 wire assembly but dont know how to connect to the basic breakout 3.3. it seems the breakout has 6 conections.

    help!

    • If you were viewing the fingerprint scanner right side up with the JST connector on the bottom, the pin on the far left is pin 1

      Fingerprint Scanner ———- FTDI 3.3V

      Pin 1: UART_TX (level 3.3V) ———- RX

      Pin 2: UART_RX (level 3.3V) ———- TX

      Pin 3: GND ———————– GND

      Pin 4: Vin(3.3V~6V) —————– 3.3V

  • The documentation says that I/O pins are 3.3v can you confirm that 5v logic levels are safe?

    • I got an email from the manufacturer stating that the I/O pins are 3.3v but the power supplied to the unit should be at least 4.6v, be careful all those planning to use a 5V TTL for the I/O, I also understand from the manufacturer ADH that unit is less reliable if powered at 3.3V

      Could I suggest that Sparkfun avoid using the term “5V TTL”?.

      • FYI, versamodule dot com, has the C3 modules from ADH that are made specifically for 3.3v only. So the issue of running at lest 4.6v is not an issue anymore. If you need a true 3.3v module this is where i got mine and works great.

        • I purchased the 3.3v device from Versamodule. I have the unit connected to a Raspberry Pi using the 3.3v power supply and 3.3v Rx Tx pins. I wrote a Python script to control the device. I run an infinite loop until the capture command detects a finger on the scanner.

          I am consistently getting NACK_DEV_ERR errors when trying to capture fingerprints and I’m wondering if the problem is related to the 3.3v power? Perhaps it is just a defective device? Should I attempt to connect the power pin to the 5v output on the Rpi?

          Anyway I’m curious if anyone else has had problems running the 3.3v unit from Versamodule.

  • Where can I find any box for that?.

  • Does it work with the arduino?

  • Does this only work with Windows using their demo software? Can you write your own code on PC? Could you use it to ID with an Arduino?

    • …Yes and yes, using the serial interface. Check the video on this page at 6:05. The interface is simple.

  • How fast does this operate? My problem with fingerprint scanners (I use them on a daily basis) is speed. The ones I use have to be swiped, which doesn’t always work, and then there’s a lag (probably due to windows). …Before I buy one of these I want to make sure it’ll be nearly instantaneous.

    • You can see in the video that there’s a time display in the computer software he’s running.

      The first one I happened to notice said around 1300ms.

      So probably 1.5seconds max. Which I wouldn’t call slow, but it’s not instant.

      • lol, their video didn’t render in IE10 (with or without compatibility view). Thanks. …Seriously though, embedded YouTube videos work on every other site. I think SparkFun should checkout their markup.

Customer Reviews

3.2 out of 5

Based on 5 ratings:

5 star
2
4 star
1
3 star
0
2 star
0
1 star
2

2 of 2 found this helpful:

Awesome little sensor!

This is a nice little fingerprint scanner. The only reason I’m giving this 4 stars is that there is no indication of it being 3V3. It does have a 3V3 regulator on it, though. Also, it has some sort of protection against overvolting a pin. I accidentally supplied 5V to a 3V3 pin, and it turned off. I removed the wire, and it worked again.


Some fuctions are not working

In my projects I need to use functions GetTemplate and SetTemplate. Tech.support said that everythting works, but it’s wrong.

Fuctions GetTemplate and SetTemplate are not working on arduino…

It;s very sad.


Nice fingerprint scanner

Planning to use this for security access. I’ve been experimenting with it a little and find that it is sometimes finicky about registering a fingerprint but it is very accurate as far as recognition/rejection. It’s easily interfaced to a Raspberry Pi, Arduino, or Microchip PIC processor.


Works great

Easy to use.