FingerPrintSensor with Attiny 13a (or similar)

Hi everyone,

I hope this is the right place to post this thread.

I'm wondering if is possible to use a FPS on an Attiny.

Is it possible to use any kind of FPS or must use a specific one for it?

I'm looking to build a circuit and I would like to know if is possible to use one of this Adafruit FPS with my Attiny13a or any others.

Thanks in advance,
Fabry.

It should be possible. You communicate with the FPS using Serial (or SoftwareSerial). so it only requires 2 pins. Not sure how much memory it will all consume.

Thank you very much for your quick reply.

Unfortunately, I have been try many times to upload the example sketch provided from the Adafruit but it always comes up a few error that the Attiny doesn't have the Hardware Serial.

Can some one provide a really simple sketch to test it, please?

Just in case, I attached the code and error here below:

Code:

/*************************************************** 
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> http://www.adafruit.com/products/751

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/


#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }

  finger.getTemplateCount();

    if (finger.templateCount == 0) {
    Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
  } 
  else {
    Serial.println("Waiting for valid finger...");
      Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  }
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

Error:

Arduino: 1.8.12 (Windows 10), Board: "ATtiny13, ATtiny13a, No (ISP Programmer Upload), 9.6MHz Internal Oscillator, Millis Available, No Tone, Better Or Equal 1.666% Error (Default), Bin, Hex, Dec Supported, Half Duplex, Read+Write, LTO Enabled, 2.7v, Default, Default"

In file included from C:\Users\Fabrizio\AppData\Local\Temp\arduino_modified_sketch_512150\fingerprint.ino:18:0:

C:\Users\Fabrizio\Documents\Arduino\libraries\Adafruit_Fingerprint_Sensor_Library/Adafruit_Fingerprint.h:120:39: error: expected ')' before '*' token

   Adafruit_Fingerprint(HardwareSerial *hs, uint32_t password = 0x0);

                                       ^

C:\Users\Fabrizio\Documents\Arduino\libraries\Adafruit_Fingerprint_Sensor_Library/Adafruit_Fingerprint.h:159:3: error: 'HardwareSerial' does not name a type

   HardwareSerial *hwSerial;

   ^

exit status 1
Error compiling for board ATtiny13.

It appears that the FPS requires a Hardware Serial port be defined, even if it is not used. The ATTiny13 does not have one. Probably the easiest way to proceed would be to remove the hardware serial info from the FPS library and try it.

Thank you sir but I'm really straggling how to do it.

Any kindly suggest or example from the code that I posted at least?

Really sorry. :cry:

If you are struggling with that, I would suggest taking a step back and maybe working with an Uno to see how it works, get it working, etc.

I know how to use it on any Arduino (Nano, Micro, Uno).

My point was to use it on the Attiny. :cold_sweat:

Then edit the FPS library and remove all the references to the HardwareSerial class.

That library creates a reference to a software serial port and a hardware serial port. It also has class constructors for both. Just remove the hardware side of it.

Gotcha!!! :smiley:

I understand now!!! When you meant edit the library. You meant about the ".h" file.

Thanks Buddy, I let you know late on. 8)

/---------------------------------------/

Nope!!! >:(

Now I'm having this error after tried to deleted everything it say HardwareSerial on the library.

Arduino: 1.8.12 (Windows 10), Board: "Arduino Uno"

In file included from C:\Users\Fabrizio\AppData\Local\Temp\arduino_modified_sketch_240976\fingerprint.ino:18:0:

C:\Users\Fabrizio\Documents\Arduino\libraries\Attiny_Fingerprint_Sensor_Library/Attiny_Fingerprint.h:113:0: error: unterminated #if

 #if defined(__AVR__) || defined(ESP8266) || defined(FREEDOM_E300_HIFIVE1)

 

In file included from C:\Users\Fabrizio\AppData\Local\Temp\arduino_modified_sketch_240976\fingerprint.ino:18:0:

C:\Users\Fabrizio\Documents\Arduino\libraries\Attiny_Fingerprint_Sensor_Library/Attiny_Fingerprint.h:1:0: error: unterminated #ifndef

 #ifndef ATTINY_FINGERPRINT_H

 

exit status 1
Error compiling for board Arduino Uno.

ORIGINAL & EDITED LIBRARYs

Adafruit_Fingerprint - EDITED.cpp (14.1 KB)

Adafruit_Fingerprint - EDITED.h (6.64 KB)

Adafruit_Fingerprint.cpp (14.8 KB)

Adafruit_Fingerprint.h (6.74 KB)

you removed the closing #endif in the .h file.

After fixing that, I think you are out of memory (and there are some warnings so no sure it will actually work
Arduino: 1.8.12 (Windows 10), Board: "ATtiny13, ATtiny13, No (ISP Programmer Upload), 9.6MHz Internal Oscillator, Millis Available, No Tone, Better Or Equal 1.666% Error (Default), Bin, Hex, Dec Supported, Half Duplex, Read+Write, LTO Enabled, 2.7v, Default, Default"
...
"C:\\Users\\brianh\\AppData\\Local\\Temp\\arduino_build_966212/Test_DrawBitmap.ino.elf"
Sketch uses 3232 bytes (315%) of program storage space. Maximum is 1024 bytes.
text section exceeds available space in boardGlobal variables use 433 bytes (676%) of dynamic memory, leaving -369 bytes for local variables. Maximum is 64 bytes.

Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
Error compiling for board ATtiny13.

It may be time to find a different solution

Great!!! 8)

So, if we would like to use an Attiny85 might work so far.

I will try to see if is possible to delete as much unnecessary line.

Sketch uses 4178 bytes (54%) of program storage space. Maximum is 7634 bytes.
Global variables use 503 bytes (98%) of dynamic memory, leaving 9 bytes for local variables. Maximum is 512 bytes.
Low memory available, stability problems may occur.

UPDATE (1)

Your are right!!! Even trying to squeeze the library and the code!!! :cry: Shame!!!

UPDATE (2)

I DID IT!!! 8)

I did some changes on the original sketch to leave all the unnecessary variables on the Flash Memory instead to go on the RAM Memory once uploading sketch and DONE!!! :grinning:

Sketch uses 4192 bytes (54%) of program storage space. Maximum is 7634 bytes.
Global variables use 247 bytes (48%) of dynamic memory, leaving 265 bytes for local variables. Maximum is 512 bytes.
1 Like