风筝
发表于: 2019-5-28 16:35:37 | 显示全部楼层

几年前,如果你告诉某人家里的热水器和卧室灯可以与互联网连接,他们会感到困惑,甚至可能批评它为过度设计的产品。但是今天随着物联网、智能城市等的出现,这个想法不再听起来很奇怪,我们周围的设备通过能够与互联网进行通信,并且变得更加智能。


在本篇文章中,我们的目标是利用这个物联网实现一个考勤系统,使其更加智能和有效。目前可用的大多数常规考勤系统通过微型SD卡存储信息,并且必须通过计算机连接到软件以访问信息。在这里,我们将使用Arduino构建一个生物识别考勤系统,该系统扫描指纹并成功识别人员,它将使用ESP8266 Wi-Fi模块将信息记录到诸如ThingsBoard之类的云平台。然后,此信息可以显示在ThingsBoard的仪表板中,使其可供所需权限通过Internet查看和分析信息,而无需对硬件进行任何直接物理访问。然而,不涉及物联网的传统考勤系统也可以参考本链接进行制作,指纹传感器可以进一步用于许多其他生物识别应用,如投票机、安全系统等。


需要的硬件

●    Arduino UNO扩展板

●    1602 LCD显示屏

●    Arduino WiFi Shield

●    ESP8266-01

●    GT511C3指纹传感器(FPS)

●    12V适配器


先决条件

我们将为此程序编写两个Arduino脚本。一个用于ESP8266-01模块,另一个用于Arduino UNO。原因是Arduino无法通过软件串口通过AT命令处理GT511C3传感器和ESP8266。因此,我们将编写两个代码,一个用于Arduino,其中它将与FPS通信,并通过软件串口将获得的值发送到ESP8266。其他代码将为ESP8266编写,它将使模块能够连接到Thingsboard服务器,然后通过串行通信从Arduino接收值,以在Thingsboard Dashboard上更新它们。


准备您的Thingsboard帐户

今天有许多开源云平台可用于您的物联网项目集成。每个平台都有自己的专长,对于我们的应用程序,我一直在寻找一些在数据记录和可视化方面很好的东西,并找到了适合这个目的的Thingsboard.io。所以我们首先设置Thingsboard帐户。进入thingboard.io并点击“TRY IT NOW”,然后点击社区版(因为它是免费的)点击Live Demo。您将被带到注册页面,这是一个简单的过程,您必须链接并确认您的电子邮件ID,一旦完成,您将被带到主页,看起来像这样。如果您遇到困难,可以参考这个入门的Thingsboard视频。

Preparing-Thingsboard-Account-for-Biometric-Attendance-System.png

在ThingsBoard上,我们有两个重要的术语,Assets(资产)和Devices(设备)。您可以将资产视为建筑物、仓库、工业、农田等,并将设备视为该特定资产中存在的传感器或设备。因此,每个资产将根据项目在其中包含一个或多个设备,这里我们将在资产中拥有一个资产和一个设备。


在物联网上创建资产

让我们首先创建我们的第一个资产,点击左侧面板上的资产,您将注意到与您的帐户相关的所有资产,您可能没有或您可以忽略的一些示例资产。要创建资产,请单击屏幕右下角的添加图标,弹出窗口添加Name、Asset type和Description。您可以提供任何名称和类型,我已经给出了以下内容

Creating-an-Asset-on-Thingsboard-for-Biometric-Attendance-System.png

输入详细信息后,只需单击“添加”,即可创建资产。请注意,我已经将资产命名为,请记住这一点,因为我们稍后会需要它。创建资产后,您可以注意到它出现在窗口中,如下所示。

Office-Attendance-System-Assets-on-Thingsboard.png


将设备添加到资产

现在我们已经创建了一个资产,我们应该添加一个设备。为此,请单击左侧面板上的设备选项卡,然后单击屏幕右下角的添加图标。您将获得一个类似的弹出窗口,您可以在其中将其称为 FPS Main Gate和设备类型的设备命名为默认设置。

Adding-Device-to-the-Asset-of-Biometric-Attendance.png


单击添加,然后您将在面板上找到正在创建的设备,单击我们刚刚创建的设备,您将看到从右侧滑入的新面板。此面板将包含有关设备的所有信息,只需单击如下所示的复制访问令牌以获取设备的令牌值,我们将在Arduino程序中使用此值来向此设备发送或接收值。

Copy-Access-Token-for-Biometric-Attendance-System.png


创建资产的设备关系

创建资产和设备后,返回资产选项卡,然后单击刚刚创建的资产。我的资产被命名为“办公室出勤系统”。这将从右侧的弹出窗口中滑动,现在在新弹出窗口中选择关系选项卡,并在出站关系上点击添加(+)符号以获得以下弹出窗口

Creating-Device-Relation-for-Asset.png


选择实体类型作为设备,然后输入我们之前创建的设备的名称。我的设备名称是上面输入的“FPS Main Gate”。最后单击“添加”按钮将设备关系添加到资产。


准备ESP8266-01

对于该项目,ESP8266应在AT命令模式和编程模式下运行。我们可以使用LM317调节3.3V为ESP8266模块供电,并将Tx Rx引脚连接到FTDI板,如下所示。

Programming-ESP8266-using-FTDI-module-circuit-diagram.jpg

拨动开关可用于在AT命令模式和编程模式之间切换ESP8266,按下按钮可复位模块。请注意,ESP8266必须在每次上传代码之前复位。


该电路仅用于将程序上传到ESP8266,稍后我们将在最终设置中用Arduino UNO替换FTDI板。

Circuit-Hardware-for-IoT-based-Biometric-Attendance-System-using-Arduino-and-Thi.jpg


使用Arduino IDE对ESP8266进行编程,以便将数据发送到ThingsBoard

我们必须对ESP8266进行编程以连接到我们的Wi-Fi路由器,并使用我们之前获得的令牌地址与我们的ThingsBoard设备同步。一旦完成,它应该主动通过其串行引脚查找来自Arduino板的详细信息,如果它获得数据,它应该短信息并将其发送到Thingsboard仪表板。在继续该程序之前,请确保已使用电路板管理器在Arduino IDE中安装了所需的电路板详细信息,以便使用Arduino对ESP8266进行编程,并使用草图 - >包含库 - >管理库安装以下库。只需搜索所需的库并单击安装即可。

●    Nick O'Leary的PubSubClient

●    bportaluri的WiFiEsp


一旦IDE准备就绪,我们可以通过添加所需的库并提供Wifi凭证和密码以及我们之前获得的令牌值来开始该程序。然后创建一个连接到Thingsboard演示页面的Wi-Fi客户端。相同的代码如下所示。

  1. #include <PubSubClient.h> //http://pubsubclient.knolleary.net/
  2. #include <ESP8266WiFi.h> //https://github.com/bportaluri/WiFiEsp
  3. #define WIFI_AP "CircuitLoop"
  4. #define WIFI_PASSWORD "pasword14785"
  5. #define TOKEN "IFhm5ggJVsEpokiIoQ"
  6. char thingsboardServer[] = "demo.thingsboard.io";
  7. WiFiClient wifiClient;
复制代码

重要提示:请确保根据您的设备更改TOKEN和Wi-Fi凭据。


在setup函数中,我们将以9600波特率开始串行通信,并初始化Wi-Fi模块以连接到Wi-Fi路由器。 最后,我们将把我们的Wi-Fi客户端连接到ThingsBoard服务器。

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   delay(10);
  5.   InitWiFi();
  6.   client.setServer( thingsboardServer, 1883 );
  7.   lastSend = 0;
  8. }
复制代码

在loop函数内部,我们将不断检查与服务器的连接是否处于活动状态,如果不是,我们将尝试使用重新连接功能重新连接。 如果客户端连接成功,程序将检查来自串行监视器的传入数据,如果收到数据,它将转换为字符串并存储在名为Name的变量中。 然后使用函数Send_to_Thingsboard()将此变量以json格式发送到ThingsBoard服务器。 如果没有串行数据,那么我们将使用client.loop()代码维护客户端连接。

  1. void loop()
  2. {
  3.   if ( !client.connected() ) {
  4.     reconnect();
  5.   }

  6.   if ( Serial.available() ) { // Update and send only after 1 seconds
  7.     char a = Serial.read();
  8.     Name = Name + String(a);
  9.     if (a == 13) //check for new line
  10.     {
  11.     Name.trim(); //Remove /n or /r from the incomind data
  12.     Serial.println(Name);
  13.     Send_to_Thingsboard();
  14.     Name =""; //clear the string if new line is detected
  15.     }
  16.   }

  17.   client.loop();
  18. }
复制代码

Thingsboard服务器接受JSON形式的信息,因此我们必须以JSON格式从ESP8266构造我们的有效载荷。 我们可以通过简单地在Arduino中使用字符串级联功能来实现。 我们还将有效负载命名为“Name”。 属性必须提到我们发送到Thingsboard的有效负载的大小。 由于每个员工姓名中的字符数会有所不同,我们的有效负载将没有固定的属性值,因此我们将其设置为最大值100.然后,通过ESP8266发送它们,我们必须使用toCharArray方法将String转换为char,最后 使用client.publish选项发送它。 请注意,不应更改v1 / devices / me /遥测。

  1. void Send_to_Thingsboard()
  2. {
  3.   Serial.println("Collecting temperature data.");

  4.   String Employee_Name = Name;

  5.   // Prepare a JSON payload string
  6.   String payload = "{";
  7.   payload += ""Name":"; payload += Employee_Name;
  8.   payload += "}";

  9.   // Send payload
  10.   char attributes[100];
  11.   payload.toCharArray( attributes, 100 );
  12.   client.publish( "v1/devices/me/telemetry", attributes );
  13.   Serial.println( attributes );
  14. }
复制代码

使用ThingsBoard测试ESP8266连接

一旦您的IDE和硬件准备就绪,我们就可以检查ESP8266部件是否运行良好。 在上面讨论的电路中使用FTDI模块将代码保存在编程模式下,将代码上传到ESP8266。 上传代码后,将其连接回AT命令模式并按下复位按钮。 然后打开串行监视器,您应该看到以下内容

Testing-ESP8266-Connection-with-ThingsBoard-on-Serial-Monitor.png

此消息确认ESP8266模块能够在Thingsboard服务器上与我们的设备建立通信。 在此阶段,ESP正在等待通过其串行监视器的输入,当它收到某些内容时,它会将该数据发送到服务器。 所以,现在是时候将ESP与Arduino连接起来为ESP提供价值。

跳转到指定楼层
风筝
发表于: 2019-5-28 17:16:32 | 显示全部楼层

基于物联网的考勤系统电路图

我们将移植现有电路并用Arduino UNO替换FTDI模块,并连接GT511C3 FPS和LCD屏幕。最终的电路图如下所示。

Circuit-Diagram-for-IoT-based-Biometric-Attendance-System-using-Arduino-and-Thin.png

这次确保您将ESP8266置于AT命令模式而不是编程模式。整个项目可以通过12V适配器直接通过Arduino UNO的Vin引脚供电。连接1602 LCD以显示已识别人员的姓名。


另一个需要注意的重要事项是FPS的金属外壳连接到Arduino的引脚10。这是在不使用时关闭FPS。据我们所知,FPS需要打开蓝色LED才能拍摄指纹的光学图像并识别它们。但是,如果这种光始终保持在传感器上,则往往会变热,这可能会降低其寿命。幸运的是,我发现其数据表中提到的方法可以解决这个问题,即将传感器的金属外壳用作触摸传感器。当一个人必须使用FPS时,他必须触摸金属框架,所以如果我们能够感知到他的身体电容,我们就可以说出一个人是否触摸了FPS。


编程Arduino UNO用于生物识别考勤系统

Arduino上的程序非常简单,当注册指纹时,会创建一个模板并为该人员分配一个ID。所以我们要做的就是查找ID并将其与名称联系起来,并通过串行通信将此名称发送给ESP826。然后将此名称发送到ThingsBoard设备。此外,我还启用了一个选项,通过管理员注册指纹,即如果管理员按下他的手指,那么Arduino将提示您注册新的指纹。所有这些的完整程序在本页底部给出,代码说明如下。


第一步是将ID号与员工姓名联系起来。我为5名员工使用了一个字符串数组,包括Admin。因此ID号为0的人将是Admin,1将是Steve等等。因此,对于五名员工,将使用从0到4的ID号。如果管理员注册新员工的新指纹,他将具有与他的姓名相关的ID号5。

  1. char *Name_List[]= {"Admin", "Steve", "Tony", "Natasha", "Bruce"};
复制代码

如果你还没有注意到,那么管理员就是Nick Furry。继续,我们可以通过添加所有必需的库来启动我们的程序。您必须在Arduino IDE中安装以下两个额外的库

●    GT511C3 FPS库

●    一个引脚电容式触摸传感器库


GT511C3库可用于通过Arduino注册,检测FPS指纹。电容式触摸传感器库允许我们检查是否有人触摸了FPS上的金属外壳。将库添加到Arduino后,将它们包含在程序中,如下所示

  1. #include "FPS_GT511C3.h" //Get library from https://github.com/sparkfun/Fingerprint_Scanner-TTL
  2. #include "SoftwareSerial.h" //Software serial library
  3. #include <LiquidCrystal.h> //Library for LCD
  4. #include "OnePinCapSense.h" //Librarey to sensor capacitive touch https://github.com/MrYsLab/OnePinCapSense
复制代码

我们已将ESP的Rx和Tx引脚与引脚12和13以及FPS传感器串行引脚连接到引脚9和8。因此,我们可以为两者创建两个单独的串行软件实例,如下所示。我们还提到引脚10用作电容式触摸传感器,LCD连接到引脚D2到D7。

  1. Softwareserial ESP(12, 13); // RX, TX
  2. FPS_GT511C3 fps(9, 8); //FPS connected to D9 and D8
  3. const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Mention the pin number for LCD connection
  4. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//Initialize LCD method

  5. int capSensePin10  = 10; //Pin to which casing of sensor is connected
复制代码

在setup函数中,我们以9600波特率初始化串行通信,并在LCD上显示一个小的介绍消息。我们还开放了与FPS的通信,并且如果早些时候还没有关闭它的蓝色LED。

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   ESP.begin (9600);

  5.   lcd.begin(16, 2); //Initialise 16*2 LCD
  6.   lcd.print("GT511C3 FPS"); //Intro Message line 1
  7.   lcd.setCursor(0, 1);
  8.   lcd.print("with Arduino"); //Intro Message line 2
  9.   delay(2000);
  10.   lcd.clear();

  11.   fps.Open();         //send serial command to initialize fps
  12.   fps.SetLED(false);   //turn on LED so fps can see fingerprint
  13. }
复制代码

在loop函数内部,我们必须检查是否有人正在触摸传感器以开始任何工作。这可以通过使用readCapacitivePin选项读取电容引脚来检查。对于我们的设置,我发现当没有触摸外壳时,读取值总是超过50,当有人触摸它时,读取值低于50。因此我们可以使用它来检查传感器是否被触摸。如果触摸传感器,我们只需要打开蓝色LED。

  1. int capSense10 = opcs.readCapacitivePin(capSensePin10) ;
  2. if( capSense10 < 50)
  3. { fps.SetLED(true); delay(500);}
复制代码

一旦蓝色LED亮起,传感器就能够检测到触摸它的物体是否是手指。如果是手指,那么我们捕获指纹图像并识别它以获得其ID号。如果ID号为200,则意味着尚未登记所识别的指纹。所以我们将显示未知,如果ID为0则表示识别的指纹属于管理员,因此我们继续注册新的指纹。如果识别出的号码在我们的名单中,那么我们可以继续在LCD上显示他们的名字,并将信息发送给ESP。在此过程之后,我们最终可以关闭蓝色LED,直到检测到新的手指触摸。

  1.   if (fps.IsPressFinger())
  2.   {
  3.     fps.CaptureFinger(false);
  4.     id = fps.Identify1_N();
  5.       lcd.clear();

  6.       if (id==200)
  7.       {
  8.       lcd.print("Unkown"); lcd.setCursor(0,1); lcd.print("Try Again!!");//If not recognised
  9.       }
  10.       else if (id==0)
  11.       {
  12.        lcd.print("Welcome"); lcd.setCursor(0,1); lcd.print("***ADMIN***");//If not recognised
  13.        delay(2000);
  14.        Enroll();
  15.       }
  16.       else
  17.       {
  18.         lcd.print("Thank You"); lcd.setCursor(0,1); lcd.print(Name_List[id]); ESP.println(Name_List[id]);
  19.         Serial.println("Sent Value to ESP");
  20.       }
  21.       delay(1000);
  22.       fps.SetLED(false);
  23.   }
复制代码

测试完整的基于物联网的Arduino考勤系统

最后是时候让系统投入使用,将Arduino代码上传到UNO板并将其连接到已经使用上面给出的电路图运行我们的代码的ESP。启动模块,如果一切顺利,您应该注意到LCd显示屏显示“Press Finger”,如下所示。

Testing-IoT-based-Arduino-Attendance-System.jpg


现在,请按照上一个教程确保指纹已在FPS中注册,然后使用已注册的手指触摸传感器。如果检测到,LCD会显示Thank You,然后是该人的姓名,并且还会将该人的姓名发送给ESP,然后ESP将发送到我们之前创建的thingboard设备。

Testing-IoT-based-Arduino-Attendance-System-using-Fingerprint-Sensor.jpg


检查ThingsBoard是否正在接收考勤数据

如果液晶显示屏显示谢谢,则表示已将人员姓名发送至ESP,该ESP应将其发送至我们之前创建的Thingsboard设备。为了确保它按预期工作,进入device选项卡并单击我们之前创建的设备,我的名称为“FPS Main Gate”。这将从右侧的弹出窗口滑动,在此窗口中单击Latest Telemetry,您应该看到设备收到的最后一个条目,如下所示。

Checking-if-ThingsBoard-is-Receiving-the-Attendance-Data.png

在上一步中,我们的FPS传感器检测到了Steve,因此您可以在此处看到相同的名称已发送到thingboard。如果你在这里没有得到任何东西,请确保你的ESP连接正确,并且能够通过串行从Arduino获取信息并将其发送给客户端。


在ThingsBoard上为物联网考勤系统创建仪表板

最后一步是创建一个仪表板,我们可以在其中查看ESP模块发送的所有时间和日期名称。 ThingsBoard的好处在于,您有许多小部件可根据使用情况显示数据。也可以使用规则链选项对逻辑分析这些数据并采取必要的操作,如触发警报发送电子邮件等。要创建仪表板,请单击左侧面板中的仪表板,然后单击添加新仪表板(+)屏幕左下角的图标。然后选择创建新仪表板。在弹出窗口中为仪表板命名并单击“添加”。

Creating-a-Dashboard-on-ThingsBoard-for-IoT-Attendance-System.png


这将在仪表板窗口上创建一个新的仪表板。单击此新仪表板,然后单击屏幕右下角的铅笔图标(橙色)进入编辑模式。现在我们必须通过单击create alias图标(在下面的图像中包围红色)创建一个别名,并通过单击add按钮添加一个新的别名。在弹出窗口中输入您选择的名称并选择类型作为设备,并在仪表板上提供我们需要数据的设备名称,如下所示,然后单击添加,然后单击保存按钮。

Create-a-New-Dashboard-on-the-Dashboards-Window.png


单击添加新窗口小部件,然后在当前捆绑选择卡下,然后选择时间序列表。这将打开一个窗口并询问我们刚刚创建的别名,您可以选择类型作为实体并提供别名,如下图所示。

Add-Widget-to-Dashboard-on-ThingsBoard-for-IoT-Attendance-System.png

单击添加,您应该在仪表板上看到一个新窗口小部件,其中包含ESP到目前为止已发送的所有员工的名称。您还可以对数据名称vise进行排序,或使用历史记录选项查看特定日期或时间的数据。我的样本数据集如下所示

Biometric-Attendance-System-using-Arduino-and-Thingsboard.png


您还可以实时查看数据,当您在FPS上按下手指时,员工的姓名应显示在此窗口中。也就是说,我们创建了一个基于智能物联网的考勤系统,可以更新我们仪表板上的所有数据,这些数据可以在线进行可视化,分析和报告,而无需与硬件进行物理接触。一旦项目准备好,就把它移交给尼克·弗瑞,让他按时组装复仇者,下次当有人决定消灭一半的人口时。


希望您了解该项目,并喜欢搭建这些小制作。如果您对本文有任何疑问,请在本帖下面进行回复。


代码

本文使用的完整代码如下: main.rar (2.51 KB, 下载次数: 28)

回复

使用道具 举报

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

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-25 14:14 , Processed in 0.073892 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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