La cerradura es un elemento mecánico, generalmente metálico que impide el acceso al contenido que protege si se carece del elemento que permite abrirlo, tradicionalmente una llave y en la actualidad cada vez más tarjetas magnéticas que deben pasar por una banda o transpondedores pasivos – elementos que son identificados por escáneres, robots u ordenadores. Es necesario que interactúe con un sensor que decodifique la información que contiene y la transmita al centro de datos. Tienen un alcance muy limitado-. Aunque también existen cerraduras que tienen un panel y requieren de una contraseña de acceso. Este es el caso de nuestro experimento de hoy, una cerradura electrónica en NXT-G.
Este es el modelo que hemos usado para probar nuestra cerradura
Tiene 4 sensores de contacto en la parte derecha y la cerradura, accionada por un motor en la izquierda.
En una primera versión trabajaremos suponiendo que, como desarrolladores, conocemos la clave que nos permite abrir el cerrojo y comprobaremos si el usuario la introduce correctamente.
Programa cerradura completo
Si os fijáis, a la izquierda del programa, junto al punto de inicio hemos anotado la clave que tiene codificada esa cerradura por defecto, a continuación comprobamos si el usuario pulsa los botones (sensores de presión) en el orden correcto, si es así escribimos la variable dígito correspondiente (dígito 1.. dígito 4) con un 1, si no con un 0.
Es decir, si nosotros esperamos como primer botón de la clave el sensor 2 (como es el caso de este programa) y el usuario presiona un botón distinto del 2, nuestro dígito 1 será 0.
Una vez el usuario ha introducido todos los dígitos de la clave (son 4) debemos compara la clave introducida con la buena. Si la clave en correcta, todas las variables dígito X (X= 1 ..4) deben estar a 1, y por lo tanto tras la transformación del bloque Suma Dígitos compararemos el resultado con el número 1111.
Detalle del bloque Pedir Cierre
Este bloque se encarga de comprobar si la cerradura ya está cerrada , en cuyo caso nos preguntará si queremos abrirla, o si está abierta, y nos preguntará entonces si queremos cerrarla.
para saber el estado de la cerradura utilizamos la variable flag, que cambia su valor dependiendo del estado de la cerradura al final de cada bucle.
Detalle del bloque Suma Dígitos
Este bloque se encarga de hacer el sumatorio que nos permitirá comprobar si la clave es correcta o no. Para ello convierte los 4 dígitos de la clave en un sólo número y devuelve el resultado para que pueda ser comparado con la respuesta correcta, tal y como se explica más arriba.
La transformación a un sólo número consiste en multiplicar el valor de cada dígito – 0 o 1 – por su posición.
digito1 – digito2 – digito3 – digito4 representan: unidades de millar – centenas – decenas – unidades respectivamente. Luego si tenemos la clave 1-0-0-1 haremos 1*1000+0*100+0*10+1*1 = 1001
¿Es 1001 el valor correcto? No, tal y como hemos comprobado arriba, el valor correcto es 1111.
Ahora partimos de la base de que la contraseña debe introducirla el usuario, no la conocemos cuando hacemos el programa, para lo que necesitaremos preguntarle los 4 dígitos de la contraseña antes de cerrar la caja por primera vez.
Si en la versión anterior nos bastaba con colocar los sensores en el mismo orden en el que estaba la clave, ahora no sabemos el orden a priori, pues la clave la introduce el usuario al comenzar la ejecución, con lo que tendremos que variar ligeramente el programa.
Lo primero es pedir la clave al usuario, para ello, basta con añadir este bloque al principio del programa anterior.
La primera parte del bloque son instrucciones en pantalla para que el usuario sepa qué debe hacer. Tras las instrucciones esperamos a que el usuario presione el botón Intro del NXT.
¡ATENCIÓN! El bloque no está completo ya que es muy muy largo, aunque al tratarse de un bloque muy repetitivo (tenemos que pedir 4 valores para la clave), es también fácil saber qué falta.
Si observáis el bloque expandido, veréis que en el bucle estamos escribiendo el valor de clave1 en función de qué sensor de contacto presione el usuario – guardaremos el valor 1 para puerto 1, 2 para puerto 2, etc – , simplemente tendríamos que repetir el mismo bucle para cada dígito de la clave, en nuestro caso hemos repetido ese bucle 4 veces. Debemos acordarnos de cambiar el valor de la variable correcta en cada bucle: clave1, clave2..
Una vez el usuario nos ha dado la clave basta un simple cambio para poder usarla en el programa anterior.
Como podéis comprobar, hemos usado la variable clave1 del bloque anterior como entrada de puerto para realizar la comprobación.
Aquí tenéis el vídeo de su funcionamiento.
Hemos añadido una funcionalidad adicional, y es que si el usuario no está de acuerdo con la clave que ha introducido, antes de cerrar puede rectificarla.
Esperamos que os guste, para cualquier duda, podéis visitar el foro.