        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":7061,"date":"2022-10-21T01:49:10","date_gmt":"2022-10-21T01:49:10","guid":{"rendered":"https:\/\/rogerbit.com\/wprb\/?p=7061"},"modified":"2022-10-21T02:13:46","modified_gmt":"2022-10-21T02:13:46","slug":"apertura-puerta-huella-digital-teclado-app","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2022\/10\/apertura-puerta-huella-digital-teclado-app\/","title":{"rendered":"Apertura de puerta huella digital teclado o App-bluetooth"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"Apertura de puerta con huella digital, teclado y App-bluetooth - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/wktR9AB7hco?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p>En este tutorial veremos como crear un dispositivo para la apertura una puerta, a trav\u00e9s de tres m\u00e9todos. Uno ser\u00e1 con un m\u00f3dulo finger print, otro con teclado matricial de 4 x 4, y tambi\u00e9n con un m\u00f3dulo bluetooth hc-05, y una aplicaci\u00f3n hecha en App inventor. Veremos como armar el circuito, el c\u00f3digo fuente para arduino, la aplicaci\u00f3n hecha en app inventor.<\/p>\n<hr \/>\n<p style=\"text-align: left;\">Tal vez pueda interesarte proyectos en arduino, pic, rob\u00f3tica, telecomunicaciones, suscribete en\u00a0<a href=\"http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\">http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1<\/a>\u00a0mucho videos con c\u00f3digo fuentes completos y diagramas<\/p>\n<p style=\"text-align: left;\"><div id=\"ubm-banners-rotation-n1\" data-interval=\"4000\" class=\"ubm_banners_rotation\" style=\"overflow: hidden; width: 200px; height: 150px;\"><div id=\"3_ubm_banner\" class=\"ubm_rotating_banner\"><a href=\"https:\/\/bit.ly\/3aXRDAu\" target=\"_blank\" rel=\"dofollow\"><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/useful_banner_manager_banners\/3-2-logo youtube.png\" width=\"100%\" height=\"100%\" alt=\"SUSCRIBETE A NUESTRO CANAL DE YOUTUBE, TUTORIALES GRATIS\" \/><\/a><\/div><\/div><\/p>\n<hr \/>\n<p><strong>Componentes electr\u00f3nicos<\/strong><\/p>\n<p><strong>Arduino Nano<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6034\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\" sizes=\"(max-width: 321px) 100vw, 321px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg 650w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-600x600.jpg 600w\" alt=\"\" width=\"321\" height=\"321\" \/><\/a><\/p>\n<p>El Arduino Nano es una placa peque\u00f1a, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x).\u00a0Tiene m\u00e1s o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente.\u00a0Solo carece de un conector de alimentaci\u00f3n de CC y funciona con un cable USB Mini-B en lugar de uno est\u00e1ndar.<\/p>\n<table>\n<tbody>\n<tr>\n<td>Microcontrolador<\/td>\n<td>ATmega328<\/td>\n<\/tr>\n<tr>\n<td>Arquitectura<\/td>\n<td>AVR<\/td>\n<\/tr>\n<tr>\n<td>Tensi\u00f3n de funcionamiento<\/td>\n<td>5 V<\/td>\n<\/tr>\n<tr>\n<td>Memoria flash<\/td>\n<td>32 KB de los cuales 2 KB utiliza el gestor de arranque<\/td>\n<\/tr>\n<tr>\n<td>SRAM<\/td>\n<td>2 KB<\/td>\n<\/tr>\n<tr>\n<td>Velocidad de reloj<\/td>\n<td>16 MHz<\/td>\n<\/tr>\n<tr>\n<td>Pines anal\u00f3gicos IN<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>EEPROM<\/td>\n<td>1 KB<\/td>\n<\/tr>\n<tr>\n<td>Corriente CC por pines de E \/ S<\/td>\n<td>40 mA (pines de E \/ S)<\/td>\n<\/tr>\n<tr>\n<td>Voltaje de entrada<\/td>\n<td>7-12 V<\/td>\n<\/tr>\n<tr>\n<td>Pines de E \/ S digitales<\/td>\n<td>22 (6 de los cuales son PWM)<\/td>\n<\/tr>\n<tr>\n<td>Salida PWM<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>El consumo de energ\u00eda<\/td>\n<td>19 mA<\/td>\n<\/tr>\n<tr>\n<td>Tama\u00f1o de PCB<\/td>\n<td>18 x 45 mm<\/td>\n<\/tr>\n<tr>\n<td>Peso<\/td>\n<td>7 g<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Diagrama de pines<\/h3>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6033\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-150x150.png 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-300x300.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-768x768.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-600x600.png 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-820x820.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1320x1321.png 1320w\" alt=\"\" width=\"1024\" height=\"1024\" \/><\/a><\/p>\n<hr \/>\n<p><strong>Buzzer<\/strong><\/p>\n<p><strong><img loading=\"lazy\" class=\"alignnone wp-image-6891\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer.jpg\" sizes=\"(max-width: 188px) 100vw, 188px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer.jpg 368w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer-263x300.jpg 263w\" alt=\"\" width=\"188\" height=\"214\" \/><\/strong><\/p>\n<hr \/>\n<h4>Pines hembra<\/h4>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6689\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg\" sizes=\"(max-width: 225px) 100vw, 225px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg 225w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin-150x150.jpg 150w\" alt=\"\" width=\"225\" height=\"225\" \/><\/p>\n<hr \/>\n<h4>M\u00f3dulo Relay<\/h4>\n<div><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6203\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-1024x875.jpg\" sizes=\"(max-width: 343px) 100vw, 343px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-1024x875.jpg 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-300x256.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-768x656.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-600x513.jpg 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-820x701.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay-1320x1128.jpg 1320w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/01\/realay.jpg 2048w\" alt=\"\" width=\"343\" height=\"293\" \/><\/a><\/div>\n<div>\n<h4>ESPECIFICACIONES T\u00c9CNICAS<\/h4>\n<ul>\n<li>Voltaje de Operaci\u00f3n: 5V DC<\/li>\n<li>Se\u00f1al de Control: TTL (3.3V o 5V)<\/li>\n<li>N\u00ba de Relays (canales):\u00a01\u00a0CH<\/li>\n<li>Capacidad m\u00e1x: 10A\/250VAC, 10A\/30VDC<\/li>\n<li>Corriente m\u00e1x: 10A (NO), 5A (NC)<\/li>\n<li>Tiempo de acci\u00f3n: 10 ms \/ 5 ms<\/li>\n<li>Para activar salida NO: 0 Voltios<\/li>\n<\/ul>\n<hr \/>\n<p><strong>Z\u00f3calo para arduino nano<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6895\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg\" sizes=\"(max-width: 320px) 100vw, 320px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg 320w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo-300x225.jpg 300w\" alt=\"\" width=\"320\" height=\"240\" \/><\/p>\n<hr \/>\n<p>Un teclado de membrana de 4 x 4<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7022\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/teclado-de-membrana.jpg\" alt=\"\" width=\"296\" height=\"384\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/teclado-de-membrana.jpg 771w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/teclado-de-membrana-231x300.jpg 231w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/teclado-de-membrana-768x996.jpg 768w\" sizes=\"(max-width: 296px) 100vw, 296px\" \/><\/p>\n<hr \/>\n<p><strong>Pines macho a 90 grados<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7024\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/pinesmacho90grados.jpg\" alt=\"\" width=\"318\" height=\"230\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/pinesmacho90grados.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/pinesmacho90grados-300x217.jpg 300w\" sizes=\"(max-width: 318px) 100vw, 318px\" \/><\/p>\n<hr \/>\n<h4>Display oled con driver SSD1306<\/h4>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6692\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/oled.jpg\" sizes=\"(max-width: 260px) 100vw, 260px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/oled.jpg 470w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/oled-300x271.jpg 300w\" alt=\"\" width=\"260\" height=\"235\" \/><\/p>\n<p>El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, tambi\u00e9n un menor consumo.<br \/>\nEspecificaciones:<br \/>\nIC del controlador: SSD1306<br \/>\nTama\u00f1o: OLED de 0,91 pulgadas<br \/>\nResoluci\u00f3n: 128 x 32<br \/>\nTama\u00f1o: 38 * 12 mm<br \/>\nN\u00famero de pines: 4 pines<br \/>\nTipo de interfaz:<br \/>\ninterfaz IIC<br \/>\nColor de la pantalla: Blanco \/ azul<br \/>\nDescripci\u00f3n de los pines:<br \/>\nGND: Power Ground<br \/>\nVCC: Power + (DC 3.3 ~ 5v)<br \/>\nTemperatura de funcionamiento: -40 ~ 85 \u2103<br \/>\nSCL: L\u00ednea de reloj<br \/>\nSDA: L\u00ednea de datos<\/p>\n<p>Pantalla OLED, sin necesidad de retroiluminaci\u00f3n, autoiluminaci\u00f3n, Color de la pantalla: azul.<br \/>\nEl rendimiento de la pantalla es mejor que la pantalla LCD tradicional, tambi\u00e9n menor consumo;\u00a0IIC (comunicaciones I2C) simplifica las conexiones.<br \/>\n\u00daselo con Arduino, ESP8266, ESP32, STM32, etc.\u00a03.3 a 5v de voltaje<\/p>\n<hr \/>\n<h4>M\u00f3dulos hc-05<\/h4>\n<p>S\u00f3lo en el caso que quieras ver los datos recibidos en tu celular podr\u00e1s conectar este m\u00f3dulo, por eso es opcional y no obligatorio<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6688\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05.jpg\" sizes=\"(max-width: 323px) 100vw, 323px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05-300x227.jpg 300w\" alt=\"\" width=\"323\" height=\"245\" \/><\/p>\n<ul>\n<li>Funciona como dispositivo maestro y esclavo\u00a0 bluetooth<\/li>\n<li>Configurable mediante comandos AT<\/li>\n<li>Bluetooth V2.0+EDR<\/li>\n<li>Frecuencia de operaci\u00f3n: 2.4 GHz Banda ISM<\/li>\n<li>Modulaci\u00f3n: GFSK (Gaussian Frequency Shift Keying)<\/li>\n<li>Potencia de transmisi\u00f3n: &lt;=4dBm, Class 2<\/li>\n<li>Sensibilidad: &lt;=-84dBm @ 0.1% BER<\/li>\n<li>Seguridad: Autenticaci\u00f3n y encriptaci\u00f3n<\/li>\n<li>Perfiles Bluetooth: Puerto serie bluetooth.<\/li>\n<li>Distancia de hasta 10 metros en condiciones \u00f3ptimas<\/li>\n<li>Voltaje de Operaci\u00f3n: 3.6 VDC a 6 VDC<\/li>\n<li>Consumo Corriente: 30 mA a 50mA<\/li>\n<li>Chip: BC417143<\/li>\n<li>Versi\u00f3n o firmware: 3.0-20170609<\/li>\n<li>Baudios por defecto: 38400<\/li>\n<li>Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.<\/li>\n<li>Interfaz: Serial TTL<\/li>\n<li>Antena: Integrada en el PCB<\/li>\n<li>Seguridad: Autenticaci\u00f3n y encriptaci\u00f3n (Contrase\u00f1a por defecto: 0000 o 1234)<\/li>\n<li>Temperatura de trabajo (Max): 75\u00b0C<\/li>\n<li>Temperatura de trabajo (Min): -20\u00b0C<\/li>\n<li>Dimensiones: 4.4 x 1.6 x 0.7 cm<\/li>\n<\/ul>\n<hr \/>\n<\/div>\n<div>\n<p><strong>M\u00f3dulo fingerprint Open Smart<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6893\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/fingerprint.jpg\" sizes=\"(max-width: 251px) 100vw, 251px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/fingerprint.jpg 700w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/fingerprint-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/fingerprint-150x150.jpg 150w\" alt=\"\" width=\"251\" height=\"251\" \/><\/p>\n<p>Descargar Manual \u2013&gt;\u00a0<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/R308-fingerprint-module-user-manual_English.pdf\">R308-fingerprint-module-user-manual_English<\/a><\/p>\n<\/div>\n<hr \/>\n<p><strong>Pines macho<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6894 size-medium\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-300x300.jpg\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-1024x1024.jpg 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-768x768.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-820x820.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho.jpg 1200w\" alt=\"\" width=\"300\" height=\"300\" \/><\/p>\n<div>\n<p><strong>Un PCB<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6896\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb.jpg\" sizes=\"(max-width: 255px) 100vw, 255px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb.jpg 255w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb-194x300.jpg 194w\" alt=\"\" width=\"255\" height=\"395\" \/><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6904\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb_c.png\" sizes=\"(max-width: 260px) 100vw, 260px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb_c.png 260w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pcb_c-197x300.png 197w\" alt=\"\" width=\"260\" height=\"396\" \/><\/p>\n<p>Descargar archivo gerber \u2014&gt;\u00a0<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/fingerprint.zip\">fingerprint<\/a><\/p>\n<\/div>\n<hr \/>\n<p><strong>Circuito<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6905\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito-1024x295.png\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito-1024x295.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito-300x86.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito-768x221.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito-820x236.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/circuito.png 1058w\" alt=\"\" width=\"1024\" height=\"295\" \/><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><strong>Cables dupont hembra hembra<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7062\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/10\/duponthh-300x300-1.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/10\/duponthh-300x300-1.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/10\/duponthh-300x300-1-150x150.jpg 150w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<hr \/>\n<p><strong>Librer\u00eda<\/strong><\/p>\n<p>Descargar librer\u00eda \u2014&gt;\u00a0<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/AdaFingerprint.zip\">AdaFingerprint<\/a><\/p>\n<p><strong>C\u00f3digo fuente del proyecto<\/strong><\/p>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente\">#include &lt;Adafruit_Fingerprint.h&gt;\r\n#include &lt;SoftwareSerial.h&gt;\r\n#include &lt;Arduino.h&gt;\r\n#include &lt;U8g2lib.h&gt;\r\n#ifdef U8X8_HAVE_HW_SPI\r\n#include &lt;SPI.h&gt;\r\n#endif\r\n#ifdef U8X8_HAVE_HW_I2C\r\n#include &lt;Wire.h&gt;\r\n#endif\r\nU8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, \/* clock=*\/ SCL, \/* data=*\/ SDA, \/* reset=*\/ U8X8_PIN_NONE);\r\nSoftwareSerial mySerial(2, 3);\r\nAdafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;mySerial);\r\n#include &lt;Keypad.h&gt; \r\nchar password[]=\"1234\";\/\/Contrase\u00f1a de 4 d\u00edgitos\r\nchar clave[4];\/\/Aqui guardamos los caracteres presionados en el teclado\r\nint conteo=0; \/\/Esta variable se aumente en 1 x cada tecla precionada \r\nString cadena = \"\";\r\nconst byte FILAS = 4; \/\/Numero de filas del teclado que se esta usando\r\nconst byte COLUMNAS = 4; \/\/Numero de columnas del teclado que se esta usando\r\n\/\/Mapa del teclado que estamos usando\r\nchar mapaTeclas[FILAS][COLUMNAS] =  \r\n{\r\n  {'1','2','3','A'},\r\n  {'4','5','6','B'},\r\n  {'7','8','9','C'},\r\n  {'*','0','#','D'}\r\n};\r\nbyte pinesFilas[FILAS] = {11, 10, 9, 8}; \/\/Pines donde estan las filas del teclado \r\nbyte pinesColumnas[COLUMNAS] = {7, 6, 5, 4}; \/\/Pines donde estan las columnas del teclado\r\nKeypad teclapad = Keypad(makeKeymap(mapaTeclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS); \/\/Inicializamos el teclado matricial\r\nint pinA0 = A0;\/\/M\u00f3dulo relay\r\nint pin12 = 12;\/\/Buzzer\r\nint estado = 0;\r\nString numID;\r\nvoid setup()  \r\n{\r\n  while (!Serial);  \/\/ Para Yun\/Leo\/Micro\/Zero\/...\r\n  u8g2.begin();\/\/Inicializamos el display\r\n  Serial.begin(9600);\/\/Velocidad del puerto serie arduino\r\n  pinMode(pinA0, OUTPUT);\r\n  pinMode(pin12, OUTPUT);\r\n  Serial.println(\"Inicio detecci\u00f3n del m\u00f3dulo fingerprint\");\r\n  \/\/ Velocidad de transmisi\u00f3n de datos entre el arduino y el m\u00f3dulo fingerprint\r\n  finger.begin(57600);\r\n  if (finger.verifyPassword()) {\r\n    Serial.println(\"\u00a1Sensor de huellas dactilares conectado ok!\");\r\n  } else {\r\n    Serial.println(\"Revisa la conexi\u00f3n del sensor de huellas :(\");\r\n    while (1);\r\n  }\r\n  Serial.println(\"Esperando un huella v\u00e1lida...\");\r\n  displayOled();\/\/Llamado de la funci\u00f3n displayOled(), para arrancar el display con la leyenda \"Ingrese huella clave o App\"\r\n}\r\nvoid loop()     \r\n{\r\n    \/\/lee las cadenas de caracteres que ingresan al puerto serie\r\n  if (Serial.available())  {\r\n    cadena = String(\"\");\r\n    while (Serial.available()) {\r\n      cadena = cadena + char(Serial.read());\/\/Lee caracter por caracter y concatena a la variable cadena\r\n      delay(1);     \r\n    }\r\n  }\r\nif (cadena == \"abrir\"){\r\nSerial.println(\"Apertura x bluetooth\");\r\n\/\/Funci\u00f3n para apertura x bluetoth\r\nabrirBlue(); \r\n  }\r\n\/\/Funci\u00f3n para el trabajar con el sensor de huellas dactilares  \r\n  datosFingerprint();\r\n\/\/Funci\u00f3n para trabajar con el teclado\r\n  teclado();\r\n}\r\n\/\/ Devuelve -1 si falla, de lo contrario devuelve ID #\r\nint datosFingerprint() {\r\n  uint8_t p = finger.getImage();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n\r\n  p = finger.image2Tz();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n\r\n  p = finger.fingerFastSearch();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n\/\/Encontrado una coincidencia!\r\n  Serial.print(\"Huella ID #\"); Serial.print(finger.fingerID); \r\n  Serial.print(\" con una confianza de \"); Serial.println(finger.confidence);\r\n\/\/Activar el buzzer durante 100 mili segundos\r\n bip(100);\r\nnumID = String(finger.fingerID); \/\/Convierte el id en cadena para ser compatible con el display\r\ndisplayOled2();\/\/ LLama a esta funci\u00f3n para mostrar el n\u00famero de huella leido\r\nrelay();\/\/Activa el relay x 3 segundos\r\ndisplayOled();\/\/Pasado el tiempo vuelve a mostrar la leyenda \"ingrese huella clave o App\"\r\nreturn finger.fingerID;\r\n}\r\n\/\/Apertura x teclado\r\nvoid teclado(){\r\nchar tecla = teclapad.getKey(); \/\/se alamacena en la variable \"tecla\" el caracter presionado\r\n  if (tecla != NO_KEY)         \/\/\u00bfSe ha presionado alguna tecla?\r\n  {\r\n    clave[conteo]=tecla;          \/\/Almacenamos caracter por caracter en el arreglo clave[]\r\n    Serial.println(clave[conteo]);    \/\/Se muestra en el puerto serial la tecla presionada\r\n    conteo=conteo+1;              \/\/Se incremente en 1 la variable conteo\r\n    if(conteo==4)  \/\/Si 4 teclas fueron presionadas se verifica si la clave es la correcta o no\r\n    {\r\n      if(clave[0]==password[0]&amp;&amp;clave[1]==password[1]&amp;&amp;clave[2]==password[2]&amp;&amp;clave[3]==password[3])\r\n      {\r\n        bip(100);\/\/Suena un solo bip en el buzzer indicando que la calve es correcta\r\n        \/\/Activamos el m\u00f3dulo relay durante 3 segundos para la apertura de una puerta\r\n        Serial.println(\"clave correcta apertura de puerta\");\r\n        displayOled3();\/\/ se muestra en el display \"Clave correcta\"\r\n        relay();\/\/Activa el relay x 3 segundos\r\n        conteo=0;\/\/Seteamos la variable conteo al valor 0\r\n      }\r\n      \/\/Si la clave es incorrecta sonar\u00e1 dos veces el buzzer\r\n      if (conteo!=0){\r\n        displayOled4();\r\n        bip(100);\r\n        bip(100);\r\n      }\r\n      conteo=0;  \/\/Seteamos la variable conteo al valor 0\r\n      displayOled();\/\/Vuelve a mostrar en display Ingrese huella clave o app     \r\n    }\r\n  }\r\n}\r\n\/\/\r\n void abrirBlue(){\r\nbip(100);\r\ndisplayOled5();\/\/ Muestra en el displey \"Apertura x App\"\r\nrelay();\/\/Activa el relay x 3 segundos\r\ncadena = \"\";\r\ndisplayOled();\/\/Vuelve a mostrar en display Ingrese huella clave o app  \r\n  }\r\n\/\/Sonido del buzzer\r\nvoid bip(int demora){\r\ndigitalWrite(pin12, HIGH);\r\ndelay(demora);\r\ndigitalWrite(pin12, LOW);\r\ndelay(demora);  \r\n  }\r\nvoid relay(){\r\n  digitalWrite(pinA0,HIGH);\r\n  delay(3000);\r\n  digitalWrite(pinA0,LOW);\r\n  }  \r\n\/\/Nos muestra en el display Ingrese huella\r\n void displayOled(){\r\n  u8g2.firstPage();\r\n  do {\r\n    u8g2.setFont(u8g2_font_ncenB10_tr);\r\n    u8g2.drawStr(0,10,\"Ingrese huella\");\r\n    u8g2.drawStr(0,24,\"clave o App\");\r\n  \r\n    } while ( u8g2.nextPage() );\r\n}\r\n\/\/Nos muestra en el display el n\u00famero de la huella obtenida \"Huella #\"\r\n void displayOled2(){\r\n  u8g2.firstPage();\r\n  do {\r\n    u8g2.setFont(u8g2_font_ncenB10_tr);\r\n   \r\n   u8g2.drawStr(0,24,\"Huella #\");\r\n   u8g2.drawStr(65, 24, numID.c_str()); \r\n    } while ( u8g2.nextPage() );\r\n}\r\n\/\/Nos muestra en el display Clave correcta\"\r\n void displayOled3(){\r\n  u8g2.firstPage();\r\n  do {\r\n    u8g2.setFont(u8g2_font_ncenB10_tr);\r\n   \r\n   u8g2.drawStr(0,24,\"Clave correcta\");\r\n    } while ( u8g2.nextPage() );\r\n}\r\n\r\n\/\/Nos muestra en el display \"Clave incorrecta\"\r\n void displayOled4(){\r\n  u8g2.firstPage();\r\n  do {\r\n    u8g2.setFont(u8g2_font_ncenB10_tr);\r\n   u8g2.drawStr(0,24,\"Clave incorrecta\");\r\n    } while ( u8g2.nextPage() );\r\n}\r\n\r\n\/\/Nos muestra en el display Apertura x App\"\r\n void displayOled5(){\r\n  u8g2.firstPage();\r\n  do {\r\n    u8g2.setFont(u8g2_font_ncenB10_tr);  \r\n   u8g2.drawStr(0,24,\"Apertura x App\");\r\n    } while ( u8g2.nextPage() );\r\n}<\/pre>\n<hr \/>\n<p><strong>C\u00f3digo Fuente enroll<\/strong><\/p>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente enroll\">\/*************************************************** \r\n  This is an example sketch for our optical Fingerprint sensor\r\n\r\n  Designed specifically to work with the Adafruit BMP085 Breakout \r\n  ----&gt; http:\/\/www.adafruit.com\/products\/751\r\n\r\n  These displays use TTL Serial to communicate, 2 pins are required to \r\n  interface\r\n  Adafruit invests time and resources providing this open source code, \r\n  please support Adafruit and open-source hardware by purchasing \r\n  products from Adafruit!\r\n\r\n  Written by Limor Fried\/Ladyada for Adafruit Industries.  \r\n  BSD license, all text above must be included in any redistribution\r\n ****************************************************\/\r\n\r\n#include &lt;Adafruit_Fingerprint.h&gt;\r\n#include &lt;SoftwareSerial.h&gt;\r\n\r\nuint8_t id;\r\n\r\nuint8_t getFingerprintEnroll();\r\n\r\n\/\/ Software serial for when you dont have a hardware serial port\r\n\/\/ pin #2 is IN from sensor (GREEN wire)\r\n\/\/ pin #3 is OUT from arduino  (WHITE wire)\r\n\/\/ On Leonardo\/Micro\/Yun, use pins 8 &amp; 9. On Mega, just grab a hardware serialport \r\nSoftwareSerial mySerial(2, 3);\r\nAdafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;mySerial);\r\n\r\n\/\/ On Leonardo\/Micro or others with hardware serial, use those! #0 is green wire, #1 is white\r\n\/\/Adafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;Serial1);\r\n\r\n\r\nvoid setup()  \r\n{\r\n  while (!Serial);  \/\/ For Yun\/Leo\/Micro\/Zero\/...\r\n  delay(500);\r\n  \r\n  Serial.begin(9600);\r\n  Serial.println(\"Adafruit Fingerprint sensor enrollment\");\r\n\r\n  \/\/ set the data rate for the sensor serial port\r\n  finger.begin(57600);\r\n  \r\n  if (finger.verifyPassword()) {\r\n    Serial.println(\"Found fingerprint sensor!\");\r\n  } else {\r\n    Serial.println(\"Did not find fingerprint sensor :(\");\r\n    while (1);\r\n  }\r\n}\r\n\r\nuint8_t readnumber(void) {\r\n  uint8_t num = 0;\r\n  boolean validnum = false; \r\n  while (1) {\r\n    while (! Serial.available());\r\n    char c = Serial.read();\r\n    if (isdigit(c)) {\r\n       num *= 10;\r\n       num += c - '0';\r\n       validnum = true;\r\n    } else if (validnum) {\r\n      return num;\r\n    }\r\n  }\r\n}\r\n\r\nvoid loop()                     \/\/ run over and over again\r\n{\r\n  Serial.println(\"Ready to enroll a fingerprint! Please Type in the ID # you want to save this finger as...\");\r\n  id = readnumber();\r\n  Serial.print(\"Enrolling ID #\");\r\n  Serial.println(id);\r\n  \r\n  while (!  getFingerprintEnroll() );\r\n}\r\n\r\nuint8_t getFingerprintEnroll() {\r\n\r\n  int p = -1;\r\n  Serial.print(\"Waiting for valid finger to enroll as #\"); Serial.println(id);\r\n  while (p != FINGERPRINT_OK) {\r\n    p = finger.getImage();\r\n    switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image taken\");\r\n      break;\r\n    case FINGERPRINT_NOFINGER:\r\n      Serial.println(\".\");\r\n      break;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      break;\r\n    case FINGERPRINT_IMAGEFAIL:\r\n      Serial.println(\"Imaging error\");\r\n      break;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      break;\r\n    }\r\n  }\r\n\r\n  \/\/ OK success!\r\n\r\n  p = finger.image2Tz(1);\r\n  switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image converted\");\r\n      break;\r\n    case FINGERPRINT_IMAGEMESS:\r\n      Serial.println(\"Image too messy\");\r\n      return p;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      return p;\r\n    case FINGERPRINT_FEATUREFAIL:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    case FINGERPRINT_INVALIDIMAGE:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      return p;\r\n  }\r\n  \r\n  Serial.println(\"Remove finger\");\r\n  delay(2000);\r\n  p = 0;\r\n  while (p != FINGERPRINT_NOFINGER) {\r\n    p = finger.getImage();\r\n  }\r\n  Serial.print(\"ID \"); Serial.println(id);\r\n  p = -1;\r\n  Serial.println(\"Place same finger again\");\r\n  while (p != FINGERPRINT_OK) {\r\n    p = finger.getImage();\r\n    switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image taken\");\r\n      break;\r\n    case FINGERPRINT_NOFINGER:\r\n      Serial.print(\".\");\r\n      break;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      break;\r\n    case FINGERPRINT_IMAGEFAIL:\r\n      Serial.println(\"Imaging error\");\r\n      break;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      break;\r\n    }\r\n  }\r\n\r\n  \/\/ OK success!\r\n\r\n  p = finger.image2Tz(2);\r\n  switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image converted\");\r\n      break;\r\n    case FINGERPRINT_IMAGEMESS:\r\n      Serial.println(\"Image too messy\");\r\n      return p;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      return p;\r\n    case FINGERPRINT_FEATUREFAIL:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    case FINGERPRINT_INVALIDIMAGE:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      return p;\r\n  }\r\n  \r\n  \/\/ OK converted!\r\n  Serial.print(\"Creating model for #\");  Serial.println(id);\r\n  \r\n  p = finger.createModel();\r\n  if (p == FINGERPRINT_OK) {\r\n    Serial.println(\"Prints matched!\");\r\n  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {\r\n    Serial.println(\"Communication error\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_ENROLLMISMATCH) {\r\n    Serial.println(\"Fingerprints did not match\");\r\n    return p;\r\n  } else {\r\n    Serial.println(\"Unknown error\");\r\n    return p;\r\n  }   \r\n  \r\n  Serial.print(\"ID \"); Serial.println(id);\r\n  p = finger.storeModel(id);\r\n  if (p == FINGERPRINT_OK) {\r\n    Serial.println(\"Stored!\");\r\n  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {\r\n    Serial.println(\"Communication error\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_BADLOCATION) {\r\n    Serial.println(\"Could not store in that location\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_FLASHERR) {\r\n    Serial.println(\"Error writing to flash\");\r\n    return p;\r\n  } else {\r\n    Serial.println(\"Unknown error\");\r\n    return p;\r\n  }   \r\n}<\/pre>\n<hr \/>\n<p><strong>C\u00f3digo Fuente delete<\/strong><\/p>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente delete\">\/*************************************************** \r\n  This is an example sketch for our optical Fingerprint sensor\r\n\r\n  Designed specifically to work with the Adafruit Fingerprint sensor\r\n  ----&gt; http:\/\/www.adafruit.com\/products\/751\r\n\r\n  These displays use TTL Serial to communicate, 2 pins are required to \r\n  interface\r\n  Adafruit invests time and resources providing this open source code, \r\n  please support Adafruit and open-source hardware by purchasing \r\n  products from Adafruit!\r\n\r\n  Written by Limor Fried\/Ladyada for Adafruit Industries.  \r\n  BSD license, all text above must be included in any redistribution\r\n ****************************************************\/\r\n\r\n#include &lt;Adafruit_Fingerprint.h&gt;\r\n#include &lt;SoftwareSerial.h&gt;\r\n\r\nuint8_t getFingerprintEnroll(uint8_t id);\r\n\r\n\/\/ Software serial for when you dont have a hardware serial port\r\n\/\/ pin #2 is IN from sensor (GREEN wire)\r\n\/\/ pin #3 is OUT from arduino  (WHITE wire)\r\n\/\/ On Leonardo\/Micro\/Yun, use pins 8 &amp; 9. On Mega, just grab a hardware serialport \r\nSoftwareSerial mySerial(2, 3);\r\nAdafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;mySerial);\r\n\r\n\/\/ On Leonardo\/Micro or others with hardware serial, use those! #0 is green wire, #1 is white\r\n\/\/Adafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;Serial1);\r\n\r\nvoid setup()  \r\n{\r\n  Serial.begin(9600);\r\n  Serial.println(\"Delete Finger\");\r\n\r\n  \/\/ set the data rate for the sensor serial port\r\n  finger.begin(57600);\r\n  \r\n  if (finger.verifyPassword()) {\r\n    Serial.println(\"Found fingerprint sensor!\");\r\n  } else {\r\n    Serial.println(\"Did not find fingerprint sensor :(\");\r\n    while (1);\r\n  }\r\n}\r\n\r\nvoid loop()                     \/\/ run over and over again\r\n{\r\n  while (!Serial);  \/\/ For Yun\/Leo\/Micro\/Zero\/...\r\n  delay(500);\r\n\r\n  Serial.println(\"Type in the ID # you want delete...\");\r\n  uint8_t id = 0;\r\n  while (true) {\r\n    while (! Serial.available());\r\n    char c = Serial.read();\r\n    if (! isdigit(c)) break;\r\n    id *= 10;\r\n    id += c - '0';\r\n  }\r\n  Serial.print(\"deleting ID #\");\r\n  Serial.println(id);\r\n  \r\n  deleteFingerprint(id);\r\n}\r\n\r\nuint8_t deleteFingerprint(uint8_t id) {\r\n  uint8_t p = -1;\r\n  \r\n  p = finger.deleteModel(id);\r\n\r\n  if (p == FINGERPRINT_OK) {\r\n    Serial.println(\"Deleted!\");\r\n  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {\r\n    Serial.println(\"Communication error\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_BADLOCATION) {\r\n    Serial.println(\"Could not delete in that location\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_FLASHERR) {\r\n    Serial.println(\"Error writing to flash\");\r\n    return p;\r\n  } else {\r\n    Serial.print(\"Unknown error: 0x\"); Serial.println(p, HEX);\r\n    return p;\r\n  }   \r\n}<\/pre>\n<hr \/>\n<div><strong>C\u00f3digo Fuente Fingerprint<\/strong><\/div>\n<div>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente FingerPrint\">\/*************************************************** \r\n  This is an example sketch for our optical Fingerprint sensor\r\n\r\n  Designed specifically to work with the Adafruit BMP085 Breakout \r\n  ----&gt; http:\/\/www.adafruit.com\/products\/751\r\n\r\n  These displays use TTL Serial to communicate, 2 pins are required to \r\n  interface\r\n  Adafruit invests time and resources providing this open source code, \r\n  please support Adafruit and open-source hardware by purchasing \r\n  products from Adafruit!\r\n\r\n  Written by Limor Fried\/Ladyada for Adafruit Industries.  \r\n  BSD license, all text above must be included in any redistribution\r\n ****************************************************\/\r\n\r\n\r\n#include &lt;Adafruit_Fingerprint.h&gt;\r\n#include &lt;SoftwareSerial.h&gt;\r\n\r\nint getFingerprintIDez();\r\n\r\n\/\/ pin #2 is IN from sensor (GREEN wire)\r\n\/\/ pin #3 is OUT from arduino  (WHITE wire)\r\nSoftwareSerial mySerial(2, 3);\r\nAdafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;mySerial);\r\n\r\n\/\/ On Leonardo\/Micro or others with hardware serial, use those! #0 is green wire, #1 is white\r\n\/\/Adafruit_Fingerprint finger = Adafruit_Fingerprint(&amp;Serial1);\r\n\r\nvoid setup()  \r\n{\r\n  while (!Serial);  \/\/ For Yun\/Leo\/Micro\/Zero\/...\r\n  \r\n  Serial.begin(9600);\r\n  Serial.println(\"Adafruit finger detect test\");\r\n\r\n  \/\/ set the data rate for the sensor serial port\r\n  finger.begin(57600);\r\n  \r\n  if (finger.verifyPassword()) {\r\n    Serial.println(\"Found fingerprint sensor!\");\r\n  } else {\r\n    Serial.println(\"Did not find fingerprint sensor :(\");\r\n    while (1);\r\n  }\r\n  Serial.println(\"Waiting for valid finger...\");\r\n}\r\n\r\nvoid loop()                     \/\/ run over and over again\r\n{\r\n  getFingerprintIDez();\r\n  delay(50);            \/\/don't ned to run this at full speed.\r\n}\r\n\r\nuint8_t getFingerprintID() {\r\n  uint8_t p = finger.getImage();\r\n  switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image taken\");\r\n      break;\r\n    case FINGERPRINT_NOFINGER:\r\n      Serial.println(\"No finger detected\");\r\n      return p;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      return p;\r\n    case FINGERPRINT_IMAGEFAIL:\r\n      Serial.println(\"Imaging error\");\r\n      return p;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      return p;\r\n  }\r\n\r\n  \/\/ OK success!\r\n\r\n  p = finger.image2Tz();\r\n  switch (p) {\r\n    case FINGERPRINT_OK:\r\n      Serial.println(\"Image converted\");\r\n      break;\r\n    case FINGERPRINT_IMAGEMESS:\r\n      Serial.println(\"Image too messy\");\r\n      return p;\r\n    case FINGERPRINT_PACKETRECIEVEERR:\r\n      Serial.println(\"Communication error\");\r\n      return p;\r\n    case FINGERPRINT_FEATUREFAIL:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    case FINGERPRINT_INVALIDIMAGE:\r\n      Serial.println(\"Could not find fingerprint features\");\r\n      return p;\r\n    default:\r\n      Serial.println(\"Unknown error\");\r\n      return p;\r\n  }\r\n  \r\n  \/\/ OK converted!\r\n  p = finger.fingerFastSearch();\r\n  if (p == FINGERPRINT_OK) {\r\n    Serial.println(\"Found a print match!\");\r\n  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {\r\n    Serial.println(\"Communication error\");\r\n    return p;\r\n  } else if (p == FINGERPRINT_NOTFOUND) {\r\n    Serial.println(\"Did not find a match\");\r\n    return p;\r\n  } else {\r\n    Serial.println(\"Unknown error\");\r\n    return p;\r\n  }   \r\n  \r\n  \/\/ found a match!\r\n  Serial.print(\"Found ID #\"); Serial.print(finger.fingerID); \r\n  Serial.print(\" with confidence of \"); Serial.println(finger.confidence); \r\n}\r\n\r\n\/\/ returns -1 if failed, otherwise returns ID #\r\nint getFingerprintIDez() {\r\n  uint8_t p = finger.getImage();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n\r\n  p = finger.image2Tz();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n\r\n  p = finger.fingerFastSearch();\r\n  if (p != FINGERPRINT_OK)  return -1;\r\n  \r\n  \/\/ found a match!\r\n  Serial.print(\"Found ID #\"); Serial.print(finger.fingerID); \r\n  Serial.print(\" with confidence of \"); Serial.println(finger.confidence);\r\n  return finger.fingerID; \r\n}<\/pre>\n<p style=\"text-align: left;\"><div class=\"page-sidebar widget\" id=\"donation_buttons\"><form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\" ><input type=\"hidden\" name=\"business\" value=\"donacion@rogerbit.com\"><input type=\"hidden\" name=\"bn\" value=\"mbjtechnolabs_SP\"><input type=\"hidden\" name=\"cmd\" value=\"_donations\"><input type=\"hidden\" name=\"item_name\" value=\"Ayuda a RogerBit.com\"><input type=\"hidden\" name=\"item_number\" value=\"www.rogerbit.com\"><input type=\"hidden\" class=\"set_donation_button_amount\" name=\"amount\" value=\"1\"><table ><tbody><tr><td><label for=\"rogerBit necesita de tu ayuda para seguir existiendo :-)\">rogerBit necesita de tu ayuda para seguir existiendo :-)<\/label><\/td><\/tr><\/tbody><\/table><table ><tbody><tr><td><input style=\"margin-top:10px;\" type=\"image\" name=\"submit\" border=\"0\" src=\"https:\/\/www.paypal.com\/en_US\/i\/btn\/btn_donateCC_LG.gif\" alt=\"PayPal - The safer, easier way to pay online\"><\/td><\/tr><\/tbody><\/table><input type=\"hidden\" name=\"currency_code\" value=\"USD\"><input type=\"hidden\" name=\"notify_url\" value=\"https:\/\/rogerbit.com\/wprb\/?Donation_Button&#038;action=ipn_handler\"><\/form><\/div><\/p>\n<hr \/>\n<p style=\"text-align: left;\"><strong>PROYECTOS RECOMENDADOS<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"Apertura de puerta con m\u00f3dulo de huellas digitales  -  PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/m0DV6fJXK1E?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><iframe loading=\"lazy\" title=\"\u2705 Control de acceso b\u00e1sico con teclado matricial y arduino \ud83d\udd11\ud83d\udd12 - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/mEUXDrxI7dE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>En este tutorial veremos como crear un dispositivo para la apertura una puerta, a trav\u00e9s de tres m\u00e9todos. Uno ser\u00e1 con un m\u00f3dulo finger print, otro con teclado matricial de 4 x 4, y tambi\u00e9n con un m\u00f3dulo bluetooth hc-05, y una aplicaci\u00f3n hecha en App inventor. Veremos como armar el circuito, el c\u00f3digo fuente [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7064,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[1472,45,351,181,486,906,717,1479,1482,1473,1469,331,624,1413,630,1483,1475,1474,1066,917,1458,1459,1477,31,1471,1470,687],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7061"}],"collection":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/comments?post=7061"}],"version-history":[{"count":2,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7061\/revisions"}],"predecessor-version":[{"id":7065,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7061\/revisions\/7065"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/7064"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=7061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=7061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=7061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}