{"id":9569,"date":"2025-12-17T15:13:14","date_gmt":"2025-12-17T14:13:14","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=9569"},"modified":"2025-12-17T15:13:15","modified_gmt":"2025-12-17T14:13:15","slug":"smartlock","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/","title":{"rendered":"SmartLock"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609816\">1.&nbsp; DESCRIPCI\u00d3N GENERAL<\/a><\/h1>\n\n\n\n<p>Para nuestro proyecto final de la asignatura, hemos decidido crear una alarma con cerradura inteligente. Habr\u00e1 una alarma, la cual mediante un sensor de movimiento detectar\u00e1 si alguien ha entrado en la sala, y comenzar\u00e1 a pitar si es as\u00ed.&nbsp; Dicha alarma se podr\u00e1 desactivar mediante un chip RFID conectado a un teclado 4&#215;4. Este \u00faltimo sistema, una vez pasado el chip, e introducido la contrase\u00f1a correcta se abrir\u00e1 una puerta y la alarma se desactivar\u00e1 autom\u00e1ticamente. Son dos sistemas independientes, unidos mediante dos placas ESP32 mediante ESP-NOW.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609817\">2.&nbsp; IMPLEMENTACI\u00d3N<\/a><\/h1>\n\n\n\n<p>Para dicha implementaci\u00f3n, hemos conectado el sistema de alarma con sensor de movimiento con el sistema de desactivaci\u00f3n de alarma + puerta mediante dos ESP32.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a id=\"_Toc216609818\">2.1 Sistema de alarma con sensor de movimiento.<\/a><\/h2>\n\n\n\n<p>En cuanto al sistema de alarma, est\u00e1 formado por los siguientes materiales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 Protoboard<\/li>\n\n\n\n<li>Cables<\/li>\n\n\n\n<li>Sensor de humedad y temperatura<\/li>\n\n\n\n<li>Sensor ultras\u00f3nico de distancia<\/li>\n\n\n\n<li>Zumbador Buzzer<\/li>\n\n\n\n<li>Bot\u00f3n<\/li>\n\n\n\n<li>Pantalla TFT<\/li>\n\n\n\n<li>ESP32<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"398\" height=\"531\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-5.png\" alt=\"\" class=\"wp-image-9575\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-5.png 398w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-5-225x300.png 225w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>1.- Sistema de alarma por fuera<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"397\" height=\"529\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-4.png\" alt=\"\" class=\"wp-image-9574\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-4.png 397w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-4-225x300.png 225w\" sizes=\"auto, (max-width: 397px) 100vw, 397px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>2.- Sistema de alarma por dentro<\/p>\n\n\n\n<p>Como se puede apreciar en la imagen (Ilustraci\u00f3n 1.- Sistema de alarma por fuera), mediante una pantalla TFT, conectada al sensor de humedad y temperatura, mostrar\u00e1 la temperatura y humedad de la sala por defecto, cambiando cada 7 segundos, mostrando tambi\u00e9n, el estado de la alarma.<\/p>\n\n\n\n<p>&nbsp;En el caso de conectar o desconectar la alarma mediante el otro sistema, aparecer\u00e1 un mensaje de \u201cAlarma activada\u201d o \u201cAlarma desactivada\u201d respectivamente. Una vez el sensor ultras\u00f3nico de distancia detecta un obst\u00e1culo a menos de 15 cent\u00edmetros de distancia, en el caso de estar la alarma en estado: activada, comenzar\u00e1 a sonar mediante el zumbador buzzer y la pantalla TFT mostrar\u00e1 el mensaje: \u201c\u00a1INTRUSO!<\/p>\n\n\n\n<p>Si no detecta ning\u00fan obst\u00e1culo, en caso de estar la alarma en estado: activada, mostrar\u00e1 el mensaje: \u201cVIGILANDO\u2026\u201d hasta que encuentre un obst\u00e1culo y mostrar\u00e1 los mensajes mencionados anteriormente.<\/p>\n\n\n\n<p>Por \u00faltimo, cuando se desactive la alarma, se mostrar\u00e1 el mensaje: \u201cALARMA DESACTIVADA\u201d.<\/p>\n\n\n\n<p>Como se puede apreciar en la imagen (Ilustraci\u00f3n 2.- Sistema de alarma por dentro), y se ha mencionado en los materiales utilizados, hay un bot\u00f3n, cuyo principal objetivo es poder activar o desactivar la alarma manualmente desde dentro de la sala, en caso de haber un error en la conexi\u00f3n con el otro sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a id=\"_Toc216609819\">2.2&nbsp;&nbsp; Sistema de desactivaci\u00f3n de alarma mediante sistema RFID, servomotor y teclado matricial 4&#215;4<\/a><\/h2>\n\n\n\n<p>En este sistema, se han utilizado los siguientes materiales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2 protoboards<\/li>\n\n\n\n<li>LED<\/li>\n\n\n\n<li>Teclado Matricial 4&#215;4<\/li>\n\n\n\n<li>SENSOR RFID (MODELO RC522)<\/li>\n\n\n\n<li>Servomotor<\/li>\n\n\n\n<li>Condensador<\/li>\n\n\n\n<li>Cables<\/li>\n\n\n\n<li>ESP32<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"336\" height=\"449\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-3.png\" alt=\"\" class=\"wp-image-9573\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-3.png 336w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-3-224x300.png 224w\" sizes=\"auto, (max-width: 336px) 100vw, 336px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>3.- Sistema de desactivaci\u00f3n de alarma por fuera<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"334\" height=\"446\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-2.png\" alt=\"\" class=\"wp-image-9572\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-2.png 334w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-2-225x300.png 225w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/figure>\n\n\n\n<p>Ilustraci\u00f3n 4.- Sistema de desactivaci\u00f3n de alarma por dentro<\/p>\n\n\n\n<p>Para nuestro proyecto, decidimos hacer dos sistemas por separado, y unirlo mediante dos placas ESP32, con ESP-NOW. Esto lo que hace es unirlos mediante una red interna utilizando una de las placas como emisor (Sistema de desactivaci\u00f3n) y una de receptor (Sistema de activaci\u00f3n). Esta conexi\u00f3n se realiza mediante la direcci\u00f3n f\u00edsica (MAC) de los dispositivos, sin necesidad de una red WIFI externa.<\/p>\n\n\n\n<p>Para el sistema de desactivaci\u00f3n de alarma, como se puede apreciar en la imagen (Ilustraci\u00f3n 3.- Sistema de desactivaci\u00f3n de alarma por fuera), hemos decidido utilizar un sensor RFID, el cual al pasar la tarjeta correspondiente, activar\u00e1 el teclado matricial 4&#215;4.<\/p>\n\n\n\n<p>El teclado matricial 4&#215;4 consta de 3 principales funcionalidades:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Escribir bien la contrase\u00f1a \u00e0 Cuando el usuario escribe bien la contrase\u00f1a (2222), le deber\u00e1 dar al bot\u00f3n enviar (esquina inferior derecha), lo cual enviar\u00e1 una se\u00f1al al servomotor, que abrir\u00e1 la puerta, y mediante la conexi\u00f3n con el ESP-NOW, desactivar\u00e1 la alarma.<\/li>\n\n\n\n<li>Escribir mal la contrase\u00f1a \u00e0 Cuando el usuario escribe mal una contrase\u00f1a, al dar al bot\u00f3n de enviar, la luz LED colocada en la parte superior de la puerta, parpadear\u00e1 repetidamente, indicando que la contrase\u00f1a introducida es err\u00f3nea. La puerta no se abrir\u00e1, y, por lo tanto, la alarma se mantendr\u00e1 activa.<\/li>\n\n\n\n<li>Borrado de contrase\u00f1a \u00e0 Si el usuario, tras pasar el chip RFID, se da cuenta que se ha equivocado de contrase\u00f1a, antes de enviarla, tiene la opci\u00f3n de borrado de contrase\u00f1a. Tras escribir alg\u00fan n\u00famero err\u00f3neo, al pulsar sobre la tecla inferior izquierda de teclado, la contrase\u00f1a se borrar\u00e1 por completo, pudi\u00e9ndola escribir de nuevo, sin tener que pasar el chip RFID de vuelta.<\/li>\n<\/ul>\n\n\n\n<p>Cabe destacar que el teclado matricial est\u00e1 tambi\u00e9n conectado con la luz LED superior de la puerta, por lo que, al pulsar una tecla, la luz LED parpadear\u00e1.<\/p>\n\n\n\n<p>En el caso de pasar un CHIP que no es el correcto por el sensor RFID, la luz parpadear\u00e1 repetidamente, como hace al introducir una contrase\u00f1a equivocada.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609820\">3.&nbsp; PASOS DADOS<\/a><\/h1>\n\n\n\n<p>Para poder empezar con nuestro proyecto, lo primero de todo era buscar una idea que nos gustase a todos los integrantes del grupo, y, que a la par, vi\u00e9semos interesante para mostrarla al resto de la clase. En un principio quer\u00edamos hacer que dos sistemas se conectasen entre s\u00ed mediante las ESP-32 (al igual que en nuestro proyecto), para poder comunicarse sin necesidad de WIFI o ninguna fuente de energ\u00eda externa. Esta idea vino debido al apag\u00f3n nacional que sufrimos recientemente.<\/p>\n\n\n\n<p>Tras comentarlo con el profesor, vimos que no era algo visual para presentar como proyecto, ya que era mucho m\u00e1s software que hardware. Como nuestra idea era utilizar los ESP-32 que conectasen entre s\u00ed, decidimos hacer un sistema grande, que estuviese dividido en dos sistemas peque\u00f1os, llegando as\u00ed a nuestro proyecto final, el sistema <em>SmartLock<\/em>, de activaci\u00f3n y desactivaci\u00f3n de alarma.<\/p>\n\n\n\n<p>Para realizar el sistema de activaci\u00f3n y desactivaci\u00f3n de alarma, decidimos dividir el proyecto en 2, realizarlo por separado, y finalmente unir ambas partes, a\u00f1adiendo por \u00faltimo la l\u00f3gica del ESP-NOW, para culminar el proyecto, los tres juntos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609821\">4.&nbsp; REPARTO DE TAREAS<\/a><\/h1>\n\n\n\n<p>En cuanto al reparto de tareas, no fue un problema para nosotros, ya que todos los miembros del grupo estuvimos de acuerdo desde un principio en que quiso hacer cada uno.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c1ngel Molinero Caja: Ideaci\u00f3n y planteamiento del proyecto, l\u00f3gica y conexiones del sistema de alarma, conexi\u00f3n final mediante ESP-32.<\/li>\n\n\n\n<li>Jorge Castellano Bajo: Ideaci\u00f3n y planteamiento del proyecto, memoria ejecutiva, montaje de v\u00eddeos y elementos multimedia, conexi\u00f3n final mediante ESP-32.<\/li>\n\n\n\n<li>Pedro Gonz\u00e1lez Mart\u00edn: Ideaci\u00f3n y planteamiento del proyecto, l\u00f3gica y conexiones del sistema de desactivaci\u00f3n de alarma, conexi\u00f3n final mediante ESP-32.<\/li>\n<\/ul>\n\n\n\n<p>Como se puede apreciar en el v\u00eddeo de presentaci\u00f3n, todos los integrantes participamos en \u00e9l.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609822\">5.&nbsp; MATERIAL UTILIZADO Y COSTES<\/a><\/h1>\n\n\n\n<p>A continuaci\u00f3n, podemos apreciar todos los materiales utilizados, escribiendo \u00fanicamente los costes de los materiales que hemos tenido que comprar, sin tener en cuenta los otorgados por la universidad.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"808\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen.png\" alt=\"\" class=\"wp-image-9570\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-300x274.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/imagen-768x700.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609823\">6.&nbsp; PROBLEMAS Y SOLUCIONES ENCONTRADAS<\/a><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>MUESTRA DE DATOS EN LA PANTALLA TFT: Al cambiar cada 7 segundos lo que aparece en la pantalla TFT, tuvimos que agregar un sistema de refresco, que pusiese la pantalla TFT completamente azul durante un corto periodo de tiempo, para que as\u00ed no se solapase el texto de muestra de temperatura y humedad, con el texto del estado de la alarma.<\/li>\n\n\n\n<li>Inestabilidad por consumo de energ\u00eda\u00a0: Cuando comenzamos a hacer pruebas, nos dimos cuenta que un mont\u00f3n de elementos no funcionaban correctamente cuando tocaban, tras muchos cambios y pruebas, nos dimos cuenta que al conectar los sistemas a nuestro port\u00e1til, no les llegaba la suficiente potencia, por lo que ten\u00edamos que conectarlo a un enchufe a tierra con m\u00e1s potencia.<\/li>\n\n\n\n<li>Conflicto de pines y cableado e inestabilidad de conexi\u00f3n: Muchas veces, debido al transporte de los materiales, una vez ya estaba montada parte del proyecto, tuvimos que comprobar de nuevo que todas las conexiones estuviesen perfectamente enganchadas, ya que en muchas ocasiones aparec\u00edan cables sueltos. A parte, uno de los teclados empez\u00f3 a dar fallos, por lo que tuvimos que cambiarlo a mitad de la realizaci\u00f3n del proyecto.<\/li>\n\n\n\n<li>Conexi\u00f3n ESP-NOW: Al ser las placas ESP-32 algo totalmente nuevo para nosotros, tuvimos que informarnos acerca de su uso. Esto lo hicimos mediante la lectura de varios foros y visualizaci\u00f3n de v\u00eddeos explicativos.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609824\">7.&nbsp; C\u00d3DIGO<\/a><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo Alarma<\/h3>\n\n\n\n<p>#include &lt;Adafruit_GFX.h&gt;<\/p>\n\n\n\n<p>#include &lt;Adafruit_ST7789.h&gt;<\/p>\n\n\n\n<p>#include &lt;SPI.h&gt;<\/p>\n\n\n\n<p>#include &lt;DHT.h&gt;<\/p>\n\n\n\n<p>\/\/ pantalla TFT-ST7789<\/p>\n\n\n\n<p>#define TFT_CS&nbsp;&nbsp;&nbsp; 10<\/p>\n\n\n\n<p>#define TFT_DC&nbsp;&nbsp;&nbsp; 9<\/p>\n\n\n\n<p>#define TFT_RST&nbsp;&nbsp; 8<\/p>\n\n\n\n<p>\/\/ sensor temp y humedad<\/p>\n\n\n\n<p>#define DHTPIN&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>#define DHTTYPE&nbsp;&nbsp; DHT11&nbsp;<\/p>\n\n\n\n<p>#define BUZZER&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>\/\/ sensor ultrasonico<\/p>\n\n\n\n<p>#define TRIG_PIN&nbsp; 6<\/p>\n\n\n\n<p>#define ECHO_PIN&nbsp; 7<\/p>\n\n\n\n<p>#define BOTON_PIN A0<\/p>\n\n\n\n<p>#define PIN_REMOTO_ESP32 A1<\/p>\n\n\n\n<p>\/\/ Inicializaci\u00f3n de objetos<\/p>\n\n\n\n<p>Adafruit_ST7789 tft <strong>=<\/strong> Adafruit_ST7789<strong>(<\/strong>TFT_CS<strong>,<\/strong> TFT_DC<strong>,<\/strong> TFT_RST<strong>);<\/strong><\/p>\n\n\n\n<p>DHT dht<strong>(<\/strong>DHTPIN<strong>,<\/strong> DHTTYPE<strong>);<\/strong><\/p>\n\n\n\n<p>\/\/ variables estado alarma<\/p>\n\n\n\n<p>bool alarmaActiva <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>bool intrusoDetectado <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>bool mostrarSensor <strong>=<\/strong> <strong>true<\/strong><strong>;<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ controla que pantalla se ve<\/p>\n\n\n\n<p>unsigned long ultimoCambio <strong>=<\/strong> 0<strong>;<\/strong> \/\/ temporizador cambio de pantalla<\/p>\n\n\n\n<p>const unsigned long intervaloCambio <strong>=<\/strong> 7000<strong>;<\/strong> \/\/ cambiar pantalla cada 7seg<\/p>\n\n\n\n<p>\/\/ variables para evitar lecturas falsas<\/p>\n\n\n\n<p>bool alarmaCambioPendiente <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong> \/\/ bot\u00f3n f\u00edsico<\/p>\n\n\n\n<p>bool senalRemotaPendiente <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong>&nbsp; \/\/ se\u00f1al del ESP32<\/p>\n\n\n\n<p>\/\/ funcion para escribir texto centrado<\/p>\n\n\n\n<p>void mostrarTextoCentrado<strong>(<\/strong>const char<strong>*<\/strong> texto<strong>,<\/strong> int y<strong>,<\/strong> int size<strong>,<\/strong> uint16_t color<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; int16_t x1<strong>,<\/strong> y1<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; uint16_t w<strong>,<\/strong> h<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>setTextSize<strong>(<\/strong>size<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>getTextBounds<strong>(<\/strong>texto<strong>,<\/strong> 0<strong>,<\/strong> 0<strong>,<\/strong> <strong>&amp;<\/strong>x1<strong>,<\/strong> <strong>&amp;<\/strong>y1<strong>,<\/strong> <strong>&amp;<\/strong>w<strong>,<\/strong> <strong>&amp;<\/strong>h<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; int16_t x <strong>=<\/strong> <strong>(<\/strong>tft<strong>.<\/strong>width<strong>()<\/strong> <strong>&#8211;<\/strong> w<strong>)<\/strong> <strong>\/<\/strong> 2 <strong>&#8211;<\/strong> x1<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>setCursor<strong>(<\/strong>x<strong>,<\/strong> y<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>setTextColor<strong>(<\/strong>color<strong>,<\/strong> ST77XX_BLUE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>print<strong>(<\/strong>texto<strong>);<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>\/\/ funcion para leer la distancia del sensor ultras\u00f3nico<\/p>\n\n\n\n<p>long leerDistanciaCm<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; digitalWrite<strong>(<\/strong>TRIG_PIN<strong>,<\/strong> LOW<strong>);<\/strong> delayMicroseconds<strong>(<\/strong>2<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; digitalWrite<strong>(<\/strong>TRIG_PIN<strong>,<\/strong> HIGH<strong>);<\/strong> delayMicroseconds<strong>(<\/strong>10<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; digitalWrite<strong>(<\/strong>TRIG_PIN<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; long duracion <strong>=<\/strong> pulseIn<strong>(<\/strong>ECHO_PIN<strong>,<\/strong> HIGH<strong>,<\/strong> 30000<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>duracion <strong>==<\/strong> 0<strong>)<\/strong> <strong>return<\/strong> 999<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>return<\/strong> duracion <strong>*<\/strong> 0.034 <strong>\/<\/strong> 2<strong>;<\/strong>&nbsp;&nbsp;<\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>\/\/ funcion para mostrar datos meteorologicos<\/p>\n\n\n\n<p>void mostrarPantallaSensor<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; float temp <strong>=<\/strong> dht<strong>.<\/strong>readTemperature<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp; float hum <strong>=<\/strong> dht<strong>.<\/strong>readHumidity<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>fillScreen<strong>(<\/strong>ST77XX_BLUE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>isnan<strong>(<\/strong>temp<strong>)<\/strong> <strong>||<\/strong> isnan<strong>(<\/strong>hum<strong>))<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abError sensor\u00bb<strong>,<\/strong> 150<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_RED<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>return<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abPanel de Control\u00bb<strong>,<\/strong> 10<strong>,<\/strong> 2<strong>,<\/strong> ST77XX_WHITE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abSistema Alarma\u00bb<strong>,<\/strong> 35<strong>,<\/strong> 2<strong>,<\/strong> ST77XX_WHITE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abTemp \/ Humedad\u00bb<strong>,<\/strong> 90<strong>,<\/strong> 2<strong>,<\/strong> ST77XX_WHITE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>((<\/strong>String<strong>(<\/strong>temp<strong>,<\/strong> 1<strong>)<\/strong> <strong>+<\/strong> \u00bb C\u00bb<strong>).<\/strong>c_str<strong>(),<\/strong> 140<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_CYAN<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>((<\/strong>String<strong>(<\/strong>hum<strong>,<\/strong> 1<strong>)<\/strong> <strong>+<\/strong> \u00bb %\u00bb<strong>).<\/strong>c_str<strong>(),<\/strong> 190<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_GREEN<strong>);<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>\/\/ funcion para mostrar estado de alarma<\/p>\n\n\n\n<p>void mostrarPantallaAlarma<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>fillScreen<strong>(<\/strong>ST77XX_BLUE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abPanel de Control\u00bb<strong>,<\/strong> 10<strong>,<\/strong> 2<strong>,<\/strong> ST77XX_WHITE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abSistema Alarma\u00bb<strong>,<\/strong> 35<strong>,<\/strong> 2<strong>,<\/strong> ST77XX_WHITE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>alarmaActiva<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abALARMA\u00bb<strong>,<\/strong> 100<strong>,<\/strong> 4<strong>,<\/strong> ST77XX_RED<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abACTIVADA\u00bb<strong>,<\/strong> 160<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_RED<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(<\/strong>intrusoDetectado<strong>)<\/strong> mostrarTextoCentrado<strong>(<\/strong>\u00ab\u00a1INTRUSO!\u00bb<strong>,<\/strong> 210<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_RED<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>else<\/strong> mostrarTextoCentrado<strong>(<\/strong>\u00abVIGILANDO&#8230;\u00bb<strong>,<\/strong> 210<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_YELLOW<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abALARMA\u00bb<strong>,<\/strong> 100<strong>,<\/strong> 4<strong>,<\/strong> ST77XX_GREEN<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarTextoCentrado<strong>(<\/strong>\u00abDESACTIVADA\u00bb<strong>,<\/strong> 160<strong>,<\/strong> 3<strong>,<\/strong> ST77XX_GREEN<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>void actualizarPantalla<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>mostrarSensor<strong>)<\/strong> mostrarPantallaSensor<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>else<\/strong> mostrarPantallaAlarma<strong>();<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>void alternarAlarma<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; alarmaActiva <strong>=<\/strong> <strong>!<\/strong>alarmaActiva<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>alarmaActiva<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tone<strong>(<\/strong>BUZZER<strong>,<\/strong> 1000<strong>,<\/strong> 200<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; noTone<strong>(<\/strong>BUZZER<strong>);<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; intrusoDetectado <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; mostrarSensor <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; actualizarPantalla<strong>();<\/strong> \/\/ muestra el estado de la alarma<\/p>\n\n\n\n<p>&nbsp; ultimoCambio <strong>=<\/strong> millis<strong>();<\/strong> \/\/ guarda el tiempo trascurrido<\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>\/\/ revisar se\u00f1al del boton<\/p>\n\n\n\n<p>void revisarBoton<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>digitalRead<strong>(<\/strong>BOTON_PIN<strong>)<\/strong> <strong>==<\/strong> LOW<strong>)<\/strong> <strong>{<\/strong>&nbsp; \/\/ cuando se pulsa la se\u00f1al es low<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(!<\/strong>alarmaCambioPendiente<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alternarAlarma<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alarmaCambioPendiente <strong>=<\/strong> <strong>true<\/strong><strong>;<\/strong> \/\/ para evitar varios cambios de estado en una pulsacion<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay<strong>(<\/strong>50<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; alarmaCambioPendiente <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>\/\/ revisa se\u00f1al del ESP32<\/p>\n\n\n\n<p>void revisarSenalRemota<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>digitalRead<strong>(<\/strong>PIN_REMOTO_ESP32<strong>)<\/strong> <strong>==<\/strong> HIGH<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(!<\/strong>senalRemotaPendiente<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alternarAlarma<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; senalRemotaPendiente <strong>=<\/strong> <strong>true<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; senalRemotaPendiente <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>void setup<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; dht<strong>.<\/strong>begin<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>BUZZER<strong>,<\/strong> OUTPUT<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>TRIG_PIN<strong>,<\/strong> OUTPUT<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>ECHO_PIN<strong>,<\/strong> INPUT<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>BOTON_PIN<strong>,<\/strong> INPUT_PULLUP<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>PIN_REMOTO_ESP32<strong>,<\/strong> INPUT<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>init<strong>(<\/strong>240<strong>,<\/strong> 320<strong>,<\/strong> SPI_MODE0<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>setRotation<strong>(<\/strong>1<strong>);<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp; tft<strong>.<\/strong>fillScreen<strong>(<\/strong>ST77XX_BLUE<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; actualizarPantalla<strong>();<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>void loop<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; revisarBoton<strong>();<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp; revisarSenalRemota<strong>();<\/strong>&nbsp;<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>alarmaActiva<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; long distancia <strong>=<\/strong> leerDistanciaCm<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; \/\/ si el objeto esta a menos de 15cm se activa la alarma<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(<\/strong>distancia <strong>&gt;<\/strong> 0 <strong>&amp;&amp;<\/strong> distancia <strong>&lt;<\/strong> 15<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(!<\/strong>intrusoDetectado<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intrusoDetectado <strong>=<\/strong> <strong>true<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(<\/strong>mostrarSensor<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mostrarSensor <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ultimoCambio <strong>=<\/strong> millis<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mostrarPantallaAlarma<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tone<strong>(<\/strong>BUZZER<strong>,<\/strong> 3000<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(<\/strong>intrusoDetectado<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intrusoDetectado <strong>=<\/strong> <strong>false<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noTone<strong>(<\/strong>BUZZER<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>if<\/strong> <strong>(!<\/strong>mostrarSensor<strong>)<\/strong> mostrarPantallaAlarma<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; noTone<strong>(<\/strong>BUZZER<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; \/\/ rotaci\u00f3n datos pantalla<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>millis<strong>()<\/strong> <strong>&#8211;<\/strong> ultimoCambio <strong>&gt;<\/strong> intervaloCambio<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; mostrarSensor <strong>=<\/strong> <strong>!<\/strong>mostrarSensor<strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; actualizarPantalla<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; ultimoCambio <strong>=<\/strong> millis<strong>();<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; delay<strong>(<\/strong>50<strong>);<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo ESP32 Receptor<\/h3>\n\n\n\n<p>#include &lt;esp_now.h&gt;<\/p>\n\n\n\n<p>#include &lt;WiFi.h&gt;<\/p>\n\n\n\n<p>#define PIN_SALIDA_A_ARDUINO 15<\/p>\n\n\n\n<p><strong>typedef<\/strong> struct struct_mensaje <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; bool puertaAbierta<strong>;<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong> struct_mensaje<strong>;<\/strong><\/p>\n\n\n\n<p>struct_mensaje mensajeRecibido<strong>;<\/strong><\/p>\n\n\n\n<p>void OnDataRecv<strong>(<\/strong>const uint8_t <strong>*<\/strong> mac<strong>,<\/strong> const uint8_t <strong>*<\/strong>incomingData<strong>,<\/strong> int len<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; memcpy<strong>(&amp;<\/strong>mensajeRecibido<strong>,<\/strong> incomingData<strong>,<\/strong> <strong>sizeof<\/strong><strong>(<\/strong>mensajeRecibido<strong>));<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>mensajeRecibido<strong>.<\/strong>puertaAbierta<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; digitalWrite<strong>(<\/strong>PIN_SALIDA_A_ARDUINO<strong>,<\/strong> HIGH<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Serial<strong>.<\/strong>println<strong>(<\/strong>\u00abPUERTA ABIERTA\u00bb<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong> <strong>else<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; digitalWrite<strong>(<\/strong>PIN_SALIDA_A_ARDUINO<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Serial<strong>.<\/strong>println<strong>(<\/strong>\u00abPUERTA CERRADA\u00bb<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<p>void setup<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp; Serial<strong>.<\/strong>begin<strong>(<\/strong>115200<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; pinMode<strong>(<\/strong>PIN_SALIDA_A_ARDUINO<strong>,<\/strong> OUTPUT<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; digitalWrite<strong>(<\/strong>PIN_SALIDA_A_ARDUINO<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; WiFi<strong>.<\/strong>mode<strong>(<\/strong>WIFI_STA<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong> <strong>(<\/strong>esp_now_init<strong>()<\/strong> <strong>!=<\/strong> ESP_OK<strong>)<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Serial<strong>.<\/strong>println<strong>(<\/strong>\u00abError ESP-NOW\u00bb<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>return<\/strong><strong>;<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>&nbsp; esp_now_register_recv_cb<strong>((<\/strong>esp_now_recv_cb_t<strong>)<\/strong>OnDataRecv<strong>);<\/strong><\/p>\n\n\n\n<p>&nbsp; <strong>}<\/strong><\/p>\n\n\n\n<p>void loop<strong>()<\/strong> <strong>{<\/strong><\/p>\n\n\n\n<p><strong>}<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo Puerta, Cerradura y ESP32 Emisor<\/h3>\n\n\n\n<p>#include &lt;SPI.h&gt;<\/p>\n\n\n\n<p>#include &lt;MFRC522.h&gt;<\/p>\n\n\n\n<p>#include &lt;Keypad.h&gt;<\/p>\n\n\n\n<p>#include &lt;ESP32Servo.h&gt;<\/p>\n\n\n\n<p>\/\/esp-now<\/p>\n\n\n\n<p>#include &lt;esp_now.h&gt;<\/p>\n\n\n\n<p>#include &lt;WiFi.h&gt;<\/p>\n\n\n\n<p>\/\/RFID<\/p>\n\n\n\n<p>#define SS_PIN &nbsp;5 &nbsp;<\/p>\n\n\n\n<p>#define RST_PIN 22 &nbsp;<\/p>\n\n\n\n<p>MFRC522 rfid(SS_PIN, RST_PIN);<\/p>\n\n\n\n<p>String UID_MAESTRO = \u00ab60 E8 BD 4F\u00bb;<\/p>\n\n\n\n<p>\/\/SERVOMOTOR<\/p>\n\n\n\n<p>Servo miServo;<\/p>\n\n\n\n<p>#define SERVO_PIN 4<\/p>\n\n\n\n<p>int posCerrado = 90; &nbsp;<\/p>\n\n\n\n<p>int posAbierto = 0; &nbsp;<\/p>\n\n\n\n<p>\/\/LED<\/p>\n\n\n\n<p>#define LED_PIN 2 &nbsp; &nbsp;<\/p>\n\n\n\n<p>\/\/TECLADO<\/p>\n\n\n\n<p>const byte FILAS = 4;<\/p>\n\n\n\n<p>const byte COLUMNAS = 4;<\/p>\n\n\n\n<p>char keys[FILAS][COLUMNAS] = {<\/p>\n\n\n\n<p>&nbsp; {&#8216;1&#8242;,&#8217;2&#8242;,&#8217;3&#8242;,&#8217;A&#8217;},<\/p>\n\n\n\n<p>&nbsp; {&#8216;4&#8242;,&#8217;5&#8242;,&#8217;6&#8242;,&#8217;B&#8217;},<\/p>\n\n\n\n<p>&nbsp; {&#8216;7&#8242;,&#8217;8&#8242;,&#8217;9&#8242;,&#8217;C&#8217;},<\/p>\n\n\n\n<p>&nbsp; {&#8216;*&#8217;,&#8217;0&#8242;,&#8217;#&#8217;,&#8217;D&#8217;}<\/p>\n\n\n\n<p>};<\/p>\n\n\n\n<p>byte pinesFilas[FILAS] = {33, 32, 25, 26};<\/p>\n\n\n\n<p>byte pinesColumnas[COLUMNAS] = {27, 14, 12, 13};<\/p>\n\n\n\n<p>Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);<\/p>\n\n\n\n<p>\/\/SISTEMA<\/p>\n\n\n\n<p>String claveSecreta = \u00ab2222\u00bb;<\/p>\n\n\n\n<p>String inputPIN = \u00ab\u00bb;<\/p>\n\n\n\n<p>bool esperandoPIN = false;<\/p>\n\n\n\n<p>unsigned long tiempoInicioPIN = 0;<\/p>\n\n\n\n<p>\/\/ESP_NOW<\/p>\n\n\n\n<p>uint8_t mac_destino[] = &nbsp;{0x88, 0x57, 0x21, 0xB1,0xB8,0x74};<\/p>\n\n\n\n<p>typedef struct struct_mensaje {<\/p>\n\n\n\n<p>&nbsp; bool puertaAbierta; \/\/ open\/close<\/p>\n\n\n\n<p>}struct_mensaje;<\/p>\n\n\n\n<p>struct_mensaje mensaje;<\/p>\n\n\n\n<p>esp_now_peer_info_t peerInfo;<\/p>\n\n\n\n<p>void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {<\/p>\n\n\n\n<p>&nbsp; Serial.print(\u00ab\\r\\nEstado del envio: \u00ab);<\/p>\n\n\n\n<p>&nbsp; Serial.println(status == ESP_NOW_SEND_SUCCESS ? \u00abEntregado Exitosamente\u00bb : \u00abFallo en envio\u00bb);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void setup() {<\/p>\n\n\n\n<p>&nbsp; Serial.begin(115200);<\/p>\n\n\n\n<p>&nbsp; \/\/logica esp-now<\/p>\n\n\n\n<p>&nbsp; WiFi.mode(WIFI_STA);<\/p>\n\n\n\n<p>&nbsp; if (esp_now_init() != ESP_OK) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; Serial.println(\u00abError inicializando ESP-NOW\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; return;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; esp_now_register_send_cb((esp_now_send_cb_t)OnDataSent);<\/p>\n\n\n\n<p>&nbsp; memcpy(peerInfo.peer_addr, mac_destino, 6);<\/p>\n\n\n\n<p>&nbsp; peerInfo.channel = 0; &nbsp;<\/p>\n\n\n\n<p>&nbsp; peerInfo.encrypt = false;<\/p>\n\n\n\n<p>&nbsp; if (esp_now_add_peer(&amp;peerInfo) != ESP_OK){<\/p>\n\n\n\n<p>&nbsp; &nbsp; Serial.println(\u00abError al a\u00f1adir el otro ESP32\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; return;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; \/\/iniciar RFID<\/p>\n\n\n\n<p>&nbsp; SPI.begin();<\/p>\n\n\n\n<p>&nbsp; rfid.PCD_Init();<\/p>\n\n\n\n<p>&nbsp; \/\/iniciar Servo<\/p>\n\n\n\n<p>&nbsp; miServo.setPeriodHertz(50); \/\/ Frecuencia est\u00e1ndar servos<\/p>\n\n\n\n<p>&nbsp; miServo.attach(SERVO_PIN, 500, 2400);<\/p>\n\n\n\n<p>&nbsp; \/\/iniciar LED<\/p>\n\n\n\n<p>&nbsp; pinMode(LED_PIN, OUTPUT);<\/p>\n\n\n\n<p>&nbsp; cerrarPuerta();<\/p>\n\n\n\n<p>&nbsp; Serial.println(\u00abEstado: CERRADO\u00bb);<\/p>\n\n\n\n<p>&nbsp; Serial.println(\u00abAcerque su tarjeta\u00bb);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void loop() {<\/p>\n\n\n\n<p>&nbsp; \/\/esperando tarjeta<\/p>\n\n\n\n<p>&nbsp; if (!esperandoPIN) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; if (rfid.PICC_IsNewCardPresent() &amp;&amp; rfid.PICC_ReadCardSerial()) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; String uidLeido = \u00ab\u00bb;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; for (byte i = 0; i &lt; rfid.uid.size; i++) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; uidLeido += String(rfid.uid.uidByte[i] &lt; 0x10 ? \u00bb 0&#8243; : \u00bb \u00ab);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; uidLeido += String(rfid.uid.uidByte[i], HEX);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; uidLeido.toUpperCase();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; uidLeido.trim();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; Serial.print(\u00abTarjeta detectada\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; \/\/ tarjeta coorecta<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; if (uidLeido == UID_MAESTRO) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00abTARJETA CORRECTA\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00abIngrese PIN en el teclado y pulse &#8216;#'\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; \/\/parpadeo led caso correcto<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(LED_PIN, LOW); delay(100); digitalWrite(LED_PIN, HIGH);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; \/\/modo essperando PIN<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; esperandoPIN = true;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; tiempoInicioPIN = millis();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; inputPIN = \u00ab\u00bb;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; } else {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00abTARJETA NO AUTORIZADA\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; parpadeoError();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; rfid.PICC_HaltA();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; rfid.PCD_StopCrypto1();<\/p>\n\n\n\n<p>&nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; \/\/ESPERANDO PIN<\/p>\n\n\n\n<p>&nbsp; else {<\/p>\n\n\n\n<p>&nbsp; &nbsp; char tecla = teclado.getKey();<\/p>\n\n\n\n<p>&nbsp; &nbsp; if (tecla) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; \/\/ Parpadeo luz al pulsar una tecla<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; digitalWrite(LED_PIN, LOW); delay(50); digitalWrite(LED_PIN, HIGH);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; if (tecla == &#8216;D&#8217;) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00ab\\nVerificando PIN&#8230;\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; if (inputPIN == claveSecreta) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; abrirPuerta();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; } else {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00abINCORRECTOO\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parpadeoError();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cerrarPuerta();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; else if (tecla == &#8216;*&#8217;) { \/\/nos permite borrar<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; inputPIN = \u00ab\u00bb;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.println(\u00abPIN borrado, empiece de nuevo\u00bb);<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; else {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; inputPIN += tecla;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; Serial.print(\u00ab*\u00bb); \/\/ Muestra asteriscos en el monitor al escribir en le teclado<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void cerrarPuerta() {<\/p>\n\n\n\n<p>&nbsp; esperandoPIN = false;<\/p>\n\n\n\n<p>&nbsp; inputPIN = \u00ab\u00bb;<\/p>\n\n\n\n<p>&nbsp; miServo.write(posCerrado);<\/p>\n\n\n\n<p>&nbsp; digitalWrite(LED_PIN, HIGH); \/\/ enciende el led cuando la puerta est\u00e1 cerrada<\/p>\n\n\n\n<p>&nbsp; enviarSenal(false);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void abrirPuerta() {<\/p>\n\n\n\n<p>&nbsp; Serial.println(\u00ab\u00a1ACCESO CONCEDIDO!\u00bb);<\/p>\n\n\n\n<p>&nbsp; Serial.println(\u00abABRIENDO PUERTA\u00bb);<\/p>\n\n\n\n<p>&nbsp; miServo.write(posAbierto); &nbsp;<\/p>\n\n\n\n<p>&nbsp; digitalWrite(LED_PIN, LOW); &nbsp;\/\/apagado el led mientras puerta abierta<\/p>\n\n\n\n<p>&nbsp; enviarSenal(true);<\/p>\n\n\n\n<p>&nbsp; delay(5000);<\/p>\n\n\n\n<p>&nbsp; Serial.println(\u00abCerrando puerta autom\u00e1ticamente&#8230;\u00bb);<\/p>\n\n\n\n<p>&nbsp; cerrarPuerta();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void parpadeoError() { \/\/3 parpadeos si se falla el pin<\/p>\n\n\n\n<p>&nbsp; for(int i=0; i&lt;3; i++){<\/p>\n\n\n\n<p>&nbsp; &nbsp; digitalWrite(LED_PIN, LOW); delay(100);<\/p>\n\n\n\n<p>&nbsp; &nbsp; digitalWrite(LED_PIN, HIGH); delay(100);<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void enviarSenal(bool estaAbierto) {<\/p>\n\n\n\n<p>&nbsp; mensaje.puertaAbierta = estaAbierto;<\/p>\n\n\n\n<p>&nbsp; esp_err_t result = esp_now_send(mac_destino, (uint8_t *) &amp;mensaje, sizeof(mensaje));<\/p>\n\n\n\n<p>&nbsp; if (result == ESP_OK) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; Serial.print(\u00abEnviado estado: \u00ab);<\/p>\n\n\n\n<p>&nbsp; &nbsp; Serial.println(estaAbierto ? \u00abTRUE (Abierto)\u00bb : \u00abFALSE (Cerrado)\u00bb);<\/p>\n\n\n\n<p>&nbsp; } else {<\/p>\n\n\n\n<p>&nbsp; &nbsp; Serial.println(\u00abError enviando se\u00f1al\u00bb);<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609825\">8.&nbsp; CASOS DE USO<\/a><\/h1>\n\n\n\n<p>Mediante los casos de uso podremos ver las principales acciones que es capaz de realizar nuestro sistema. Casos de uso:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mostrar por pantalla TFT: El sistema cambiar\u00e1 cada 7 segundos el contenido mostrado en la pantalla TFT. El cambio ser\u00e1 entre el estado de la alarma (activada\/desactivada) y la temperatura y humedad de la sala.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Activar \/ desactivar alarma mediante bot\u00f3n: El sistema de activaci\u00f3n de alarma tiene un control manual, mediante un bot\u00f3n, para activar y desactivar la alarma desde dentro cuando sea necesario.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detectar intruso: Cuando el sensor ultras\u00f3nico de movimiento detecta un objeto a menos de 15 cm de distancia, mediante el buzzer introducido en el sistema, el sistema de alarma comenzar\u00e1 a emitir un pitido de alerta.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pasar chip RFID: Para poder comenzar a escribir en el teclado matricial, se deber\u00e1 pasar la placa RFID correspondiente. Una vez pasada, se podr\u00e1 comenzar a escribir en el teclado.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Escribir contrase\u00f1a: Tras pasar el chip RFID, se podr\u00e1 comenzar a escribir en el teclado matricial<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fallar contrase\u00f1a: Al enviar una contrase\u00f1a incorrecta, la luz LED de la parte superior de la puerta parpadear\u00e1, indicando el error.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Borrar contrase\u00f1a: Si ha habido una equivocaci\u00f3n de escriturade contrase\u00f1a, el sistema permite borrar la contrase\u00f1a, pudiendo as\u00ed escribirla de nuevo, sin necesidad de volver a pasar el chip.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Acertar contrase\u00f1a: El usuario escribir\u00e1 la contrase\u00f1a correctamente, abri\u00e9ndose as\u00ed la puerta mediante el servomotor y desactivando la alarma.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Abrir puerta: Tras escribir correctamente la contrase\u00f1a, la puerta se abrir\u00e1 autom\u00e1ticamente mediante un servomotor.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Cerrar puerta: Tras 5 segundos abierta, la puerta se cerrar\u00e1 autom\u00e1ticamente.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Desactivar alarma mediante contrase\u00f1a: Una vez escrita la contrase\u00f1a y abierta la puerta, el sistema desactivar\u00e1 la alarma, pudiendo pasar por el sensor de movimiento sin que este emita ruido por el buzzer.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\"><a id=\"_Toc216609826\">9.&nbsp; BIBLIOGRAF\u00cdA<\/a><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Naylamp Mechatronics. (s.f.). <em>Tutorial m\u00f3dulo Lector RFID RC522<\/em>. <a href=\"https:\/\/naylampmechatronics.com\/blog\/22_tutorial-modulo-lector-rfid-rc522.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/naylampmechatronics.com\/blog\/22_tutorial-modulo-lector-rfid-rc522.html<\/a><\/li>\n\n\n\n<li>Llamas, L. (s.f.). <em>Configuraci\u00f3n B\u00e1sica de ESP-NOW con ESP32<\/em>. Luis Llamas. <a href=\"https:\/\/www.luisllamas.es\/como-usar-esp-now-en-esp32\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.luisllamas.es\/como-usar-esp-now-en-esp32\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1.&nbsp; DESCRIPCI\u00d3N GENERAL Para nuestro proyecto final de la asignatura, hemos decidido crear una alarma con cerradura inteligente. Habr\u00e1 una alarma, la cual mediante un sensor de movimiento detectar\u00e1 si alguien ha entrado en&#46;&#46;&#46;<\/p>\n","protected":false},"author":299,"featured_media":9577,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9569","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.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SmartLock - 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\/smartlock\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SmartLock - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"1.&nbsp; DESCRIPCI\u00d3N GENERAL Para nuestro proyecto final de la asignatura, hemos decidido crear una alarma con cerradura inteligente. Habr\u00e1 una alarma, la cual mediante un sensor de movimiento detectar\u00e1 si alguien ha entrado en&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-17T14:13:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-17T14:13:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png\" \/>\n\t<meta property=\"og:image:width\" content=\"629\" \/>\n\t<meta property=\"og:image:height\" content=\"641\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dse2526g02\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dse2526g02\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 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\\\/smartlock\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/\"},\"author\":{\"name\":\"dse2526g02\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc757e69b43ae98071f7e1a437060ec\"},\"headline\":\"SmartLock\",\"datePublished\":\"2025-12-17T14:13:14+00:00\",\"dateModified\":\"2025-12-17T14:13:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/\"},\"wordCount\":3616,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/Captura-de-pantalla-2025-12-17-144346.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/\",\"name\":\"SmartLock - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/Captura-de-pantalla-2025-12-17-144346.png\",\"datePublished\":\"2025-12-17T14:13:14+00:00\",\"dateModified\":\"2025-12-17T14:13:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/Captura-de-pantalla-2025-12-17-144346.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/Captura-de-pantalla-2025-12-17-144346.png\",\"width\":629,\"height\":641},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/smartlock\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SmartLock\"}]},{\"@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\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc757e69b43ae98071f7e1a437060ec\",\"name\":\"dse2526g02\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g\",\"caption\":\"dse2526g02\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse2526g02\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SmartLock - 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\/smartlock\/","og_locale":"es_ES","og_type":"article","og_title":"SmartLock - Proyectos con Arduino.","og_description":"1.&nbsp; DESCRIPCI\u00d3N GENERAL Para nuestro proyecto final de la asignatura, hemos decidido crear una alarma con cerradura inteligente. Habr\u00e1 una alarma, la cual mediante un sensor de movimiento detectar\u00e1 si alguien ha entrado en&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2025-12-17T14:13:14+00:00","article_modified_time":"2025-12-17T14:13:15+00:00","og_image":[{"width":629,"height":641,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png","type":"image\/png"}],"author":"dse2526g02","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dse2526g02","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/"},"author":{"name":"dse2526g02","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc757e69b43ae98071f7e1a437060ec"},"headline":"SmartLock","datePublished":"2025-12-17T14:13:14+00:00","dateModified":"2025-12-17T14:13:15+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/"},"wordCount":3616,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/","name":"SmartLock - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png","datePublished":"2025-12-17T14:13:14+00:00","dateModified":"2025-12-17T14:13:15+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Captura-de-pantalla-2025-12-17-144346.png","width":629,"height":641},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/smartlock\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"SmartLock"}]},{"@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":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc757e69b43ae98071f7e1a437060ec","name":"dse2526g02","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b13f722991c3fed8242d40b813ecb5e2d42b1423be906ece6a63eb999ff47d2e?s=96&d=mm&r=g","caption":"dse2526g02"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse2526g02\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9569","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\/299"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=9569"}],"version-history":[{"count":2,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9569\/revisions"}],"predecessor-version":[{"id":9578,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9569\/revisions\/9578"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/9577"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=9569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=9569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=9569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}