|
在本篇文章中,我们将向您展示如何通过指纹传感器和Arduino开发板提高存储在硬盘驱动器中的数据的安全性。在本文结束时,您可以学习到: ● 如何使用指纹传感器。 ● 为您的硬盘驱动器添加安全性。 ● 可以授予特定用户访问权限以使用您的数据区域。
数据区域安全 硬盘驱动器(HDD)、硬盘或固定盘是机电数据存储设备,其使用磁存储器来使用涂覆有磁性材料的一个或多个刚性快速旋转盘(盘片)来存储和检索数字信息。盘片与磁头配对,通常布置在移动的致动器臂上,该致动器臂将数据读取和写入盘片表面。以随机访问方式访问数据,这意味着可以以任何顺序存储或检索各个数据块,而不仅仅是顺序存储或检索。 HDD是一种非易失性存储器,即使在断电时也能保留存储的数据。
闪存是一种电子(固态)非易失性计算机存储介质,可以电擦除和重新编程。
东芝在20世纪80年代早期从EEPROM(电可擦除可编程只读存储器)开发了闪存,并于1984年将其推向市场。两种主要类型的闪存以NAND和NOR逻辑门命名。各个闪存单元表现出与相应栅极类似的内部特性。
虽然在重写之前必须完全擦除EPROM,但是可以以通常比整个器件小得多的块(或页)来写入和读取NAND型闪存。 NOR型闪存允许将单个机器字(字节)写入 - 擦除位置 - 或独立读取。
如果您使用硬盘驱动器或闪存来存储数据,并且他们的硬件或软件没有任何安全性,则此项目对您非常有用。
R301T指纹模块
狭义的指纹是人类手指的摩擦脊留下的印象。从犯罪现场恢复指纹是法医学的重要方法。指纹很容易通过表皮脊中存在的外分泌腺的汗液的天然分泌物沉积在合适的表面(例如玻璃或金属或抛光的石头)上。这些有时被称为“Chanced Impressions”。
在该术语的更广泛使用中,指纹是来自人或其他灵长类动物手的任何部分的摩擦脊的印象的痕迹。来自脚底的指纹也可留下摩擦脊的印象。
在这个项目中,我们使用R301T传感器模块与Arduino等控制器进行串行通信以交换数据。我们开始做吧。
所需的组件 ● Arduino Pro Mini开发板 ● R301T半导体指纹模块 ● 1通道5V SSR固态继电器 ● 5mm RGB三色4Pin LED灯 ● Micro USB 3.0连接器
电路连接
代码 您需要添加指纹传感器的库,然后上传代码。如果这是您第一次使用Arduino开发板,请不要担心。只需按以下步骤操作: ● 访问www.arduino.cc/en/Main/Software并下载操作系统的软件。按照说明安装IDE软件。 ● 运行Arduino IDE并清除文本编辑器,然后在文本编辑器中复制以下代码。 ● 导航到草图并包含库。现在单击添加ZIP库并添加库 ● 在tools and boards菜单中选择您使用的Arduino电路板。 ● 将Arduino连接到PC,然后在tools and port中设置COM端口。 ● 按上传(箭头符号)按钮。 ● 现在都准备好了!
所需的库文件下载链接: - #include "Adafruit_Fingerprint.h"
- #include "SoftwareSerial.h"
- SoftwareSerial mySerial(2, 3);
-
- Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
-
- int cc=0;
- 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);
-
- if (finger.verifyPassword()) {
- Serial.println("Found fingerprint sensor!");
- } else {
- Serial.println("Did not find fingerprint sensor :(");
- while (1) { delay(1); }
-
- pinMode(13,OUTPUT);
- digitalWrite(13,LOW);
- pinMode(9,OUTPUT);
- pinMode(10,OUTPUT);
- pinMode(11,OUTPUT);
- digitalWrite(9,HIGH);
- }
-
- finger.getTemplateCount();
- Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
- Serial.println("Waiting for valid finger...");
- }
-
- 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;
- }
-
- digitalWrite(9,LOW);
- // found a match!
- for (int i=0;i>5;i++)
- {digitalWrite(10,LOW);
- delay(10);
- digitalWrite(10,HIGH);
- delay(10);}
- Serial.print("Found ID #");
- Serial.print(finger.fingerID);
- Serial.print(" with confidence of ");
- Serial.println(finger.confidence);
- for (int i=255;i>1;i--)
- {analogWrite(11,i); delay(10);}
- digitalWrite(13,HIGH);
- 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;
- }
复制代码
组装
首先,用微型USB 3插座制作一个小型电缆连接器。 要找出插座的引脚图,请使用硬盘板。
制作一个带有亚克力板(有机玻璃)的盒子并将电路放入其中。
将继电器与电路板分开并直接连接到Arduino。
接下来的改进措施 您可以根据需要改进此项目。 以下是一些建议: ● 尝试在Arduino开发板中存储每个用户的连接时间。 ● 尝试计算每个用户传输的数据量。 |