Sistema de asistencia de huellas dactilares Arduino con almacenamiento de datos en la nube
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
| ||||
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Puedes leer este y otros tutoriales increíbles en Sitio web oficial de ElectroPeak .
Descripción general
Hoy en día, aprender sobre el funcionamiento y la implementación de los dispositivos de IoT es tan esencial debido al uso cada vez mayor de los sistemas de IoT. En este tutorial, vamos a hacer un dispositivo de asistencia de huellas dactilares con Arduino, que además de almacenar la información de inicio de sesión y las horas de trabajo en la tarjeta de memoria, carga esta información en la plataforma ThingSpeak tan pronto como se conecta a Internet. y puede descargar esta información del panel en varios formatos, como CSV.
Qué aprenderá
- Trabajar con sensores de huellas digitales
- Subiendo datos en ThingSpeak usando NodeMCU
- Haga un dispositivo de asistencia con el sensor de huellas digitales y Arduino
¿Qué es ThingSpeak?
El IoT (Internet de las cosas) imagina un mundo en el que una serie de cosas están conectadas a Internet, interactúan con personas y otros dispositivos y, por lo general, cargan datos en la nube para su análisis.
ThingSpeak es una plataforma de IoT que le permite mostrar y recopilar datos en vivo en la computación en la nube.
Interfaz con ThingSpeak y carga de datos
Siga los pasos a continuación para iniciar la conexión ThingSpeak:
Paso 1 ) Ingrese al sitio web ThingSpeak.com y cree una cuenta.
Paso 2 ) Inicie sesión después de activar su cuenta y haga clic en Nuevo canal en Mi canal sección.
Paso 3 ) En la nueva ventana que se abre para usted, escriba un nombre para su panel y cualquier descripción si es necesario. Determine la cantidad de campos que necesita asignando sus nombres. Las partes restantes son opcionales. Guarde el panel después de completar la información.
Paso 4 ) Ahora ve a Claves API . en su panel.
Paso 5 ) Necesitas el ID de canal y Escribir clave API para transmitir datos, así que anótelos.
Paso 6) Descarga ThingSpeak biblioteca y agréguelo a su IDE de Arduino.
La biblioteca ThingSpeak
Paso 7) Vaya al IDE de Arduino. Abra WriteMultipleFiels de la parte de ejemplos e ingrese los valores SSID, Contraseña, ID de canal y Escribir clave API.
/ * WriteMultipleFields Descripción:Escribe valores en los campos 1, 2, 3, 4 y el estado en una única actualización de Thingspeak cada 20 segundos. Hardware:placas basadas en ESP8266. IMPORTANTE:modifique el archivo secrets.h para este proyecto con su conexión de red y los detalles del canal de Thingspeak. !!! Nota:- Requiere la biblioteca ESP8266WiFi y el complemento de placa ESP8622. Consulte https://github.com/esp8266/Arduino para obtener más detalles. - Seleccione el hardware de destino en el menú Herramientas-> Tablero - Este ejemplo está escrito para una red que usa encriptación WPA. Para WEP o WPA, cambie la llamada WiFi.begin () en consecuencia. Thingspeak (https://www.Thingspeak.com) es un servicio de plataforma analítica de IoT que le permite agregar, visualizar y analizar flujos de datos en vivo en la nube. Visite https://www.Thingspeak.com para registrarse para obtener una cuenta gratuita y crear un canal. La documentación de la biblioteca de comunicación Thingspeak para Arduino se encuentra en la carpeta README.md donde se instaló la biblioteca. Consulte https://www.mathworks.com/help/Thingspeak/index.html para obtener la documentación completa de Thingspeak. Para obtener información sobre licencias, consulte el archivo de licencia adjunto. Copyright 2018, The MathWorks, Inc. * / # Incluyen "Thingspeak.h" #include "secrets.h" #include char ssid [] =SECRET_SSID; // su SSID de red (nombre) char pass [] =SECRET_PASS; // su contraseña de redint keyIndex =0; // su clave de red Número de índice (necesario solo para WEP) Cliente WiFiClient; unsigned long myChannelNumber =SECRET_CH_ID; const char * myWriteAPIKey =SECRET_WRITE_APIKEY; // Inicializar nuestros valoresint number1 =0; int number2 =random (0,100); int number3 =random (0,100); int número4 =aleatorio (0,100); String myStatus =""; void setup () {Serial.begin (115200); // Inicializar serial WiFi.mode (WIFI_STA); Thingspeak.begin (cliente); // Inicializar Thingspeak} void loop () {// Conectarse o volver a conectarse a WiFi if (WiFi.status ()! =WL_CONNECTED) {Serial.print ("Intentando conectarse a SSID:"); Serial.println (SECRET_SSID); while (WiFi.status ()! =WL_CONNECTED) {WiFi.begin (ssid, pass); // Conéctese a la red WPA / WPA2. Cambie esta línea si utiliza una red abierta o WEP Serial.print ("."); retraso (5000); } Serial.println ("\ nConectado."); } // establece los campos con los valores Thingspeak.setField (1, number1); Thingspeak.setField (2, número2); Thingspeak.setField (3, número3); Thingspeak.setField (4, número4); // averigua el mensaje de estado if (número1> número2) {myStatus =String ("el campo1 es mayor que el campo2"); } else if (número1 99) {número1 =0; } número2 =aleatorio (0,100); número3 =aleatorio (0,100); número4 =aleatorio (0,100); retraso (20000); // Espere 20 segundos para actualizar el canal nuevamente}
Después de cargar el código, verá algunos números aleatorios cargados en los campos 1 a 4 de su panel. El mismo código estructurado se usa en el sistema de asistencia para cargar datos.
Nota
Espere al menos 15 segundos entre cada vez que cargue los datos en el panel ThingSpeak.
Creación de un sistema de asistencia utilizando el sensor de huellas dactilares y Arduino
En este sistema, después de registrar la entrada y salida de una persona por su huella dactilar, la información que incluye fecha, nombre, hora de llegada, hora de salida y horas de trabajo del empleado se almacena en la tarjeta SD. Luego, esta información se enviará a ThingSpeak a la hora que haya especificado. En ausencia de una conexión a Internet, los datos no publicados se almacenan y se reenvían a ThingSpeak tan pronto como se conecta a Internet. Dado que la información se almacena en la EEPROM del microcontrolador, no se perderá en caso de un corte de energía.
Circuito
Después de conectar todos los módulos, coloque el protector LCD en el Arduino.
Sugerencia
Dado que el LCD Shield cubre algunos de los pines de Arduino, puede bordear el cable a un pin específico desde la parte inferior de la placa, si los necesita.
Código
Necesita las siguientes bibliotecas para este código:
Biblioteca de sensores de huellas dactilares Adafruit
Biblioteca Adafruit-GFX
MCUFRIEND_kbv
RTClib
Ahora descargue el siguiente código y cárguelo en su Arduino. Este código está escrito para 11 personas con nombres predeterminados, pero puede cambiarlos y eliminarlo del modo predeterminado. Para registrar un nuevo nombre, simplemente conecte el dispositivo a su computadora y presione la tecla para ingresar al modo de registro, luego abra el Monitor serial y siga el proceso de registro como se muestra en el Monitor serial.
Descargue el código de los archivos adjuntos:
Puede obtener más información sobre el uso de una tarjeta SD, el módulo de reloj y la pantalla LCD en los siguientes enlaces:
Módulo de tarjeta SD con Arduino:cómo leer / escribir datos
Cómo usar el módulo DS1307 RTC con Arduino y hacer un recordatorio
Guía absoluta para principiantes de pantallas TFT LCD de Arduino.
NodeMCU ejecuta la tarea de cargar la información en este sistema. Toma la información de carga de Arduino a través del puerto serie y devuelve el estado de carga a Arduino. Cargue el siguiente código en su NodeMCU.
#include "Thingspeak.h" #include ESP8266WiFi.h> char ssid [] ="YOUR SSID"; char pass [] ="SSID PASSWORD"; cliente WiFiClient; unsigned long myChannelNumber =YOUR CHANNEL ID; const char * myWriteAPIKey ="SU CANAL ESCRIBIR CLAVE API"; String Final =""; String Date =""; String Enter =""; String Exit =""; String Name =""; String WT =""; void String_Analyze (String input) {int index1, index2, index3, index4; índice1 =input.indexOf ('*', 0); índice2 =input.indexOf ('*', índice1 + 1); índice3 =input.indexOf ('*', índice2 + 1); index4 =input.lastIndexOf ('*'); Nombre =entrada; Fecha =entrada; Enter =entrada; Salir =entrada; WT =entrada; Name.remove (index1); Date.remove (index2); Date.remove (0, index1 + 1); Enter.remove (index3); Enter.remove (0, index2 + 1); Exit.remove (index4); Exit.remove (0, index3 + 1); WT.remove (0, index4 + 1);} void Get_String () {while (Serial.available ()) {Final =Serial.readString (); // lee los datos entrantes como cadena //Serial.println(Final); }} configuración vacía () {Serial.begin (9600); Modo WiFi (WIFI_STA); Thingspeak.begin (cliente); pinMode (LED_BUILTIN, SALIDA); digitalWrite (LED_BUILTIN, HIGH);} bucle vacío () {if (WiFi.status ()! =WL_CONNECTED) {//Serial.print("Intentando conectarse a SSID:"); // Serial.println (ssid); while (WiFi.status ()! =WL_CONNECTED) {WiFi.begin (ssid, pass); // Conéctese a la red WPA / WPA2. Cambie esta línea si utiliza una red abierta o WEP Serial.print ("0"); retraso (5000); }} digitalWrite (LED_BUILTIN, BAJO); //Serial.println("\nConnected. "); Get_String (); String_Analyze (Final); if (! Final.equals ("")) {Thingspeak.setField (1, Fecha); Thingspeak.setField (2, Nombre); Thingspeak.setField (3, Entrar); Thingspeak.setField (4, Salida); Thingspeak.setField (5, WT); int x =Thingspeak.writeFields (myChannelNumber, myWriteAPIKey); si (x ==200) {retraso (100); Serial.print ("1"); } else {retraso (100); Serial.print ("0"); } retraso (17000); Final =""; }
Primero, cambie el ID del canal . y Escribir clave API de acuerdo con su ThingSpeak Panel.
El String_Analuze ();
La función en este código divide las cadenas de entrada de NodeMCU en la fecha, el nombre, la hora de llegada y salida y las horas de trabajo, y envía esta información a ThingSpeak. Luego, si el proceso de carga es exitoso, envía el carácter "1" y, de lo contrario, envía el carácter "0" al Arduino.
Montaje del dispositivo de asistencia
Puede utilizar los siguientes mapas y plexiglás con diferentes colores o cualquier otro material para construir el cuerpo del dispositivo de asistencia.
Descargue el mapa del cuerpo del dispositivo cortado con láser desde los archivos adjuntos:
Después de colocar los componentes electrónicos y ensamblar todo el cuerpo, instálelo en la ubicación deseada. Ahora, simplemente conecte un adaptador de 12V al dispositivo y comenzará a funcionar.
¿Qué sigue?
- Intente utilizar más iconos en la pantalla LCD.
- Intente agregar una opción RFID al sistema.
- Intente cargar los datos en las hojas de cálculo de Google . en lugar de ThingSpeak .
Si encuentra útil e interesante este tutorial, por favor haga clic en Me gusta en Facebook.
Código
- Código 1
- Código 2
Código 1 Arduino
Interfaz con Thingspeak y carga de datos/ * WriteMultipleFields Descripción:Escribe valores en los campos 1, 2, 3, 4 y el estado en una única actualización de Thingspeak cada 20 segundos. Hardware:placas basadas en ESP8266. IMPORTANTE:modifique el archivo secrets.h para este proyecto con su conexión de red y los detalles del canal de Thingspeak. !!! Nota:- Requiere la biblioteca ESP8266WiFi y el complemento de placa ESP8622. Consulte https://github.com/esp8266/Arduino para obtener más detalles. - Seleccione el hardware de destino en el menú Herramientas-> Tablero - Este ejemplo está escrito para una red que usa encriptación WPA. Para WEP o WPA, cambie la llamada WiFi.begin () en consecuencia. Thingspeak (https://www.Thingspeak.com) es un servicio de plataforma analítica de IoT que le permite agregar, visualizar y analizar flujos de datos en vivo en la nube. Visite https://www.Thingspeak.com para registrarse para obtener una cuenta gratuita y crear un canal. La documentación de la biblioteca de comunicación Thingspeak para Arduino se encuentra en la carpeta README.md donde se instaló la biblioteca. Consulte https://www.mathworks.com/help/Thingspeak/index.html para obtener la documentación completa de Thingspeak. Para obtener información sobre licencias, consulte el archivo de licencia adjunto. Copyright 2018, The MathWorks, Inc. * / # Incluyen "Thingspeak.h" #include "secrets.h" #includechar ssid [] =SECRET_SSID; // su SSID de red (nombre) char pass [] =SECRET_PASS; // su contraseña de redint keyIndex =0; // su clave de red Número de índice (necesario solo para WEP) Cliente WiFiClient; unsigned long myChannelNumber =SECRET_CH_ID; const char * myWriteAPIKey =SECRET_WRITE_APIKEY; // Inicializar nuestros valoresint number1 =0; int number2 =random (0,100); int number3 =random (0,100); int número4 =aleatorio (0,100); String myStatus =""; void setup () {Serial.begin (115200); // Inicializar serial WiFi.mode (WIFI_STA); Thingspeak.begin (cliente); // Inicializar Thingspeak} void loop () {// Conectarse o volver a conectarse a WiFi if (WiFi.status ()! =WL_CONNECTED) {Serial.print ("Intentando conectarse a SSID:"); Serial.println (SECRET_SSID); while (WiFi.status ()! =WL_CONNECTED) {WiFi.begin (ssid, pass); // Conéctese a la red WPA / WPA2. Cambie esta línea si utiliza una red abierta o WEP Serial.print ("."); retraso (5000); } Serial.println ("\ nConectado."); } // establece los campos con los valores Thingspeak.setField (1, number1); Thingspeak.setField (2, número2); Thingspeak.setField (3, número3); Thingspeak.setField (4, número4); // averigua el mensaje de estado if (número1> número2) {myStatus =String ("el campo1 es mayor que el campo2"); } else if (número1 99) {número1 =0; } número2 =aleatorio (0,100); número3 =aleatorio (0,100); número4 =aleatorio (0,100); retraso (20000); // Espere 20 segundos para actualizar el canal nuevamente}
Código 2 Arduino
#include "Thingspeak.h" #include ESP8266WiFi.h> char ssid [] ="YOUR SSID"; char pass [] ="SSID PASSWORD"; cliente WiFiClient; unsigned long myChannelNumber =YOUR CHANNEL ID; const char * myWriteAPIKey ="SU CANAL ESCRIBIR CLAVE API"; String Final =""; String Date =""; String Enter =""; String Exit =""; String Name =""; String WT =""; void String_Analyze (String entrada) {int index1, index2, index3, index4; índice1 =input.indexOf ('*', 0); índice2 =input.indexOf ('*', índice1 + 1); índice3 =input.indexOf ('*', índice2 + 1); index4 =input.lastIndexOf ('*'); Nombre =entrada; Fecha =entrada; Enter =entrada; Salir =entrada; WT =entrada; Name.remove (index1); Date.remove (index2); Date.remove (0, index1 + 1); Enter.remove (index3); Enter.remove (0, index2 + 1); Exit.remove (index4); Exit.remove (0, index3 + 1); WT.remove (0, index4 + 1);} void Get_String () {while (Serial.available ()) {Final =Serial.readString (); // lee los datos entrantes como cadena //Serial.println(Final); }} configuración vacía () {Serial.begin (9600); Modo WiFi (WIFI_STA); Thingspeak.begin (cliente); pinMode (LED_BUILTIN, SALIDA); digitalWrite (LED_BUILTIN, HIGH);} bucle vacío () {if (WiFi.status ()! =WL_CONNECTED) {//Serial.print("Intentando conectarse a SSID:"); // Serial.println (ssid); while (WiFi.status ()! =WL_CONNECTED) {WiFi.begin (ssid, pass); // Conéctese a la red WPA / WPA2. Cambie esta línea si utiliza una red abierta o WEP Serial.print ("0"); retraso (5000); }} digitalWrite (LED_BUILTIN, BAJO); //Serial.println("\nConnected. "); Get_String (); String_Analyze (Final); if (! Final.equals ("")) {Thingspeak.setField (1, Fecha); Thingspeak.setField (2, Nombre); Thingspeak.setField (3, Entrar); Thingspeak.setField (4, Salida); Thingspeak.setField (5, WT); int x =Thingspeak.writeFields (myChannelNumber, myWriteAPIKey); si (x ==200) {retraso (100); Serial.print ("1"); } else {retraso (100); Serial.print ("0"); } retraso (17000); Final =""; }
Piezas y carcasas personalizadas
uploads2ftmp2fdcd9a041-0d41-433f-b48f-b7fa0a1b7a832felectropeak_attendance_code_q4bsYBzou5.zip uploads2ftmp2f93ae52e3-7f3c-4744-b2db-b69baed578622fattendanceboxlasercut_ryMUOo5d7h.dwgProceso de manufactura
- 10 beneficios de usar Cloud Storage
- Reproductor de DVD
- Sistema de asistencia que usa Arduino y RFID con Python
- Transferencia de datos magnética inalámbrica
- Sistema de alarma Arduino:SERENA
- Registrador de datos de temperatura y humedad
- Sensor capacitivo de huellas dactilares con Arduino o ESP8266
- Torre de sensores de nubes Arduino
- Sistema de ventilación del sótano / espacio de acceso
- Sistema de asistencia basado en Arduino y hoja de cálculo de Google
- La nube en IoT