找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12749|回复: 49
打印 上一主题 下一主题
收起左侧

【Arduino】168种传感器系列实验(150)--AS608光学指纹识别模块

[复制链接]
跳转到指定楼层
楼主
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

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













分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

50#
ID:513258 发表于 2020-3-4 07:32 | 只看该作者
还有二个不同型号的指纹模块,目前不敢动,相关资料太少了




回复

使用道具 举报

49#
ID:513258 发表于 2020-2-23 13:11 | 只看该作者
OLED屏显示识别2#指纹“zhanghaoze”



回复

使用道具 举报

48#
ID:513258 发表于 2020-2-23 13:06 | 只看该作者
OLED屏显示识别1#指纹“huadaio”



回复

使用道具 举报

47#
ID:513258 发表于 2020-2-23 12:53 | 只看该作者
串口显示识别的三个指纹ID



回复

使用道具 举报

46#
ID:513258 发表于 2020-2-23 12:46 | 只看该作者
OLED显示

Waiting fingerprint
等待指纹



回复

使用道具 举报

45#
ID:513258 发表于 2020-2-23 12:36 | 只看该作者
本实验案例中,通过程序之二enroll,注册了“huadaio”的二个指纹1#和3号,注册了“zhanghaoze”一个指纹2#。识别指纹ID后,在串口显示匹配的信心值,在OLED屏显示匹配的招呼语。

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




回复

使用道具 举报

44#
ID:513258 发表于 2020-2-23 12:30 | 只看该作者
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百五十:AS608光学指纹识别模块+0.91寸OLED液晶屏显示模块
  4.   安装AS608库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
  5.   安装OLED库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  6.   安装OLED库:IDE—工具—管理库—搜索Adafruit_GFX—安装

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

  13.   OLED 屏幕实验接线
  14.   oled模块    Ardunio Uno
  15.   GND---------GND接地线
  16.   VCC---------5V 接电源
  17.   SDA---------A4
  18.   SCL ------- A5
  19. */

  20. #include <Wire.h>
  21. #include <Adafruit_GFX.h>
  22. #include <Adafruit_SSD1306.h>
  23. #define OLED_RESET 4
  24. Adafruit_SSD1306 display(OLED_RESET);

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

  28. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
  29. int fingerprintID = 0;
  30. String IDname;

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

  36.   if (finger.verifyPassword()) {
  37.     Serial.println("Found fingerprint sensor!");
  38.   }
  39.   else {
  40.     Serial.println("Did not find fingerprint sensor :(");
  41.     while (1) {
  42.       delay(1);
  43.     }
  44.   }

  45.   //OLED display setup
  46.   Wire.begin();
  47.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  48.   //displays main screen
  49.   displayMainScreen();
  50. }

  51. void loop() {
  52.   displayMainScreen();
  53.   fingerprintID = getFingerprintIDez();
  54.   delay(50);
  55.   if (fingerprintID == 1 || fingerprintID == 3) {
  56.     IDname = "huadiao";
  57.     displayUserGreeting(IDname);
  58.   }
  59.   else if (fingerprintID == 2) {
  60.     IDname = "zhanghaoze";
  61.     displayUserGreeting(IDname);
  62.   }
  63. }

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

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

  70.   p = finger.fingerFastSearch();
  71.   if (p != FINGERPRINT_OK)  return -1;

  72.   // found a match!
  73.   Serial.print("Found ID #");
  74.   Serial.print(finger.fingerID);
  75.   Serial.print(" with confidence of ");
  76.   Serial.println(finger.confidence);
  77.   return finger.fingerID;
  78. }

  79. void displayMainScreen() {
  80.   display.clearDisplay();
  81.   display.setTextSize(1);
  82.   display.setTextColor(WHITE);
  83.   display.setCursor(7, 5);
  84.   display.println("Waiting fingerprint");
  85.   display.setTextSize(1);
  86.   display.setTextColor(WHITE);
  87.   display.setCursor(52, 20);
  88.   display.println("...");
  89.   display.display();
  90.   delay(2000);
  91. }

  92. void displayUserGreeting(String Name) {
  93.   display.clearDisplay();
  94.   display.setTextColor(WHITE);
  95.   display.setTextSize(2);
  96.   display.setCursor(0, 0);
  97.   display.print("Hello");
  98.   display.setCursor(0, 15);
  99.   display.print(Name);
  100.   display.display();
  101.   delay(5000);
  102.   fingerprintID = 0;
  103. }
复制代码


回复

使用道具 举报

43#
ID:513258 发表于 2020-2-22 14:58 | 只看该作者
指纹模块Adafruit-Fingerprint-Sensor-Library库的示例列表

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




回复

使用道具 举报

42#
ID:513258 发表于 2020-2-22 11:55 | 只看该作者
Adafruit光学指纹传感器相关资料
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克




回复

使用道具 举报

41#
ID:513258 发表于 2020-2-22 11:23 | 只看该作者


Found fingerprint sensor!
Now database is empty :)

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

回复

使用道具 举报

40#
ID:513258 发表于 2020-2-22 11:21 | 只看该作者
正在删除所有指纹模板!
按“Y”键继续




回复

使用道具 举报

39#
ID:513258 发表于 2020-2-22 11:19 | 只看该作者

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

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

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

  12. #include <Adafruit_Fingerprint.h>

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

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

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  22. void setup()  
  23. {
  24.   Serial.begin(9600);
  25.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  26.   delay(100);

  27.   Serial.println("\n\nDeleting all fingerprint templates!");
  28.   Serial.println("Press 'Y' key to continue");

  29.   while (1) {
  30.     if (Serial.available() && (Serial.read() == 'Y')) {
  31.       break;
  32.     }
  33.   }

  34.   // set the data rate for the sensor serial port
  35.   finger.begin(57600);
  36.   
  37.   if (finger.verifyPassword()) {
  38.     Serial.println("Found fingerprint sensor!");
  39.   } else {
  40.     Serial.println("Did not find fingerprint sensor :(");
  41.     while (1);
  42.   }
  43.   
  44.   finger.emptyDatabase();

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

  47. void loop() {
  48. }
复制代码



回复

使用道具 举报

38#
ID:513258 发表于 2020-2-22 11:09 | 只看该作者


删除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)。。。

回复

使用道具 举报

37#
ID:513258 发表于 2020-2-22 10:55 | 只看该作者


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

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

回复

使用道具 举报

36#
ID:513258 发表于 2020-2-22 10:47 | 只看该作者
实验之五:输入序号,删除指定指纹模板

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

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

  12. #include <Adafruit_Fingerprint.h>

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

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

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  22. void setup()  
  23. {
  24.   Serial.begin(9600);
  25.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  26.   delay(100);
  27.   Serial.println("\n\nDelete Finger");

  28.   // set the data rate for the sensor serial port
  29.   finger.begin(57600);
  30.   
  31.   if (finger.verifyPassword()) {
  32.     Serial.println("Found fingerprint sensor!");
  33.   } else {
  34.     Serial.println("Did not find fingerprint sensor :(");
  35.     while (1);
  36.   }
  37. }


  38. uint8_t readnumber(void) {
  39.   uint8_t num = 0;
  40.   
  41.   while (num == 0) {
  42.     while (! Serial.available());
  43.     num = Serial.parseInt();
  44.   }
  45.   return num;
  46. }

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

  54.   Serial.print("Deleting ID #");
  55.   Serial.println(id);
  56.   
  57.   deleteFingerprint(id);
  58. }

  59. uint8_t deleteFingerprint(uint8_t id) {
  60.   uint8_t p = -1;
  61.   
  62.   p = finger.deleteModel(id);

  63.   if (p == FINGERPRINT_OK) {
  64.     Serial.println("Deleted!");
  65.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  66.     Serial.println("Communication error");
  67.     return p;
  68.   } else if (p == FINGERPRINT_BADLOCATION) {
  69.     Serial.println("Could not delete in that location");
  70.     return p;
  71.   } else if (p == FINGERPRINT_FLASHERR) {
  72.     Serial.println("Error writing to flash");
  73.     return p;
  74.   } else {
  75.     Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
  76.     return p;
  77.   }   
  78. }
复制代码



回复

使用道具 举报

35#
ID:513258 发表于 2020-2-22 10:37 | 只看该作者


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

回复

使用道具 举报

34#
ID:513258 发表于 2020-2-22 10:35 | 只看该作者
指纹模板提取器
找到指纹传感器!
------------------------------------
试图加载1
加载模板1
试图获取1
模板1传输:
读取534字节。
正在解码数据包……




回复

使用道具 举报

33#
ID:513258 发表于 2020-2-22 10:29 | 只看该作者

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


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

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


  12. #include <Adafruit_Fingerprint.h>

  13. int getFingerprintIDez();

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


  17. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  18. void setup()  
  19. {
  20.   while(!Serial);
  21.   Serial.begin(9600);
  22.   Serial.println("Fingerprint template extractor");

  23.   // set the data rate for the sensor serial port
  24.   finger.begin(57600);
  25.   
  26.   if (finger.verifyPassword()) {
  27.     Serial.println("Found fingerprint sensor!");
  28.   } else {
  29.     Serial.println("Did not find fingerprint sensor :(");
  30.     while (1);
  31.   }

  32.   // Try to get the templates for fingers 1 through 10
  33.   for (int finger = 1; finger < 10; finger++) {
  34.     downloadFingerprintTemplate(finger);
  35.   }
  36. }

  37. uint8_t downloadFingerprintTemplate(uint16_t id)
  38. {
  39.   Serial.println("------------------------------------");
  40.   Serial.print("Attempting to load #"); Serial.println(id);
  41.   uint8_t p = finger.loadModel(id);
  42.   switch (p) {
  43.     case FINGERPRINT_OK:
  44.       Serial.print("Template "); Serial.print(id); Serial.println(" loaded");
  45.       break;
  46.     case FINGERPRINT_PACKETRECIEVEERR:
  47.       Serial.println("Communication error");
  48.       return p;
  49.     default:
  50.       Serial.print("Unknown error "); Serial.println(p);
  51.       return p;
  52.   }

  53.   // OK success!

  54.   Serial.print("Attempting to get #"); Serial.println(id);
  55.   p = finger.getModel();
  56.   switch (p) {
  57.     case FINGERPRINT_OK:
  58.       Serial.print("Template "); Serial.print(id); Serial.println(" transferring:");
  59.       break;
  60.    default:
  61.       Serial.print("Unknown error "); Serial.println(p);
  62.       return p;
  63.   }
  64.   
  65.   // one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless' :D
  66.   uint8_t bytesReceived[534]; // 2 data packets
  67.   memset(bytesReceived, 0xff, 534);

  68.   uint32_t starttime = millis();
  69.   int i = 0;
  70.   while (i < 534 && (millis() - starttime) < 20000) {
  71.       if (mySerial.available()) {
  72.           bytesReceived[i++] = mySerial.read();
  73.       }
  74.   }
  75.   Serial.print(i); Serial.println(" bytes read.");
  76.   Serial.println("Decoding packet...");

  77.   uint8_t fingerTemplate[512]; // the real template
  78.   memset(fingerTemplate, 0xff, 512);

  79.   // filtering only the data packets
  80.   int uindx = 9, index = 0;
  81.   while (index < 534) {
  82.       while (index < uindx) ++index;
  83.       uindx += 256;
  84.       while (index < uindx) {
  85.           fingerTemplate[index++] = bytesReceived[index];
  86.       }
  87.       uindx += 2;
  88.       while (index < uindx) ++index;
  89.       uindx = index + 9;
  90.   }
  91.   for (int i = 0; i < 512; ++i) {
  92.       //Serial.print("0x");
  93.       printHex(fingerTemplate[i], 2);
  94.       //Serial.print(", ");
  95.   }
  96.   Serial.println("\ndone.");

  97.   /*
  98.   uint8_t templateBuffer[256];
  99.   memset(templateBuffer, 0xff, 256);  //zero out template buffer
  100.   int index=0;
  101.   uint32_t starttime = millis();
  102.   while ((index < 256) && ((millis() - starttime) < 1000))
  103.   {
  104.     if (mySerial.available())
  105.     {
  106.       templateBuffer[index] = mySerial.read();
  107.       index++;
  108.     }
  109.   }
  110.   
  111.   Serial.print(index); Serial.println(" bytes read");
  112.   
  113.   //dump entire templateBuffer.  This prints out 16 lines of 16 bytes
  114.   for (int count= 0; count < 16; count++)
  115.   {
  116.     for (int i = 0; i < 16; i++)
  117.     {
  118.       Serial.print("0x");
  119.       Serial.print(templateBuffer[count*16+i], HEX);
  120.       Serial.print(", ");
  121.     }
  122.     Serial.println();
  123.   }*/
  124. }



  125. void printHex(int num, int precision) {
  126.     char tmp[16];
  127.     char format[128];

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

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

  132. void loop()
  133. {}
复制代码



回复

使用道具 举报

32#
ID:513258 发表于 2020-2-22 10:04 | 只看该作者


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

回复

使用道具 举报

31#
ID:513258 发表于 2020-2-22 10:01 | 只看该作者
已注册手指指纹检测试验
找到指纹传感器!
传感器包含2个模板
正在等待有效的手指……




回复

使用道具 举报

30#
ID:513258 发表于 2020-2-22 09:55 | 只看该作者
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块

  4.   实验之三:查找一个匹配的指纹
  5.   安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
  6.   实验接线:
  7.   Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

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

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

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

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

  28.   // set the data rate for the sensor serial port
  29.   finger.begin(57600);
  30.   delay(5);
  31.   if (finger.verifyPassword()) {
  32.     Serial.println("Found fingerprint sensor!");
  33.   } else {
  34.     Serial.println("Did not find fingerprint sensor :(");
  35.     while (1) { delay(1); }
  36.   }

  37.   finger.getTemplateCount();
  38.   Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  39.   Serial.println("Waiting for valid finger...");
  40. }

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

  46. uint8_t getFingerprintID() {
  47.   uint8_t p = finger.getImage();
  48.   switch (p) {
  49.     case FINGERPRINT_OK:
  50.       Serial.println("Image taken");
  51.       break;
  52.     case FINGERPRINT_NOFINGER:
  53.       Serial.println("No finger detected");
  54.       return p;
  55.     case FINGERPRINT_PACKETRECIEVEERR:
  56.       Serial.println("Communication error");
  57.       return p;
  58.     case FINGERPRINT_IMAGEFAIL:
  59.       Serial.println("Imaging error");
  60.       return p;
  61.     default:
  62.       Serial.println("Unknown error");
  63.       return p;
  64.   }

  65.   // OK success!

  66.   p = finger.image2Tz();
  67.   switch (p) {
  68.     case FINGERPRINT_OK:
  69.       Serial.println("Image converted");
  70.       break;
  71.     case FINGERPRINT_IMAGEMESS:
  72.       Serial.println("Image too messy");
  73.       return p;
  74.     case FINGERPRINT_PACKETRECIEVEERR:
  75.       Serial.println("Communication error");
  76.       return p;
  77.     case FINGERPRINT_FEATUREFAIL:
  78.       Serial.println("Could not find fingerprint features");
  79.       return p;
  80.     case FINGERPRINT_INVALIDIMAGE:
  81.       Serial.println("Could not find fingerprint features");
  82.       return p;
  83.     default:
  84.       Serial.println("Unknown error");
  85.       return p;
  86.   }
  87.   
  88.   // OK converted!
  89.   p = finger.fingerFastSearch();
  90.   if (p == FINGERPRINT_OK) {
  91.     Serial.println("Found a print match!");
  92.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  93.     Serial.println("Communication error");
  94.     return p;
  95.   } else if (p == FINGERPRINT_NOTFOUND) {
  96.     Serial.println("Did not find a match");
  97.     return p;
  98.   } else {
  99.     Serial.println("Unknown error");
  100.     return p;
  101.   }   
  102.   
  103.   // found a match!
  104.   Serial.print("Found ID #"); Serial.print(finger.fingerID);
  105.   Serial.print(" with confidence of "); Serial.println(finger.confidence);

  106.   return finger.fingerID;
  107. }

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

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

  114.   p = finger.fingerFastSearch();
  115.   if (p != FINGERPRINT_OK)  return -1;
  116.   
  117.   // found a match!
  118.   Serial.print("Found ID #"); Serial.print(finger.fingerID);
  119.   Serial.print(" with confidence of "); Serial.println(finger.confidence);
  120.   return finger.fingerID;
  121. }
复制代码


回复

使用道具 举报

29#
ID:513258 发表于 2020-2-22 09:16 | 只看该作者
补充:安装Adafruit指纹传感器库
使用Arduino控制指纹传感器模块的最简单方法是使用该传感器的Adafruit库。按照下面的说明安装库:
传感器的Adafruit库下载地址(含eroll文件)
https://github.com/IT-XIAOXIAO/Adafrui

首先下载Adafruit指纹传感器库。下载完成后,您将得到一个.zip文件;
解压缩.zip文件,你会看到一个Adafruit-Fingerprint-Sensor-Library-master文件夹;
将Adafruit-Fingerprint-Sensor-Library-master文件夹重命名为Adafruit_Fingerprint_Sensor_Library文件夹;
将文件夹移动到您的Arduino IDE安装库文件夹;
最后,重新打开Arduino IDE。



回复

使用道具 举报

28#
ID:513258 发表于 2020-2-22 08:16 | 只看该作者
注册ID#1
等待有效手指注册为1
.
.
.
……拍摄的图像
图像转换
取下手指
身份证1
再次放置同一个手指
……拍摄的图像
图像转换
为1创建模型
指纹匹配!
身份证1
存储!
等待有效手指注册为1




回复

使用道具 举报

27#
ID:513258 发表于 2020-2-22 06:26 | 只看该作者

回复

使用道具 举报

26#
ID:513258 发表于 2020-2-21 17:14 | 只看该作者
Adafruit指纹传感器注册
找到指纹传感器!
准备注册指纹!
请键入要将此手指另存为……




回复

使用道具 举报

25#
ID:513258 发表于 2020-2-21 16:39 | 只看该作者
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块
  4.   
  5.   实验之二:输入序号,注册指纹示例
  6.   安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
  7.   实验接线:
  8.   Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
  9.   TX      2
  10.   RX      3
  11.   GND    GND
  12. */

  13. #include <Adafruit_Fingerprint.h>

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

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

  22. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  23. uint8_t id;

  24. void setup()  
  25. {
  26.   Serial.begin(9600);
  27.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  28.   delay(100);
  29.   Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

  30.   // 设置传感器串行端口的数据速率
  31.   finger.begin(57600);
  32.   
  33.   if (finger.verifyPassword()) {
  34.     Serial.println("Found fingerprint sensor!");
  35.   } else {
  36.     Serial.println("Did not find fingerprint sensor :(");
  37.     while (1) { delay(1); }
  38.   }
  39. }

  40. uint8_t readnumber(void) {
  41.   uint8_t num = 0;
  42.   
  43.   while (num == 0) {
  44.     while (! Serial.available());
  45.     num = Serial.parseInt();
  46.   }
  47.   return num;
  48. }

  49. void loop()                      // 循环执行
  50. {
  51.   Serial.println("Ready to enroll a fingerprint!");
  52.   Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
  53.   id = readnumber();
  54.   if (id == 0) {// ID #0 not allowed, try again!
  55.      return;
  56.   }
  57.   Serial.print("Enrolling ID #");
  58.   Serial.println(id);
  59.   
  60.   while (!  getFingerprintEnroll() );
  61. }

  62. uint8_t getFingerprintEnroll() {

  63.   int p = -1;
  64.   Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
  65.   while (p != FINGERPRINT_OK) {
  66.     p = finger.getImage();
  67.     switch (p) {
  68.     case FINGERPRINT_OK:
  69.       Serial.println("Image taken");
  70.       break;
  71.     case FINGERPRINT_NOFINGER:
  72.       Serial.println(".");
  73.       break;
  74.     case FINGERPRINT_PACKETRECIEVEERR:
  75.       Serial.println("Communication error");
  76.       break;
  77.     case FINGERPRINT_IMAGEFAIL:
  78.       Serial.println("Imaging error");
  79.       break;
  80.     default:
  81.       Serial.println("Unknown error");
  82.       break;
  83.     }
  84.   }

  85.   // OK success!

  86.   p = finger.image2Tz(1);
  87.   switch (p) {
  88.     case FINGERPRINT_OK:
  89.       Serial.println("Image converted");
  90.       break;
  91.     case FINGERPRINT_IMAGEMESS:
  92.       Serial.println("Image too messy");
  93.       return p;
  94.     case FINGERPRINT_PACKETRECIEVEERR:
  95.       Serial.println("Communication error");
  96.       return p;
  97.     case FINGERPRINT_FEATUREFAIL:
  98.       Serial.println("Could not find fingerprint features");
  99.       return p;
  100.     case FINGERPRINT_INVALIDIMAGE:
  101.       Serial.println("Could not find fingerprint features");
  102.       return p;
  103.     default:
  104.       Serial.println("Unknown error");
  105.       return p;
  106.   }
  107.   
  108.   Serial.println("Remove finger");
  109.   delay(2000);
  110.   p = 0;
  111.   while (p != FINGERPRINT_NOFINGER) {
  112.     p = finger.getImage();
  113.   }
  114.   Serial.print("ID "); Serial.println(id);
  115.   p = -1;
  116.   Serial.println("Place same finger again");
  117.   while (p != FINGERPRINT_OK) {
  118.     p = finger.getImage();
  119.     switch (p) {
  120.     case FINGERPRINT_OK:
  121.       Serial.println("Image taken");
  122.       break;
  123.     case FINGERPRINT_NOFINGER:
  124.       Serial.print(".");
  125.       break;
  126.     case FINGERPRINT_PACKETRECIEVEERR:
  127.       Serial.println("Communication error");
  128.       break;
  129.     case FINGERPRINT_IMAGEFAIL:
  130.       Serial.println("Imaging error");
  131.       break;
  132.     default:
  133.       Serial.println("Unknown error");
  134.       break;
  135.     }
  136.   }

  137.   // OK success!

  138.   p = finger.image2Tz(2);
  139.   switch (p) {
  140.     case FINGERPRINT_OK:
  141.       Serial.println("Image converted");
  142.       break;
  143.     case FINGERPRINT_IMAGEMESS:
  144.       Serial.println("Image too messy");
  145.       return p;
  146.     case FINGERPRINT_PACKETRECIEVEERR:
  147.       Serial.println("Communication error");
  148.       return p;
  149.     case FINGERPRINT_FEATUREFAIL:
  150.       Serial.println("Could not find fingerprint features");
  151.       return p;
  152.     case FINGERPRINT_INVALIDIMAGE:
  153.       Serial.println("Could not find fingerprint features");
  154.       return p;
  155.     default:
  156.       Serial.println("Unknown error");
  157.       return p;
  158.   }
  159.   
  160.   // OK converted!
  161.   Serial.print("Creating model for #");  Serial.println(id);
  162.   
  163.   p = finger.createModel();
  164.   if (p == FINGERPRINT_OK) {
  165.     Serial.println("Prints matched!");
  166.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  167.     Serial.println("Communication error");
  168.     return p;
  169.   } else if (p == FINGERPRINT_ENROLLMISMATCH) {
  170.     Serial.println("Fingerprints did not match");
  171.     return p;
  172.   } else {
  173.     Serial.println("Unknown error");
  174.     return p;
  175.   }   
  176.   
  177.   Serial.print("ID "); Serial.println(id);
  178.   p = finger.storeModel(id);
  179.   if (p == FINGERPRINT_OK) {
  180.     Serial.println("Stored!");
  181.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  182.     Serial.println("Communication error");
  183.     return p;
  184.   } else if (p == FINGERPRINT_BADLOCATION) {
  185.     Serial.println("Could not store in that location");
  186.     return p;
  187.   } else if (p == FINGERPRINT_FLASHERR) {
  188.     Serial.println("Error writing to flash");
  189.     return p;
  190.   } else {
  191.     Serial.println("Unknown error");
  192.     return p;
  193.   }   
  194. }
复制代码


回复

使用道具 举报

24#
ID:513258 发表于 2020-2-18 19:03 | 只看该作者

找不到指纹传感器




回复

使用道具 举报

23#
ID:513258 发表于 2020-2-18 19:01 | 只看该作者

回复

使用道具 举报

22#
ID:513258 发表于 2020-2-18 18:49 | 只看该作者
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块
  4.   实验之一:Adafruit指纹传感器,更改密码示例
  5.   安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
  6.   实验接线:
  7.   Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

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

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

  21. // Using sensor without password
  22. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  23. // Using sensor with password
  24. //Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial, 1337);

  25. void setup()
  26. {
  27.   while (!Serial);  // For Yun/Leo/Micro/Zero/...

  28.   Serial.begin(9600);
  29.   Serial.println("Adafruit fingerprint sensor, change password example");

  30.   // set the data rate for the sensor serial port
  31.   finger.begin(19200);

  32.   if (finger.verifyPassword()) {
  33.     Serial.println("Found fingerprint sensor!");
  34.   } else {
  35.     Serial.println("Did not find fingerprint sensor :(");
  36.     while (1);
  37.   }

  38.   Serial.print("Set password... ");
  39.   uint8_t p = finger.setPassword(1337);
  40.   if (p == FINGERPRINT_OK) {
  41.     Serial.println("OK"); // Password is set
  42.   } else {
  43.     Serial.println("ERROR"); // Failed to set password
  44.   }
  45. }

  46. void loop()
  47. {

  48. }
复制代码


回复

使用道具 举报

21#
ID:513258 发表于 2020-2-18 18:46 | 只看该作者
实验之一:Adafruit指纹传感器,更改密码示例
安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装
实验接线:
Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)         
TX      2     
RX      3
GND    GND




回复

使用道具 举报

20#
ID:513258 发表于 2020-2-18 16:06 | 只看该作者




回复

使用道具 举报

19#
ID:513258 发表于 2020-2-18 15:49 | 只看该作者
模块接口
模块接口采用 8 芯 1.25 mm 间距单排插座,PCB 如图 2.1.1 所示。模块内部内置了手指探测电路,用户可读取状态引脚TCH(WAK)判断有无手指按下。

引脚号  名称   类型        功能描述
1            Vi              In        模块电源正输入端+3.3V(请勿接3.3V以上电源,否则烧毁模块!)         
2           TX            Out        串行数据输出,接MCU或TTL串口的RX。
3           RX             In        串行数据输入,接MCU或TTL串口的TX。
4          GND           -        信号地。内部与电源地连接。
5          TCH          Out        感应信号输出,默认高电平有效
6          UA            In         触摸感应电源输入端,3.3v供电
7          D+           -          USB D+
8          D-           -           USB D-
(7脚,8脚为USB信号线,使用串口控制模块时可以悬空不用)




回复

使用道具 举报

18#
ID:513258 发表于 2020-2-18 11:44 | 只看该作者
指纹识别过程
分为两个次要过程,分为四个部分。两个次要的过程是指纹记录和交叉核对过程。指纹记录过程由四个部分组成:指纹采集、指纹预处理、指纹检查和指纹模板采集。指纹比对过程还包括四个部分:指纹采集、指纹预处理、指纹特征比对和匹配。在这两个过程中,指纹图像的前处理都存在,但指纹图像的取值和指纹 特征的值似乎有相同的名称,但它们的内在算法和性质是完全不同的。在引入指纹的过程中,更频繁地获得指纹图像,而单值提取部分的算法更多地关注一些特征值的辨析和获取过程。

指纹识别的第一步是指纹图像的获取,目前已经有多种指纹图像的获取方式,主要有光学指纹采集技术、电容式传感器指纹采集、温度传感指纹获取技术、超声波指纹采集技术、电磁波指纹采集技术,获得图像后进行预处理加工,要实现图像的灰度变换、分割、均衡化、增强、 细化等预处理步骤。首先要把指纹从整个图案上分割出来, 背景图和指纹分布图的灰度是不同的,这就确定了两者强度的区别, 利用梯度这个概念就能将指纹从背景图中很好的分离开;均衡化是预 处理中的重要一步,在提取时根据环境的不同得到的指纹图像不同区域的像素分布点是不同的,均衡化就是将不同区域分布的像素进行均值划分得到亮度分布均衡的图像;为了便于特征的提取,在几步加工后的图像还要智能化增强,Daugmann实现了利用Gabor小波逼近的方法使指纹图像的纹路线条更加清晰,即白的部分更白,黑的部分更黑,线条的边缘分布更加平滑。




对于处理好的指纹图像,指纹的纹路已经十分清晰,要进行指纹识别必须要进行特征提取,分离出那些具体的特征点来代替不同的纹路,首先提取指纹的特征端点和叉点,将端点叉点图像进行九宫格分割,利用指纹特征分布的灰度值是不同的这个特性,将指纹图像的端点和叉点分离出来,对于奇异点的提取利用Poincare公式,利用这个公式提取方向场周围剧烈变化的点,我们在计算机中使用不同的算法分别实现各个特征点的提取过程。

最后将识别的指纹分类操作,指纹的分类是用采集的指纹特征与数据库中保存的指纹特征相比较,判断是否属于同一指纹,首先根据指纹的纹形进行粗匹配,进而利用指纹形态和细节特征进行精确匹配给出相比较指纹的相似性程度。根据应用的不同,对指纹的相似性得分进行排序或给出是否为同一指纹的判决结果,指纹对比有两种方式: 一对一比对是根据用户从数据库中检索出待对比的用户指纹,再与新采集的指纹比对;一对多比对是新采集的指纹和数据库中的所有指纹逐一比对。




回复

使用道具 举报

17#
ID:513258 发表于 2020-2-17 19:36 | 只看该作者
yechuan220 发表于 2020-2-17 15:18
感觉很高深的样子,感觉很复杂

不会啊,简单知识点
回复

使用道具 举报

16#
ID:513258 发表于 2020-2-17 19:35 | 只看该作者


光学指纹模块工作原理
是指利用光的折摄和反射原理,将手指放在光学镜片上,手指在内置光源照射下,光从底部射向三棱镜,并经棱镜射出,射出的光线在手指表面指纹凹凸不平的线纹上折射的角度及反射回去的光线明暗就会不一样。用棱镜将其投射在电荷耦合器件上CMOS或者CCD上,进而形成脊线(指纹图像中具有一定宽度和走向的纹线)呈黑色、谷线(纹线之间的凹陷部分)呈白色的数字化的、可被指纹设备算法处理的多灰度指纹图像。其优点主要表现为经历长期实用检验、系统稳定性较好、成本亦较低、能提供分辨力为500 dpi( dot per inch)的图像。特别是能实现较大区域的指纹图像采集,有效克服大面积半导体指纹传感器价格昂贵缺点。该传感器局限性主要体现于潜在指印方面,不但会降低指纹图像的质量,严重时,还可能导致两个指印重叠,显然难以满足实际应用需要。此外,台板涂层及CCD阵列会随时间推移产生损耗,可能导致采集的指纹图像质量下降。随着光学技术发展,一些新颖的技术手段亦已应用于指纹图像的采集,这样能显着减小光学指纹传感器的体积。





回复

使用道具 举报

15#
ID:259035 发表于 2020-2-17 15:18 | 只看该作者
感觉很高深的样子,感觉很复杂
回复

使用道具 举报

14#
ID:513258 发表于 2020-2-17 15:03 | 只看该作者
模块电原理图



回复

使用道具 举报

13#
ID:513258 发表于 2020-2-17 15:01 | 只看该作者

回复

使用道具 举报

12#
ID:513258 发表于 2020-2-17 14:57 | 只看该作者
模块技术指标



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表