eagler8 发表于 2020-2-22 10:02:50

已注册手指指纹检测试验
找到指纹传感器!
传感器包含2个模板
正在等待有效的手指……

eagler8 发表于 2020-2-22 10:05:22



找到ID#1,置信度为236
找到ID#1,置信度143
找到ID#1   置信度为151
找到ID#2,置信度为100
找到ID#2,置信度为95
找到ID#2,置信度为131
找到ID#1,置信度为69

eagler8 发表于 2020-2-22 10:28:27


实验之四:读取指纹库并列表

/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块

实验之四:读取指纹库并列表
安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
实验接线:
Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
TX      2
RX      3
GND    GND
*/


#include <Adafruit_Fingerprint.h>

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino(WHITE wire)
SoftwareSerial mySerial(2, 3);


Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{
while(!Serial);
Serial.begin(9600);
Serial.println("Fingerprint template extractor");

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
} else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
}

// Try to get the templates for fingers 1 through 10
for (int finger = 1; finger < 10; finger++) {
    downloadFingerprintTemplate(finger);
}
}

uint8_t downloadFingerprintTemplate(uint16_t id)
{
Serial.println("------------------------------------");
Serial.print("Attempting to load #"); Serial.println(id);
uint8_t p = finger.loadModel(id);
switch (p) {
    case FINGERPRINT_OK:
      Serial.print("Template "); Serial.print(id); Serial.println(" loaded");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    default:
      Serial.print("Unknown error "); Serial.println(p);
      return p;
}

// OK success!

Serial.print("Attempting to get #"); Serial.println(id);
p = finger.getModel();
switch (p) {
    case FINGERPRINT_OK:
      Serial.print("Template "); Serial.print(id); Serial.println(" transferring:");
      break;
   default:
      Serial.print("Unknown error "); Serial.println(p);
      return p;
}

// one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless' :D
uint8_t bytesReceived; // 2 data packets
memset(bytesReceived, 0xff, 534);

uint32_t starttime = millis();
int i = 0;
while (i < 534 && (millis() - starttime) < 20000) {
      if (mySerial.available()) {
          bytesReceived = mySerial.read();
      }
}
Serial.print(i); Serial.println(" bytes read.");
Serial.println("Decoding packet...");

uint8_t fingerTemplate; // the real template
memset(fingerTemplate, 0xff, 512);

// filtering only the data packets
int uindx = 9, index = 0;
while (index < 534) {
      while (index < uindx) ++index;
      uindx += 256;
      while (index < uindx) {
          fingerTemplate = bytesReceived;
      }
      uindx += 2;
      while (index < uindx) ++index;
      uindx = index + 9;
}
for (int i = 0; i < 512; ++i) {
      //Serial.print("0x");
      printHex(fingerTemplate, 2);
      //Serial.print(", ");
}
Serial.println("\ndone.");

/*
uint8_t templateBuffer;
memset(templateBuffer, 0xff, 256);//zero out template buffer
int index=0;
uint32_t starttime = millis();
while ((index < 256) && ((millis() - starttime) < 1000))
{
    if (mySerial.available())
    {
      templateBuffer = mySerial.read();
      index++;
    }
}

Serial.print(index); Serial.println(" bytes read");

//dump entire templateBuffer.This prints out 16 lines of 16 bytes
for (int count= 0; count < 16; count++)
{
    for (int i = 0; i < 16; i++)
    {
      Serial.print("0x");
      Serial.print(templateBuffer, HEX);
      Serial.print(", ");
    }
    Serial.println();
}*/
}



void printHex(int num, int precision) {
    char tmp;
    char format;

    sprintf(format, "%%.%dX", precision);

    sprintf(tmp, format, num);
    Serial.print(tmp);
}

void loop()
{}

eagler8 发表于 2020-2-22 10:36:28

指纹模板提取器
找到指纹传感器!
------------------------------------
试图加载1
加载模板1
试图获取1
模板1传输:
读取534字节。
正在解码数据包……

eagler8 发表于 2020-2-22 10:38:47



试图加载3
未知错误12
------------------------------------
试图加载4
未知错误12
------------------------------------
试图加载#5
未知错误12
------------------------------------
试图加载#6
未知错误12
------------------------------------
试图加载7
未知错误12
------------------------------------
试图加载#8
未知错误12
------------------------------------
试图加载#9
未知错误12

eagler8 发表于 2020-2-22 10:47:53

实验之五:输入序号,删除指定指纹模板

/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块

实验之五:输入序号,删除指定指纹模板
安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
实验接线:
Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
TX      2
RX      3
GND    GND
*/

#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\nDelete Finger");

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
} else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
}
}


uint8_t readnumber(void) {
uint8_t num = 0;

while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
}
return num;
}

void loop()                     // run over and over again
{
Serial.println("Please type in the ID # (from 1 to 127) you want to delete...");
uint8_t id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
   return;
}

Serial.print("Deleting ID #");
Serial.println(id);

deleteFingerprint(id);
}

uint8_t deleteFingerprint(uint8_t id) {
uint8_t p = -1;

p = finger.deleteModel(id);

if (p == FINGERPRINT_OK) {
    Serial.println("Deleted!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
} else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not delete in that location");
    return p;
} else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
} else {
    Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
    return p;
}   
}

eagler8 发表于 2020-2-22 10:56:42



Delete Finger
Found fingerprint sensor!
Please type in the ID # (from 1 to 127) you want to delete...

删除指纹
找到指纹传感器!
请输入要删除的ID(从1到127)……

eagler8 发表于 2020-2-22 11:10:13



删除ID#9
删除!
请输入要删除的ID(从1到127)。。。
删除ID#8
删除!
请输入要删除的ID(从1到127)。。。
删除ID#7
删除!
请输入要删除的ID(从1到127)。。。
删除ID#6
删除!
请输入要删除的ID(从1到127)。。。
删除ID#5
删除!
请输入要删除的ID(从1到127)。。。
删除ID#4
删除!
请输入要删除的ID(从1到127)。。。
删除ID#3
删除!
请输入要删除的ID(从1到127)。。。

eagler8 发表于 2020-2-22 11:18:39

实验之六:删除所有指纹模板

/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块

实验之六:删除所有指纹模板
安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
实验接线:
Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
TX      2
RX      3
GND    GND
*/

#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\nDeleting all fingerprint templates!");
Serial.println("Press 'Y' key to continue");

while (1) {
    if (Serial.available() && (Serial.read() == 'Y')) {
      break;
    }
}

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
} else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
}

finger.emptyDatabase();

Serial.println("Now database is empty :)");
}

void loop() {
}

eagler8 发表于 2020-2-22 11:22:36

正在删除所有指纹模板!
按“Y”键继续

eagler8 发表于 2020-2-22 11:24:45



Found fingerprint sensor!
Now database is empty :)

找到指纹传感器!
现在数据库为空:)

eagler8 发表于 2020-2-22 11:56:17

Adafruit光学指纹传感器相关资料
https://learn.adafruit.com/adafruit-optical-fingerprint-sensor/overview

我们喜欢这种特殊的传感器,因为它不仅易于使用,而且还配备了相当简单的Windows软件,使模块的测试变得简单-您甚至可以使用该软件进行注册,并在计算机屏幕上查看指纹的图像。但是,当然,我们不会给您数据表和“好运”!- 我们编写了完整的Arduino库,因此您可以在10分钟内开始运行。图书馆可以注册和搜索,因此非常适合任何项目。我们还编写了有关接线和使用的详细教程。这是迄今为止您可以获得的最好的指纹传感器。
电源电压: 3.6-6.0VDC
工作电流:最大120mA
峰值电流:最大150mA
指纹成像时间: <1.0秒
窗口面积: 14mm x 18mm
签名文件: 256字节
模板文件: 512字节
存储容量: 162个模板
安全等级(1-5从低到高安全)
错误接受率: <0.001%(安全级别3)
错误拒绝率: <1.0%(安全级别3)
接口: TTL串行
波特率: 9600、19200、28800、38400、57600(默认为57600)
工作温度等级: -20C至+ 50C
工作湿度: 40%-85%RH
完整尺寸: 56 x 20 x 21.5mm
暴露的尺寸(放在盒子中时):21mm x 21mm x 21mm三角形
重量: 20克

eagler8 发表于 2020-2-22 15:01:35

指纹模块Adafruit-Fingerprint-Sensor-Library库的示例列表

chanpassword 更改密码示例
enroll 注册一个新的指纹 示例
emptyDatabase 删除所有指纹模板
delete 输入序号,删除指定指纹模板
fingerprint 找到一个匹配的指纹(核对指纹)
show_fingerprint_templates读取指纹库并列表

eagler8 发表于 2020-2-23 12:33:44

/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百五十:AS608光学指纹识别模块+0.91寸OLED液晶屏显示模块
安装AS608库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
安装OLED库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
安装OLED库:IDE—工具—管理库—搜索Adafruit_GFX—安装

实验程序之十三:识别指纹ID,OLED显示识别人名
AS608模块实验接线
Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
TX      2
RX      3
GND    GND

OLED 屏幕实验接线
oled模块    Ardunio Uno
GND---------GND接地线
VCC---------5V 接电源
SDA---------A4
SCL ------- A5
*/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int fingerprintID = 0;
String IDname;

void setup() {
//Fingerprint sensor module setup
Serial.begin(9600);
// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
}
else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
}

//OLED display setup
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//displays main screen
displayMainScreen();
}

void loop() {
displayMainScreen();
fingerprintID = getFingerprintIDez();
delay(50);
if (fingerprintID == 1 || fingerprintID == 3) {
    IDname = "huadiao";
    displayUserGreeting(IDname);
}
else if (fingerprintID == 2) {
    IDname = "zhanghaoze";
    displayUserGreeting(IDname);
}
}

// 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;
}

void displayMainScreen() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(7, 5);
display.println("Waiting fingerprint");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(52, 20);
display.println("...");
display.display();
delay(2000);
}

void displayUserGreeting(String Name) {
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.print("Hello");
display.setCursor(0, 15);
display.print(Name);
display.display();
delay(5000);
fingerprintID = 0;
}

eagler8 发表于 2020-2-23 12:38:22

本实验案例中,通过程序之二enroll,注册了“huadaio”的二个指纹1#和3号,注册了“zhanghaoze”一个指纹2#。识别指纹ID后,在串口显示匹配的信心值,在OLED屏显示匹配的招呼语。

Found fingerprint sensor!
找到指纹传感器!

页: 1 2 [3] 4
查看完整版本: 【Arduino】168种传感器系列实验(151)--AS608光学指纹识别模块