|
如今,大多数汽车都配备了无钥匙进入和一键启动按钮,您只需要将钥匙放在口袋中,并且只需将手指放在门把手上的电容式传感器上即可打开车门。在本篇文章中,我们将使用RFID和指纹传感器向该系统添加更多安全功能。 RFID传感器将验证用户的许可证明,而指纹传感器将仅允许授权人员进入车辆。
对于此基于指纹的汽车点火系统,我们将Arduino与R305指纹传感器和EM18 RFID读卡器配合使用。
所需的组件 ● Arduino Nano开发板 ● R305指纹感应器 ● EM18 RFID读卡器 ● 1602显示屏 ● 直流电机 ● L293D电机驱动器 ● 面包板 ● 连接线 ● 12V DC电池
EM18 RFID读卡器模块
RFID代表射频识别(Radio frequency identification)。它是指一种技术,其中数字数据被编码在RFID标签中,并且可以由RFID读卡器使用无线电波将其解码。 RFID与条形码相似,其中标签的数据由设备解码。 RFID技术被用于各种应用中,例如安全系统、员工考勤系统、RFID门锁、基于RFID的投票机、收费系统等。
EM18读卡器是一个模块,可以读取存储在RFID标签中的ID信息。 RFID标签存储一个12位数的唯一编号,当标签位于读卡器的范围内时,EM18读卡器模块可以将其解码。该模块的工作频率为125 kHz,带有内置天线,并使用5V直流电源供电。
它提供串行数据输出,读卡距离为8-12厘米。串行通信参数为8个数据位、1个停止位和9600波特率。
EM18读卡器的功能: ● 工作电压:+ 4.5V至+ 5.5V ● 消耗电流:50mA ● 工作频率:125KHZ ● 工作温度:0-80摄氏度 ● 通讯波特率:9600 ● 读卡距离:8-12厘米 ● 天线:内置
使用Arduino找出RFID标签唯一的12位代码 在为汽车点火系统编程Arduino之前,首先,我们需要找出12位RFID标签的唯一代码。正如我们之前讨论的那样,RFID标签包含12位唯一代码,可以使用RFID读卡器对其进行解码。当我们在读卡器附近滑动RFID标签时,它会将通过输出串口提供唯一代码。首先,按照电路图将Arduino连接到RFID读卡器,然后将下面给出的代码上传到Arduino。 - int count = 0;
- char card_no[12];
- void setup()
- {
- Serial.begin(9600);
- }
- void loop()
- {
- if(Serial.available())
- {
- count = 0;
- while(Serial.available() && count < 12)
- {
- card_no[count] = Serial.read();
- count++;
- delay(5);
- }
- Serial.print(card_no);
- }
- }
复制代码
成功上传代码后,打开串口监视器,并将波特率设置为9600。然后在读卡器附近刷卡。然后,12位代码将开始在串口监视器上显示。对所有使用过的RFID标签执行此过程,并记下来以备将来参考。
电路原理图 该基于指纹的点火系统的电路图如下:
在本文中,我们在面包板上焊接整个电路,如下所示:
指纹传感器模块 指纹传感器模块可捕获手指的指纹图像,然后将其转换为等效的模板,并通过Arduino将其保存到选定ID(位置)的内存中。在这里,所有过程都是由Arduino命令的,例如拍摄指纹图像、将其转换为模板以及存储位置等。
将指纹注册到传感器: 在继续该程序之前,我们需要安装指纹传感器所需的库。在这里,我们使用“ Adafruit_Fingerprint.h”来使用R305指纹传感器。因此,首先使用下面给出的链接下载该库: ● Adafruit指纹传感器库 成功下载后,在Arduino IDE中,转到 File > Tools > Include library > Add .zip library,然后选择zip文件位置安装该库。
成功安装库后,请按照以下步骤在传感器内存中注册一个新指纹。
1. 在Arduino IDE中,转到File > Examples > Adafruit Fingerprint Sensor Library > Enroll。
2. 将代码上传到Arduino,然后以9600的波特率打开串口监视器。 注意:将程序中的软件串行引脚更改为SoftwareSerial mySerial(12,11)。
3. 您应该输入要在其中存储指纹的指纹的ID。因为这是我的第一个指纹,所以我在左上角键入1,然后单击“Send ”按钮。
4. 然后,指纹传感器上的指示灯将闪烁,表明这时您应该将手指放在传感器上,然后按照串口监视器上显示的步骤进行操作,直到确认您已成功注册为止。
RFID无钥匙点火编程 本文末尾提供了此指纹点火系统的完整代码。在这里,我们解释了代码的一些重要部分。
第一件事是包括所有必需的库。本文中,包含用于使用R305指纹传感器的“ Adafruit_Fingerprint.h”。然后配置将要连接指纹传感器的串行端口。将12声明为RX引脚,将11声明为TX引脚。 - #include <Adafruit_Fingerprint.h>
- #include <LiquidCrystal.h>
- SoftwareSerial mySerial(12,11);
- Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
复制代码
在下一步中,声明所有变量,这些变量将在整个代码中使用。然后使用Arduino定义LCD连接引脚,然后声明LiquidCrystal类的对象。 - char input[12];
- int count = 0;
- int a = 0;
- const int rs = 6, en = 7, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
复制代码
接下来,在loop()函数中,编写代码以获取RFID标签的唯一12位代码,并将它们存储在数组中。这里,数组的元素将与存储器中存储的唯一代码匹配,以获取经过身份验证的人员详细信息。 - count = 0;
- while (Serial.available() && count < 12)
- {
- input[count] = Serial.read();
- count++;
- delay(5);
- }
复制代码
然后,将接收到的数组与存储的标签代码进行比较。如果代码匹配,则许可证被认为是有效的,这允许用户放置有效的指纹。否则,它将显示无效的许可证。 - if ((strncmp(input, "3F009590566C", 12) == 0) && (a == 0))
- {
- lcd.setCursor(0, 0);
- lcd.print("License Valid ");
- lcd.setCursor(0, 1);
- lcd.print("Welcome ");
- delay(1000);
- a = 1;
- fingerprint();
- }
复制代码
在下一步中,将编写函数getFingerprintID,该函数将为已注册的指纹返回有效的指纹ID。 - int getFingerprintID()
- {
- 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;
- return finger.fingerID;
- }
复制代码
在成功完成RFID匹配后,在函数Fingerprint()中,调用getFingerprintID函数以获取有效的指纹ID。然后使用if-else循环进行比较,以获取有关经过身份验证的人员数据的信息,如果数据匹配,则将车辆点火,否则,将提示输入错误的指纹。 - int fingerprintID = getFingerprintID();
- delay(50);
- if (fingerprintID == 1)
- {
- lcd.setCursor(0, 0);
- lcd.print("Access Granted ");
- lcd.setCursor(0, 1);
- lcd.print("Vehicle Started ");
- digitalWrite(9,HIGH);
- digitalWrite(10,LOW);
- while(1);
- }
复制代码
以上这就是RFID汽车点火系统的工作原理,为您的汽车增加了两层安全性。
代码 本文使用的完整代码如下所示:
main.rar
(929 Bytes, 下载次数: 19)
|