风筝
发表于: 2020-8-25 21:35:20 | 显示全部楼层

如今,大多数汽车都配备了无钥匙进入和一键启动按钮,您只需要将钥匙放在口袋中,并且只需将手指放在门把手上的电容式传感器上即可打开车门。在本篇文章中,我们将使用RFID和指纹传感器向该系统添加更多安全功能。 RFID传感器将验证用户的许可证明,而指纹传感器将仅允许授权人员进入车辆。


对于此基于指纹的汽车点火系统,我们将Arduino与R305指纹传感器和EM18 RFID读卡器配合使用。


所需的组件

●    Arduino Nano开发板

●    R305指纹感应器

●    EM18 RFID读卡器

●    1602显示屏

●    直流电机

●    L293D电机驱动器

●    面包板

●    连接线

●    12V DC电池


EM18 RFID读卡器模块

RFID.jpg

RFID代表射频识别(Radio frequency identification)。它是指一种技术,其中数字数据被编码在RFID标签中,并且可以由RFID读卡器使用无线电波将其解码。 RFID与条形码相似,其中标签的数据由设备解码。 RFID技术被用于各种应用中,例如安全系统、员工考勤系统、RFID门锁、基于RFID的投票机、收费系统等。


EM18读卡器是一个模块,可以读取存储在RFID标签中的ID信息。 RFID标签存储一个12位数的唯一编号,当标签位于读卡器的范围内时,EM18读卡器模块可以将其解码。该模块的工作频率为125 kHz,带有内置天线,并使用5V直流电源供电。


它提供串行数据输出,读卡距离为8-12厘米。串行通信参数为8个数据位、1个停止位和9600波特率。

RFID-card.jpg


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。

  1. int count = 0;
  2. char card_no[12];
  3. void setup()
  4. {
  5.    Serial.begin(9600);
  6. }
  7. void loop()
  8. {
  9.    if(Serial.available())
  10.    {
  11.       count = 0;
  12.       while(Serial.available() && count < 12)
  13.       {
  14.          card_no[count] = Serial.read();
  15.          count++;
  16.          delay(5);
  17.       }
  18.       Serial.print(card_no);
  19.    }
  20. }
复制代码

成功上传代码后,打开串口监视器,并将波特率设置为9600。然后在读卡器附近刷卡。然后,12位代码将开始在串口监视器上显示。对所有使用过的RFID标签执行此过程,并记下来以备将来参考。


电路原理图

该基于指纹的点火系统的电路图如下:

Fingerprint-based-Ignition-System-Circuit-Diagram.png


在本文中,我们在面包板上焊接整个电路,如下所示:

Arduino-Car-Ignition-System.jpg


指纹传感器模块

指纹传感器模块可捕获手指的指纹图像,然后将其转换为等效的模板,并通过Arduino将其保存到选定ID(位置)的内存中。在这里,所有过程都是由Arduino命令的,例如拍摄指纹图像、将其转换为模板以及存储位置等。

Finger-Print-Sensor-Module.jpg


将指纹注册到传感器:

在继续该程序之前,我们需要安装指纹传感器所需的库。在这里,我们使用“ 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 ”按钮。

Enrolling-Fingerprints-to-Sensor.png

4.  然后,指纹传感器上的指示灯将闪烁,表明这时您应该将手指放在传感器上,然后按照串口监视器上显示的步骤进行操作,直到确认您已成功注册为止。


RFID无钥匙点火编程

本文末尾提供了此指纹点火系统的完整代码。在这里,我们解释了代码的一些重要部分。


第一件事是包括所有必需的库。本文中,包含用于使用R305指纹传感器的“ Adafruit_Fingerprint.h”。然后配置将要连接指纹传感器的串行端口。将12声明为RX引脚,将11声明为TX引脚。

  1. #include <Adafruit_Fingerprint.h>
  2. #include <LiquidCrystal.h>
  3. SoftwareSerial mySerial(12,11);
  4. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
复制代码

在下一步中,声明所有变量,这些变量将在整个代码中使用。然后使用Arduino定义LCD连接引脚,然后声明LiquidCrystal类的对象。

  1. char input[12];
  2. int count = 0;
  3. int a = 0;
  4. const int rs = 6, en = 7, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
  5. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
复制代码

接下来,在loop()函数中,编写代码以获取RFID标签的唯一12位代码,并将它们存储在数组中。这里,数组的元素将与存储器中存储的唯一代码匹配,以获取经过身份验证的人员详细信息。

  1. count = 0;
  2.     while (Serial.available() && count < 12)
  3.     {
  4.       input[count] = Serial.read();
  5.       count++;
  6.       delay(5);
  7.     }
复制代码

RFID-Keyless-Ignition.jpg


然后,将接收到的数组与存储的标签代码进行比较。如果代码匹配,则许可证被认为是有效的,这允许用户放置有效的指纹。否则,它将显示无效的许可证。

  1. if ((strncmp(input, "3F009590566C", 12) == 0) && (a == 0))
  2.       {
  3.         lcd.setCursor(0, 0);
  4.         lcd.print("License Valid         ");
  5.         lcd.setCursor(0, 1);
  6.         lcd.print("Welcome               ");
  7.         delay(1000);
  8.         a = 1;
  9.         fingerprint();
  10.       }
复制代码

在下一步中,将编写函数getFingerprintID,该函数将为已注册的指纹返回有效的指纹ID。

  1. int getFingerprintID()
  2. {
  3.   uint8_t p = finger.getImage();
  4.   if (p != FINGERPRINT_OK)  return -1;
  5.   p = finger.image2Tz();
  6.   if (p != FINGERPRINT_OK)  return -1;
  7.   p = finger.fingerFastSearch();
  8.   if (p != FINGERPRINT_OK)  return -1;
  9.   return finger.fingerID;
  10. }
复制代码

在成功完成RFID匹配后,在函数Fingerprint()中,调用getFingerprintID函数以获取有效的指纹ID。然后使用if-else循环进行比较,以获取有关经过身份验证的人员数据的信息,如果数据匹配,则将车辆点火,否则,将提示输入错误的指纹。

  1. int fingerprintID = getFingerprintID();
  2.         delay(50);
  3.         if (fingerprintID == 1)
  4.         {
  5.           lcd.setCursor(0, 0);
  6.           lcd.print("Access Granted        ");
  7.           lcd.setCursor(0, 1);
  8.           lcd.print("Vehicle Started       ");
  9.           digitalWrite(9,HIGH);
  10.           digitalWrite(10,LOW);
  11.           while(1);
  12.         }
复制代码

以上这就是RFID汽车点火系统的工作原理,为您的汽车增加了两层安全性。

RFID-Car-Ignition-System.jpg


代码

本文使用的完整代码如下所示: main.rar (929 Bytes, 下载次数: 19)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 00:07 , Processed in 0.051615 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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