DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE ACCESO Y AUTORIZACIÓN MEDIANTE PROTOCOLO USB MIGUEL ANGEL CÁRDENAS GONZÁLEZ RODRIGO LÓPEZ BEJARANO GERMÁN ALBERTO TORRE PÉREZ UNIVERSIDAD DE SAN BUENAVENTURA FACULTAD DE INGENIERÍA PROGRAMA DE INGENIERÍA ELECTRÓNICA BOGOTÁ DC 2009 DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE ACCESO Y AUTORIZACIÓN MEDIANTE PROTOCOLO USB MIGUEL ANGEL CÁRDENAS GONZÁLEZ RODRIGO LÓPEZ BEJARANO GERMAN ALBERTO TORRE PÉREZ Proyecto de grado como requisito para optar al título de Ingeniería Electrónica. Asesor Néstor Penagos Ingeniero Electrónico UNIVERSIDAD DE SAN BUENAVENTURA FACULTAD DE INGENIERÍA PROGRAMA DE INGENIERÍA ELECTRÓNICA BOGOTÁ DC 2009 NOTA DE ACEPTACION ________________________________ ________________________________ ________________________________ ________________________________ ________________________________ ________________________________ FIRMA DEL PRESIDENTE DEL JURADO ________________________________ FIRMA DE JURADO ________________________________ FIRMA DE JURADO A mi madre, quien me apoyo durante toda la carrera, quien me dio las fuerzas y los ánimos de seguir y salir adelante. Germán Alberto Torre Pérez A mi familia y compañeros que estuvieron siempre conmigo durante este largo proceso y no permitieron que renunciara a mi meta. Miguel Angel Cárdenas González A mis padres que me dieron la oportunidad de realizar mis estudios y me apoyaron incondicionalmente y me ayudaron para que esto sea una realidad. Rodrigo López Bejarano AGRADECIMIENTOS A nuestras familias que nos apoyaron incondicionalmente, en todas las cosas tanto buenas como malas, a nuestros amigos que forman una parte integral de la formación y se convierten en una fuente de inspiración y admiración. Por último un agradecimiento cordial a todos los docentes de la universidad que probaron ser un grupo de personas confiables y calificadas para ejercer su labor. CONTENIDO INTRODUCCIÓN .......................................................................................... VII 1. PLANTEAMIENTO DEL PROBLEMA ......................................................... 1 1.1. ANTECEDENTES (ESTADO DEL ARTE) ............................................ 1 1.2. DESCRIPCIÓN Y FORMULACIÓN DEL PROBLEMA ......................... 5 1.3. JUSTIFICACIÓN .................................................................................. 7 1.4. OBJETIVOS DE LA INVESTIGACIÓN ................................................. 8 1.4.1. Objetivo General. ........................................................................... 8 1.4.2. Objetivos Específicos..................................................................... 8 1.5. ALCANCES Y LIMITACIONES ........................................................... 9 1.5.1. Alcances. ..................................................................................... 9 1.5.2. Limitaciones. ................................................................................ 10 2. MARCO DE REFERENCIA....................................................................... 11 2.1. MARCO TEÓRICO - CONCEPTUAL ................................................. 11 2.1.2. Funcionamiento. .......................................................................... 14 2.1.3. Cables y Conectores.................................................................... 18 2.1.4. Especificación USB...................................................................... 21 2.2. MARCO NORMATIVO ....................................................................... 23 2.2.1. Clases USB. ................................................................................ 23 2.2.2. Relación Driver-Dispositivo. ......................................................... 24 2.2.3. Descriptores. ................................................................................ 25 2.2.4. Clases, Subclases y Protocolos. ................................................ 26 2.2.5. Localización del driver. .............................................................. 26 I 2.2.6. Peticiones específicas de Clase USB y peticiones específicas del fabricante. .............................................................................................. 28 3. METODOLOGÍA ....................................................................................... 30 3.1. ENFOQUE DE LA INVESTIGACIÓN ................................................. 30 3.2. LÍNEA DE INVESTIGACIÓN .............................................................. 30 3.3. HIPÓTESIS ........................................................................................ 30 3.4. VARIABLES ....................................................................................... 31 3.4.1. Variables independientes............................................................. 31 3.4.2. Variables dependientes ............................................................... 31 4. DESARROLLO INGENIERIL .................................................................... 32 4.1. MÓDULOS. ........................................................................................ 35 4.1.1. Módulo Llave. . ........................................................................... 35 4.1.2. Módulo de software...................................................................... 40 4.1.3. Módulo De Apertura. .................................................................... 45 4.2. DISEÑO DEL CIRCUITO ................................................................... 51 4.2.1. MPLab IDE 8.14. ......................................................................... 51 4.2.2. Proteus 7.2. ................................................................................. 54 4.3. INSTALACIÓN DEL DRIVER EN WINDOWS XP .............................. 59 5. PRESENTACIÓN Y ANÁLISIS DE RESULTADOS .................................. 63 6. CONCLUSIONES ..................................................................................... 69 7. RECOMENDACIONES ............................................................................. 70 BIBLIOGRAFÍA ............................................................................................. 72 WEBLIOGRAFÍA........................................................................................... 73 GLOSARIO ................................................................................................... 74 II ANEXOS ....................................................................................................... 77 ANEXO A CÓDIGO FUENTE DEL MICROCONTROLADOR PIC18F4550 MÓDULO LLAVE .......................................................................................... 78 ANEXO B CÓDIGO FUENTE DEL MICROCONTROLADOR PIC16F628A MÓDULO MOTOR ........................................................................................ 81 ANEXO C CÓDIGO FUENTE PROGRAMA MÓDULO SOFTWARE ........... 90 III LISTA DE FIGURAS Figura 1. Estructura de proyecto UMGina. ...................................................... 3 Figura 2. CDVI UGM. ...................................................................................... 4 Figura 3. Interfaz host – device USB ............................................................ 13 Figura 4. Codificación NRZI .......................................................................... 14 Figura 5. Conector USB tipo A. ..................................................................... 20 Figura 6. Conector USB tipo B. ..................................................................... 20 Figura 7. Diagrama a bloques del sistema. ................................................... 34 Figura 8. Diagrama de flujo del módulo llave ................................................ 35 Figura 9. Diagrama de pines del microcontrolador tipo PDIP ....................... 38 Figura 10. Diagrama de pines del microcontrolador tipo TQFP .................... 39 Figura 11. Diagrama de flujo del módulo software ........................................ 40 Figura 12. Interfaz grafica de C++ Builder 6 ................................................. 42 Figura 13. Ventana principal USB key. ......................................................... 43 Figura 14. Ventana de selección de puerto. ................................................. 43 Figura 15. Ventana principal USB key con lista de usuarios desplegada. .... 44 Figura 16. Diagrama de flujo del módulo de apertura ................................... 45 Figura 17. Diagrama de pines del integrado FT232. ..................................... 47 Figura 18. Diagrama de pines del microcontrolador PIC 16f628A. ............... 48 Figura 19. Diagrama de pines driver L298. ................................................... 49 Figura 20. Pestillo eléctrico. .......................................................................... 50 Figura 21. Ventana de trabajo de MPLAB. ................................................... 51 Figura 22. Configuración de proyecto. .......................................................... 52 Figura 23. Diagrama esquemático realizado en proteus ISIS módulo llave. . 55 Figura 24. Diseño del circuito impreso PCB en proteus ARES módulo llave. 56 Figura 25. Visualización 3D de los componentes en el circuito impreso módulo llave. ................................................................................................. 56 IV Figura 26. Diagrama esquemático realizado en proteus ISIS módulo apertura. ...................................................................................................................... 57 Figura 27. Diseño del circuito impreso PCB en proteus ARES módulo apertura. ....................................................................................................... 58 Figura 28. Visualización 3D de los componentes en el circuito impreso módulo apertura. ........................................................................................... 58 Figura 29. Opción de búsqueda del controlador en internet. ........................ 59 Figura 30. Opción de instalación automática o manual. ............................... 60 Figura 31. Selección de la ubicación del controlador. ................................... 61 Figura 32. Localización grafica de la carpeta contenedora. .......................... 62 Figura 33. Proceso de copiado de archivos al directorio raíz de Windows. .. 62 Figura 34. Componentes del sistema. .......................................................... 63 Figura 35. Módulo llave foto real y diseño 3D. .............................................. 64 Figura 36. Conexión módulo apertura a módulo software. ........................... 65 Figura 37. Ventana de inicio de interfaz. ....................................................... 65 Figura 38. Selección de puerto. .................................................................... 66 Figura 39. Conexión módulo llave a módulo apertura................................... 66 Figura 40. Reconocimiento de usuario. ........................................................ 67 Figura 41. Sistema abierto. ........................................................................... 68 Figura 42. Sistema cerrado y en modo de espera. ....................................... 68 V LISTA DE TABLAS Tabla 1. Distancias y calibres de cable USB ............................................... 19 Tabla 2. Disposición de pines y colores de identificación en cables USB..... 19 Tabla 3. Comparación de los microcontroladores optativos del módulo llave. ...................................................................................................................... 37 Tabla 4. Comparación de los microcontroladores optativos de módulo apertura. ....................................................................................................... 46 VI INTRODUCCIÓN Un sistema de control de acceso se desarrolla mediante la creación de tres bloques o módulos que, mancomunadamente uno de software y dos de hardware generan un sistema robusto de elevada seguridad, sin dejar de lado la eficiencia y su asequibilidad. Los elementos construidos enteramente para el sistema operativo Windows y basados en el protocolo USB, permiten crear un sistema innovador que genera un avance en cuanto a sistemas de control de acceso a recintos mediante la autenticación electrónica; siendo una implementación sencilla pero efectiva en el aspecto de seguridad para bóvedas y recintos de media y baja seguridad. La importancia de restringir el acceso a lugares, objetos, y sistemas de almacenamiento de datos, como computadores personales o servidores, radica en la seguridad, dado que es posible que personas malintencionadas intenten acceder a ellos, con el fin de sustraer bienes o información; para personas o empresas en general, proteger estos elementos es un proceso crítico. En el desarrollo de esta acción se utilizan las características y tecnologías electrónicas para diseñar un módulo “llave”, que permita la autenticación de datos y acceder a un recinto o depósito protegido con seguridad activa, haciendo uso de un sistema que consta de un dispositivo con memoria de almacenamiento de información, un computador que realiza la verificación de datos y la posterior autorización de acceso, y un aparato que acciona el mecanismo que abre la puerta del recinto o contenedor. VII 1. PLANTEAMIENTO DEL PROBLEMA 1.1. ANTECEDENTES (ESTADO DEL ARTE) Con el nacimiento de la propiedad privada, el ser humano ha intentado desarrollar métodos de control de acceso que generen seguridad y privacidad; en la era de las cavernas el ser humano imponía barreras físicas como fuego y elementos cortantes para evitar que algunos animales e incluso otros humanos no accedieran a este lugar considerados seguros. En las antiguas civilizaciones (egipcia, romana y china entre otras), se desarrollaron la puerta y las cerraduras, que protegían ciudades y casas de ser asaltadas con facilidad por ejércitos invasores y/o visitantes no deseados, este fue un invento muy útil, pero por si solo implicaba grandes esfuerzos para que las personas autorizadas pudieran entrar y salir de estos lugares, debido a su seguridad que, se basaba en grandes trancas de madera, cadenas o simplemente puertas muy pesadas, estos sistemas requerían de muchos hombres para poder abrir o cerrar. Más adelante surgió un adelanto tecnológico llamado el cerrojo, que se integro a la puerta para optimizar su función, de esta forma, se remplazaron las grandes y pesadas trancas por sistemas más livianos hechos en metal pero más resistentes, este sistema admitía que la puerta fuera más fácil de abrir, y en general más rápida. Cuando se inventaron las primeras cerraduras eran grandes cajas metálicas que necesitaban para abrirse, llaves de hierro muy grandes y pesadas. Sin embargo, en el siglo XX hubo una gran evolución en el diseño de nuevos sistemas de acceso por puerta que han ocasionado una amplia gama de tipos de llaves. 1 La mayoría de llaves son de acero, pero en los automóviles u otras dependencias ya se usan llaves que llevan incorporado un sistema electrónico para abrir a distancia sin necesidad de meterlas en la cerradura; solamente se introduce cuando deja de funcionar el dispositivo electrónico. Estas llaves sirven también para iniciar la puesta en marcha del motor del automóvil. Las llaves modernas de las habitaciones de hotel, son una simple tarjeta de plástico donde se codifica un periodo de validez de acuerdo con la estancia de los clientes en el hotel, y además sirve como interruptor general de la electricidad cuando se abandona la habitación. Otros tipos de llaves sirven de control, por ejemplo, el acceso a aparcamientos privados de automóviles, son unos dispositivos electrónicos que actúan a distancia, abriendo y cerrando la puerta cuando se le indica. Basado en proyectos que aportan una base para el desarrollo ingenieril, se observan la evolución de los sistemas analógicos hasta la introducción de sistemas digitales, con las últimas técnicas de seguridad. 2 Proyectos Relacionad R dos: P Proyecto: UMGina: Sistema de d control de acceso o en aulass basado en e t tarjetas inte eligentes de e la Universsidad de Murcia. A Autor: T. Jiménez- A Gómez Skarmeta-- J. García a Ros- G. Martínez- J. Hidalgo- J. Gil- O. Cán novas- S. Navarro N y M. M Serrano D Detalles del d proyec cto: El Serrvicio de Informática de la Un niversidad de d M Murcia, ha a desarrolla ado un sisstema de control c de acceso basado en la u utilización de d tarjetas inteligentess, para suss equipos en e aulas de e libre acceso ( (ALAs), co omplementa ando así otros elem mentos de seguridad d como so on: a autenticació ón, integrid dad, confide encialidad y no repud dio abordad dos por otros p proyectos de d la misma a Universid dad dotando o de un sisttema globa al de control y g gestión de reservas trransparente e al usuario o y fácil de administrar a r. F Figura 1. Es structura de proyecto UM MGina. F Fuente: Estruc ctura de proyecto UMGina Grupo de seguridad y criptogra afía-Universida ad de Murcia 3 P Proyecto: Sistema de e control de e acceso ce entralizado CDVI UGM M. A Autor: CDV VI. D Detalle de el proyecto o: Ugm es un Produccto que em mplea electrónica digittal p para sumin nistrar contrrol, en el momento m de e acceder a un recintto, capaz de d m manejar ha asta 128 lecctores (puertas), de forma centralizada, la unidad centrral p provee con nexión con los disposittivos en loss cuales se pueden ussar diferentes t técnicas de e autenticación, como o biometría, teclados, RFID, etc. Además de d m mantener comunicació c ón continua a con los le ectores, la unidad u central es capaz d comunicarse con un PC, con de c el obje etivo de lle evar un reg gistro de los l lectores, almacenar co ontraseñass y monitore ear en gene eral el uso del d sistema a. F Figura 2. CD DVI UGM. F Fuente: Estac ción Central CD DVI UGM. [En Línea] L Productos de control de d acceso en líínea 4 Proyecto: Sistema de control y acceso de personas para un autobús intermunicipal en Colombia Autor: Camilo Andrés Molina Vega, Bogotá Universidad de san buenaventura facultad de Ingeniería, Ingeniería electrónica 2005. Proyecto: Prototipo de un sistema de control de acceso de personal mediante uso de tarjetas inteligentes de tecnología RFID Autor: Luis Eduardo Ramirez Rojas y Deiber Zambrano Marquez, Bogotá Universidad de san buenaventura facultad de Ingeniería, Ingeniería electrónica 2004. 5 1.2. DESCRIPCIÓN Y FORMULACIÓN DEL PROBLEMA En la actualidad existen varios métodos de control de acceso, uno de los más usados es la llave, sin embargo, esta puede tener una serie de desventajas: • La acción de manipular continuamente una llave genera desgaste, tanto de esta como de la cerradura en la que se usa, por lo cual deben ser reemplazadas y generan un gasto adicional. • Por ser algo tan común puede ser copiada por casi cualquier persona, lo que representa un grado de inseguridad para el usuario; además hace vulnerable el sistema de control de acceso. • El hecho de tener tantas llaves como número de puertas a las que se desea acceder, genera incomodidad y confusión cuando las llaves son del mismo tipo. • Con un sistema de control de acceso tradicional, se pierden muchas características que un sistema digital robusto puede ofrecer, como la posibilidad de registrar el usuario y el momento en que se accede al sistema. • ¿Cómo diseñar un sistema de control que resulte eficaz y de fácil manejo para el usuario final, utilizando el protocolo USB? 6 1.3. JUSTIFICACIÓN La importancia del desarrollo de este proyecto radica en la necesidad de implementar un sistema que ofrezca mayor seguridad que las cerraduras mecánicas actuales, mediante la aplicación de tecnología digital y los desarrollos electrónicos contemporáneos. Este sistema puede ser utilizado prácticamente en cualquier campo en el que se requiera seguridad, es decir, empresas, hoteles, bancos, edificios, propiedades estatales y privadas en general, lo que permite un área de aplicación extensa, incluyendo todos los sectores (comerciales, industriales y domésticos). Gracias a la aplicación de las técnicas de autenticación digital, este sistema ofrece mayores beneficios con respecto a los sistemas de seguridad basados en tarjetas electro-magnéticas, dado que, un dispositivo USB generalmente tiene mayor capacidad de almacenamiento y la posibilidad de guardar contraseñas o algoritmos de identificación. El desarrollo de este proyecto tiene grandes ventajas como la utilización de estándares de puertos USB, que son de gran uso en la actualidad y que dada su versatilidad permiten ser empleadas en un sin número de aplicaciones. Además de incluir un protocolo de nivel universal como el USB, se puede partir de las experiencias adquiridas durante el desarrollo del proyecto para diseñar futuras implementaciones y mejoras basándose en el uso de estándares de amplia documentación. 7 1.4. OBJETIVOS DE LA INVESTIGACIÓN 1.4.1. Objetivo General. Diseñar e implementar un sistema que permita el control de acceso a puertas, gabinetes y/o cajas de seguridad implementando el protocolo USB. 1.4.2. Objetivos Específicos. • Diseñar un sistema electrónico, tanto de “llave” como de “cerradura” que permita el acceso, únicamente a los usuarios deseados. • Crear un software que sea capaz de comparar la entrada de un dispositivo físico con una base de datos diseñada para el sistema. • Diseñar un sistema de codificación de los datos, tanto de usuario como códigos de seguridad, usando la interfaz grafica proporcionada por un PC. • Elaborar un circuito que controle el actuador que a su vez permita desbloquear las cerraduras de las puertas a las que se quiera acceder. 8 1.5. ALCANCES Y LIMITACIONES 1.5.1. Alcances. El módulo central será capaz de interpretar una información proveniente de un dispositivo portátil correspondiente a la identificación de usuario, las instrucciones y el código necesario para poder interpretar la información contenida en la memoria de dicho dispositivo portátil (llave), además de los aspectos de configuración del sistema. Con la construcción del dispositivo se busca facilitar las labores que pueda ejercer una persona encargada del control de acceso, reduciendo el número posible de personas en la planta. Otra ventaja de utilizar un sistema de control de acceso con estas características, será la capacidad de personalización, lo que lo hace altamente adaptable a la mayoría de situaciones o escenarios de uso, además de la adaptabilidad del proyecto, los bajos costos, su sencillez de instalación y puesta en marcha. Este sistema será sencillo de usar, ya que, está diseñado para que personas sin experiencia en el área de electrónica y computación, puedan acceder fácilmente a todas las características de su interfaz grafica de configuración, que se realizan desde el equipo central. Una gran característica, es la posibilidad de crear copias de respaldo tanto de las bases de datos como de las configuraciones, usando las herramientas nativas del sistema operativo Windows, plataforma para la cual se creara el programa de configuración y registro. 9 1.5.2. Limitaciones. Una debilidad de este sistema es la robustez, en cuanto al respaldo de alimentación eléctrica, debido a que la fuente de respaldo tendría un tiempo límite, por este factor el sistema podría fallar. Otra característica limitante del proyecto es la funcionalidad del programa a implementar cuando se posee una gran cantidad de puertas y usuarios a controlar por un solo ordenador, dado que, necesitaría una gran cantidad de puertos USB disponibles y esto ralentizaría el proceso considerablemente, porque se debería buscar puerto a puerto la ubicación de la llave; La necesidad de hacer un sistema que se pueda modificar una vez instalado, pues se debe dejar abierta la posibilidad de cambio de contraseñas o modificación de la organización física que se le dé al sistema. En cuanto a la necesidad del de utilizar un sistema central, compuesto por el PC, dado que es necesario que dicho sistema cumpla con los requisitos mínimos para ejecutar un sistema operativo como Windows XP, para el cual se ha diseñado el programa de interfaz con el usuario final. 10 2. MARCO DE REFERENCIA 2.1. MARCO TEÓRICO - CONCEPTUAL El control de acceso tiene como propósito minimizar la probabilidad de que personas malintencionadas ingresen a áreas o entornos donde pueden causar algún tipo de daño. Un buen sistema de control de acceso debe encontrar el balance adecuado entre seguridad y funcionalidad, ya que de nada sirve implementar un sistema de control de acceso de alta tecnología, si este implica muchas complicaciones y costos elevados para la empresa o el usuario que lo desee utilizar; como un mecanismo de ayuda para encontrar este balance se usará la tecnología de puertos y dispositivos USB. Con el pasar del tiempo han surgido bastantes y muy variadas funciones para los puertos USB, además de los equipos tradicionales como el teclado, el mouse y la impresora, los puertos USB hoy abren las puertas de un PC a docenas de accesorios que hoy se pueden usar a través de esos conectores como memorias, cámaras, reproductores de música, computadores de mano, ventiladores, lámparas y parlantes. Actualmente los dispositivos de almacenamiento USB son muy populares, debido a su facilidad de uso y relativamente bajo costo. Además de su gran capacidad, algunos de estos dispositivos cuentan además con reproductores multimedia, haciéndolos aun más atractivos al público. Una línea de estos dispositivos multimedia, el iPod® de la compañía Apple™, posee capacidades que varían entre 1 y 80 GB; sin duda, los dispositivos de almacenamiento USB han revolucionado desde hace algunos años la manera en que las personas manejan sus archivos y su vida diaria. Pero en procura de aprovechar al máximo las características de este puerto, y los 11 beneficios del protocolo que lo maneja se ha querido encontrar una nueva función en el campo de la seguridad electrónica. Para entender mejor la concepción de esta idea se explicarán los principales conceptos y generalidades del funcionamiento de un puerto y de los dispositivos USB. 2.1.1. Hardware de USB. Los dispositivos USB adoptan una topología de estrella y se organiza por niveles a partir de un controlador host instalado en la placa base, que actúa de interfaz entre el bus de ésta (generalmente a la interfaz PCI) y el primer dispositivo USB, el denominado concentrador raíz ("Root hub"), instalado también en la placa. El controlador de host es único; suele ser un chip Intel con una denominación como 82371AB/EB; 82801DB, etc. Dada la proliferación de este tipo de dispositivos, las placas modernas pueden disponer de varias concentradoras raíces, cada uno con su propia salida, generalmente 2 conectores del tipo "A" por cada uno de ellos. Cada uno de estos concentradores se considera el origen de un bus (numerados sucesivamente a partir del 0), del que cuelgan los dispositivos en el orden en que son detectados por el Sistema. El bus USB soporta intercambio simultáneo de datos entre un ordenador anfitrión y un amplio conjunto de periféricos. Todos los periféricos conectados comparten el ancho de banda del bus por medio de un protocolo de arbitraje basado en testigos ("Tokens"). El bus permite conexión y desconexión dinámica, es decir, que los periféricos se conecten, configuren, manipulen y desconecten mientras el sistema anfitrión y otros periféricos permanecen en funcionamiento. En un bus USB existen dos tipos de elementos: Anfitrión ("host") y dispositivos; a su vez, los dispositivos pueden ser de dos tipos: concentradores y funciones. 12 L Los conce entradores ("Hubs") son s el centtro de una estrella, y sirven pa ara c conectar co on el sistem ma anfitrión n, con otro hub o con una función n. Cada hu ub p puede conectar hasta a 7 dispositivos, aunq que lo norrmal es que sean de 4 s salidas, y proporciona p ar 500 mA de energía a de alimen ntación (ha asta 2.5 W)) a c cada uno de d ellos, ya que el cab ble de cone exión tiene hilos de se eñal (datos)) y d alimenta de ación (5 V. DC ± 0.25 V). Es importa ante consid derar el proceso p físsico y el proceso ló ógico de las c comunicac iones por protocolo p U USB. El ho ost USB, o dispositivo o anfitrión se e encarga de e controlar la conexió ón y actúa como un maestro m co ontrolando un u e esclavo que e se puede e considerar como un USB device e, o perifériico USB. F Figura 3. Intterfaz host – device USB B F Fuente: USB Complete: Evverything You u Need to Develop USB Pe eripherals, Th hird Edition 13 El host utiliiza un softw ware que se s encarga de crear la as conexion nes y asign nar n números de d dispositivo, así como tam mbién de designar el tipo de d t transferenc cia que se puede usa ar, luego de e establece er estos pa arámetros de d cconfiguración del disp positivo y del host, el software de e la capa de d función se c comunica con c el softw ware de sistema USB B, comuniccándole el tipo t de clase q tiene el que e dispositivvo USB con nectado al sistema, lu uego este selecciona s el d driver auto omáticamen nte, en este e caso el software de sistema se refiere al s sistema operativo Win ndows que selecciona a el driver automáticam a mente de un na l lista de disp positivos, esta e lista se e llama TPL L (Targeted Peripheral List). 2 2.1.2. Func cionamiento. El bus serie USB es síncron no, y utiliza a el algoritm mo d codificación NRZI ("Non Return to Zerro Inverted"" invertido sin retorno de oa c cero). F Figura 4. Co odificación NRZI N F Fuente: USB Complete: Evverything You u Need to Develop USB Pe eripherals, Th hird Edition L “ceros”” provocan un cambio de nivel, Los “unos” no Los n provocan n cambio. Para evitarr periodos largos sin cambios se s introduce e un cero cada 6 unos c consecutivo os 14 En este sistema existen dos voltajes opuestos; una tensión de referencia corresponde a un "1", pero no hay retorno a cero entre bits, de forma que una serie de unos corresponde a un voltaje uniforme; en cambio los ceros se marcan como cambios del nivel de tensión, de modo que una sucesión de ceros produce sucesivos cambios de tensión entre los conductores de señal. A partir de las salidas proporcionadas por los concentradores raíz (generalmente conectores del tipo "A") y utilizando concentradores adicionales, pueden conectarse más dispositivos hasta el límite señalado. El protocolo de comunicación utilizado es el testigo, que guarda cierta similitud con el sistema Token-Ring de IBM. Puesto que todos los periféricos comparten el bus y pueden funcionar de forma simultánea, la información es enviada en paquetes; cada paquete contiene una cabecera que indica el periférico a que va dirigido. Existen cuatro tipos de paquetes distintos: Token; Datos; Handshake, y Especial; el máximo de datos por paquete es de 8; 16; 32 y 64 Bytes. Se utiliza un sistema de detección y corrección de errores bastante robusto tipo CRC ("Cyclical Redundancy Check" comprobación de redundancia cíclica). La comprobación de redundancia cíclica (CRC) es un tipo de función que recibe un flujo de datos de cualquier longitud como entrada y devuelve un valor de longitud fija como salida. El término suele ser usado para designar tanto a la función como a su resultado. Pueden ser usadas como suma de verificación para detectar la alteración de datos durante su transmisión o almacenamiento. Las CRCs son populares porque su implementación en hardware binario es simple, son fáciles de analizar matemáticamente y son particularmente efectivas para detectar errores ocasionados por ruido en los 15 canales de transmisión. La CRC fue inventada y propuesta por W. Wesley Peterson en un artículo publicado en 1961. El CRC es un código de detección de error-cuyo cálculo es una larga división de computación en el que se descarta el cociente y el resto se convierte en el resultado, con la importante diferencia de que la aritmética que usamos conforma que el cálculo utilizado es el arrastre de un campo finito, en este caso los bits. El tamaño del resto es siempre menor que la longitud del divisor, que, por lo tanto, determina el tamaño del resultado. La definición de un CRC especifica el divisor que se utilizará, entre otras cosas. Aunque CRC se puede construir utilizando cualquier tipo de regla finita, todos CRC de uso común emplean una base finita binaria, esta base consta de dos elementos, generalmente el 0 y 1, el resto de este artículo se centrara en este tipo de composición, es decir el ámbito binario y los principios generales de los CRC. Para el cálculo de CRC se debe tener en cuenta que La mecánica de la informática con su lenguaje binario produce unas CRC simples. Los bits representados de entrada son alineados en una fila, y el (n +1) representa el patrón de bits del divisor CRC (llamado "polinomio") se coloca debajo de la parte izquierda del final de la fila. Aquí está la primera de ellas para el cálculo de 3 bits de CRC: 11010011101100 <--- entrada 1011 <--- divisor (4 Bits) -------------01100011101100 <--- resultado Si la entrada que está por encima del extremo izquierdo tiene como divisor 0, no hace nada y pasar el divisor a la derecha de uno en uno. Si la entrada que 16 está por encima de la izquierda tiene como divisor 1, el divisor es [Or exclusiva] en la entrada (en otras palabras, por encima de la entrada de cada bit el primer bit conmuta con el divisor). El divisor es entonces desplazado hacia la derecha, y el proceso se repite hasta que el divisor llega a la derecha, en la parte final de la fila de entrada. Aquí está el último cálculo: 00000000001110 <--- resultado de la multiplicación de cálculo 1011 <--- divisor -------------00000000000101 <--- resto (3 bits) Desde la izquierda se divide por cero todos los bits de entrada, cuando este proceso termina el único bits en la fila de entrada que puede ser distinto de cero es n bits más a la derecha, en la parte final de la fila. Estos n bits son el resto de la división, y será también el valor de la función CRC (es el CRC elegido a menos que la especificación de algún proceso posterior lo cambie). El funcionamiento del dispositivo USB está centrado en el host, todas las transacciones se originan en él. Es el controlador host el que decide todas las acciones, incluyendo el número asignado a cada dispositivo (esta asignación es realizada automáticamente por el controlador "host" cada vez que se inicia el sistema o se añade, o elimina, un nuevo dispositivo en el bus), su ancho de banda, etc. Cuando se detecta un nuevo dispositivo es el host el encargado de cargar los drivers oportunos sin necesidad de intervención por el usuario. El sistema utiliza cuatro tipos de transacciones que resuelven todas las posibles situaciones de comunicación. Cada transacción utiliza un mínimo de tres paquetes, el primero es siempre un Token que avisa al dispositivo que puede iniciar la transmisión. 17 • Transferencia de control ("Control transfer"): Ocurre cuando un dispositivo se conecta por primera vez. En este momento el controlador de host envía un paquete "Token" al periférico notificándole el número que le ha asignado. • Transferencia de pila de datos ("Bulk data transfer"): Este proceso se utiliza para enviar gran cantidad de datos de una sola vez. Es útil para dispositivos que tienen que enviar gran cantidad de datos cada vez, como escáneres o máquinas de fotografía digital. • Transferencia por interrupción ("Interrupt data transfer"): Este proceso se utiliza cuando se solicita enviar información por el bus en una sola dirección (de la función al host). • Transferencia de datos isócrona ("Isochronous data transfer"): Este proceso se utiliza cuando es necesario enviar datos en tiempo real. Los datos son enviados con una cadencia precisa ajustada a un reloj, de modo que la transmisión es a velocidad constante. 2.1.3. Cables y Conectores. El cable de bus USB es de 4 hilos, y comprende líneas de señal (datos) y alimentación, con lo que las funciones pueden utilizar un único cable. Existen dos tipos de cable: apantallado y sin apantallar. En el primer caso el par de hilos de señal es trenzado; los de tierra y alimentación son rectos, y la cubierta de protección (pantalla) solo puede conectarse a tierra en el anfitrión. En el cable sin apantallar todos los hilos son rectos. Las conexiones a 15 Mbps y superiores exigen cable apantallado. 18 S utilizan diámetros estándar para Se p los hilos de alime entación de el bus. Pa ara c cada secció ón se autorriza una lon ngitud máxima del seg gmento. T Tabla 1. Dis stancias y ca alibres de ca able USB F Fuente: USB Complete: C Evverything You Need to Devvelop USB Pe eripherals, Third Edition T Tabla 2. Dis sposición de pines y colo ores de identificación en n cables USB B F Fuente: USB Complete: Evverything You u Need to Develop USB Pe eripherals, Th hird Edition S usan dos Se d tipos de d conectores, A y B. B Amboss son polarrizados (so olo p pueden ins sertarse en n una possición) y utilizan siste emas de presión p pa ara s sujetarse. Los de tipo A utilizan n la hembra a en el sisttema anfitrrión, y suele en 19 u usarse en dispositivos en los qu ue la conexxión es permanente (por ( ejemplo, r ratones y te eclados). L de tipo Los o B utilizan la hembra en el dispo ositivo USB B (función),, y se utiliza an e sistema en as móviles (por ejemplo, cámarras fotográfficas o alta avoces). En E g general pod demos afirm mar que la hembra de e los conecctores A esttán en el lad do d host (P del PC) o de lo os concentrradores (Hu ubs), mienttras las de tipo B está án d lado de del e los periféricos. F Figura 5. Co onector USB B tipo A. F Fuente: USB Complete: Evverything You u Need to Develop USB Pe eripherals, Th hird Edition Figura 6. Conector C US SB tipo B. F Fuente: USB Complete: Evverything You u Need to Develop USB Pe eripherals, Th hird Edition 20 2.1.4. Especificación USB. Universal Serial Bus. En computadores, un bus es un subsistema que transfiere datos o electricidad entre componentes del ordenador dentro de un ordenador o entre ordenadores. Un bus puede conectar varios periféricos utilizando el mismo conjunto de cables. La tecnología USB ha sido promovida principalmente por Intel, aunque le han seguido todos los grandes fabricantes, de forma que se ha convertido en un estándar importante. En sus comienzos los interesados en esta tecnología se agruparon en un foro, el USB Implementers Forum Inc., (USB-IF), que agrupa a más de 460 compañías y ha publicado diversas revisiones de la norma. • USB 0.9: Primer borrador, publicado en Noviembre de 1995. • USB 1.0: Publicada en 1996 establece dos tipos de conexión: La primera, denominada velocidad baja ("Low speed"), ofrece 1.5 Mbps, y está pensada para periféricos que no requieren un gran ancho de banda, como ratones o joysticks. La segunda, denominada velocidad completa ("Full speed"), es de 12 Mbps, y está destinada a los dispositivos más rápidos. • USB 1.1: El USB 1.1 es un bus externo que soporta tasas de transferencia de datos de 12 Mbps Un solo puerto USB se puede utilizar para conectar hasta 127 dispositivos periféricos, tales como ratones, módems, y teclados. El USB también soporta la instalación Plug-and-Play y el hot plugging. Empezó a utilizarse en 1996, algunos fabricantes de ordenadores empezaron a incluir soporte para USB en sus nuevas máquinas. Con el lanzamiento del iMac en 1998 el uso del USB se extendió. Se espera que substituya totalmente a los puertos de serie y paralelos. 21 • USB 2.0: La eshjpecificación del USB 2.0 fue lanzada en abril de 2000.También conocido como USB de alta velocidad, el USB 2.0 es un bus externo que soporta tasas de transferencia de datos de hasta 480Mbps. El USB 2.0 es una extensión del USB 1.1, utiliza los mismos cables y conectadores y es completamente compatible con USB 1.1. Hewlett-Packard, Intel, Lucent, Microsoft, NEC y Philips tomaron juntos la iniciativa para desarrollar una tasa de transferencia de datos más alta que la del USB 1.1 para resolver las necesidades de ancho de banda de las nuevas tecnologías. 22 2.2. MARCO NORMATIVO Una Clase USB define un grupo de dispositivos de similares características, cuyos requisitos vienen definidos mediante una Especificación de Clase USB. Las distintas Especificaciones de Clase USB permiten que los fabricantes puedan desarrollar dispositivos que pueden controlarse mediante drivers adaptativos (drivers que pueden controlar a los dispositivos en función de la propia información descriptiva proporcionada por el dispositivo). Los drivers adaptativos compatibles con una determinada Clase se denominan Drivers de Clase. De esta manera, los fabricantes de Sistemas Operativos y otras casas de software pueden desarrollar distintos Drivers de Clase, con la finalidad de poder controlar dispositivos pertenecientes a cualquiera de dichas Clases, sin necesidad de que el fabricante del dispositivo tenga que desarrollar también los drivers para cada entorno operativo en que quiera que funcione su dispositivo. 2.2.1. Clases USB. Desde el punto de vista de USB, una Clase es un grupo de dispositivos (o interfaces dentro de un dispositivo) con ciertas características en común. Típicamente, dos dispositivos pertenecen a la misma Clase si ambos utilizan formatos similares en los datos que reciben o transmiten, o si ambos utilizan una misma forma de comunicarse con el sistema. El uso principal de una Clase USB es la de describir la forma en que un interfaz se comunica con el sistema, tanto a nivel de datos como a nivel de control. También existe un uso secundario, que es el de proporcionar información sobre la funcionalidad que proporciona dicho interfaz. De esta manera, la información de Clase proporcionada por el dispositivo puede 23 utilizarse para que el sistema localice un driver que pueda controlar tanto la conectividad entre el interfaz y el sistema, como la propia funcionalidad del dispositivo. 2.2.2. Relación Driver-Dispositivo. USB define una relación entre drivers y dispositivos, totalmente diferente a la filosofía tradicional. En vez de permitir que el driver tenga acceso directo al hardware del dispositivo, USB sólo permite al driver comunicarse con el dispositivo a través de las “pipes” establecidas entre el sistema USB y los distintos endpoints del dispositivo. Una vez establecidas los pipes, el Sistema Operativo las pone a disposición del driver en forma de interfaces software. Los tipos de transferencias a través de dichas pipes dependen del tipo de endpoint, y pueden ser de 4 tipos: Bulk, Control, Interrupción e Isócrono. Por esta razón, las Clases USB se basan en la forma en que el dispositivo o interfaz se comunica con el sistema, y no simplemente en el tipo de servicio proporcionado por el dispositivo. Por ejemplo, en la Clase de Dispositivos de Impresión no interesa cuántos cartuchos de tinta o qué colores soporta la impresora, sino si se envían los datos a través de una pipe tipo Bulk-OUT y si tiene o no una pipe tipo Bulk-IN para reportar información de estado. Asimismo, en la Clase de Dispositivos de almacenamiento Masivo no interesa si se trata de un disco duro o de un disquete, ni el número de cabezas o cilindros, ni siquiera la capacidad del dispositivo. Lo que interesa es si las lecturas y escrituras se van a realizar a través de pipes tipo Bulk-IN y Bulk-OUT o a través de una pipe de Control, y si se va a utilizar una pipe de Interrupción para reportar información de estado o si se realiza mediante otros mecanismos. Las Clases USB también pueden definir el formato de los datos que se transmiten. Por ejemplo, la Clase de Dispositivos de Almacenamiento Masivo define varios métodos opcionales para encapsular (transportar) distintos 24 juegos de comandos estándares, en los paquetes de datos que se transfieren a través de las pipes. Un dispositivo concreto puede soportar uno o varios de dichos métodos de transporte, y uno o varios juegos de comandos estándar (SCSI, UFI, ATA, ATAPI, etc.), de forma que cuando el sistema lee la información proporcionada por el dispositivo, puede buscar y asociar un Driver de Clase compatible con alguno de los métodos de transporte y juegos de comandos que el dispositivo soporta. 2.2.3. Descriptores. Desde el punto de vista del sistema USB, un dispositivo puede tener varias posibles Configuraciones, en cada una de las cuales el dispositivo puede funcionar de una manera distinta. En cada una de las posibles configuraciones, el dispositivo queda organizado como un conjunto de Interfaces, donde cada Interfaz especifica qué partes del hardware del dispositivo interactúa con el sistema USB. Cada una de esas partes de hardware se denomina Endpoint. Entonces, de una manera jerárquica, un dispositivo es una colección de posibles Configuraciones, cada Configuración es una colección de Interfaces, y cada Interfaz es una colección de Endpoints. A su vez los Interfaces pueden admitir configuraciones alternativas, con distintas colecciones de Endpoints en cada una de ellas. Los dispositivos proporcionan toda la información descriptiva al sistema a través de unas estructuras de datos denominados Descriptores. Existen distintos descriptores que proporcionan información a nivel de dispositivo, de configuración, de interfaz y de endpoint. Las especificaciones de Clase USB definen las configuraciones, interfaces (y sus configuraciones alternativas) y endpoints que pertenecientes a dicha Clase o Subclase deben soportar. 25 los dispositivos 2.2.4. Clases, Subclases y Protocolos. Los descriptores de dispositivo y de interfaz contienen una serie de campos que permiten al sistema clasificar a los dispositivos. Estos campos son la Clase, la Subclase y el Protocolo. El Sistema Operativo puede utilizar estos campos para localizar y asociar al dispositivo o interfaz un determinado Driver de Clase, de entre todos los Drivers de esa Clase disponibles en el sistema. También puede seleccionar una determinada configuración del dispositivo, o una determinada configuración alternativa de un interfaz, en función de los protocolos soportados por los distintos Drivers de Clase disponibles en el sistema para esa Clase y Subclase de dispositivo. 2.2.5. Localización del driver. En algunas ocasiones, sólo es necesario un driver para controlar a un dispositivo, mientras que en otras son necesarios distintos drivers para controlar los distintos interfaces disponibles en el dispositivo. Se entiende que debe existir una manera estándar de localizar y asociar drivers a dispositivos e interfaces, de manera que los fabricantes de dispositivos y de Sistemas Operativos trabajen según un modelo común. Una vez seleccionada una configuración, queda establecido el número de interfaces. Las características concretas de cada interfaz pueden seleccionarse posteriormente a través de las posibles configuraciones alternativas. El algoritmo para localizar y asociar un driver se basa en la información recibida del dispositivo en los descriptores. La primera búsqueda se basa en la información recibida en el Descriptor de Dispositivo, y se trata de localizar un único driver que controle todo el dispositivo. La información en la que se basa esta primera búsqueda es (en orden de prioridad): • Fabricante & Producto & Versión del producto. • Fabricante & Producto. 26 Si no se ha localizado un driver y el campo Clase indica que el dispositivo pertenece a una Clase específica del Fabricante, es decir, no pertenece a una Clase estándar USB, la búsqueda continúa según los campos: • Fabricante & Subclase & Protocolo • Fabricante & Subclase Si en cambio el dispositivo pertenece a una Clase estándar USB, la búsqueda continúa en función de los campos: • Clase & Subclase & Protocolo • Clase & Subclase Si en este proceso ya se ha localizado un driver, este driver ya puede participar en la elección de la configuración en la que debe funcionar el dispositivo. Si no se ha podido localizar un driver, el Sistema Operativo es responsable de seleccionar una configuración para el dispositivo, y seguir buscando un driver para cada interfaz disponible en dicha configuración. Esta segunda búsqueda se basa en la información recibida en los descriptores de dispositivo y de interfaz. De nuevo en orden de prioridad, los campos utilizados en esta segunda fase son: • Fabricante & Producto & Versión del producto & Número de la configuración & Número del interfaz. • Fabricante & Producto & Número de la configuración & Número del interfaz. 27 Si no se ha localizado un driver y el interfaz pertenece a una Clase Específica del Fabricante, es decir, no pertenece a una Clase estándar USB, la búsqueda continúa según los campos: • Fabricante & Subclase del interfaz & Protocolo del interfaz • Fabricante & Subclase del interfaz Si en cambio el interfaz pertenece a una Clase estándar USB, la búsqueda continúa en función de los campos: • Clase del interfaz & Subclase del interfaz & Protocolo del interfaz • Clase del interfaz & Subclase del interfaz 2.2.6. Peticiones específicas de Clase USB y peticiones específicas del fabricante. La norma USB denomina “peticiones” (requests) a las distintas funciones que el sistema USB puede solicitar a los dispositivos, lo cual es distinto de los comandos que las aplicaciones pueden enviar, y que dependerán del juego de comandos que se esté utilizando en concreto con cada dispositivo. La norma USB define una serie de peticiones estándar que deben implementar todos los dispositivos, mientras que las especificaciones de Clase USB y los fabricantes de dispositivos pueden definir peticiones adicionales, denominadas respectivamente peticiones específicas de Clase y peticiones específicas del Fabricante. La forma de enviar al dispositivo una petición USB es siempre a través de una Transferencia de Control dirigida a la pipe de Control por Defecto, en cuya fase de SETUP se indica el tipo de petición (Estándar, de Clase o de Fabricante) y el destinatario de la misma (el dispositivo, un interfaz o un endpoint). 28 Si la petición es Estándar, está definida en la propia norma USB, pero si es de Clase, la Clase a la que pertenece el destinatario de la petición indica en qué Especificación de Clase está definida dicha petición. Por ejemplo, si el destinatario es el dispositivo, entonces la Clase indicada en el descriptor del dispositivo indica la Especificación de Clase donde está definida la petición. Si el destinatario es un interfaz o endpoint, entonces la Clase indicada en el descriptor del interfaz indica la Especificación de Clase donde está definida la petición. Si la petición es de Fabricante, entonces es el propio fabricante quien ha definido dicha petición. 29 3. METODOLOGÍA 3.1. ENFOQUE DE LA INVESTIGACIÓN La investigación y desarrollo del proyecto se fundamentaron por el enfoque Empírico-Practico, ya que la teoría fue la base del proyecto, que luego fue evaluada con métodos prácticos de experimentación y optimización creciente, partiendo desde un inicio claro, fundamentado por la teoría hasta la terminación del trabajo justificado por la relación Teoría-Práctica, que se desarrollo durante las diferentes etapas del proyecto. 3.2. LÍNEA DE INVESTIGACIÓN Tecnologías actuales y sociedad Sublinea de facultad: Instrumentación y control de procesos Campo Temático: Control 3.3. HIPÓTESIS Con el diseño de un sistema de control de acceso y autorización, que brinde sencillez y facilidad de manejo a los usuarios, y además sea capaz de actuar de forma robusta ante cualquier situación, se logran vencer algunos obstáculos, como los altos costos que sistemas mucho más complejos devengan, la dificultad que tienen los usuarios para adaptarse a sistemas complejos de muchas opciones que en algún momento se consideran innecesarias, y la dificultad de implementación de otros sistemas basados en técnicas biométricas o de complejos algoritmos de encriptación. 30 3.4. VARIABLES 3.4.1. Variables independientes. • TIPO DE MICROCONTROLADOR: Anteriormente se menciono que el fabricante microchip ofrece diferentes modelos establecidos en distintas gamas, pero el modelo que mejor se adapta a los requerimientos y que tiene mejor relación función-costo, es el PIC 18f4550. • COMUNICACIÓN INTERNA ENTRE MÓDULOS: Ya sea USB o UART, la comunicación limpia y clara entre los módulos es necesaria. • EXPERIENCIA DE USUARIO: se especifica que el usuario puede ser cualquier persona con conocimiento o no de sistemas informáticos y manejo de plataforma Windows, dada la sencillez y claridad del programa los usuarios no dependen enteramente de un conocimiento previo para manejar el programa y el sistema en general. 3.4.2. Variables dependientes • DISEÑO DE LOS MÓDULOS: Depende enteramente de la selección del microcontrolador, el cual también afecta la forma en la que se simulan los circuitos en la etapa de diseño. • INTERFAZ DE USUARIO: Depende en gran parte del diseño del programa, pues es posible que se le de mayor importancia a las funciones que pueda ofrecer dejando a un lado la sencillez y claridad. 31 4. DESARROLLO INGENIERIL Para el desarrollo correcto del proyecto, se tiene en cuenta el siguiente proceso: Teoría USB. Para desarrollar este paso es necesario disponer de una fuente de información amplia, y que sea consistente con los requerimientos, en este caso la fuente primaria de información para la implementación de este proceso en especial fue el foro de implementadores USB (USB implementers Forum). Desde el punto de vista electrónico, fue necesario aprender los requerimientos de voltaje, corriente, codificación lineal, entre otros. Desde el punto de vista de compatibilidad de los dispositivos con cualquier sistema, también fue necesario investigar las opciones y los documentos del fabricante del microcontrolador. Programación Software: Para este paso, fue necesario recurrir al programa de diseño Borland C++ Builder, (Versión 6.0) que facilita enormemente la programación de la interfaz de usuario del programa, dado que el paquete ofrece un sistema IDE con entorno grafico en el que la opción de programación es totalmente orientada a objetos, de esta forma se pueden configurar el comportamiento de ventanas, botones, cuadros de texto y demás opciones disponibles, todo manteniendo el estándar C++. El objetivo del programa en la parte del PC, es simplificar la experiencia de usuario final, de esta forma se tratan de ocultar todos aquellos detalles complejos que puedan comprometer la sencillez y claridad de la interfaz de programa final, esta interfaz se pensó para que cualquier usuario que tenga experiencia mínima de manejo de computadores pueda usar la aplicación. Selección de hardware: 32 En este punto, se tenía un conocimiento general de lo que el programa y el dispositivo físico deberían realizar, el siguiente paso fue elegir los componentes más adecuados a las necesidades del programa, en la parte del computador personal, se eligió la plataforma Windows que mantiene estabilidad y compatibilidad entre versiones. En el caso del módulo “llave”, se pensó en manejar un microcontrolador del fabricante microchip, consecuentemente, fue necesario explorar las opciones de todas las gamas de microcontroladores, aunque haciendo énfasis en los sistemas de comunicaciones alámbricas, específicamente que pudieran manejar el protocolo serial universal USB. El fabricante ofrece varios modelos dentro de las gamas media y alta que mantienen la compatibilidad con USB, en principio el objetivo del proyecto es brindar sencillez y rapidez durante las etapas de desarrollo, y estos factores se lograban de manera óptima con el dispositivo perteneciente a la gama media de referencia 18f4550, que además de ofrecer la conexión USB, brinda ventajas ante sus competidores de gamas superiores como los PIC de 16 bits serie 24 o los PIC de 32 bits serie 32, como: como la facilidad de desarrollo ya que es un sistema de 8 bits el cual se ha manejado durante la carrera, la facilidad de desarrollo del Firmware siendo posible elegir el lenguaje de programación entre assembler, Basic y C. Para simplificar la comunicación entre los módulos de software y de apertura, se opto por elegir un módulo de conversión USB a UART, compatible con el microcontrolador 16f628 que controla el driver que consecuentemente controla el mecanismo de apertura de la puerta. El Driver L298 es un driver de puente completo doble, que con una entrada TTL puede controlar cargas inductivas como el motor. Durante el desarrollo y evolución de los pasos mencionados anteriormente, fue necesario realizar pruebas para comprobar la consistencia y la correcta comunicación del sistema global, para el análisis de la parte electrónica fue 33 necesario realizar simulaciones en primera instancia, en la que se pueden descartar elementos de forma sencilla y sin que incremente los costos del diseño, para la parte de simulación se uso el programa Proteus ISIS, ya que ofrece la posibilidad de incluir los microcontroladores totalmente funcionales, lo que ofrece una ventaja enorme sobre los diseños físicos. Cuando se cumplió la etapa de simulaciones se paso a hacer prototipos físicos sencillos que demostrarían que los resultados obtenidos en las simulaciones fueran consistentes con los resultados prácticos. Para el caso del software del computador, fue necesario realizar secuencias de prueba y error, hasta que el programa compilaba por completo, de esta forma se observo el proceso completo de desarrollo del programa, desde las primeras etapas de declaración de variables hasta las etapas avanzadas de manejo de errores. En el desarrollo del proyecto se contempla el diseño y configuración de tres módulos; a continuación se muestra la interacción y el funcionamiento de cada uno de ellos y su disposición en el sistema; módulo móvil que para efectos de practicidad será llamado “la llave”, un módulo software que verifica si la llave está autorizada y un módulo de apertura, que está encargado de la activación mecánica del cerrojo una vez haya sido hecha la verificación en los módulos anteriores. Figura 7. Diagrama a bloques del sistema. 34 4 MÓDU 4.1. ULOS. 4 4.1.1. Módulo Llave. Este aparrtado explicca en detalle el proceso de diseñ ño y posterior desarrollo que representa la “llavve”. F Figura 8. Dia agrama de flujo f del mód dulo llave 35 Para el desarrollo de este módulo, se toman en cuenta algunos criterios como son: • Tamaño del módulo. • Elección del microcontrolador. • Programador. • Dispositivos a emplear. • Diseño del circuito. A continuación se desarrollan los criterios para el diseño y construcción del módulo móvil. 4.1.1.1. Tamaño del módulo. Es un aspecto muy importante a tener en cuenta, ya que el objetivo es que este remplace una llave común, por esta razón no debe ser grande ni pesado, tampoco debe presentar una manipulación difícil, pues está pensado para ser usado por todo tipo de usuario. 4.1.1.2. Elección del microcontrolador. Para la mayoría de circuitos electrónicos en el mundo, se necesita algún dispositivo que realice operaciones lógicas digitales y de control, este proyecto no es la excepción, pero el microcontrolador debe ser seleccionado de una manera cuidadosa, analizando las características y requerimientos del diseño. Como una de las prioridades del proyecto es utilizar el protocolo USB, obviamente el microcontrolador que se seleccione debe ser funcional para este protocolo. Se pensó en el microcontrolador Microchip 18f4550 que se puede encontrar en diferentes package pero tiene una configuración TQFP que resulta muy útil por su pequeño tamaño, además de tener manejo de USB incorporado. 36 Al comienzo del proyecto fue necesario observar que microcontroladores ofrecían la posibilidad de trabajar con protocolos alámbricos de transmisión de datos, que facilitaran la función de interfaz entre el PC y el dispositivo final, en la siguiente tabla se observan algunas de las características específicas de cada uno de los microcontroladores que se pensaron para la Aplicación. Tabla 3. Comparación de los microcontroladores optativos del módulo llave. Analizando las características se decidió que la mejor opción en cuanto a funcionalidad solamente sería el PIC32, gracias a su arquitectura de 32 bits nos daría mayores opciones y la oportunidad de profundizar en la complejidad de la aplicación sin embargo el costo de la importación y de poder conseguirse en un almacén local el precio total del dispositivo sería muy elevado para los requerimientos de la aplicación, además, las opciones de “Embeded Host” y “USB On The Go”, serian un poco desperdiciadas.. La opción que nos ofrece el PIC24, sería una opción media entre la complejidad del PIC32 y la sencillez del PIC18, dada su arquitectura de 16 bits, se encuentra en una posición media que ofrece las ventajas de las dos gamas, sin embargo analizando los requerimientos de la aplicación que se estaba desarrollando se llego a la conclusión de que este Pic ofrece muy 37 b buenas po osibilidadess a un precio p acccesible, au unque algu unas no se a aprovechar rían al máxximo, además de esto se intento buscar el dispositivo d e en e mercado el o nacional sin s mayor éxito. A final, el PIC18 offrece variass ventajas sobre los otros disp Al positivos, las c cuales se liistan a conttinuación: • Men nor costo. • Arqu uitectura 8 bits acorde e a lo apren ndido en la universidad d. • Posibilidad de programacción en len nguaje C, que facilita a la tarea de d dise eño del prog grama. • Num mero de pin nes suficiente para los requerimie entos. • No está e limitad do a un mo odelo especcífico de prrogramadorr, puesto qu ue se pueden p usa ar los progra amadores genéricos g m comunes. más F Figura 9. Dia agrama de pines p del miccrocontrolad dor tipo PDIP P F Fuente: Microchip inc., www.microc w chip.com 38 F Figura 10. Diagrama D de pines del microcontrola m ador tipo TQFP F Fuente: Microchip inc., www.microc w chip.com L caracte Las erísticas priincipales po or las que se s eligió este micro so on: • Velocidad V d hasta 48MHz de 4 con n cristal exxterno, y de 8MHz co on oscilador o intterno. • Módulo M PWM. • Comunicaci C USART y UART). U ón serial sííncrona y asíncrona (U • Comunicaci C ón I2C. • 35 3 pines I/O O (Entrada y salida). • Módulo M de comunicaci c ón USB. 39 4 4.1.2. Mód dulo de so oftware. Para el con ntrol del mó ódulo de apertura a y la l lectura del módulo lla ave, se utiliza el módu ulo de softw ware, que consta c de un u p programa y un entorno grafico o que se encargan de crear los l usuario os, g gestionar una u base de d datos a partir de un u archivo de texto, verificar v si la i información n grabada en e el módu ulo llave corrresponde a un usuarrio autorizad do y por ultimo o enviar la orden o de acctivación pa ara el módu ulo de aperrtura. F Figura 11. Diagrama D de flujo del mó ódulo softwa are 40 En la elaboración del módulo de software se tuvo en cuenta un factor muy importante, el hecho de que el sistema de control de acceso es diseñado para todo tipo de usuarios, esto hace que sea necesaria una interfaz de fácil manejo y comprensión, razón por la cual este módulo se creó en compilador Borland C++ Builder versión 6.0. • C++Builder C++Builder es un entorno de desarrollo integrado en lenguaje C++ para Windows inicialmente de la empresa Borland, actualmente de su filial CodeGear, dentro de sus características más importantes se puede observar que es un IDE que se ejecuta bajo línea de comandos. Una de sus más grandes ventajas es que es completamente intuitivo, siendo como programar en un entorno Visual Basic pero con la solidez de un lenguaje como C++. • Versiones C++Builder Lanzado después de Delphi, y con un entorno similar a éste. Muchos componentes de Delphi pueden utilizarse en C++. La última versión es C++Builder 2009 (lanzada en 2008), de la que existen tres ediciones: Professional, Enterprise y Architect. Está incluido en CodeGear RAD estudio 2009, junto con Delphi 2009. La anterior versión 2006 estuvo incluida en Borland Developer Studio 2006. En septiembre de 2006 se lanzó una versión reducida, llamada Turbo C++, recuperando un nombre clásico dentro de los productos Borland. Junto con otras herramientas de desarrollo fue transferido a CodeGear al crearse esta filial de Borland en noviembre de 2006. • Interfaz de C++ Builder En este entorno se pueden encontrar de manera muy fácil dos secciones, una sección grafica que permite arrastrar elementos, ubicar botones, campos 41 d texto, campos de comprrobación entre de e otross objetos de mane era i instantánea a, y la se ección de código en e la cuall se lleva a cabo la p programac ión de todos los elem mentos que compone en la aplicación, de tal t m manera qu ue el prog gramador pueda p mon nitorear el progreso en los dos a aspectos. F Figura 12. In nterfaz graficca de C++ Builder B 6 F Fuente: Borland Software Corporation copyright 2002 S Software para p contro ol de acce eso y autorrización mediante pro otocolo US SB “ “USB Key”.. Para ver el e código fu uente véase e ANEXO 3. 3 L columna La a vertebral del sistema a de control de acceso o es el prog grama que se c creó, encarrgado de re ealizar una interacción n entre el módulo m llave e y el módu ulo d apertura de a por med dio de la creación c y posterior verificación v de usuarios 42 d dentro de una u lista de efinida por medio de una interfa az gráfica y de fácil uso p para cualqu uier persona que haga a las veces de adminisstrador. F Figura 13. Ventana V principal USB ke ey. Fuente: Dis seño propio o MBR.1 Esta es la ventana v principal dond de se puede encontra ar la lista de e los usuarios a autorizados s, la opción n de registra ar que sirve e para crea ar un usuariio nuevo, y la o opción de seleccionar s r puerto, qu ue verifica el puerto en e el que se e encuentra an c conectados s los módulos llave y de d apertura a. F Figura 14. Ventana V de selección s de e puerto. Fuente: Dis seño propio o MBR. 1 MBR: diseñado por los autores a como parte del dessarrollo del prroceso 43 L ventana La a de selección de puerto permite e selecciona ar manualm mente en qu ue p puerto se conectaron c los módulo os llave y de e apertura. F Figura 15. Ventana V principal USB ke ey con lista de usuarios desplegada a. Fuente: Dis seño propio o MBR. Después de haber se eleccionado o el puerto correcto, c se e despliega a una lista de d l usuario los os permitido os y el pro ograma enttra en mod do de de espera. e En el m modo de es spera el PC C escanea constantem mente los puertos p preg guntando por p u usuario autorizado un o, una vez se introduzca en el puerto USB B un módu ulo l llave con un u usuario permitido, el program ma envía al módulo de e apertura la o orden de activación a de un dispositivo eléctrico llamad do pestillo, que q al recib bir e esta orden retira el se eguro que bloquea la puerta, pe ermitiendo así a el acceso a recinto o deposito. al Una vez re etirado el módulo m llave, el progrrama envía al módulo o de apertu ura u orden para que vuelva a su posición inicial (de bloqueo) de una d tal mane era q vuelva al modo de que e espera. 44 4 4.1.3. Mód dulo De Ap pertura. Estte mecanissmo recibe órdenes de el módulo de d s software que le indicca si debe e activar el e pestillo o si es un n usuario no n a autorizado mantener restringido r el acceso al a recinto monitoreado m o. Figura 16. 1 Diagram ma de flujo de el módulo de e apertura 45 Para llevar a cabo esta función se utiliza un sistema compuesto por dos microcontroladores que se encargan de recibir la información del ordenador y convertirlo en señales de voltaje para el driver del motor que acciona la apertura del pestillo. Tabla 4. Comparación de los microcontroladores optativos de módulo apertura. PIC16F628A Memoria de programa(KB) PIC16F877A 3.5 flash 14 flash 5 5 RA M (bytes) 224 368 EEPROM(bytes) 128 256 18 40 Velocidad CPU(MIPS) Pines Esta tabla muestra las opciones que se tenían para el control del motor, la característica principal era que tuvieran UART para poder comunicarse con el integrado FT232 que convierte USB a Serial, según las características la mejor opción fue el PIC16F628A en parte porque tiene un costo más bajo y tiene menos características que se podrían desperdiciar. 46 El integrado FT232 se s encarga de recibir la informacción del orrdenador y la c convierte en e una tabla a de datos que q envía al a PIC para procesarlo os. F Figura 17. Diagrama D de pines del in ntegrado FT2 232. F Fuente: Futu ure Technolo ogy Devicess International Limited. 47 El microcon ntrolador prrincipal es el e PIC 16f6 628A que re ecibe la info ormación y la p procesa pa ara enviar la as ordenes al driver L2 298 para acctivar el mo otor. F Figura 18. Diagrama D de pines del microcontrola m ador PIC 16ff628A. F Fuente: Microchip inc., www.microc w chip.com 48 El driver L2 298 se enca arga de con nvertir la información del d micro en e señales de d 12 voltios para p activar el motor en el mom mento de la apertura y el cierre del d p pestillo de la puerta qu ue controla a. F Figura 19. Diagrama D de pines driver L298. F Fuente: © 2000 STMicro oelectronics 49 El accionad dor es un pestillo p elécctrico que fu unciona con modo iniccial “cerrad do” l cual evita que ante lo e una falla de d electricid dad el siste ema no que ede abierto oy v vulnerable a ser pene etrado por intrusos; el pestillo o seguro s es activado por p u motor de un e 12 voltioss que recibe e señales de d voltaje del driver L2 298. F Figura 20. Pestillo P eléctrrico. F Fuente: Zho ongshan Rd Car Accesso ories Manuffacturing Facctory. En la etapa a de desarrrollo del programa pa ara el micrrocontrolado or, se usa el e entorno de e programa ación propo orcionado por el fabricante miccrochip, esste e entorno es llamado MPLab IDE (Integrated ( ent Environ nment), en su Developme ú última vers sión 8.14, permite p dessarrollar el programa p e lenguaje en e de maquin na a assembler (ensambla ador), adem más incluye e una opció ón de desccarga gratuita a adicional de el compilad dor C18 que e desarrolla a el proceso o en un lenguaje de alto n nivel como C. 50 4 DISEÑ 4.2. ÑO DEL CIR RCUITO 4 4.2.1. MPLab IDE 8.14. El entorno de d desarro ollo proporrcionado por p m microchip, es muy se encillo e inttuitivo de usar, y tiene e una gran n cantidad de d f funciones completas mezcladass con una interfaz liimpia y orrdenada. Las c característi cas princip pales del IDE, son: • Posiibilidad de reemplazar r r los motore es de comp pilación. • Sopo orte para desarrollo de aplicaciones robusta as usando lenguajes de d alto nivel. • Simu ulador de fu uncionamie ento a nivel de registro os. F Figura 21. Ventana V de trabajo de MPLAB. F Fuente: Microchip techn nology incorp porated USA A 51 S debe crrear un pro Se oyecto, sele eccionando Project en n la barra de comando os, l luego se selecciona s la opción Project P Wizzard, con el e fin de seleccionar la c configuraci ón del proyyecto. A continua ación se muestra el e proceso o de crea ación de un proyeccto s seleccionan ndo específicamente el e kit de com mpilador C18. F Figura 22. ConFiguració C ón de proyeccto. F Fuente: Microchip techn nology incorp porated USA A 52 aparece una pantalla de bienvenida, que describe la función de la ultima ventana en aparecer, clic en Next, para luego encontrar la ventana de selección de dispositivo, en la que se elije el microcontrolador para realizar la tarea, luego, aparece la ventana de selección de compilador, en la que aparecen los kits disponibles, seleccionamos “Show all Installed Toolsuits”, en esta opción aparecerá en la lista desplegable “Microchip C18 Toolsuite”, clic en Next, aparece la ventana de localización de archivo de proyecto, en el que se le indica al programa el lugar en el que se guarda el archivo. Después de seleccionar el lugar del archivo, clic en Next y aparece la opción de agregar archivos existentes al proyecto, en esta ventana, se pueden agregar los segmentos de código, como no se poseen, se pasara por alto esta opción, para agregar más tarde los archivos de encabezado del programa. Por último, la última ventana de esta selección muestra un resumen de la configuración del proyecto, el dispositivo a usar y el Toolsuite con el que se pretende compilar el código. 53 4.2.2. Proteus 7.2. Proteus es un software informático utilizado para crear y simular circuitos electrónicos. Este programa está compuesto por tres módulos básicos: • I.S.I.S. (“Sistema inteligente de entrada esquemática"): ISIS el módulo se utiliza para capturar esquemáticos. Aquí usted puede sacar sus componentes y conexiones directamente en el área de trabajo. I.S.I.S. le permite elegir una gran cantidad de componentes con la información del fabricante de sus bibliotecas. Se hace automáticamente las conexiones entre dos puntos del circuito, y le da un "Netlist" de la tabla. V.S.M. (“Virtual Modeling System"): Esta utilidad está integrada en el programa principal. Permite simular el circuito y ver distintos gráficos, pantallas o instrumentos que nos dan información acerca de cómo es su circuito de trabajo. • ARES (“Advanced Routing modelado"): Este módulo es uno con el que usted puede hacer las placas de circuito impreso (PCB). Automáticamente las rutas de los PCB y le permite modificar de forma manual, lo que le da el aspecto final de la PCB. 54 Figura 23. Diagrama D esquemático realizado r en proteus ISIS S módulo lla ave. Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. 55 F Figura 24. Diseño D del circuito impre eso PCB en proteus p ARE ES módulo lllave. Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. F Figura 25. Visualización V n 3D de los componente c s en el circu uito impreso módulo llave. Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. 56 Figura 26. Diagrama F D esquemático realizado r en proteus ISIS S módulo ap pertura. Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. 57 F Figura 27. Diseño D del circuito impre eso PCB en proteus p ARE ES módulo apertura. a Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. F Figura 28. Visualizació ón 3D de lo os compone entes en el circuito impreso módu ulo a apertura. Fuente: Labcenter Ele ectronics. Diseño D prop pio MBR. 58 4 INSTA 4.3. ALACIÓN DEL DRIVER R EN WIND DOWS XP A conecta Al ar el dispo ositivo móvvil (llave), en un computador con sistem ma o operativo Windows W X XP, apareccerá una ventana v pa ara indicarr la falta del d c controlador r del dispossitivo. F Figura 29. Opción O de bú úsqueda del controladorr en internet.. Fuente: Mic crosoft Win ndows XP. En esta ven ntana es ne ecesario ind dicarle al sistema ope erativo que el driver esstá a almacenad o en el equ uipo local, y que no es e necesariio conectarrse a intern net p para busca arlo, en esta a ventana se s le indica al sistema operativo la l opción “N No p el mom por mento”, y lu uego se habilitara el botón b siguie ente en la parte inferiior d la ventana, luego de o de dar clic c en sigu uiente, la ventana v ca ambiara pa ara m mostrar el nombre de el dispositivvo conecta ado y dos opciones o para ubicar el c controlador r. 59 F Figura 30. Opción O de insstalación automática o manual m . Fuente: Mic crosoft Win ndows XP. En este caso, el nombre del dispositivo llavve, es Pic USB. Wind dows además d indicar el nombrre del disp de positivo co onectado, permite se eleccionar la i instalación automática del conttrolador, siempre y cuando c estte haya sid do i incluido en los paquettes incluidos por defeccto en el sisstema opera ativo. L otra opción es instalar el controlador desde una lista o ubicació La ón e especifica, para este caso en esspecial, se usa la seg gunda opciión, luego de d s seleccionar rla, se da clic en siguie ente y aparrecen las siiguientes opciones. 60 F Figura 31. Selección S de la ubicación n del controllador. Fuente: Mic crosoft Win ndows XP. L opciones proporccionadas en Las n esta venta ana permite en indicar la a ruta exaccta d la carpe de eta que co ontiene el archivo a del controlador, y tamb bién permite en e examinar el e equipo carpeta c por carpeta para p indica arle en qué é lugar estta, t también ofrrece la possibilidad de buscar en medios exttraíbles com mo disquetes y CDs, dad do que es la a forma má ás común para p distribuir los conttroladores de d a algunos dis spositivos, para este caso c se busca la carp peta conten nedora con el b botón exam minar, que muestra m otrra ventana: 61 F Figura 32. Localización L grafica de la a carpeta co ontenedora. Fuente: Mic crosoft Win ndows XP. En esta ve entana pod demos indiccar la ruta hacia la carpeta c con ntenedora de d f forma grafica, accedie endo a los directorioss en forma jerárquica,, después de d s seleccionar r el lugar de e origen de e la carpeta a, se da clicc en acepta ar, y luego en e s siguiente, después d de e este proceso se iniccia una cop pia de archivos del lug gar d origen a la carpeta de a de controladores de Windows. W F Figura 33. Proceso de d copiado de archivo os al directtorio raíz de d Windowss . Fuente: Mic crosoft Win ndows XP. 62 5 PRESEN 5. NTACIÓN Y ANÁLISIS S DE RESU ULTADOS El funciona amiento de el sistema de control de acceso se basa en que por p m medio de recursos de softw ware y ha ardware se e pueda realizar un na a autentificac ción para po oder acced der a un reccinto o depo osito, en el caso de esste p proyecto se e usará un deposito qu ue hace lass veces de caja fuerte. L Los compo onentes de el sistema a se puede en observa ar en las dos figuras s siguientes F Figura 34. Componente C s del sistem ma. Fuente: Dis seño propio o MBR. 1. Pesttillo eléctricco: Es un dispositivo usado u comú únmente en n los seguros para a las puerta as de los au utomóviles, su función n es bloque ear por med dio de un u motor bipolar la ap pertura de una puerta a, este se abre con un u volta aje de 12V DC y se cierra c con un u voltaje de d -12V DC C, la señal de d activ vación le lle ega por me edio de un driver que a su vez es e controlad do 63 por medio del integrado i T TF232 y el microcontrrolador 16F F628A. (todos los elementos e mencionad dos anteriorrmente haccen parte de el módulo de d aperrtura). 2. Circu uito princip pal del módulo de e apertura a: en este e circuito se encu uentran el microcontro olador, el in ntegrado y el driver anteriormen a nte men ncionado. 3. Puerrto USB he embra en el cual se conecta el e módulo llave para su postterior autenticación. 4. Puerrtos USB del d PC para leer los datos del módulo llave y enviiar seña al de contro ol al módulo o de apertura. 5. PC en e el cual se s encuentrra el módulo de softwa are, principal encargad do de controlar c el sistema. F Figura 35. Módulo M llave foto real y diseño d 3D. Fuente: Dis seño propio o MBR. 6. Mód dulo llave: En E el cual se s guarda la identidad d del usuario, para qu ue sea leída por el módulo de softwa are, y este accione el e módulo de d aperrtura 64 L pasos para obserrvar el resulltado del sisstema son los siguientes. Los 1. Conectar los pu uertos USB B de la caja fuerte a loss del PC. F Figura 36. Conexión C mó ódulo apertura a módulo o software. Fuente: Dis seño propio o MBR. 2. Inicia ar el módullo de softwa are. F Figura 37. Ventana V de in nicio de inte erfaz. Fuente: Dis seño propio o MBR. 65 3. Sele eccionar el puerto en el e que se encuentra e c conectado e módulo de el d aperrtura. F Figura 38. Selección S de puerto. Fuente: Dis seño propio o MBR. 4. Intro oducir el mó ódulo llave en el puerto USB hem mbra de la caja c fuerte. F Figura 39. Conexión C mó ódulo llave a módulo ape ertura. Fuente: Dis seño propio o MBR. 66 5. Espe erar a que e el módu ulo de softtware reco onozca el dispositivo y veriffique el usu uario (aproxximadamente 6 segund dos). F Figura 40. Reconocimie R ento de usua ario. Fuente: Dis seño propio o MBR. 67 6. Una vez el programa envié e la se eñal de acctivación al módulo de d aperrtura, el pe estillo eléctrrico libera el e seguro e la puerta,, permitiend do abrirrla. F Figura 41. Sistema S abie erto. Fuente: Dis seño propio o MBR. 7. Una vez manip pulado el co ontenido de e la caja fue erte se proccede a cerrrar la puerta y rettirar el módulo llave para que el módulo de softwa are evo la puerta y condu uzca el sisttema hasta a el modo de d bloquee de nue era. espe F Figura 42. Sistema S cerra ado y en mo odo de espera. Fuente: Dis seño propio o MBR. 68 6. CONCLUSIONES El diseño de un sistema de acceso controlado vía USB se cumple a cabalidad dado que se comprobó que el prototipo y sus componentes han realizado las funciones debidas para la consecución de la seguridad necesaria para el proyecto. Para este sistema se diseñó un software y dos tipos de hardware para poder generar los módulos de acuerdo a la necesidad del proyecto basado en los sistemas preexistentes. El dispositivo puede reconocer el tipo de usuario y sus permisos para acceder o no a cada recinto de acuerdo a la base de datos desarrollado en el módulo software, lo que evita tener que tener un dispositivo llave por cada puerta a la que se desee acceder. Para poder concluir el proyecto se presentaron varios inconvenientes como la selección del microcontrolador, el desarrollo de los elementos físicos, y la interconexión hardware-software, sin embargo, por medio del método de prueba y error se pudo llegar a conseguir los elementos y sistemas óptimos para el completo funcionamiento del proyecto. Mediante el uso del protocolo USB y el desarrollo de esta aplicación, se puede observar que USB está relacionado en gran medida al almacenamiento masivo de datos, también se pueden notar las aplicaciones como dispositivos HID, y en general usos que faciliten la interacción entre el Computador personal y proyectos electrónicos que puedan requerir la transferencia de datos usando este protocolo en vez de usar los protocolos antiguos como serial o paralelo. 69 7. RECOMENDACIONES Dado que el sistema consta de varios módulos, es fundamental aprender a configurar todos los detalles que hacen funcionar correctamente el sistema, para lograr esto, es necesario revisar los siguientes parámetros: • El proyecto fue diseñado en base a la plataforma Windows, que ofrece en la mayoría de los casos compatibilidad con versiones antiguas y versiones futuras, lo que ofrece una fácil migración del programa cuando se presente un cambio en el sistema operativo, sin embargo, es recomendado tener un computador con sistema operativo Windows XP, preferiblemente con Service Pack 2, que ofrece incrementos en la estabilidad global del sistema. • El módulo software fue diseñado enteramente en Borland C++ Builder, pero eso no implica que sea necesario tenerlo instalado, dado que el programa compila una versión Stand Alone del módulo. • La primera vez que se conectan los módulos Llave y Apertura, el sistema operativo genera un cuadro de dialogo que informa al usuario que los controladores o drivers necesarios para el correcto funcionamiento de dichos módulos no se encuentran, el sistema operativo informa de este problema ya que los drivers no son incluidos o no vienen en la lista de controladores por defecto incluidos en la instalación del sistema operativo, en este caso el usuario debe suministrar el archivo de controlador para cada uno de los dispositivos, siendo estos, para el Módulo Apertura el controlador del integrado FT232 y el controlador del puerto COM USB. Para el caso del Módulo 70 llave, es necesario proveer al sistema operativo con el controlador correspondiente al microcontrolador PIC 18F4550. • Cabe mencionar que la Comunicación entre los módulos es fundamental para el funcionamiento del sistema, es por eso que se recomienda que antes de conectar los dispositivos para su uso, se ejecute el programa principal, de esta forma el sistema reconocerá los módulos y funcionara correctamente. 71 BIBLIOGRAFÍA DIERKS, ALLEN C. The TLS Protocol Version 1.0, Request For Comments 2246, Enero 1999. FREIER Alan, KOCHER. The SSL Protocol Version 3.0, Internet Draft, 1996. GÓMEZ A., GARCÍA J. y otros. Experiencia piloto de certificación en la Universidad de Murcia. Noviembre 1998. GÓMEZ A., GARCÍA J. y otros. Providing Security to University Environment Communications. Junio 1999 MICROSOFT Corp. Winlogon User Interface. Microsoft Network Developer Library. PC/SC Workgroup, Interoperability Specification for ICCs and Personal Computer System, Diciembre 1997. WAHL M. HOWES T. KILLE S. Lightweight Directory Access Protocol (v 3), Request for Comments 2251, 1997. Ward. M, (2006, Abril). ! Cuidado con la memoria USB! 72 WEBLIOGRAFÍA http://www.criptored.upm.es/guiateoria/gt_m142b1.htm [13 de Septiembre de 2007 16:45] http://www.avatarharden.com/controldeacceso [19 de Septiembre de 2007 18:40] http://www.biztechmagazine.com/article.asp?item_id=76 [19 de Septiembre de 2007 20:15] http://www.apple.com/pr/library/2007/04/09ipod.html [4 de Marzo de 2008 15:45] http://www.everythingusb.com/revolution.html [15 de Marzo de 2008 11:03] http://news.bbc.co.uk/hi/spanish/science/newsid_4951000/4951 [14 de Agosto de 2008 16:20] http://www.darkreading.com/document.asp?doc_id=95556 [9 de Octubre de 2008 09:26] http://www.zator.com/Hardware/H6_4.htm [11 de Octubre de 2008 19:42] http://www.zator.com/Hardware/H2_5_3.htm [19 de Octubre de 2008 19:35] http://www.slideshare.net/manlopez/aspectos-formales-de-la-presentacinoral-y-escrita-de-trabajos [5 de Noviembre de 2008 11:52] http://host.nigde.edu.tr/muzam/PIC16F648A.pdf [16 de Marzo de 2009 11:28] http://www.create.ucsb.edu/~dano/CUI/PIC18F4550datasheet.pdf [16 de Abril de 2009 11:55] http://www.ftdichip.com/Documents/DataSheets/ds232b18.pdf [16 de Abril de 2009 14:36] http://www.datasheetcatalog.com/datasheets_pdf/L/2/9/8/L298.shtml [18 de Abril de 2009 19:25] 73 GLOSARIO AUTENTICACIÓN: en la seguridad electrónica, la autenticación es el proceso de intento de verificar la identidad digital de un usuario. Es un modo de asegurar que los usuarios son quién ellos dicen que ellos son y que la persona que intenta realizar funciones en un sistema es de hecho la que tiene la autorización para hacerlo así. AUTORIZACIÓN: proceso por el cual un sistema electrónico o una red de computadores autoriza al usuario identificado a acceder a determinados recursos o lugares. CERTIFICADO DIGITAL: un documento digital mediante el cual un tercero confiable (una autoridad de certificación) garantiza la vinculación entre la identidad de un sujeto o entidad y su clave. CONFIDENCIALIDAD: es la propiedad de un documento, dato, contraseña o mensaje que únicamente está autorizado para ser leído o entendido por algunas personas o entidades. Se dice que un dato es confidencial si éste sólo está autorizado a ser leído o entendido por un destinatario designado. CONTROL DE ACCESO: el control que se ejerce del ingreso de las personas a un recinto o a toda una edificación. DEVICE: dispositivo periférico que se conecta al host para recibir y transmitir datos hacia el host. DRIVER: un controlador de dispositivo, llamado normalmente controlador (en inglés, driver) es un programa informático que permite al sistema operativo interactuar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz -posiblemente estandarizada- para usarlo. Se puede esquematizar como un manual de instrucciones que le indica cómo debe controlar y comunicarse con un dispositivo en particular. Por tanto, es una pieza esencial, sin la cual no se podría usar el hardware. 74 FIRMWARE: es un bloque de instrucciones de programa para propósitos específicos, grabado en una memoria de tipo no volátil (ROM, EEPROM, flash,...), que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Al estar integrado en la electrónica del dispositivo es en parte hardware, pero también es software, ya que proporciona lógica y se dispone en algún tipo de lenguaje de programación. Funcionalmente, el firmware es el intermediario (interfaz) entre las órdenes externas que recibe el dispositivo y su electrónica, ya que es el encargado de controlar a ésta última para ejecutar correctamente dichas órdenes externas. HARDWARE: corresponde a todas las partes físicas y tangibles de una computadora, o a componentes eléctricos, electrónicos, electromecánicos y mecánicos; cables, gabinetes o cajas, periféricos de todo tipo y cualquier otro elemento físico involucrado; contrariamente al soporte lógico e intangible que es llamado software. HOST: dispositivo central capaz de controlar la transmisión y conexión de todos los dispositivos USB conectados. Microcontrolador: es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: CPU, Memoria y Unidades de entrada y salida. PESTILLO ELÉCTRICO: es un dispositivo que permite mediante voltaje bipolar controlar un motor que a su vez mueve un seguro permitiendo abrir una puerta, comúnmente se usa en automóviles y en cajas de seguridad. PROTOCOLO: es el conjunto de reglas que especifican el intercambio de datos u órdenes durante la comunicación entre las entidades que forman parte de un sistema electrónico. SOFTWARE: se refiere al equipamiento lógico o soporte lógico de un computador digital, y comprende el conjunto de los componentes lógicos necesarios para hacer posible la realización de una tarea específica, en 75 contraposición a los componentes físicos del sistema (hardware). Tales componentes lógicos incluyen, entre otros, aplicaciones informáticas tales como procesador de textos, que permite al usuario realizar todas las tareas concernientes a edición de textos; software de sistema, tal como un sistema operativo, el que, básicamente, permite al resto de los programas funcionar adecuadamente, facilitando la interacción con los componentes físicos y el resto de las aplicaciones, también provee una interfaz ante el usuario. STAND ALONE: independiente. Separado de un conjunto. Autónomo. Caracteriza a un terminal o un puesto de trabajo que está conectado directamente al ordenador o a un concentrador; es decir, que tiene una sola conexión a través de una línea externa. (Stand-alone). STAND BY: se denomina Stand-by al consumo en espera de diferentes aparatos electrónicos, tales como televisión, reproductores de audio o vídeo, aire acondicionado, algunos modelos de frigoríficos, algunas vitrocerámicas, alimentadores/cargadores, PC, etc. En Stand by, el aparato se encuentra conectado, a la espera de recibir órdenes, por lo que consume energía eléctrica. Se calcula que casi un 15% del consumo de una vivienda se produce por aparatos electrónicos conectados en Stand by. Se recomienda que para ahorrar energía, averías, dinero y evitar contaminación se desconecten los aparatos electrónicos de manera que cuando no se vayan a utilizar queden totalmente desconectados de la red eléctrica. USB: Universal Serial Bus. 76 ANEXOS 77 ANEXO A CÓDIGO FUENTE DEL MICROCONTROLADOR PIC18F4550 MÓDULO LLAVE #include <18F4550.h> #fuses HSPLL, NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGE N #use delay(clock=48000000) #define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers #define USB_EP1_TX_SIZE 1 #define USB_EP1_RX_SIZE 3 // 100k // VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC) // | // +----/\/\/\/\/\-----GND // 100k // (where VBUS is pin1 of the USB connector) // ///////////////////////////////////////////////////////////////////////////// //#define USB_CON_SENSE_PIN PIN_B2 // sense pin #include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver #include <PicUSB.h> //ConFiguración del USB y los descriptores para este dispositivo #include <usb.c> //handles usb setup tokens and get descriptor reports ///////////////////////////////////////////////////////////////////////////// // // Al conectar el PicUSB al PC encendemos el Led Rojo hasta que el dispositivo // Halla sido conFigurado por el PC, en ese momento encenderemos el Led Verde. // Esperaremos hasta que se reciba un paquete proveniente del PC. Comprobaremos 78 // El primer byte del paquete recibido para comprobar si queremos entrar en el // modo Suma, donde se realizará una suma de dos operandos, que corresponderán // con los dos bytes restantes del paquete recibido; una vez realizada la suma // enviaremos el paquete con el resultado de vuelta al PC. Si entramos en el // modo Led comprobaremos el segundo byte del paquete recibido para comprobar // si deberemos apagar los leds, encender el verde o el rojo. // ///////////////////////////////////////////////////////////////////////////// #define LEDV PIN_E0 #define LEDA PIN_E1 #define LEDR PIN_E2 #define LED_ON output_high #define LED_OFF output_low #define modo recibe[0] #define param1 recibe[1] #define param2 recibe[2] #define resultado envia[0] void main(void) { int8 recibe[3]; int8 envia[1]; //declaramos variables LED_OFF(LEDV); LED_OFF(LEDA); //encendemos led rojo LED_ON(LEDR); usb_init(); //inicializamos el USB usb_task(); //habilita periferico usb e interrupciones usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea conFigurado por el host LED_OFF(LEDR); LED_OFF(LEDA); LED_ON(LEDV); //encendemos led verde while (TRUE) { 79 if(usb_enumerated()) //si el PicUSB está conFigurado { // usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host { usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe if (modo == 0) // Modo_Suma { resultado = param1 + param2; //hacemos la suma usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC } if (modo == 1) // Modo_Led { if (param1 == 0) {LED_OFF(LEDV); LED_OFF(LEDA);} //apagamos los leds if (param1 == 1) {LED_ON(LEDV); LED_OFF(LEDA);} //encendemos led verde if (param1 == 2) {LED_OFF(LEDV); LED_OFF(LEDA);} //encendemos led rojo if (param1 == 3) {LED_OFF(LEDV); LED_ON(LEDA);} } } } } } 80 LED_OFF(LEDR); LED_OFF(LEDR); LED_ON(LEDR); LED_OFF(LEDR); ANEXO B CÓDIGO FUENTE DEL MICROCONTROLADOR PIC16F628A MÓDULO MOTOR * 0000: 0001: 0002: 0003: 0004: 0005: 0006: 0007: 0008: 0009: 000A: 000B: 000C: 000D: 000E: 000F: 0010: 0011: 0012: 0013: 0014: 0015: 0016: 0017: 0018: 0019: 001A: 001B: 001C: 001D: 001E: 001F: 0020: 0021: 0022: 0023: 0024: 0025: MOVLW 00 MOVWF 0A GOTO 12A NOP MOVWF 7F SWAPF 03,W CLRF 03 MOVWF 21 MOVF 7F,W MOVWF 20 MOVF 0A,W MOVWF 28 CLRF 0A SWAPF 20,F MOVF 04,W MOVWF 22 MOVF 77,W MOVWF 23 MOVF 78,W MOVWF 24 MOVF 79,W MOVWF 25 MOVF 7A,W MOVWF 26 MOVF 7B,W MOVWF 27 BCF 03.7 BCF 03.5 MOVLW 8C MOVWF 04 BTFSS 00.5 GOTO 022 BTFSC 0C.5 GOTO 09B MOVF 22,W MOVWF 04 MOVF 23,W MOVWF 77 81 0026: MOVF 24,W 0027: MOVWF 78 0028: MOVF 25,W 0029: MOVWF 79 002A: MOVF 26,W 002B: MOVWF 7A 002C: MOVF 27,W 002D: MOVWF 7B 002E: MOVF 28,W 002F: MOVWF 0A 0030: SWAPF 21,W 0031: MOVWF 03 0032: SWAPF 7F,F 0033: SWAPF 7F,W 0034: RETFIE .................... #include <16F628A.h> .................... #device PIC16F628A .................... #list .................... .................... .................... #FUSES NOWDT .................... #FUSES INTRC .................... #FUSES NOPUT .................... #FUSES NOPROTECT .................... #FUSES NOBROWNOUT .................... #FUSES MCLR .................... #FUSES NOLVP .................... #FUSES NOCPD .................... .................... #use delay(clock=4000000) 0086: MOVLW 2E 0087: MOVWF 04 0088: BCF 03.7 0089: MOVF 00,W 008A: BTFSC 03.2 008B: GOTO 09A 008C: MOVLW 01 008D: MOVWF 78 008E: CLRF 77 008F: DECFSZ 77,F 0090: GOTO 08F 0091: DECFSZ 78,F 0092: GOTO 08E 0093: MOVLW 4A 82 0094: MOVWF 77 0095: DECFSZ 77,F 0096: GOTO 095 0097: GOTO 098 0098: DECFSZ 00,F 0099: GOTO 08C 009A: RETLW 00 .................... rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) .................... //#USE STANDARD_IO (B) .................... .................... #define RIGHT PIN_B5 .................... #define LEFT PIN_B4 .................... #define ENABLE PIN_B3 .................... #define SENSOR PIN_B0 .................... .................... int1 openFlag, closeFlag; .................... int dRead; .................... .................... //******************************************************* .................... //******************************************************* .................... .................... #int_rda .................... void RxInt(void) .................... { .................... disable_interrupts(int_rda); 009B: BSF 03.5 009C: BCF 0C.5 .................... dRead = getc(); 009D: BCF 03.5 009E: BTFSS 0C.5 009F: GOTO 09E 00A0: MOVF 1A,W 00A1: MOVWF 2B .................... delay_ms(100); 00A2: MOVLW 64 00A3: MOVWF 2E 00A4: CALL 086 .................... if(dRead == '1') 00A5: MOVF 2B,W 00A6: SUBLW 31 00A7: BTFSS 03.2 00A8: GOTO 0B0 .................... { 83 #use .................... openFlag = true; 00A9: BSF 2A.0 .................... closeFlag = false; 00AA: BCF 2A.1 .................... printf("1"); 00AB: MOVLW 31 00AC: BTFSS 0C.4 00AD: GOTO 0AC 00AE: MOVWF 19 .................... }// .................... else if(dRead == '2') 00AF: GOTO 0C6 00B0: MOVF 2B,W 00B1: SUBLW 32 00B2: BTFSS 03.2 00B3: GOTO 0BB .................... { .................... openFlag = false; 00B4: BCF 2A.0 .................... closeFlag = true; 00B5: BSF 2A.1 .................... printf("2"); 00B6: MOVLW 32 00B7: BTFSS 0C.4 00B8: GOTO 0B7 00B9: MOVWF 19 .................... }// .................... else 00BA: GOTO 0C6 .................... { .................... openFlag = false; 00BB: BCF 2A.0 .................... closeFlag = false; 00BC: BCF 2A.1 .................... putc(dRead); 00BD: MOVF 2B,W 00BE: BTFSS 0C.4 00BF: GOTO 0BE 00C0: MOVWF 19 .................... output_toggle(PIN_A1); 00C1: BSF 03.5 00C2: BCF 05.1 00C3: MOVLW 02 00C4: BCF 03.5 84 00C5: XORWF 05,F .................... }// .................... enable_interrupts(int_rda); 00C6: BSF 03.5 00C7: BSF 0C.5 .................... }// .................... 00C8: BCF 03.5 00C9: BCF 0C.5 00CA: BCF 0A.3 00CB: GOTO 022 .................... void openMotor(void) .................... { .................... .................... output_high(LEFT); * 00EC: BSF 03.5 00ED: BCF 06.4 00EE: BCF 03.5 00EF: BSF 06.4 .................... output_low(RIGHT); 00F0: BSF 03.5 00F1: BCF 06.5 00F2: BCF 03.5 00F3: BCF 06.5 .................... output_high(ENABLE); 00F4: BSF 03.5 00F5: BCF 06.3 00F6: BCF 03.5 00F7: BSF 06.3 .................... delay_ms(500); 00F8: MOVLW 02 00F9: MOVWF 2C 00FA: CLRF 29 00FB: BTFSC 0B.7 00FC: BSF 29.7 00FD: BCF 0B.7 00FE: MOVLW FA 00FF: MOVWF 2E 0100: CALL 086 0101: BTFSC 29.7 0102: BSF 0B.7 0103: DECFSZ 2C,F 0104: GOTO 0FA 85 .................... output_low(ENABLE); 0105: BSF 03.5 0106: BCF 06.3 0107: BCF 03.5 0108: BCF 06.3 .................... .................... openFlag = false; 0109: BCF 2A.0 .................... .................... }// 010A: GOTO 158 (RETURN) .................... .................... void closeMotor(void) .................... { .................... .................... output_high(RIGHT); 010B: BSF 03.5 010C: BCF 06.5 010D: BCF 03.5 010E: BSF 06.5 .................... output_low(LEFT); 010F: BSF 03.5 0110: BCF 06.4 0111: BCF 03.5 0112: BCF 06.4 .................... output_high(ENABLE); 0113: BSF 03.5 0114: BCF 06.3 0115: BCF 03.5 0116: BSF 06.3 .................... delay_ms(500); 0117: MOVLW 02 0118: MOVWF 2C 0119: CLRF 29 011A: BTFSC 0B.7 011B: BSF 29.7 011C: BCF 0B.7 011D: MOVLW FA 011E: MOVWF 2E 011F: CALL 086 0120: BTFSC 29.7 0121: BSF 0B.7 0122: DECFSZ 2C,F 0123: GOTO 119 86 .................... output_low(ENABLE); 0124: BSF 03.5 0125: BCF 06.3 0126: BCF 03.5 0127: BCF 06.3 .................... .................... closeFlag = false; 0128: BCF 2A.1 .................... .................... }// 0129: GOTO 169 (RETURN) .................... .................... void pic_config(void) .................... { .................... .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); * 012A: CLRF 04 012B: BCF 03.7 012C: MOVLW 1F 012D: ANDWF 03,F 012E: BSF 03.5 012F: BSF 0E.3 0130: MOVLW 19 0131: MOVWF 19 0132: MOVLW A6 0133: MOVWF 18 0134: MOVLW 90 0135: BCF 03.5 0136: MOVWF 18 0137: MOVLW 07 0138: MOVWF 1F .................... .................... pic_config(); 0139: GOTO 0CC .................... openFlag = false; 013A: BCF 2A.0 .................... closeFlag = false; 013B: BCF 2A.1 .................... .................... output_low(PIN_B3); 013C: BSF 03.5 013D: BCF 06.3 013E: BCF 03.5 87 013F: BCF 06.3 .................... output_low(PIN_B4); 0140: BSF 03.5 0141: BCF 06.4 0142: BCF 03.5 0143: BCF 06.4 .................... output_low(PIN_B5); 0144: BSF 03.5 0145: BCF 06.5 0146: BCF 03.5 0147: BCF 06.5 .................... printf("inicializado"); 0148: CLRF 2C 0149: MOVF 2C,W 014A: CALL 035 014B: INCF 2C,F 014C: MOVWF 77 014D: MOVF 77,W 014E: BTFSS 0C.4 014F: GOTO 14E 0150: MOVWF 19 0151: MOVLW 0C 0152: SUBWF 2C,W 0153: BTFSS 03.2 0154: GOTO 149 .................... .................... for(;;) .................... { .................... if(openFLag) 0155: BTFSS 2A.0 0156: GOTO 166 .................... { .................... .................... openMotor(); 0157: GOTO 0EC .................... printf("girando hacia la izquierda\n\r"); 0158: CLRF 2C 0159: MOVF 2C,W 015A: CALL 046 015B: INCF 2C,F 015C: MOVWF 77 015D: MOVF 77,W 015E: BTFSS 0C.4 015F: GOTO 15E 88 0160: MOVWF 19 0161: MOVLW 1C 0162: SUBWF 2C,W 0163: BTFSS 03.2 0164: GOTO 159 .................... .................... } .................... else if(closeFlag) 0165: GOTO 177 0166: BTFSS 2A.1 0167: GOTO 177 .................... { .................... .................... closeMotor(); 0168: GOTO 10B .................... printf("girando hacia la derecha\n\r"); 0169: CLRF 2C 016A: MOVF 2C,W 016B: CALL 067 016C: INCF 2C,F 016D: MOVWF 77 016E: MOVF 77,W 016F: BTFSS 0C.4 0170: GOTO 16F 0171: MOVWF 19 0172: MOVLW 1A 0173: SUBWF 2C,W 0174: BTFSS 03.2 0175: GOTO 16A .................... .................... } .................... else 0176: GOTO 177 .................... { .................... .................... } .................... .................... /*output_toggle(PIN_B3); .................... delay_ms(1000);*/ .................... .................... } 0177: GOTO 155 .................... 89 ANEXO C CÓDIGO FUENTE PROGRAMA MÓDULO SOFTWARE //--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "stdio.h" #include "stdlib.h" #include "COMM.h" #include "Unit2.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; String vid_pid_norm = "vid_04d8&pid_0011"; String out_pipe = "\\MCHP_EP1"; String in_pipe = "\\MCHP_EP1"; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { libdinam = LoadLibrary("mpusbapi.dll");//LoadLibrary("NumToTxt.dll"); if (libdinam == NULL){ ShowMessage("error de carga dll"); } else { usbclose = (MPUSBClose)GetProcAddress(libdinam,"_MPUSBClose"); usbreadint = (MPUSBReadInt)GetProcAddress(libdinam,"_MPUSBReadInt"); usbwrite = (MPUSBWrite)GetProcAddress(libdinam,"_MPUSBWrite"); usbread = (MPUSBRead)GetProcAddress(libdinam,"_MPUSBRead"); usbopen = (MPUSBOpen)GetProcAddress(libdinam,"_MPUSBOpen"); usbgetdevice = (MPUSBGetDeviceCount)GetProcAddress(libdinam,"_MPUSBGetDeviceCou nt"); usbversion = (MPUSBGetDLLVersion)GetProcAddress(libdinam,"_MPUSBGetDLLVersion" ); if (usbclose == NULL){ShowMessage("error al cargar la funcion usbclose");} 90 if (usbreadint == NULL){ShowMessage("error al cargar la funcion usbreadint");} if (usbwrite == NULL){ShowMessage("error al cargar la función usbwrite");} if (usbread == NULL){ShowMessage("error al cargar la funcion usbread");} if (usbopen == NULL){ShowMessage("error al cargar la funcion usbopen");} if (usbgetdevice == NULL){ShowMessage("error al cargar la funcion usbgetdevice");} if (usbversion == NULL){ShowMessage("error al cargar la funcion usbversion");} } } //-----------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { sumapic(Edit1->Text.ToInt(),Edit2->Text.ToInt()); Edit3->Text = (String)resultadopic(); Memo1->Lines->LoadFromFile("USERS.TXT"); //int id; bool encontrado=false; for(int i=0;i<Memo1->Lines->Count;i++) { if (Edit3->Text.ToInt() == Memo1->Lines->Strings[i].SubString(1,2)) //if resultadopic() == id de usuario registrada en Archivo.txt { Label6->Caption = "OK:::OK:::OK"; //muestra confirmación Label7->Caption = Memo1->Lines->Strings[i].SubString(4,40); //muestra el nombre del usuario que introdujo la llave. if(motorFuera == true) { encontrado = true; } else { motorFuera = true; motorDentro = false; encontrado = true; motorPort.OpenCommPort(); motorPort.WriteString("1"); motorPort.CloseCommPort(); 91 } } } if (encontrado==false) { Label6->Caption = "No Registrado"; Label7->Caption = "--"; if(motorDentro == true) { } else { motorDentro = true; motorFuera = false; motorPort.OpenCommPort(); motorPort.WriteString("2"); motorPort.CloseCommPort(); } } encontrado = false; } //-----------------------------------------------------------------------------void openpipes(){ DWORD selection = 0; myOutPipe = usbopen(selection, vid_pid_norm, out_pipe, 0, 0); myInPipe = usbopen(selection, vid_pid_norm, in_pipe, 1, 0); } //-----------------------------------------------------------------------------void closepipes(){ usbclose(myOutPipe); usbclose(myInPipe); } //-----------------------------------------------------------------------------void sendpacket(byte* SendData, DWORD SendLength){ int SendDelay = 1000; DWORD SentDataLength; openpipes(); usbwrite(myOutPipe, SendDelay); (void*)SendData, 92 SendLength, &SentDataLength, closepipes(); } //-----------------------------------------------------------------------------void recivepacket(byte* ReceiveData, DWORD *ReceiveLength){ int ReceiveDelay=1000; DWORD ExpectedReceiveLength = *ReceiveLength; openpipes(); usbread(myInPipe, (void*)ReceiveData, ExpectedReceiveLength, ReceiveLength, ReceiveDelay); closepipes(); } //-----------------------------------------------------------------------------void sumapic(int sumando1, int sumando2){ byte* send_buf = new byte[3]; send_buf[0] = 0x00; // Código de Entrada a Modo_Suma send_buf[1] = (byte)sumando1; send_buf[2] = (byte)sumando2; sendpacket(send_buf, 3); } //-----------------------------------------------------------------------------int resultadopic(){ int result = 0; byte* receive_buf = new byte[1]; DWORD RecvLength = 1; recivepacket(receive_buf, &RecvLength); result = receive_buf[0]; return result; } //-----------------------------------------------------------------------------void ledpic(byte led){ byte* send_buf = new byte[2]; send_buf[0] = 0x01; // Código de Entrada a Modo_Led send_buf[1] = (byte)led; sendpacket(send_buf, 2); } //-----------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) 93 { ledpic(0x00); //led off } //--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender) { ledpic (0x02); // led rojo } //--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender) { ledpic (0x01); //led verde } //--------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender) { ledpic(0x03); //led off } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { /* MODE r Open for reading only. w Create for writing. If a file by that name already exists, it will be overwritten. a Append; open for writing at end-of-file or create for writing if the file does not exist. r+ Open an existing file for update (reading and writing). w+ Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten. a+ Open for append; open (or create if the file does not exist) for update at the end of the file. */ FILE *stream; stream = fopen("USERS.TXT", "a+"); fprintf(stream, "\n"); fprintf(stream, Edit6->Text.c_str()); fprintf(stream, " "); fprintf(stream, Edit5->Text.c_str()); fprintf(stream, " "); fprintf(stream, Edit4->Text.c_str()); 94 fclose(stream); } void __fastcall TForm1::Button7Click(TObject *Sender) { // if(start==1)return; int Ports = motorPort.FindAvPorts(); Form2->ComboBox1->Clear(); Form2->ComboBox1->Text = "Seleccione Puerto"; for (int i=0 ; i<Ports ;i++) { Form2->ComboBox1->Items->Add( motorPort.m_vPorts[i].data() ); } Form2->Visible=true; Form2->Show(); } //--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender) { Button1->Click(); } //--------------------------------------------------------------------------- 95