miércoles, 28 de enero de 2015

Siguiendo al Satélite Miranda (VRSS-1)

Cuando uno googlea "Satelite Miranda" puede encontrar toda clase de información referente a éste satelite, a diferencia del Simon Bolivar, Miranda se mueve, es un Satélite de órbita baja, el Simon Bolivar es GeoSincrono es decir desde la tierra aparenta no moverse.

Los satélites de órbita baja como su nombre lo indica, giran muy cerca de la tierra, ésto facilita las labores de observación; en el caso del Miranda su objetivo es tomar fotografias con fines pacíficos ya sean desastres naturales, plantaciones, uso de la tierra, minería, entre otros.

Gracias al avance de las tecnologías de los navegadores de Internet, específicamente a lo referente a la visualización 3d quize desarrollar un programa que corra en una página web que nos permita ver por donde anda el Miranda.

Aprovecho la ocasion para hacerle publicidad a mi nuevo sitio web donde voy a colocar los experimentos de laboratorio, en enlace directo al visualizador del satélite miranda es el siguiente:


Una vez carge la página hay que esperar que se visualize el planeta tierra, la fotos las tomo de bing, y por último se debe presionar el botón de inicio para ejecutar el experimento.

Algunos usuarios reportan fallas por la versión del navegador, debe estar actualizado funciona con Chrome y Firefox.



domingo, 18 de enero de 2015

Crosscompilando y Crossdepurando programas C/C++ en Intel Edison

Ahora vamos con el crosscompiling y crossdebugging en Intel Edison.

El Edison puede ser programado básicamente de dos maneras; usando la IDE estilo Arduino y la otra forma es compilando directamente para su microprocesador. 

En este caso compartiremos la experiencia que hemos tenido en éste aspecto; tiempo atras habíamos dicho que la distribución por defecto del Edison es Yocto, en esta primera etapa nos estamos encargando de probar bien ésta distribución con el objeto de ver sus fortalezas y debilidades que siempre hay que tener muy en cuenta.

Lo primero que hay que hacer es buscar la pagina de descarga y bajar el SDK de nuestro sistema operativo en este link.



Buscamos en la sección Source files, Image and SDK's ....

Personalmente recomiendo trabajar el Edison con Ubuntu, ustedes se habrán dado cuenta por mis capturas de pantallas que uso MacOSX; el hecho de que recomiende linux es simplemente porque los gallos de Intel no incluyeron el gdb crosscompilado para Mac, no se si es a proposito o simplemente un olvido, osea que en la Macbook Pro por los momentos sólo podré compilar mas no depurar, me va a tocar generar el SDK más adelante a mano.

Lo bueno del SDK de linux es que cuando uno lo descomprime se desprende un unico archivo .sh de instalación que funciona a la perfección.


 el archivo es el que está en letras verdes, lo ejecutan

./poky-edison-eglibc-i686-edison-image-core2-32-toolchain-1-6-sh

y proceden con los parametros por default.

Si están usando CodeBlock hay que hacer un pequeño truco.


Si observan bien los ejecutables del toolchain están en 
/opt/poky-edison/1.6/sysroots/i686-pokysdk-linux/usr/bin/i586-poky-linux

pero ésto no le gusta a CodeBlocks, él necesita que al final esté en bin, asi que lo que hice fué duplicar la carpeta i586-poky-linux con el nombre de bin como se ve en la captura anterior.Tal vez quedo un poco feo ../bin/bin pero bueno funciona.

Ahora que ya está el toolchain instalado vamos con el Codeblock.

Obviamente el perfil del compilador para Edison no esta predefinido en el Codeblocks, por lo tanto hay que hacerlo, básicamente lo que podemos hacer es duplicar el de GNU GCC compiler.

Primero vamos a Setting/Compiler and debugger 



En Selected compiler está el GNU GCC Compiler presionamos Copy



y le ponemos iEdison Compiler presionamos OK.


 Ahora nos vamos a la pestaña de Toolchain y la colocamos como en la captura de pantalla anterior.

En Debugger Setting preferiblemente deberiamos tener seleccionada la opción de Evaluate expression under cursor, y muy importante debe estar seleccionado en el combobox Custom(specify instruction-set:) 



Le dedimos que genere los simbolos de depuración.

En Debugger Setting

Ahora desde el Edison vamos a iniciar el gdbserver.




Como se puede ver en la figura nos ubicamos donde está nuestro programa a depurar y le decimos 

gdbserver *:1234 holamundo

1234 es por supuesto el puerto TCP de depuración, aqui puede ir cualquier número de puerto siempre y cuando esté libre.

Volvemos a nuestro PC en linux nos vamos a propiedades



y le decimos como va a depurar el programa.



observen que la conexión es de tipo TCP la dirección la que tiene el Edison y el puerto que colocamos en gdbserver 1234.

Ésto va permitir que cada vez que le demos a Debug busque el Edison por la Red en el puerto indicado para depurar.



Vemos según la pantalla anterior que todo funciona a la perfección.

Hay que recordar que cada vez que se vaya a depurar hay que ejecutar del lado del Edison el gdbserver.


jueves, 8 de enero de 2015

¿Por qué usar Microframework es una buena opción?

No siempre el Arduino es la mejor opción para realizar un proyecto embebido, en éste artículo expondremos un caso donde el microframework nos permitirá ahorrar algún dinero, espacio físico y tiempo de desarrollo.

Vayamos al grano...


Supongamos que necesitamos desarrollar una solución de hardware donde se requiera almacenamiento en una microsd y una conexión de red.

Para éste ejemplo haremos la comparación entre el clásico Arduino Uno y el NetduinoPlus2 que es una implementación de microframework OpenSource con el factor de forma del Arduino. Para ser más justos utilizaremos todos los precios de un solo distribuidor en este caso Sparkfun.

vayamos directo al grano con la siguiente gráfica.



Si nos vamos por la opción del Arduino tendríamos las siguiente limitantes: 

1) Hay que usar 2 (dos) tarjetas, eso implica que se ocupa el doble de espacio que el NetduinoPlus2

2) No crean que siguen disponiendo de 32k para el programa, la librería Ethernet de Arduino usa 1532 bytes.

3) Al estar usando una tarjeta SPI de hecho ya están usando un pin dedicado a la tarjeta Ethernet y microSD.

4) Poca memoria RAM sólo 2k.

5) Están gastando mucha plata 24.95 + 45,95 = 70,9 dólares.

Ahora bien veamos que nos da el NetduinoPlus2

1) Menos espacio, una sola tarjeta.

2) 384Kb que no se ven afectados por uso de la Ethernet puesto que ya está descontado éste espacio.

3) Los puertos SPI están libres.

4) El microprocesador es de 32bits vs 8 bits del Arduino.


5) Al ser microframework el nivel de abstracción es demasiado elevado, imaginense poder usar el poderoso framework .NET sin tantas complicaciones (manejos de hilos, complejos programas que serían muy difícil de implementar en C++).

6) Solo hay que gastar 59.95 dólares.


Aquí aplica bien el dicho de las ofertas "Más por Menos".


Ahora bien el Microframework no es la perfección, por ejemplo aquí no puedes tener SoftwareSerial algo que para el Arduino es algo sencillo de hacer; si queremos sacar el MCU del Arduino no hay problema, el hardware nos sale mas barato, con el Netduino no es algo tan trivial; no hay que dejarse engañar de la frecuencia del NetduinoPlus2, aún cuando es 10 veces superior a la del Arduino recuerden que ejecuta un código intermedio, si borramos el microframework del NetduinoPlus2 y trabajamos directamente en el STM32 si veríamos un enorme rendimiento pero sólo en C/C++ o sea sin .NET.








sábado, 3 de enero de 2015

Manejando las pantallas TouchScreen de 4DSystems con Microframework

Iniciamos este nuevo año con una publicación sobre la interfaz gráfica 
uLCD-32PTU de la empresa australiana 4dSystems.

Si hacen clic en el link del producto podrán ver todas las bondades.

El modelo 32PTU se maneja a través del puerto serial, eso nos permite desarrollar una interfaz gráfica prácticamente en todos los tipos de microprocesadores que hay en el mercado incluyendo por supuesto en nuestro apreciado IntelEdison, claro hay que aclarar que no estaríamos ejecutando Gnome ni KDE ni nada que se le parezca solamente algo mas sencillo que nos permita interactuar con el usuario.

El módulo es muy completo prácticamente se puede hacer de todo, uno puede trabajar en bajo nivel con un lenguaje script que se llama 4dgl y también se puede usar el modo ViSi que posee un conjunto de controles gráficos preconstruidos.

El detalle que le veo a este modulo en particular es que sólo está soportado para Arduino y Raspberry; en realidad cuando uno trabaja con estas librerías ellas se encargan de ocultar el protocolo del fabricante para que el desarrollador se enfoque en lo que desea mostrar en la pantalla.

El esquema de la libreria a primera vista suele ser un poco incómodo uno no está acostumbrado a trabajar de la manera en que están construidas, uno quisiera al menos que se parezca a trabajar con Qt. Aunado al hecho de que últimamente he estado trabajando con microframework específicamente con el NetduinoPlus decidí iniciar la construcción de una librería en C#.

Si ustedes tienen la oportunidad de trabajar con Arduino y desean manejar muchas pantallas el código se va tornando inmanejable; debido a eso empecé a desarrollar una implementación de WinForm para Microframework utilizando el protocolo de ViSi y le puse como nombre VisiForm.

Estoy muy conforme con la implantación que estoy haciendo ya que prácticamente uno cree que está trabajando con C# en Windows y resulta que es Netduino con la pantalla de 4DSystems.

Si ustedes han desarrollado en C# en Windows verán que la librería VisiForm prácticamente está quedando igual:


Se puede observar que la ventana MessageBox hereda de Form igual que Windows, VisiForm.Form contiene el manejo de mensajes del protocolo VisiGenie codificado en microframework permitiendo que el programador se centre en su código C# como si trabajara para una ventana de Windows, por otra parte quise respetar el nombre de los controles de Visi por que no son exactamente iguales a los de WinForm, por ejemplo hay 11 tipos de botones frente a 1 en Windows, si quieres más tipos de botones en Windows tienes que hacerlos o comprarlos a un tercero. El control Strings que se ve en el código fuente anterior es equivalente al Label de Windows, ViSi también tiene un label pero es solo lectura así que preferí dejar el nombre del control original.

Ahora veamos el punto de entrada, se puede observar que es muy parecido al de WinForm.



Créanme que trabajar un sistema con muchas ventanas en Arduino o Raspberry con esta pantalla es algo difícil de mantener, con la implantación que estoy desarrollando VisiForm es súper sencillo ya que todo el protocolo ViSi está codificado en C# al estilo de manejo de mensajes de Windows, me tocó recordar mis viejos tiempo cuando desarrollaba en Windows 3.1 con Lenguaje C, jejeje.

La libreria VisiForm aún esta en desarrollo, es un poco grande también pienso hacer un VisiForm para C++ aunque creo que solo para Raspberry no estoy muy seguro de que el Arduino tenga suficiente memoria para soportarla de todas maneras haré el intento.

A continuación un pequeño video de un sistema biométrico con Netduino y la pantalla de 4dSystems







miércoles, 24 de diciembre de 2014

Los primeros pasos con el Intel Edison

Ahora bien, vamos a hablar un poco de más del intel Edison...


Primeramente es conveniente que se diga como se ve en IntelEdison con respecto a las otras tarjetas Linux abiertas del mercado que hemos probado.


1. La GPU está desactivada... por ahora... aparentemente en un futuro será desbloqueda asi que de seguro algún día podremos ver un breakout con salida hdmi.


2. El S.O. esta en memoria flash. Al contrario del RaspberryPi que se inicia en la memoria sd. Ésto no es ni malo ni bueno, depende del punto de vista que uno tenga con respecto de cómo debe ser iniciar un sistema SoC con Linux. Si lo que queremos es ahorrar espacio ésta es la mejor opción.


3. Posee un USB cliente y un USB host. Genial!!!. Se puede entonces usar una cámara usb; ya que al menos en éstos momentos no hay en el mercado una (como en el caso del RaspberryPi) que se pueda conectar en un puerto dedicado.


4. Consume en promedio 200mA, excelente nivel de consumo ideal para aplicaciones alto nivel de cómputo y bajo consumo energético. 

5. Posee Wifi integrado como el caso del ArduinoYun, solo que el del Edison es mejor y tambien tiene el Bluetooth 4 LE.

6. El linux por defecto es un Yocto aunque los chicos de Sparkfun sacaron una distribución basada en Debian, lo que facilita el manejo de paquetes para el Edison.


El Intel Edison hay que conectarlo en algun breakout que posea el conector de 70pines de su factor de forma. Intel provee de dos tipos de Breakout, el que tiene los pines hembra del Arduino y el edisonminibreakout; hay que acotar que hay otros hechos por terceros pero en este blog sólo trataremos los de intel.


fig 1.  EdisonArduinoBreakout



fig 2. EdisonMiniBreakout


El EdisonArduinoBreakout es algo parecido a la filosofia del ArduinoYun, digo "algo parecido" porque no hay un leonardo trabajando en paralelo con el Edison, como lo podran observar en la fig 3.


fig 3. Esquematico del EdisonArduinoBreakout

El Edison se encarga de todo, y por supuesto la tarjeta posee el factor de forma del Arduino.

En otra Instancia el EdisonMiniBreakout es mucho mas pequeño y se olvida de que el Arduino Existe, el plano esquematico se puede ver en la figura 4.


fig 4. EdisonMiniBreakout


Como pueden ver solo es posible energizarlo con una bateria LiPo, por el USB-OTG o por el conector VIN que permite entre 7 y 15 voltios, en todos los casos hay que tener mucho cuidado con la polaridad sino freiras el equipo.

Cuando uno va a trabajar por primera vez con el EdisonMiniBreakout debe tenerse claro que es lo que uno va a hacer con el equipo, si por ejemplo nosotros queremos usar un cable USB-OTG para colocar un pendrive es mandatorio energizarlo por el pin VIN.

Conectando el Edison:

Veamos primero el esquemático de jumpers que proporciona Intel.



J3: USB Cliente
J16: USB Host
J2: Bateria
J21: VIN 


La prueba se realizó conectando por el J21 9 voltios de una fuente de laboratorio.



Luego se conecto el Cable USB en el J3 con la Computadora, si estan usando Linux o MAC deben buscar primero como se llama el puerto TTY.

$ ls /dev/tty* | grep usbserial

a mi me dio como respuesta

/dev/tty.usbserial-A402F2N1

posteriormente lo conecto con el comando screen de la siguiente manera:

screen /dev/tty.usbserial-A402F2N1 115200 -L

El booteo, tomó alrededor de 24 segundos.


Saludos y feliz navidad. Que el niño jesus les regales a todos un Intel Edison.

lunes, 22 de diciembre de 2014

Libreria GT511C1 y GT511C3 Actualizado

Amigos lectores acabo de publicar una actualizacion de la libreria para el GT511C1, ahora funciona en NetduinoPlus, por fin escribo algo para microframework.

Por otra parte empezé a desarrollar la correspondiente libreria para el GT511C3 solo que por los momentos está escrito para Windows y Microframework.


jueves, 2 de octubre de 2014

Intel Edison. What will you make?

Por fin llega el esperado Intel Edison el linux embebido no militar más pequeño del mundo.

Desde que lo mostraron en las Vegas en enero había mucha gente en lista de espera para adquirirlo, y créanme volaron rápido ya no hay.

Lo que más me gusta de esta miniatura es que incluye 
- Conexión inalámbrica a/b/g/n
- Bluetooth 4.0, (este bluetooth si que es ahorrativo refiriéndonos al consumo energético). 
- Es ¡¡¡DualCore!!! 
- Tiene ¡¡¡1Giga  de RAM!!! 

Hay que acotar que por razones obvias el voltaje de funcionamiento es muy bajo 1.8v y no es tolerante a 3v3 esto para que consuma muy poca energía.




Es casi del tamaño de una memoria SD, estoy ansioso de hacer un robot basado en este cerebrito, que tal será el rendimiento de la visión artificial?.


miércoles, 17 de septiembre de 2014

Impresión 3d en Odontologia

Siguiendo el tema con las impresoras 3d y su amplio espectro de usos mostramos en esta entrada un análisis interesante de un paciente odontológico que posee un diente que no ha salido, es decir aún sigue oculto en la dentadura, me disculpan pero este no es un blog de medicina ni odontología; como dicen en mi tierra tiene el diente esta "emperipollao".

Seguimos el mismo esquema que hicimos para imprimir la vértebra lumbar que mostramos tiempo atrás,

1. Usamos el CD que contienes las imágenes tomográficas.

2. Construimos el Volumen.

3. Segmentamos las imágenes.

4. Creamos el Modelo

5. Exportamos a STL

6. Imprimimos en plastico.


A continuación mostraremos el Volumen construido a partir de las imágenes DICOM del tomógrafo




Como pueden observar la raíz de diente casi se puede tocar metiendo el dedo en la nariz, el ortodoncista tiene que buscar la manera de separar los dientes para darle cabida a la pieza que esta enterrada, lo importante de todo esto es que en los modelos 3D uno puede hacer mediciones de un órgano, rotarlo en la pantalla sin abrir al paciente.

También es posible una vez tenemos el volumen generar una panorámica virtual y radiografías de planos oblícuos tal como vemos en la siguiente imágen.



Como pueden observar el diente mide aproximadamente 20,9 milímetros a continuación veremos el diente impreso y mide exactamente lo mismo



Con el diente en la mano se puede presentar en la dentadura y ver como va a quedar.

jueves, 4 de septiembre de 2014

La impresión 3D en la cocina

Ya me dio hambre... nada mas de ver todo lo que se puede hacer con las impresora 3d en la cocina, googleando un poco he podido ver diversas técnicas aplicables en el arte culinario.

El uso inicial que se le dió a esta tecnología fue el de derretir una mezcla dulce tal vez con algo de chocolate sobre la bandeja de impresión para hacer figuras geométricas; hoy en día se pueden ver que se han hecho maravillas, verdaderas obras de arte; en este blog no mostraremos específicamente este uso sino de la construcción de moldes para complacer los caprichos del comensal.

A unas amigas les salió un contrato donde se les pedía hacer una galleta para un quinceaños en forma del premio del Oscar con un tamaño específico; obviamente es practicamente imposible encontrar un molde que cubra sus necesidades, hacerlo a mano es demasiado complicado si queremos la perfección; es por esto que la impresora 3D nos puede solucionar esto haciendo un molde a la medida.

Así quedo el molde, pesó 25 gramos; fué diseñado en 3D en Autocad Inventor por nuestro amigo German Castaño y luego exportado a formato STL para que pueda ser impreso.


el video de la impresión en 3d



y por último la galleta lista para comer.


buen provecho.

viernes, 29 de agosto de 2014

RaspberryPi or not RaspberryPi he ahí el dilema

"Eligiendo entre el RaspberryPi y el BeagleBoneBlack"

Inicialmente mi intención era colocarle un nombre a este artículo un poco mas tradicional, tal vez RaspberryPi vs BeagleBoneBlack pero ya hay muchos por internet con este nombre.

El RaspberryPi lo podríamos definir en una sola frase como "Realmente es lo máximo" pero como decía el Oráculo de la Matrix realmente el problema es saber elegir.

Inicialmente la primera pregunta que uno se debe hacer es

1- ¿Para que voy a utilizar un Linux embebido?

En ocasiones uno por querer ir con la moda elegimos una arquitectura no adecuada, es como si quisiéramos una bazuca para matar una mosca. Hay que seguir la regla de oro al momento de diseñar una solución; maximizar la simplicidad sin sacrificar la seguridad, que tenga un bajo consumo energético y que sea estable y económico en términos de costo.

2- ¿No será que con un simple Arduino puedo darle la solución a mi problema?

Tal vez, incluso a veces ni siquiera es necesario utilizar un microcontrolador, en ocasiones un sencillo circuito analógico puede ser la solución a algunos de los problemas; por ejemplo, en mi casa utilizo cámaras ip, lógicamente una cámara de estas debe estar basada en un sistema embebido posiblemente un linux o quizas un freebsd, el punto es que en una ocasión la cámara dejo de funcionar porque se colgó su sistema operativo, sin embargo me llamo la atención que al momento de la transición de la luz a la oscuridad o viceversa se activaba el filtro de luz, un pequeño lente oscuro que se mueve con un relé; uno puede deducir que la decisión de colocar éste lente no la toma el sistema operativo de la cámara sino que con un pequeño circuito que se alimenta con una sensor de luz puede poner o quitar el lente polarizado.

3- Cual de tantos linux embebidos es el que voy a usar?

Ésto es lo más difícil, hay demasiadas opciones, tendríamos que redefinir la pregunta a ¿Cuál de tantos linux embebidos que ya he trabajado y que son relativamente fáciles de conseguir es el que voy a utilizar?; y si estamos en Venezuela eso de fáciles de conseguir complica un poco el asunto.

Bueno ahora si vamos al grano, en esta ocasión analizaremos al RaspberryPi y el BeagleBoneBlack con un enfoque no tradicional.

* Lo primero que salta a la vista entre estos dos sistemas es que el BeagleBoneBlack tiene muchísimas más GPIO que RaspberryPi, 65 el BBB vs 8 el RaspberryPi. Sin embargo existe en el mercado una tarjeta que expande el número de pines del RaspberryPi, lo hace a traves del I2C.

* El BBB no requiere de una microsd para trabajar, posee 4Gb de memoria flash para almacenar el sistema operativo, si se va utilizar el RaspberryPi es recomendable que la microsd sea mínimo de clase 4, bueno eso depende de lo que se vaya a hacer, si vamos a trabajar con video una clase 10 no nos caería nada mal.

* El RaspberryPi tiene 2 USB y dígame si hablamos del RaspberryPi B+ que tiene 4 vs Un simple host del BBB, hay que resaltar que BBB posee un USB cliente y el Raspberry no lo posee.

* Set de instrucciones: El BBB es un sistema embebido basado en ARMv7 el RaspberryPi está basado en ARMv6 el cual ya esta siendo poco usado en el mundo de los dispositivos embebidos adicionalmente si agregamos el hecho de que el BBB trabaja a 1Ghz de forma nativa y RaspberryPi a 700Mhz sin hacer overclock, hace que el BBB se lleve al raspberryPi por los cachos en lo que a poder de cómputo se refiere.

* Capacidades gráficas: Ahí gana el RaspberryPi, este pequeñin se jacta de tener un poderoso procesador gráfico que le permite decodificar video streaming a 1080p sin mayor dificultad en tiempo real.

* Salidad de Audio: sencillamente el BBB sólo puede sacar audio por el HDMI mientras que el RaspberryPi tiene un plug dedicado, claro está, lo malo es que si se va a utilizar este conector no se debe utilizar el generador de pulso modulado ya que tiene solo 1 y lo comparte con el puerto de expansión.

* Comunicación: El BBB se luce con esto, posee nada mas y nada menos que 5 puertos seriales por hardware vs 1 solo el RaspberryPi; en cuanto con el I2C el BBB posee 3 vs 1 en el RaspberryPi.

* Convertidor Analógico Digital: Ups el Raspberry no tiene, hay que apoyarse con una tarjeta de expansión que la ayude a tener ésta característica, en el caso del BBB posee 7 y lo mejor de todo es que es de 12 bits "excelente!!!".

* Consumo eléctrico: Sin duda alguna el ganador es el RaspberryPi.

En Resumen si la solución a implantar está basada en Multimedios el RaspberryPi es la mejor opcíon, en cambio si el objetivo es Robótica de álta complejidad es decir si vamos a incluir visión artificial sin duda alguna es necesario el BBB, es muy difícil poner a correr las últimas versiones de OpenCV, OpenNI en el RaspberryPi.


Y por último una pequeña fotico donde posan los dos sistemas ademas del ArduinoYUN que insistió mucho que le tomara una foto y que porque también es un Linux Embebido, no lo quize nombrar será para otra ocasión.


lunes, 25 de agosto de 2014

Cómo funcionan los sensores Biométricos de Huellas dactilares.

"Nadie se baña dos veces en el mismo Rio" 
Heráclito de Efeso (535 - 484 a.C.)


Je, je quizás pensarán algunos que he enloquecido al citar la frase de Heráclito; cuando estaba muy joven en la escuela y la escuché por primera vez esta frase me causo curiosidad, el profesor de filosofía ayudaba a que nuestras inexpertas mentes asimilaran estas frases de gran trascendencia en este caso del tema del Devenir de Heráclito. Según él solo existen sensaciones subjetivas nadie conoce la realidad tal cual es; eso me suena a la Matrix. Definitivamente estos grandes filósofos de la antigüedad estaban más claros que nosotros. Mas adelante veremos que tiene que ver Heráclito con un sensor de huellas dactilares.

Los sensores biométricos son dispositivos electrónicos que a través de sofisticados procedimientos son capaces de medir características morfológicas de una parte de un ser vivo. El más común de ellos es el lector de huellas dactilares.

Pero cómo hace una aparato de estos para saber de quien es una huella si todas se parecen?.

Bueno esto es como verle la cara a un Chino, en apariencia uno dice que todos son igualitos pero si nos fijamos atentamente todos son diferentes.

Tomarle la huella a alguien es casi igual que cuando tomamos una fotografía de la cara de una persona; ahora bien imaginemos que nos toman una foto con una cámara digital que hace ráfagas, cuando uno toma fotos de éste modo la cámara hace como una ametralladora, tacatacatacataca… si analizamos cada una de las fotos uno dice "pero si son exactamente iguales!!!", pues NOOOO todas son diferentes volvemos a lo mismo que mencioné al principio del blog "Nadie se baña dos veces en el mismo Rio", si analizamos la imagen pixel por pixel, veremos que el sensor que percibe la realidad tal como lo hace nuestra retina en cada instante de tiempo lo hace de forma diferente; bueno es casi igual pero diferente nuestro ojo no lo ve pero para las máquinas todas son diferentes y eso las confunde, una máquina no tiene como saber si alguna de ellas se parece a otra, a final de cuentas una computadora es una gran calculadora, ella va a decir que los números no cuadran.

Por esta razón a alguien se le ocurrió que mejor que estar comparando los pixeles es mejor buscar características que tienen todas las huellas de los seres humanos


fig. 1. Patrones

En la figura 1 vemos que estos son los patrones mas comunes que poseen la huellas de un ser humano

fig. 2. Ubicación de los patrones.


En la figura 2 vemos que se puede ubicar que posición se encuentran cada uno de estos patrones.

Ahora bien a partir de este momento viene lo bueno…

Al momento que se ingresa por primera vez una huella al sensor biométrico se extraen los patrones y se guardan en un formato que se le llama Template o Plantilla, ésto es lo que se almacena permanentemente en el sensor de manera que en el futuro para identificar a un usuario se verifica que corresponda con la huella Template que está almacenada en el dispositivo.

Definiremos la siguiente premisas:

1- Los sensores de huella dactilar NO almacenan las fotos de la huella del usuario, puesto que consumen mucha memoria y no sirven para comparar, solo almacena lo que se le llama Template o Plantilla si lo decimos en Español. 

2- Un Template posee poca información si lo comparamos con la foto de la huella en si. Por lo tanto a un equipo electrónico se le hará mas fácil interpretarlo, un Template básicamente posee la información de ubicación de los patrones  de la huella de un usuario, el Template en si, o sea su codificación es secreto industrial del fabricante, a partir de un Template NO se puede reproducir la huella de una persona.

3- Si nosotros usamos un sensor de Huella de un fabricante A y extraemos el Template de un usuario y lo comparamos con el Template de ese mismo usuario pero generado con un sensor de huella de un fabricante B veremos que son completamente diferentes. Cada quien interpreta la huella a su manera.

4- Los sensores de huella tienen un almacenamiento de número de Templates limitados, suelen ser de 100, 200, 10000 o 20000 templates, estos últimos con mas costosos. Si se desea manejar mas usuarios hay que utilizar una plataforma más compleja basada en redes de datos y servidores con software y bases de datos especializados.

Cualquier computista podría verse tentado en algún momento en construir un lector de huellas dactilares sin embargo esto no es nada trivial, se requiere de mucha investigación, habría que invertir muchísimo dinero para fabricar uno que sea viable en el mercado, el protocolo de prueba es muy extenso y complejo, por esta razón es que existen los módulos biométricos, para que cualquier cristiano común y corriente pueda diseñar una solución de sensores biométricos a la medida. Ya he publicado algunos artículos sobre esto, y he hecho proyecto con tres modelos distintos de sensores biométricos, por eso considero que tengo algo de solvencia moral para hablar del tema.

Es importante querido lector que el punto 1,2,3 y 4 estén claros para saber que una solución de sistemas biométricos tiene muchas limitantes.

Actualmente en Venezuela para evitar el contrabando de extracción de Alimentos hacia Colombia y el sobreprecio en general de estos rubros en la calle se desea implantar sistemas biométricos en todos los automercados y bodegas o tiendas como dicen en Colombia. 


Implantar un sistema biométrico sólo va a impedir que una persona compre varias veces un producto el mismo día o inclusive en una semana en un solo lugar, sin embargo al no ser factible que exista la búsqueda de huella en tiempo real entre todos los abastos del país ya que no es posible tenerlos interconectados (ver puntos 3 y 4) el contrabandista podrá hacer la compra en un abasto del producto de primera necesidad y luego irse a otro abasto a comprar el mismo producto y así sucesivamente a otros en la misma ciudad.

Según las últimas noticias cada negocio va a reportar el consumo por persona a una base de datos central gubernamental, analizando estas declaraciones podemos analizar que lo que se puede enviar es el número de cédula y la cantidad neta de rubros comprado de manera que se pueda monitorear si una persona está haciendo compras desproporcionadas de un producto, esperemos a ver si la gente no le da la vuelta al sistema.

Por último y para respetar los derechos de autor las imágenes de la Fig. 1 y 2 fueron sacados de una publicación que hizo mi estimado amigo Patricio Holguin en el siguiente link http://neutron.ing.ucv.ve/revista-e/No6/Olguin%20Patricio/SEN_BIOMETRICOS.html





miércoles, 20 de agosto de 2014

Ohhh!!! Imprimiendo el Cuerpo Humano

En esta publicación veremos como hice para imprimir una vertebra lumbar a partir de una Tomografia, al final veremos como quedo el modelo en una impresora 3D.

De seguro habremos visto aunque sea por CNN, Discovery o NatGeo algun programa de TV donde utilizando un Tomografo reconstruyen huesos del cuerpo humano o algún otro animal, valga la redundancia.

Para hacer esto hay que desarrollar varias destrezas en el mundo modelado 3d especialmente lo relacionado con imagenes médicas. Lo recomendable en estos casos y lo digo por experiencia es tomar un curso de imagenes biomédicas, yo hice uno en linea con la Universidad de Sidney.

Googleen un poco y encontraran mucha información al respecto, trataremos de ser breve porque el tema es muy amplio y profundo.

En el mundo de la fotografia todos sabemos lo que es un pixel, lo primero que nos viene a la cabeza es photoshop y los megapixeles de una camara fotográfica; en el mundo 3d el pixel tiene profundidad y se llama Voxel, entre más pequeño sea el voxel mayor sera la definición de un volumen en 3d, vemos el siguiente ejemplo.

fig. 1. Voxels

El volumen A01 tiene una definición de voxel muy grande no podemos distinguir exáctamente que es, a medida que avanzamos y llegamos al modelo A04 los voxels soy muy pequeños y podemos apreciar perfectamente de que se trata de unos de los mejores vehículos el legendario Volkswagen escarabajo.

Cuando se uno se hace una tomografia el operador establece el número de cortes que tendrá el volumen, entre más cortes tenga la imagen el tamaño del voxel será mas pequeño por consiguiente podremos generar una buena impresion 3d.

Ahora bien definamos algunos otros conceptos; una cosa es una imagen de photoshop y otra un dibujo vectorizado hecho con Corel Draw, cuando uno hace un Acercamiento o Zoom en Photoshop la imágen se pixela, el cambio cuando uno hace Zoom a un dibujo vectorizado no ocurre esto ya que son coordenadas no pixeles.

Esta analogía se aplica para imprimir partes de una tomografía en una impresora 3d ya que el Tomógrafo solo nos entrega pixeles en formato de imagenes medicas conocida como DICOM, y sí solo cortes en dos dimensiones, hay que utilizar algun software que dados los cortes 2d se generen voxels 3D del volumen a estudiar; he usado varios pero el que me parece mas completo es el 3dSlicer.

 fig. 2. Volumen a partir de cortes 2d


Una vez que tenemos los voxels debemos "vectorizar" bueno asi se diría en 2d pero en el mundo 3d se llamaria algo asi como crear el modelo 3d, esto es en realidad lo más complicado.

Primeramente a cada corte 2d hay que aplicar la técnica de segmentación o lo que sería agruparlo por características similares utilizando algoritmos o técnicas que nos permitan separar el área de interes del resto de los pixeles del corte, este proceso se hace manual no es automático requiere de analisis y la aplicación de filtros especializados.

fig. 3. Corte de Vertebra en 2d


En la fig 3 podemos apreciar un corte de la vertebra, a uno le correponde con el software que hace la segmentacion indicarle cual es la parte que nos intersa, en este caso es el borde de la vertebra. Una vez terminado el proceso por cada corte se debe generar le modelo en VTK, este es el formato estándar en el mundo medico para los modelos 3d

 fig. 4. Modelo en formato VTK

Luego hay que convertirlo en formato STL (Stereo Lithography) para que el software de la impresora 3d lo entienda y pueda generar el formato de control numérico CNC estándar el gcode.

Es muy importante el archivo STL tenga la menor cantidad de caras y no contenga errores como caras ocultas, invertidas, vertices repetidos, porque si no el software que convierte a gcode sencillamente no va a funcionar.

La vertebra que imprimí es la Lumbar 3 el archivo gcode quedó de un tamaño de 4MB



Y por ultimo la impresión en ABS de color blanco.






viernes, 8 de agosto de 2014

Resucitando bombillos ahorradores

"Lazaro levántate y anda"


Eso fue lo que me provoco decir al ver como se pudo resucitar un bombillo fluorescente, pero más allá de la broma y para la reflexión definitivamente los chinos son una m......

Uno en este país puede darse cuenta que estos artículos no cumplen con el cuento ese de que duran 8000 horas.

Tomé un bombillo que se encuentra en buen estado y me puse a medir resistencia por resistencia a ver si es verdad que miden lo que dicen; para mi sorpresa las resistencias que por cierto son smd son de la peor calidad que uno se pueda imaginar, por ejemplo una de ellas dice en letra blanca 4703 como es de tipo smd no posee colores y su valor debería ser de 470kiloohmios, cuando la mides con el multímetro marca 180k, y así las demás con unos márgenes de error muy exagerados, el circuito está lejos de sus parámetros de diseño, por eso es que se queman rápido.



El bombillo ahorrador de la foto anterior estaba quemado tenia los 2 transistores averiados y 3 resistencias calcinadas, simplemente lo que hice fué cambiar estos componentes y volvió a la vida
por cierto coloqué resistencias Through-hole y quedo así:



Hay otro tipo de falla común en este tipo de bombillos y es cuando se quema uno de los 2 filamentos, lo que uno debe hacer en estos casos es ponerlos en corto y listo funciona.

El bombillo en cuestión es el proporcionado por Corpoelec (Empresa eléctrica estatal de Venezuela). Los primeros 30 millones provienen de China gracias al convenio con nuestro camarada Xi Jinping.

miércoles, 6 de agosto de 2014

Técnica de pulido para impresiones 3d para ABS y probablemente PLA

Dije probablemente PLA porque no tengo este material;  he escuchado que como viene del maíz mientras se está impriendo huele a Cotufa(Venezuela) Crispeta(Colombia) Palomitas de Maiz(Mexico).

Bueno la técnica que apliqué fue de mi propia inspiración no la he leído pero seguramente a alguien se le pudo haber ocurrido.

Una vez terminado el trabajo de impresión 3D utilicé Acero Plástico, también sirve macilla (No se como se le llama a esto en otros países), luego de secar o sea unas cuantas horas, utilicé una lija gruesa, al principio lo hice a mano pero de verdad ésto es muy cansón; asi que me acordé que tenia una lijadora profesional y el trabajo realmente fue un paseo, quedó muy bien terminado a pesar de que sólo coloqué 1 capa de macilla plástica, posteriormente lavé la pieza y la pinte con spray negro mate.

He aqui los resultados... :)



la carcasa contiene:

1 Pantalla LCD Touch
1 Arduino UNO
1 Shield microSD
1 Convertidor TTL a RS232

El programa que está cargado en el Arduino es un Generador de datos WITS, es decir, este aparatico simula una Cabina de Mudlogging de un Taladro Petrolero hecho con unos poquitos dolares y mucha imaginación.

lunes, 4 de agosto de 2014

Case para Arduino + LCD táctil impreso en 3D con filamento ABS

El tema de la impresión 3d es algo que nos apasiona a muchos, he visto muchos artículos sobre los pro y contras de ésta tecnología, antes de entrar en el tema del fulano Case quería expresar mi opinión sobre ésta tecnología en un par de puntos.

- Software de diseño 3d:

Antes de pensar en comprar una impresora 3d ocúpece primero en aprender a diseñar en 3d, desde hace algún tiempo he estado usando el SketchUp de Google, nunca había visto algo tan fácil de usar, vale la pena ver los video tutoriales para entrar en calor.

- Tecnología de impresion:

Hay un dicho en mi tierra que dice "papel aguanta todo"; bueno algo así ocurre con la impresión 3d solo que tendríamos que cambiar un poco el refrán por "Diseño en 3d aguanta todo".  No todo es imprimible, esto se aprende mas que todo con la experiencia, un concejo hagan sus diseños, imprimanlo, estén dispuestos a perder mucho material para que vean que hay que tomar en cuenta las propiedades mecánicas de la extrusión, temperatura, orientacion del diseño en la plataforma, parametros de densidad y demas bla bla bla que se aprende llevando golpes.

Ahora si a lo que vamos el Case.

Desde hace algún tiempo quería hacer un hardware genérico multipropósito que tuviera su propio Display y con bastante capacidad de memoria, lo que se me ocurrió fue sumar varios artefactos:

1 arduino + 1 shield microsd + 1 transceiver RS232 + 1 LCD TouchScreen

Con estos 4 artefactos trabajando de forma armoniosa podemos tener un punto de inicio para hacer cualquier aparato, ejemplo que tal si queremos un control de acceso? simplemente le adicionamos un lector RFID, o si queremos que sea con la huella, agregamos un módulo sensor de huella, en fin lo que nos dicte la imaginación.

Lo único que le faltaba para se perfecto era un case respetable, ya que en el mercado no hay nada disponible que nos sirviera nos toco hacer un diseño y generarlo en una impresora 3d.




Éste modelito tiene la pantalla levemente inclinada 30 grados y suficiente espacio para meter muchas cosas en su interior, en nuestro caso nuestro muy apreciado Arduino UNO.


Vemos como quedó, lo único malo es que tardó 4 horas en imprimirse.



Solo falta pulirlo un poco para darle el acabado final.

miércoles, 25 de junio de 2014

Crosscompilando y Crossdepurando programas en Raspberry

Ok esta bien se lo que estan pensando, no se dice asi....

Crosscompiling ----> Compilacion cruzada

Segun el google sabelotodo un compilador cruzado es un programa capaz de generar un codigo ejecutable de una plataforma distinta a la que se ejecuta.

En este caso nos interesa tratar el tema de Raspberry e ir un poco mas alla y hacer depuración remota, es decir desde mi computadora con MaxOSX, Linux o Windows puedo ejecutar un programa en un raspberry que por cierto puede estar ubicado al otro lado del planeta y por si fuera poco desde la IDE de desarrollo colocar breakpoints evaluar variables y seguir ejecutándolo como si nada.

Ahora veremos cómo hacemos todo esto en unos sencillos pasos.

1- Para hacernos la vida un poco más fácil googleamos algo así:
Cross-compile toolchain for raspberry <coloque aqui el nombre de su sistema operativo>

esto les llevara a algún link donde algun tío se tomo la molestia de generar un compilador cruzado y de querer compartirlo con la comunidad. Por lo general viene comprimido en tar.bz2 o algo parecido; deben descomprimirlo si usan MaxOSX o linux es recomendable por razones estéticas colocarlo en la carpeta /opt

Lo descomprimí en la carpeta:

/opt/arm-none-linux-gnueabi/

Si logran detallar dice linux pero en mi caso ese toolchain fue compilado para MacOSX.

2- Utilicen una buena IDE, yo se que a muchos les gusta Eclipse, a veces la uso pero prefiero Codeblocks, es libre y mucho más rápida; en esta entrada voy a mostrar el uso específico para esta IDE de desarrollo; los usuarios de Eclipse deben buscar la equivalencia, realmente no es nada del otro mundo.

3- En Compiler Setting deben ubicar la carpeta Toolchain executables, en esta parte se especifica el crosscompilador ubicado en /opt/arm-none-linux-gnueabi/

los ejecutables tienen el prefijo arm-none-linux-gnueabi- y estan en la subcarpeta bin


Hasta este punto ya deberíamos poder compilar el famoso programa holamundo.c, particularmente les recomiendo usar una herramienta gráfica que les permita transportar el programa Compilado a su raspberry para no tener que hacerlo por la terminal, yo utilizo el FileZilla deben haber muchos parecidos disponibles para Linux y Windows


Observen que lo arrastré al Raspberry remoto, es muy importante que el archivo tenga permisos de ejecución, hay que ponerselo porque por defecto no lo trae.

Ahora bien si abren una consola ssh podran ejecutar su holamundo del raspberry sin mayor dificultad


Pero que pasa si queremos colocar breakpoints para buscar solucionar algún problema difícil de detectar.

3- Uso del Depurador Remoto.

Ésta parte es un poco más complicada vamos paso a paso:

- Hay que utilizar el depurador gdb, pero no el de su sistema operativo sino el gdb crosscompilado para raspberryPi que se ejecuta en su sistema operativo.
Deben verificar que haya sido incluido en el tar.bz2, no siempre está presente y es indispensable para la depuración remota. Si no está mejor busquen un toolchain que si lo tenga.

el mio esta ubicado en

/opt/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gdb

se puede usar sin IDE es decir por comando pero es incómodo utilizarlo de esta manera mejor lo usamos de forma transparente con la IDE de CodeBlocks.

Cada vez que vayan a hacer una depuración remota deben asegurarse de llamar el gdbserver desde el Raspberry, lo que van a hacer es indicarle que holamundo se va a depurar desde otro equipo, el gdbserver permite depuracion por TCP/IP y por puerto serial, en este caso usaremos TCP/IP, adicionalmente indicaremos el puerto, es importante que no haya ningun proxy que esté bloqueando este puerto ya que impediría la comunicación, para éste ejemplo usaremos el puerto 1234


*:1234 significa que aceptará a cualquier ip por el puerto 1234 que se quiera conectar, luego se quedará esperando pacientemente a que alguien se conecte.

Ahora bien desde nuestro PC vamos a indicarle a nuestro CodeBlocks ya que es por primera vez que lo hacemos dónde esta ubicado el gdb para raspberry.



las imagenes hablan por si solas. Ya esta todo listo y preconfigurado para que podamos hacer de ahora en adelante con CodeBlocks depuraciones remotas.

Simplemente lo que tenemos que hacer es colocar los breakpoints donde nos interesa y darle a Debug


ya que coloqué el breakpoint justo despues que se ejecutí i=i+1 podrán observar en la ventana de Watches que dice que i = 2.

Saludos, hasta la proxima...