{"id":5956,"date":"2022-12-20T11:58:35","date_gmt":"2022-12-20T10:58:35","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=5956"},"modified":"2023-05-09T08:58:41","modified_gmt":"2023-05-09T06:58:41","slug":"control-de-acceso-y-aforo-personalizable","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/","title":{"rendered":"Control de acceso y aforo personalizable"},"content":{"rendered":"\n<h3 class=\"wp-block-heading has-black-color has-text-color\"><em>Autores: Carlos Jim\u00e9nez L\u00f3pez, Miguel Carmona Garrido y Marcos Meca Merino<\/em><\/h3>\n\n\n\n<h2 class=\"wp-block-heading\">Explicaci\u00f3n del proyecto<\/h2>\n\n\n\n<p>Nuestro proyecto se trata de un control de acceso. Con tarjetas o chapas que se pasan por un sensor RFID, el control dejar\u00eda pasar o no, en funci\u00f3n de si se trata de una acreditaci\u00f3n v\u00e1lida, y mostrando en una matriz de leds una flecha o una cruz cuando corresponda. Adem\u00e1s, este control de acceso lleva la cuenta del aforo que hay, y posee un aforo m\u00e1ximo que no dejar\u00e1 que se supere. Para establecer el aforo m\u00e1ximo, se ha desarrollado una aplicaci\u00f3n muy sencilla que permite hacer dos cosas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Si se introduce el usuario y contrase\u00f1a de un operario, este podr\u00e1 cambiar el aforo m\u00e1ximo, siempre y cuando el nuevo aforo m\u00e1ximo sea mayor que el aforo que hay en el momento.<\/li>\n\n\n\n<li>Si se trata de un usuario normal, este podr\u00e1 pulsar un bot\u00f3n en la aplicaci\u00f3n que har\u00e1 que se muestre por la pantalla LCD del control el aforo actual y el aforo m\u00e1ximo.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Componentes utilizados<\/h2>\n\n\n\n<p>En cuanto a los componentes utilizados, la mayor\u00eda de sensores ya los ten\u00edamos ya que dispon\u00edamos de un kit de Arduino bastante completo. Por otro lado, se fabricaron m\u00e1s cables macho-hembra ya que no tuvimos suficientes. Por \u00faltimo, nos hicimos con 2 llaveros de acceso m\u00e1s, que nos prestaron ya que no se utilizaban.<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Componente\/Producto<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Coste<\/strong><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Pantalla LCD<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Potenci\u00f3metro<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Sensor ultras\u00f3nico x2<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac (uno de ellos prestado)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">M\u00f3dulo RFID<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Matriz de leds<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">M\u00f3dulo Bluetooth<\/td><td class=\"has-text-align-center\" data-align=\"center\">8,49\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Cables macho-hembra<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Cables macho-macho<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Llaveros de acceso x3 y tarjeta<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Caja<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,50\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Bridas<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,80\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Cinta de doble cara<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,90\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>TOTAL<\/strong>:<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>12,69\u20ac<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Esquema del hardware<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"657\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-17-at-01.39.17-1024x657.jpeg\" alt=\"\" class=\"wp-image-5958\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-17-at-01.39.17-1024x657.jpeg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-17-at-01.39.17-300x192.jpeg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-17-at-01.39.17-768x493.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-17-at-01.39.17.jpeg 1088w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Simulaci\u00f3n del circuito realizada en Tinkercad<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Problemas encontrados<\/h2>\n\n\n\n<p><strong>1. Falta de puertos<\/strong><\/p>\n\n\n\n<p>Cuando nos dispusimos a contar los pines que nos har\u00edan falta para poder montar todos los sensores que planteamos en un comienzo, nos dimos cuenta de que no ten\u00edamos suficientes con la placa. Al comienzo nos planteamos ir quitando sensores y recortando el m\u00e1ximo n\u00famero de puertos posibles. Mientras tanto, pensamos en comprar multiplexores, ya que otro grupo los necesitaba tambi\u00e9n y pensamos en comprarlos en conjunto. Finalmente logramos que no nos hicieran falta, y terminamos ocupando todos los puertos de la placa. Esto provoc\u00f3 que tuvi\u00e9ramos que utilizar los puertos anal\u00f3gicos como digitales. Con una b\u00fasqueda en internet pudimos saber c\u00f3mo hacerlo. Por otro lado, los puertos 0 y 1, dedicados a las comunicaciones en el Arduino, tambi\u00e9n tuvimos que ocuparlos, por lo que perdimos la conexi\u00f3n con el monitor serial. Como ya hemos mencionado anteriormente, esto se solucion\u00f3 utilizando la pantalla LCD que hab\u00edamos configurado previamente como salida para las comprobaciones necesarias. Cabe destacar que el \u00fanico inconveniente relacionado con ocupar estos puertos fue que, cada vez que se necesita subir c\u00f3digo a la placa, se ha de desconectar lo que est\u00e9 en estos puertos, ya que si no se producir\u00e1 un error y este no se subir\u00e1.<\/p>\n\n\n\n<p><strong>2. Falta de cables<\/strong><\/p>\n\n\n\n<p>En cuanto a los cables, donde pudimos ver que nos quedamos escasos fue en los cables macho-hembra. Gracias al padre de uno de los integrantes del grupo, pudo hacernos m\u00e1s cables, lo que nos ahorr\u00f3 tener que comprarlos.<\/p>\n\n\n\n<p><strong>3. Problema con ultrasonidos<\/strong><\/p>\n\n\n\n<p>A la hora de configurar el segundo ultrasonidos e integrarlo en los avances que ya llev\u00e1bamos del proyecto, los resultados que obten\u00edamos de ambos no nos cuadraban con los que esper\u00e1bamos. Estuvimos un tiempo intentando averiguar qu\u00e9 les ocurr\u00eda, cambiando los ultrasonidos por los de otros grupos que nos prestaron, cambiando los cables, puertos, c\u00f3digo, etc., hasta que finalmente nos dimos cuenta que lo que estaba ocurriendo era que estaban interfiriendo el uno en el otro, por lo que probamos a separarlos y as\u00ed fue.<\/p>\n\n\n\n<p><strong>4. Desarrollo de la aplicaci\u00f3n<\/strong><\/p>\n\n\n\n<p>Al comienzo del desarrollo de la aplicaci\u00f3n, utilizamos la plataforma <em>\u201cApp Inventor\u201d<\/em>, pero debido a su sencillez (por su programaci\u00f3n en bloques, que no permit\u00eda gran personalizaci\u00f3n) y a la complejidad de realizar un dise\u00f1o que nos agradase, la desechamos y comenzamos a trabajar en <em>\u201cAndroid Studio\u201d<\/em>. Sin embargo, nos supuso gran esfuerzo, sobre todo a la hora de programar la parte de transferencias por Bluetooth. Al no encontrar informaci\u00f3n suficiente para su desarrollo decidimos volver a <em>\u201cApp Inventor\u201d<\/em>, donde finalmente conseguimos un resultado m\u00e1s o menos satisfactorio.<\/p>\n\n\n\n<p><strong>5. Caja impresa en 3d<\/strong><\/p>\n\n\n\n<p>Al comienzo del proyecto, cuando est\u00e1bamos planteandonos qu\u00e9 hacer, ya pensamos en dise\u00f1ar e imprimir la caja en la que colocar\u00edamos nuestro proyecto, ya que en principio dispon\u00edamos de los medios para hacerlo y nos pareci\u00f3 una idea interesante. Finalmente, una vez dise\u00f1amos la caja y nos dispon\u00edamos a imprimirla, la impresora comenz\u00f3 a fallar (el extrusor no dejaba pasar correctamente el PLA), y no nos permiti\u00f3 imprimir las piezas que quer\u00edamos, debido principalmente a su tiempo de impresi\u00f3n (14 horas la caja y 5 horas la tapa). Debido a esto, optamos por comprar una caja en una tienda local, y posteriormente, con un cutter, hacer los agujeros necesarios para encajar todos los componentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">V\u00eddeo demostraci\u00f3n<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Proyecto Control de acceso y aforo personalizable - Grupo 14\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/IMdIJYvGc3c?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<p>A contnuaci\u00f3n se muestra el c\u00f3digo. Este se encuentra suficientemente comentado como para entender cada l\u00ednea del mismo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/\/Librerias\n\n\/\/MATRIZ\n#include &lt;MD_Parola.h&gt;\n#include &lt;MD_MAX72xx.h&gt;\n#include &lt;SPI.h&gt;\n\n\/\/ RFID\n#include &lt;MFRC522.h&gt;\n\n\/\/ BLUETOOTH\n#include &lt;SoftwareSerial.h&gt;\n\n\/\/ LCD\n#include &lt;LiquidCrystal.h&gt;\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ MATRIZ\n#define HARDWARE_TYPE MD_MAX72XX::FC16_HW\n#define MAX_DEVICES 1\n#define CS_PIN 3\n\n\/\/ Software SPI:\n #define DATA_PIN 2\n #define CLK_PIN 4\n MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);\n\n\/\/ Flecha\nconst uint8_t F_ARROW = 1;\nconst uint8_t W_ARROW = 10;\nconst uint8_t PROGMEM arrow&#91;F_ARROW * W_ARROW] =\n{\n  0x18, 0x3c, 0x7e, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c\n};\n\n\/\/ Cruz\nconst uint8_t F_CROSS = 1;\nconst uint8_t W_CROSS = 10;\nconst uint8_t PROGMEM cross&#91;F_CROSS * W_CROSS] =\n{\n  0x81, 0xc3, 0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0xc3, 0x81\n};\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\/\/ ULTRASONIDOS\nconst int EchoPinEntrar = 5;\nconst int TriggerPinEntrar = 6;\nint entrar;\n\nconst int EchoPinSalir = 0;\nconst int TriggerPinSalir = 1;\nint salir;\n\n\nunsigned long tiempoEntrar;\nunsigned long tiempoSalir;\nunsigned long pausaAcceso;\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\/\/ RFID\n#define RST_PIN\t9     \/\/Pin 9 para el reset del RC522\n#define SS_PIN\t10    \/\/Pin 10 para el SS (SDA) del RC522\nMFRC522 mfrc522(SS_PIN, RST_PIN); \/\/\/Creamos el objeto para el RC522\n\nbyte ActualUID&#91;4]; \/\/almacenar\u00e1 el c\u00f3digo del Tag le\u00eddo\nbyte Usuario1&#91;4]= {0x70, 0x5B, 0xDE, 0x87} ; \/\/c\u00f3digo del usuario 1\nbyte Usuario2&#91;4]= {0x40, 0xD3, 0x56, 0x7E} ; \/\/c\u00f3digo del usuario 2\n\nunsigned long timingMATRIZ;\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\/\/ BLUETOOTH\nSoftwareSerial BT(7,8);    \/\/ Definimos los pines TX y RX del Arduino conectados al Bluetooth\nString datoleido;\nunsigned long pausaBT;\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\/\/ LCD\n\n\/\/Crear&nbsp;el&nbsp;objeto&nbsp;LCD&nbsp;con&nbsp;los&nbsp;n\u00fameros&nbsp;correspondientes&nbsp;(rs,&nbsp;en,&nbsp;d4,&nbsp;d5,&nbsp;d6,&nbsp;d7)\nLiquidCrystal lcd(19, 18, 17, 16, 15, 14);\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\/\/ AFORO Y ACCESO\nint aforoMax;\nint aforoActual;\nbool entra;\nbool sale;\n\nvoid setup() {\n\n  \/\/Serial.begin(9600);\n  SPI.begin();\n\n\n  \/\/ MATRIZ\n  myDisplay.begin();\n  myDisplay.setIntensity(0);\n  myDisplay.displayClear();\n\n  \/\/Cruz\n  myDisplay.setSpriteData(cross, W_CROSS, F_CROSS, cross, W_CROSS, F_CROSS);\n  myDisplay.displayText(\"\", PA_CENTER, 50, 0, PA_SPRITE, PA_SPRITE);\n  \n\n\n  \/\/ ULTRASONIDOS\n  pinMode(TriggerPinEntrar, OUTPUT);\n  pinMode(EchoPinEntrar, INPUT);\n  pinMode(TriggerPinSalir, OUTPUT);\n  pinMode(EchoPinSalir, INPUT);\n\n\n  \/\/ RFID\n  mfrc522.PCD_Init(); \/\/ Iniciamos el MFRC522\n\n  \/\/ BLUETOOTH\n  BT.begin(38400);\n  datoleido=\"\";\n  pausaBT=0;\n\n  \/\/ LCD\n  \/\/ Usar pines analogicos como digitales\n  pinMode(A0, OUTPUT); \/\/ configura \u201814\u2019 como salida\n  pinMode(A1, OUTPUT); \/\/ configura \u201815\u2019 como salida\n  pinMode(A2, OUTPUT); \/\/ configura \u201816\u2019 como salida\n  pinMode(A3, OUTPUT); \/\/ configura \u201817\u2019 como salida\n  pinMode(A4, OUTPUT); \/\/ configura \u201818\u2019 como salida\n  pinMode(A5, OUTPUT); \/\/ configura \u201819\u2019 como salida\n\n  \/\/ Inicializar el LCD con el n\u00famero de  columnas y filas del LCD\n  lcd.begin(16, 2);\n\n  \/\/ Aforo y acceso\n  pausaAcceso=0;\n  aforoMax=5;\n  aforoActual=0;\n  entra=false;\n  sale=false;\n\n\n}\n\n\nvoid loop() {\n  \n  \/\/ En el siguiente if se activa la cruz para mostrarla despu\u00e9s en el caso de que:\n  \/\/     - Se intent\u00f3 acceder, se accedi\u00f3 y han pasado 4 segundos o m\u00e1s desde que se activ\u00f3 la flecha.\n  \/\/     - Se intent\u00f3 acceder pero no se complet\u00f3 el acceso (solo se activ\u00f3 un sensor de los dos). En este caso la flecha no se activa.\n  \/\/\n  \/\/ Adem\u00e1s, tambi\u00e9n nos ermite inicializar otros par\u00e1metros como el momento de activaci\u00f3n de la matriz, el mensaje de identificaci\u00f3n del LCD,\n  \/\/ los tiempos de entrada y salida, la pausa del acceso, la pausa de bluetooth y los permiso de entrada y salida.\n\n  \/\/Comprobamos si han pasado m\u00e1s de 4 segundos desde que se activ\u00f3 la flecha por \u00faltima vez (acceso concedido) y m\u00e1s de 2 segundos desde el \u00faltimo intento de acceso\n  \/\/(para cubrir los accesos incompletos)\n  if ((millis() - timingMATRIZ &gt; 4000) &amp;&amp; (millis() - pausaAcceso &gt; 2000) &amp;&amp; (millis() - pausaBT &gt; 2000)){\n    \n    \/\/Establecemos la cruz para mostrarla posteriormente\n    myDisplay.setSpriteData(cross, W_CROSS, F_CROSS, cross, W_CROSS, F_CROSS);\n    myDisplay.displayText(\"\", PA_CENTER, 50, 0, PA_SPRITE, PA_SPRITE);\n\n    \/\/ Reiniciamos el momento en el que se activa la matriz\n    \/\/timingMATRIZ=millis();\n\n    \/\/ Escribimos el mensaje en el LCD.\n    lcd.setCursor(0,0);\n    lcd.clear();\n    lcd.print(\"  IDENTIFICATE\");\n    \/\/lcd.print(aforoActual);\n    lcd.setCursor(0,1);\n    lcd.print(\"   POR  FAVOR\");\n    \/\/lcd.print(aforoMax);\n\n    \/\/ Inicializamos otros valores\n    tiempoEntrar=0;\n    tiempoSalir=0;\n    pausaAcceso=millis();\n    pausaBT=millis();\n    entra=false;\n    sale=false;\n  }\n\n  \/\/Mostramos por la matriz lo que est\u00e9 activado en el momento (flecha o cruz)\n  if (myDisplay.displayAnimate()) {\n    myDisplay.displayReset();\n  }\n  \n\n  \n\n  \n  \/\/ A continuaci\u00f3n llevamos a cabo el propio m\u00e9todo de identificaci\u00f3n. Para ellos, se leen del lector RFID las tarjetas que se acerquen a este, y se comprueba si\n  \/\/ se tratan de identificaciones v\u00e1lidas. Pueden ocurrir tres casos:\n  \/\/\n  \/\/    - La tarjeta\/llavero sea v\u00e1lida: se mostrar\u00e1 por pantalla que se ha concedido el acceso. Se activar\u00e1n ambas variables booleana \"entra\" y \"sale\" que nos permitir\u00e1 hacer la comprobaci\u00f3n\n  \/\/      de si el usuario ha pasado (entrar o salir) o no.\n  \/\/\n  \/\/    - La tarjeta\/llavero no sea v\u00e1lida: se mostrar\u00e1 por pantalla que se ha denegado el acceso.\n  \/\/\n  \/\/    - El aforo est\u00e9 completo, solo si la tarjeta\/llavero es v\u00e1lida: se mostrar\u00e1 por pantalla que el aforo est\u00e1 completo, y solo se podr\u00e1 salir.\n\n\n  \/\/ Revisamos si hay nuevas tarjetas  presentes\n\tif (mfrc522.PICC_IsNewCardPresent()){\n    \/\/ Seleccionamos una tarjeta\n    if (mfrc522.PICC_ReadCardSerial()){\n                                                                                                                                \/\/Serial.print(F(\"Card UID:\"));\n      \/\/ Recorremos el UID de la tarjeta leida\n      for (byte i = 0; i &lt; mfrc522.uid.size; i++) {\n        \/\/lcd.clear();\n        \/\/lcd.setCursor(0,1);\n        \/\/lcd.print(mfrc522.uid.uidByte&#91;i] &lt; 0x10 ? \" 0\" : \" \");\n        \/\/lcd.print(mfrc522.uid.uidByte&#91;i], HEX);\n\n        \/\/delay(3000);\n        \/\/ Se guarda el UID completo de la tarjeta\/llavero\n        ActualUID&#91;i]=mfrc522.uid.uidByte&#91;i];\n      }\n\n                                                                                                                              \/\/Serial.print(\"     \");                 \n      \/\/ Comparamos los UID para determinar si es uno de nuestros usuarios\n      if(compareArray(ActualUID,Usuario1)){\n                                                                                                                              \/\/Serial.println(\"Acceso concedido...\");\n        \/\/ Mostramos por pantalla el mensaje correspondiente\n        lcd.setCursor(0,0);\n        lcd.clear();\n        lcd.print(\"Acceso concedido\");\n        lcd.setCursor(0,1);\n        lcd.print(\" Adelante  Ivan \");\n\n        \/\/ Activamos la flecha para ser mostrada\n        myDisplay.setSpriteData(arrow, W_ARROW, F_ARROW, arrow, W_ARROW, F_ARROW);\n        myDisplay.displayText(\"\", PA_CENTER, 50, 0, PA_SPRITE);\n\n        \/\/ Mostramos por la matriz lo que est\u00e9 activado en el momento (en este caso la flecha)\n        if (myDisplay.displayAnimate()) {\n          myDisplay.displayReset();\n        }\n\n        \/\/ Guarda el momento en el que se activa la flecha\n        timingMATRIZ=millis();\n\n        \/\/ Establecemos el acceso a true, lo que nos permitir\u00e1 comprobar posteriormente si el usuario a pasado o no.\n        if(aforoActual&lt;aforoMax){\n          entra = true;\n          sale = true;\n        }else{\n          entra=false;\n          sale=true;\n          lcd.clear();\n          lcd.setCursor(0,0);\n          lcd.print(\" AFORO COMPLETO \");\n          lcd.setCursor(0,1);\n          lcd.print(\"  SOLO  SALIDA  \");\n        }\n\n      }else if(compareArray(ActualUID,Usuario2)){\n                                                                                                                              \/\/Serial.println(\"Acceso concedido...\");\n        \/\/ Mostramos por pantalla el mensaje correspondiente\n        lcd.setCursor(0,0);\n        lcd.clear();\n        lcd.print(\"Acceso concedido\");\n        lcd.setCursor(0,1);\n        lcd.print(\"Adelante S.Stark\");\n\n        \/\/ Activamos la flecha para ser mostrada\n        myDisplay.setSpriteData(arrow, W_ARROW, F_ARROW, arrow, W_ARROW, F_ARROW);\n        myDisplay.displayText(\"\", PA_CENTER, 50, 0, PA_SPRITE);\n\n        \/\/ Mostramos por la matriz lo que est\u00e9 activado en el momento (en este caso la flecha)\n        if (myDisplay.displayAnimate()) {\n          myDisplay.displayReset();\n        }\n\n        \/\/ Guarda el momento en el que se activa la flecha\n        timingMATRIZ=millis();\n\n        \/\/ Establecemos el acceso a true, lo que nos permitir\u00e1 comprobar posteriormente si el usuario a pasado o no.\n        if(aforoActual&lt;aforoMax){\n          entra = true;\n          sale = true;\n        }else{\n          entra=false;\n          sale=true;\n          lcd.clear();\n          lcd.setCursor(0,0);\n          lcd.print(\" AFORO COMPLETO \");\n          lcd.setCursor(0,1);\n          lcd.print(\"  SOLO  SALIDA  \");\n        }\n        \n\n      }else{\n        \/\/ El aceso ha sido denegado\n        \/\/ Mostramos por pantalla el mensaje correspondiente\n        lcd.clear();\n        lcd.print(\"Acceso  denegado\");\n\n        \/\/ Guarda el momento en el que se ha denegado el acceso\n        timingMATRIZ=millis();\n\n        \/\/ Se reestablecen las variables entra y sale\n        entra=false;\n        sale=false;\n      }\n\n      \/\/ Terminamos la lectura de la tarjeta tarjeta\n      mfrc522.PICC_HaltA();\n      \n    }\n    \n  }\n\n\n\n  \/\/ El siguiente c\u00f3digo comprueba, una vez se ha concedido el acceso, si el usuario ha pasado o no. Pueden ocurrir 3 casos:\n  \/\/\n  \/\/    - Se ha concedido el acceso y el usuario ha entrado: se sumar\u00e1 1 al aforo actual.\n  \/\/\n  \/\/    - Se ha concedido el acceso y el usuario ha salido: se restar\u00e1 1 al aforo actual.\n  \/\/\n  \/\/    - Se ha concedido el acceso pero el usuario no ha pasado (ni salido ni entrado): no se modificar\u00e1 el aforo actual.\n  \/\/      Este caso se puede dar por 2 razones: no se ha activado ning\u00fan ultrasonidos o solo se ha activado uno de los ultrasonidos.\n\n\n  \/\/ Comprobamos que han pasado m\u00e1s de 2 segundos desde el \u00faltimo intento de acceso, para as\u00ed evitar que detecte m\u00e1s accesos de los que deber\u00eda\n  if(millis()-pausaAcceso&gt;2000){\n\n    \/\/ Comprobamos si el sensor de entrada se ha activado y guardamos el momento en el que se activ\u00f3\n    entrar = ping(TriggerPinEntrar, EchoPinEntrar);\n    if(entrar&lt;20){\n      tiempoEntrar=millis();\n    }\n\n    \/\/ Comprobamos si el sensor de salida se ha activado y guardamos el momento en el que se activ\u00f3\n    salir = ping(TriggerPinSalir, EchoPinSalir);\n    if(salir&lt;20){\n      tiempoSalir=millis();\n    }\n\n    \/\/ Si el tiempo de salida es menor que el de entrada, el usuario entr\u00f3\n    if(tiempoSalir&lt;tiempoEntrar &amp;&amp; tiempoSalir != 0 &amp;&amp; entra == true){\n      lcd.clear();\n      lcd.setCursor(0,0);\n      lcd.print(\"Entra\");\n\n      \/\/ Reestablecemos los tiempos de entrada y salida a 0;\n      tiempoEntrar=0;\n      tiempoSalir=0;\n      pausaAcceso=millis();\n\n      \/\/ Sumamos 1 al aforo actual\n      aforoActual=aforoActual+1;\n\n      \/\/ Se reestablecen \"entra\" y \"sale\" a false\n      entra = false;\n      sale = false;\n    }\n\n    \/\/ Si el tiempo de entrada es menor que el de salida, el usuario sali\u00f3\n    if(tiempoEntrar&lt;tiempoSalir &amp;&amp; tiempoEntrar != 0 &amp;&amp; sale == true){\n      lcd.clear();\n      lcd.setCursor(0,0);\n      lcd.print(\"Sale\");\n\n      \/\/ Reestablecemos los tiempos de entrada y salida a 0;\n      tiempoEntrar=0;\n      tiempoSalir=0;\n      \/\/pausaAcceso=millis();\n\n      \/\/ En funci\u00f3n de lo que valga el aforo actual, se queda en 0 o se resta 1.\n      \/\/ Aunque el primer caso no se deber\u00eda dar (ya que suponemos que no deber\u00eda haber nadie dentro cuando se inicialice el control de acceso) a\u00fan as\u00ed se eval\u00faa.\n      if(aforoActual&lt;1){\n        aforoActual=0;\n      }else{\n        aforoActual=aforoActual-1;\n      }\n\n      \/\/ Si el usuario sali\u00f3, se reestablece \"acceso\" a false\n      sale = false;\n      entra = false;\n      \n    }\n  }\n  \n\n\n  \/\/ Por \u00faltimo, se implementa la comunicaci\u00f3n entre el m\u00f3dulo bluetooth y la aplicaci\u00f3n desarrollada\n  \/\/ Al evaluar los datos que se reciben por bluetooth, se pueden dar 2 casos:\n  \/\/\n  \/\/    - Un usuario autorizado (con nombre y contrase\u00f1a) cambia el aforo m\u00e1ximo: en este caso, se comprobar\u00e1 si el aforo actual es inferior al nuevo aforo m\u00e1ximo. Si es as\u00ed, no se cambiar\u00e1,\n  \/\/      si no que se ha de bajar el aforo actual saliendo suficiente gente o establecer un aforo m\u00e1ximo v\u00e1lido (superior al actual)\n  \/\/\n  \/\/    - Un usuario cliente (guest en la aplicaci\u00f3n) solicita la informaci\u00f3n del aforo actual y m\u00e1ximo\n  \/\/\n  if(BT.available()&gt;0){\n    \/\/ Se guarda un \u00fanico car\u00e1cter le\u00eddo por el m\u00f3dulo bluetooth\n    char c = BT.read();\n\n    \/\/ Se concatena en un array cada car\u00e1cter le\u00eddo, en total 2, formando un string con el dato completo\n    datoleido+=c;\n    \n    \/\/ Cambio de aforo m\u00e1ximo por usuario autorizado\n    if(datoleido.length()==2 &amp;&amp; datoleido != \"CO\"){\n\n      \/\/ Se guarda en data el dato leido en tipo entero\n      int data = datoleido.toInt();\n\n      \/\/ Comprobamos de que el nuevo aforo m\u00e1ximo es mayor al aforo actual\n      if(data &gt; aforoActual){\n        lcd.clear();\n        lcd.setCursor(0,0);\n        lcd.print(\" AFORO CAMBIADO \");\n        lcd.setCursor(0,1);\n        lcd.print(\"      A \" + String(data) + \"      \");\n        aforoMax=data;\n\n      }else{\n        lcd.clear();\n        lcd.setCursor(0,0);\n        lcd.print(\" AFORO INFERIOR \");\n        lcd.setCursor(0,1);\n        lcd.print(\" AL ACTUAL (\" + String(aforoActual) + \") \");\n      }\n\n      \/\/ Se reestablecen las variables pausaBT y datoleido\n      pausaBT=millis();\n      datoleido=\"\";\n    }\n    \n    \/\/ Solicitud de aforos actual y m\u00e1ximo por usuario guest\n    \/\/ El dato que se lee est\u00e1 especificado en la aplicaci\u00f3n\n    if(datoleido.length()==4 &amp;&amp; datoleido == \"CODE\"){\n      lcd.clear();\n      lcd.setCursor(0,0);\n      lcd.print(\"AFORO ACTUAL: \" + String(aforoActual));\n      lcd.setCursor(0,1);\n      lcd.print(\"AFORO MAXIMO: \" + String(aforoMax));\n      \n      \/\/ Se reestablecen las variables pausaBT y datoleido\n      pausaBT=millis();\n      datoleido=\"\";\n    }\n    \n  }\n\n}\n\n\/\/ A continuaci\u00f3n se programan las funciones de apoyo\n\n\/\/ Funcion ping de ultrasonidos\nint ping(int TriggerPin, int EchoPin) {\n   long duration, distanceCm;\n   \n   digitalWrite(TriggerPin, LOW);\n   delayMicroseconds(4);\n   digitalWrite(TriggerPin, HIGH);\n   delayMicroseconds(10);\n   digitalWrite(TriggerPin, LOW);\n   \n   duration = pulseIn(EchoPin, HIGH);\n   \n   distanceCm = duration * 10 \/ 292\/ 2;\n   return distanceCm;\n}\n\n\/\/ Funcion compara arrays\nboolean compareArray(byte array1&#91;],byte array2&#91;]){\n  if(array1&#91;0] != array2&#91;0])return(false);\n  if(array1&#91;1] != array2&#91;1])return(false);\n  if(array1&#91;2] != array2&#91;2])return(false);\n  if(array1&#91;3] != array2&#91;3])return(false);\n  return(true);\n}<\/em><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Autores: Carlos Jim\u00e9nez L\u00f3pez, Miguel Carmona Garrido y Marcos Meca Merino Explicaci\u00f3n del proyecto Nuestro proyecto se trata de un control de acceso. Con tarjetas o chapas que se pasan por un sensor RFID,&#46;&#46;&#46;<\/p>\n","protected":false},"author":58,"featured_media":6937,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5956","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Control de acceso y aforo personalizable - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Control de acceso y aforo personalizable - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Autores: Carlos Jim\u00e9nez L\u00f3pez, Miguel Carmona Garrido y Marcos Meca Merino Explicaci\u00f3n del proyecto Nuestro proyecto se trata de un control de acceso. Con tarjetas o chapas que se pasan por un sensor RFID,&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-20T10:58:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-09T06:58:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png\" \/>\n\t<meta property=\"og:image:width\" content=\"566\" \/>\n\t<meta property=\"og:image:height\" content=\"216\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Control de acceso y aforo personalizable\",\"datePublished\":\"2022-12-20T10:58:35+00:00\",\"dateModified\":\"2023-05-09T06:58:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/\"},\"wordCount\":911,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/image-29.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/\",\"name\":\"Control de acceso y aforo personalizable - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/image-29.png\",\"datePublished\":\"2022-12-20T10:58:35+00:00\",\"dateModified\":\"2023-05-09T06:58:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/image-29.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/image-29.png\",\"width\":566,\"height\":216},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/control-de-acceso-y-aforo-personalizable\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Control de acceso y aforo personalizable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Control de acceso y aforo personalizable - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/","og_locale":"es_ES","og_type":"article","og_title":"Control de acceso y aforo personalizable - Proyectos con Arduino.","og_description":"Autores: Carlos Jim\u00e9nez L\u00f3pez, Miguel Carmona Garrido y Marcos Meca Merino Explicaci\u00f3n del proyecto Nuestro proyecto se trata de un control de acceso. Con tarjetas o chapas que se pasan por un sensor RFID,&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-12-20T10:58:35+00:00","article_modified_time":"2023-05-09T06:58:41+00:00","og_image":[{"width":566,"height":216,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/"},"author":{"name":"","@id":""},"headline":"Control de acceso y aforo personalizable","datePublished":"2022-12-20T10:58:35+00:00","dateModified":"2023-05-09T06:58:41+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/"},"wordCount":911,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/","name":"Control de acceso y aforo personalizable - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png","datePublished":"2022-12-20T10:58:35+00:00","dateModified":"2023-05-09T06:58:41+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/image-29.png","width":566,"height":216},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/control-de-acceso-y-aforo-personalizable\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Control de acceso y aforo personalizable"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=5956"}],"version-history":[{"count":8,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5956\/revisions"}],"predecessor-version":[{"id":7059,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5956\/revisions\/7059"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/6937"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=5956"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=5956"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=5956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}