domingo, 28 de julio de 2013

Modulo biometrico GT-511C1

Este módulo biometrico es fascinante ya que ademas de ser rápido, permite la descarga de la huella dactilar de un módulo y subirla a otro del mismo tipo, lo que da pie al desarrollo de soluciones biométricas avanzadas personalizadas.
Es fabricado por la empresa taiwanesa ADH Technology Co.Ltd. El único problema es que el que yó compré tiene unos bugs en el firmware que no permiten descargar el template de la huella por ttlserial, ni mucho menos cargarla, ya les envié un email para que liberen la actualización que permita corregir esta falla; el modulo GT-511C3 no posee este inconveniente.

Anteriormente había trabajado con un módulo Nitgen publicado en esta entrada http://fernandezajp.blogspot.com/2013/02/sensor-biometrico.html, los módulos biométrico poseen mas o menos las mismas funciones, solo hay que revisar el manual tecnico y empresar a escribir codigo fuente como un loco para hacer que funcione bien, aún no he encontrado una implementación para Arduino y creo que la razón principal es que el atmega328 no tiene la capacidad de memoria para usar todo el potencial de este módulo biométrico; aun cuando se podría escribir una libreria que haga lo basico no se podria hacer una que por ejemplo que almacene temporalmente templates ni las imagenes RAW por lo de la memoria, a menos que se use un chip de memoria adicional; habria que probar esta idea.


En el repo de Github les dejo los drivers para conectividad de este modulo para Windows, MacOSX, RaspberryPi y Arduino, (el de Arduino tiene esta en beta aun no funciona bien).


https://github.com/fernandezajp/GT511C1_Drivers

Para poder usarlo de una manera mas comoda le hice un adaptador para un modulo fdti 3.3v básico

35 comentarios:

  1. hola que tal,justo acabo de comprar el lector de huella, pero ahora ando batallando con el conector jst-sh, pero veo que atras tiene unos pines libres como para soldarlos sabes si realmente son para eso? y pues creo me falto buscarle tantito mas, justo lo adquiri para un proyecto con arduino, me deje llevar con que la comunicacion era por TTL y pues segun yo teoricamente debia de funcionar con el arduino leonardo, pero bueno espero primero hecharlo a andar y luego ya vere lo de programacion, si tienes mas info espero puedas compartirla saludos

    ResponderEliminar
  2. Si efectivamente es TTL lo puedes conectar a Arduino sin ningún problema solo debes hacer la librería, no me he dedicado a escribirla aun ando en otras cosas ahora, los pines que estan atrás son para conectarle uno como este http://binken.en.made-in-china.com/product/TMpmjHgdhCRr/China-USB-Connector-UFR1-04-.html

    ResponderEliminar
    Respuestas
    1. ups perdon el link que te mandé es de un USB hembra, realmente hay que conectar uno macho porque el socket corresponde a un usb cliente.

      Eliminar
  3. a pero entoncs puede soldarse cables para conectar directo a arduino? esque deplano no encuentro el conector jst-sh y pues si son "las mismas salidas" pues soldarle los cables para hacer la conexion a arduino, porcierto apens voy empezando en esto solo que quiero tener todo lo necesario almenos para hacerlo funcionar y ya poder meterme de lleno a lo que es programación, y gracias por responder como quiera no muchos lo hacen, saludos

    ResponderEliminar
    Respuestas
    1. El cable lo puedes conseguir en esta direccion https://www.sparkfun.com/products/10359 y lo puedes conectar directamente al arduino

      Eliminar
  4. buenas madrugadas xd.. hermano quiero utilizar ese lector en mi proyecto con un arduino uno r3.. el papel que desempeñara sera leer la huella dactilar y compararla en el arduino y si coincide ejecutara una acción, de lo contrario no hace nada.. lei que tiene problemas al descargar el template de la huella por ttl-serial.. si me pudieras explicar de forma sencilla a que te refieres por descargar el template te lo agradeceria mucho.. y bueno crees que se podra trabajar ese lector con el arduino de la forma en que mencione?... si tienes alguna pagina para guiarme tambien lo agradeceria..

    ResponderEliminar
  5. Hola, En general todos los lectores de huellas son cajas negras es decir uno solo debe preocuparse por enviarle comandos y ellos se encargan de leer, comparar, agregar, eliminar, autenticar, verificar las huellas, el uso de templates es para otras cosas, no precisamente para que el Arduino analice las huellas, el atmega328 es un micro muy muy básico para hacer este tipo de cálculos, se necesitaría de un procesador de 32 bits a mas de 100Mhz o en su defecto un FPGA; el lector GT511 en particular utiliza el algoritmo SmackFinger si piensas implementarlo te recomiendo otro tipo de arquitectura. En Conclusion el GT511 es el sensor perfecto para hacer proyectos biometricos estándar.

    ResponderEliminar
  6. buenas tardes alvaro, despues de buscar alfin encontre el conector jst-sh en la pag www.robodacta.mx solo espero a que llegue, bueno oye tengo dudas en cuanto a lo que me decias de la libreria, soy principiante de hecho apenas hare la primera conexion de arduino, y no tngo idea de como hacer funcionar aun el GT511-C3, si tienes algo dnd pueda apoyarme o me pudieras ayudar te lo agradeceria bastante, saludos

    ResponderEliminar
    Respuestas
    1. Te recomiendo que lo pruebes primero con el PC y luego luego con el Arduino

      Eliminar
    2. si, fue lo que pense, pero el problema es que no tngo el interfaz para conectar el lector a la compu :/ solo tngo el arduino leonardo, el cable para el lector, el lector y ya :$

      Eliminar
  7. Hola Álvaro, lo primero felicitarte por el blog.

    Ya hay uno más que esta trasteando con el GT-511C1, yo lo compre en SparkFun y el software que suministran que supuestamente es para el C1 me da error de conexión “USB connect fail!” ¿Sabes porque puede ser? he probado con conversor y directo pero nada… El software que dan para el C3 tampoco me funciona.

    ¿Intentaste de comunicar el modulo por hiperterminal? Yo estoy intentándolo pero no hay manera, uso un conversor TTL-USB2.0 pero nada, he probado todo (9600-8-N-1, 115200-8-N-1 …). Mi idea es después de tener claros los comandos comunicarlo con un Pic.

    También me he descargado tu programa para por lo menos comprobar que funcionaba correctamente y no estaba tirando el tiempo, pero no veo ningún ejecutable, no se si será porque no tengo el visualC++ instalado…

    A ver si por tu experiencia puedes aclararme alguna cuestión, gracias!!

    ResponderEliminar
    Respuestas
    1. El software para C3 no funciona para C1 debido a que la respuesta que da el modulo al hacer la conección es distinta a la esperada, por eso no continua con la ejecucion del programa y aborta. Por otra parte el Software para C1 solo funciona con USB es decir hay que soldarle un cable el modulo para luego enchufarlo directamente al PC ( da lastima hacer eso ), no se que les paso a los que hicieron el software, olvidaron colocarle la parte de conección TTL, eso se ve si uno mira el codigo fuente.
      El programa que hice funciona perfectamente solo que necesitarias el VisualStudio ya que cada uno de los comandos del modulo estan comentados, solo tienes que descomentar individualmente y probarlos uno a uno. Con ese programa podras perfectamente hacer la libreria para PIC sin problemas

      Eliminar
  8. Buenas, disculpe la ignorancia pero porfavor ¿como seria el proceso de guardar los codigos de las huellas en una base de datos? ¿como seria el proceso de verificacion si los codigos de las huellas estuviesen almacenados en una base de datos?
    ¿Es factible hacer esto con este dispositivo? gracias por su atencion

    ResponderEliminar
    Respuestas
    1. Almacenar huellas en una base de datos remota serviría en el caso de que se necesite identificar un numero muy grande de usuarios, mas de 20000 por poner un numero o quizas 1000000 en tiempo real; ya que por mas rapido y potente que sea un dispositivo de estos no tendria capacidad para procesar tanta información. El procesamiento de las huellas tendria que hacerse en el nivel de los Servidores. El fabricante de este modulo el GT511, nos da esta funcionalidad con el objetivo que se puedan respaldar las huellas o transferirlas a otro dispositivo, no para almacenarlas remotamente ni procesarlas como planteas.

      Eliminar
  9. Señor alvaro, en conclusion ¿no es posible que se pueda hacer un sistema de control de acceso con 1000000 usuarios o mas con este dispositivo? perdone la molestia.
    Estoy muy agradecido con su apreciacion

    ResponderEliminar
    Respuestas
    1. Habria que trabajar mucho para poder hacerlo primero que todo cuando uno toma una huella se crea un template que no es mas que el hash de la huella, al ser mucho mas pequeño que la imagen tiff de la huella dactilar se puede transportar mas rápido, el problema que veo es como le hacemos para comparar el hash generado con otro guardado remotamente si no tenemos el codigo fuente del firmware del dispositivo. Creo que la mejor opcion en estos casos es utilizar otra arquitectura, la gente de Nitgen posee mucha experiencia en esta tecnologia y provee herramientas para hacer eso que planteas, por supuesto con los modulos de ellos.

      Eliminar
  10. Buenas, muchas gracias por su respuesta, su recomendación es muy buena pero el problema es el costo que requiere, estoy tratando de buscar otras alternativas menos costosas. usted comentaba: "Este módulo biométrico es fascinante ya que además de ser rápido, permite la descarga de la huella dactilar de un módulo y subirla a otro del mismo tipo, lo que da pie al desarrollo de soluciones biométricas avanzadas personalizadas". Teniendo presente esto se ¿podría mover toda la información de las huellas que este cargada en el dispositivo, alojarlas en una memoria SD y volver a llenar el dispositivo con otra información de otras huellas y hacer así sucesivamente hasta que se encuentre la huella del usuario que en ese momento desea tener acceso? ¿Que tan eficiente seria esto hablando en terminos de velocidad? perdone tantas preguntas, agradeceria su respuesta

    ResponderEliminar
    Respuestas
    1. Seria muy lento no lo recomiendo para nada, un usuario espera que su huella sea reconocida en menos de 1 segundo, es preferible usar el modulo un poco mas costoso como el C3 inclusive hay otro de ese mismo fabricante que almacena mas huellas, no lo recuerdo en este momento.

      Eliminar
  11. He leído todos los comentarios acerca del GT-511 C1, como he visto nadie ha podido conectar el sensor al computador por medio de una FT232, usted dijo en un comentario pasado que toca conectar directamente el sensor al puerto USB del computador, el problema es que no lo reconoce.
    No se si se debe colocar el FT232 para que me convierta de USB a TTL y si me reconozca el sensor, o si es posible, nos podría explicar como conectar el sensor directamente al un puerto USB del computador.
    Agradecería enormemente su colaboración.

    ResponderEliminar
    Respuestas
    1. Ok, no es necesario utilizar el puerto USB que esta embebido en el sensor GT-511C1 para hacer eso habría que soldar la pieza al equipo directamente.
      Al inicio del blog dejé un enlace a un pequeño programilla que hice en VisualStudio con C++, si conectas el FDTI tal cual como se ve en la foto funciona sin inconveniente, se que debo hacer una librería para Arduino ya casi salgo de vacaciones. El problema es que no todo el mundo trabaja con ese compilador, quizás esa sea la dificultad, seguramente debí haberlo hecho con Eclipse C por ejemplo, espero que antes de terminar el año o a mas tardar la primera semana de Enero pueda dedicarme a codificar la libreria para Arduino, seguramente le funcionará a todos.

      Eliminar
  12. saludos, para probar su progama es necesario el fdti 3.3v o se puede conectar directo el modulo al PC?

    ResponderEliminar
    Respuestas
    1. Hola, es necesario el fdti tal como se ve en la foto de esta publicacion.

      Eliminar
  13. Alguien ha intenado hacerlo con PIC, no ve trivial conectarlo. Un saludo a todos. Si alquien desea, podemos compartir información, pues en este momento me encuentro batallando con ello.

    ResponderEliminar
    Respuestas
    1. Hola a todos, mas que experto desarrollador soy bastante entusiasta ( terco!!!) y llevo varios dias agarrado de las mechas con un GT-511C3 y aunque timidos, ya llevo avances en el tema de controlarlo con un PIC. borrar, subir, bajar y comparar diferentes plantillas es algo que ya he podido hacerle a esa belleza. Mis herramientas: Proteus, Mikroc, pic 18f4550 y el GT-511C3.

      Eliminar
    2. hola que tal amigo, yo tambien estoy utilizando un pic especificamente el pic16f887 y mikroc ya he podido enviarle los comandos para iniciar el modulo, prender el ledcmos pero al momento de tratar de leer el paquete de respuesta que envia el sensor, no consigo leelo y he estado batallando ya varias semanas sin consegir resultados optimos y quisiera pedirte de favor que si me pudieras ayudar enviandome tu codigo para ver como lo hiciste y poder leer bien los datos que envia el sensor. muchas gracias amigo.

      Eliminar
    3. en realidad es algo muy basico lo que tengo, un par de sub rutinas de ejemplo las cuales funcionan muy bien y de las cuales partes a implementar lo que quieras hacer con el lector solamente modificando un par de registros:

      //Prueba basica de comunicacion con GT-511C3 a travez de puerto serial SR232.
      // Datos generales:
      // Micro 18f4550
      // Oscilador 8 Mhz
      // lenguaje MikroC
      // Autor Daniel Rodriguez
      char i;
      //char input[10];
      short int input[10];
      short int comando [12] = {0x55,0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01};

      //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      // libreria lector de huella:
      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      void enviar() //enviar comando
      { i = 0;
      while (i<12)
      {UART1_Write(comando[i]); i++;};Delay_ms(50);}

      ///////////////////////////////////////////////////////////////////////////////
      void led1 () // encender Cmosled
      {comando[4]= 0x01;comando[8]= 0x12;comando[10]= 0x13;}

      ////////////////////////////////////////////////////////////////////////////////

      void led0 () // apagar Cmosled
      {comando[4]= 0x00;comando[8]= 0x12;comando[10]= 0x12;}
      ////////////////////////////////////////////////////////////////////////////////

      void hay_huella ()
      {comando[4]= 0x00;comando[8]= 0x26;comando[10]= 0x26;


      }
      //////////////////////////////////////////////////////////////////////////////
      // programa principal
      ////////////////////////////////////////////////////////////////////////////////

      void main() {
      UART1_Init(9600); Delay_ms(100); PIE1.RCIE = 1;INTCON = 0XC0;

      while (1) {

      hay_huella (); Delay_ms(500);

      led1();enviar(); Delay_ms(500);

      }
      }

      Datasheet en mano vas incrementando las diferentes rutinas solo modificando los valores a los Bytes 4,8 y 10 del registro "comando". te sugiero tener a mano el simulador de proteus y el win hex para entender mejor lo de codigo endian.

      Eliminar
    4. Otra cosa, cuando pides una plantilla el GT-511C3 te responde con un paquete de 504 bytes donde la data es de 496 bytes y 2 bytes de confirmacion mas 0xa5, 05a, 0x00, 0x01 que son 4 bytes de cabecera 2 bytes adicionales al final los cuales son el check sum. por esta razon el buffer de entrada debe ser por lo menos de 520 bytes para no perder informacion. es por esta razon que se debe usar micros de la serie 18F. te sugiero capturar una huella con el SDK original, bajar la plantilla al pc y luego abrirla con win hex donde podras ver todo el codigo de manera detallada para comprenderlo mejor.

      Saludos.

      Eliminar
    5. Podrían ayudarme, tengo este código para un pic18f4455... para enviar el comando open, y prender el led, no se por que no me funciona, ya miré con un max232 de que si estoy enviando el comando bien, y en el puerto hyperterminal si me recibe, pero cuando conecto el módulo no funciona. Agradecería mucho su ayuda.

      #include <18F4455.h>
      #FUSES NOWDT //No Watch Dog Timer
      #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
      #FUSES PLL5 //Divide By 5(20MHz oscillator input)
      #FUSES CPUDIV4 //System Clock by 4
      #FUSES NOUSBDIV //USB clock source comes from primary oscillator
      #FUSES ECPLL //External Clock with PLL enabled and Fosc/4 on RA6
      #FUSES NOFCMEN //Fail-safe clock monitor disabled
      #FUSES NOIESO //Internal External Switch Over mode disabled
      #FUSES NOPUT //No Power Up Timer
      #FUSES NOBROWNOUT //No brownout reset
      #FUSES VREGEN //USB voltage regulator enabled
      #FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
      #FUSES LPT1OSC //Timer1 configured for low-power operation
      #FUSES MCLR //Master Clear pin enabled
      #FUSES STVREN //Stack full/underflow will cause reset
      #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
      #FUSES ICPRT //ICPRT enabled
      #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
      #FUSES NODEBUG //No Debug mode for ICD
      #FUSES NOPROTECT //Code not protected from reading
      #FUSES NOCPB //No Boot Block code protection
      #FUSES NOCPD //No EE protection
      #FUSES NOWRT //Program memory not write protected
      #FUSES NOWRTC //configuration not registers write protected
      #FUSES NOWRTB //Boot block not write protected
      #FUSES NOWRTD //Data EEPROM not write protected
      #FUSES NOEBTR //Memory not protected from table reads
      #FUSES NOEBTRB //Boot block not protected from table reads
      #FUSES NOMCLR

      #use delay(crystal=20000000, clock=5000000)

      #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=8, ERRORS)

      void main()
      {

      delay_ms(5000);
      output_high(pin_e1);
      delay_ms(1000);
      output_low(pin_e1);
      delay_ms(1000);


      //Open 55 aa 01 00 00 00 00 00 01 00 01 01

      putc(0x55);
      putc(0xAA);
      putc(0x01);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x01);
      putc(0x00);
      putc(0x01);
      putc(0x01);

      output_high(pin_e1);
      delay_ms(1000);
      output_low(pin_e1);
      delay_ms(5000);

      //ledOn 55 aa 01 01 00 00 00 00 12 00 13 01
      putc(0x55);
      putc(0xAA);
      putc(0x01);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x00);
      putc(0x12);
      putc(0x00);
      putc(0x13);
      putc(0x01);


      output_high(pin_e1);
      delay_ms(1000);
      output_low(pin_e1);
      delay_ms(1000);

      }

      Eliminar
  14. Que bueno Daniel que puedes programar, yo ando huyendo de la violencia en Merida; se quedó el laboratorio de Hardware quien sabe cuando pueda volver a casa.

    ResponderEliminar
  15. Estoy teniendo problemas al responder mensajes por este medio tal vez por extensos algunos no se publican. Por tal razon respondo por mail. jdrodriguez2001@yahoo.com.

    ResponderEliminar
    Respuestas
    1. Daniel, ya te escribí, muchas gracias, espero que puedas ayudarme. Hace rato estoy intentando con esto de los PIC sin mucho éxito.

      Eliminar
  16. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  17. Listo ya actualize el link, Rapidshare cambió su interfaz gráfica al estilo metro.

    ResponderEliminar
  18. Hola Alvaro, el enlace RapidShare está caído, cuando tengas un chance por allí lo subes porfa.

    ResponderEliminar