lunes, 15 de julio de 2019

Gráficas de Maplotlib en Tkinter

He estado aprendiendo usar el módulo TKinter para hacer interfaces gráficas en Python y me está encantando. A pesar de no tener un asistente gráfico como pyQT, se me ha hecho bastante fácil de usar. Para incrustar gráficos de Matplotlib en un GUI de Tkinter pongo el siguiente ejemplo en donde cada botón manda a graficar una función diferente:

  

martes, 2 de julio de 2019

Áreas, perímetros y centroides de imágenes binarias con scikit-image

Utilizando las funciones label() y regionprops() del submódulo measure de scikit-image podemos obtener varios parámetros muy útiles de regiones binarias contiguas (blobs binarios). En este ejemplo construiremos una imagen binaria con dos círculos de diferente tamaño de los cuales obtendremos sus propiedades.

Las salidas del programa son:

Región 1:
Area (pixeles): 15361
Perimetro (pixeles): 458.2741699796952
Centroide: (80.0, 100.0)


Región 2:
Area (pixeles): 7825
Perimetro (pixeles): 326.3919189857866
Centroide: (220.0, 220.0)

Es posible  construir un dataframe de pandas a partir del diccionario de propiedades generado con la función regionprops_table(). Si están comenzando con scikit-image pueden revisar mis notas de mi curso introductorio aquí.

viernes, 7 de junio de 2019

Generar imagenes PNG de ecuaciones en LaTeX

El archivo que pueden usar como plantilla es el siguiente:

Para poder generar el PNG deben colocar --shell-escape como opciones para el compilador. En Texmaker/TeXstudio pueden hacerlo yendo a Opciones->Configurar Texmaker/TeXstudio:
Yo utilicé esta función para hacer en Gimp stickers matemáticos impresos en papel couché adhesivo:

Nota: Si usas Windows es un poco más complicado: LaTeX to PNG on Windows.

martes, 7 de mayo de 2019

Mecanografía y terminal

El primer paso que debe darse para el dominio natural de la terminal de Linux es tener la habilidad de escribir rápido en el teclado sin mirarlo. Creo que el no ser capaz de hacerlo es el impedimento más grande para enamorase de la terminal y de los editores de texto de consola como Vim o EMACS. La imagen que he puesto en esta entrada es una modificación que hice en GIMP de la asignación de teclas para cada dedo en un teclado latinoamericano. La posición de las manos debe ser la siguiente:
Tomar cursos de mecanografía es recomendable, pero es posible aprender por cuenta propia únicamente practicando con las imágenes anteriores. Pueden intentar con este ejercicio en un bloc de notas o editor de texto sencillo como calentamiento:

mop map mop map mop map
mop map mop map mop map
mop map mop map mop map
 ...
dec sec dec sec dec sec dec 
dec sec dec sec dec sec dec
dec sec dec sec dec sec dec 

 Deben mantener la vista fija en la pantalla sin voltear hacia los dedos y respetando la asignación de teclas de cada dedo. Si nunca lo han hecho antes será bastante difícil. Notarán que una de las cosas más difíciles es retomar la misma posición después de borrar o después de cada nueva linea (enter). Lo importante es tener mucha paciencia hacerlo muy muy lento al principio. Los resultados los verán poco a poco y les aseguro que valdrán la pena, en especial si siempre han querido escribir como hackers en frente de una terminal.

Una buena herramienta de práctica la pueden encontrar en esta página:


Insisto, no se fijen en los errores ni en las palabras por minuto de sus primeras prácticas. Comiencen lento. Tal vez pasen días antes de sentirse fluidos. La cosas en nunca dejar de practicar. 

viernes, 19 de abril de 2019

Fenestra Coeli Apertae

Johann Jakob Scheuchzer. Fenestra Coeli Apertae (The Windows of Heaven were Opened), Physica Sacra. 1731.

jueves, 28 de marzo de 2019

De regreso en la divulgación

La semana pasada y antepasada, di unas charlas sobre comunicaciones por radio en una primaria al sur en Mérida. Use mi dongle de SDR FunCube. Noté que a los niños les llamó bastante la atención el "arcoíris de radio" (como les digo para hacer referencia al espectrograma) y la demodulación del FM qué hago con SDR# en tiempo. No pude controlar a los de 4to mucho tiempo (son los de esta foto) pero los de 6to estuvieron muy tranquilos y entendieron perfectamente bien cómo funciona la modulación digital FSK y ASK. En todos los años que llevo haciendo divulgación científica he visto una y otra vez la capacidad de los niños de entender conceptos complejos si se encuentra la manera adecuada de presentarlos. Me molesta bastante que se les trate como tontos. Afortunadamente me invitaron a un nuevo grupo de difusión científica llena de excelentes personas: Asociación Juvenil de Ciencia Yucatán. He estado en varios grupos de divulgación pero este verdaderamente tiene miembros con un equilibrio perfecto entre entusiasmo y talento. Esto es algo que no digo todos los días (i. e. soy muy mamón a la hora de evaluar proyectos y personas) y aún más curioso considerando sus edades, la mayoría estudiantes de segundo semestre. Llevo poco tiempo conviviendo con los miembros y en sus eventos ya he hecho nuevos amigos muy interesantes. El tipo de amigos que me hubiera gustado tener en mis primer año en Puebla.

martes, 26 de marzo de 2019

Sobre el por qué documentarlo todo

Como a muchos, si no es el caso de la mayoría, odiaba documentar mis proyectos en la universidad hasta que entendí su utilidad. Los problemas, sin importar su tipo, están muy a menudo relacionados unos con otros. Cada problema que resuelves puede significar tiempo ahorrado en un problema futuro. Entre más problemas hayas resuelto, mejores son tus probabilidades de resolver tus siguientes problemas en menor tiempo. Pero esta experiencia no se organiza de forma automática en tu mente (bueno fuera que si). Para aplicar el principio que comento es necesario llevar un registro detallado de tus soluciones. Esta es mi regla: "documenta como si tú yo del futuro fuera a olvidarlo todo". Es decir, no puedes confiar en que el futuro seguirás teniendo en la memoria todos los pequeños detalles que le dieron contexto a tus soluciones. En otras palabras, "date a ti mismo la solución que te hubiera gustado que te cayera del cielo en ese momento". No es necesario ser muy formales en la redacción si es una documentación personal. Tengo varias libretas de "Príncipe Mestizo" llenas de taches y correcciones con lo que funcionó y no funcionó, y este mismo blog es también la versión on-line de mis apuntes. Tan pronto vean los resultados de esto amarán registrarlo todo. Siempre y cuando lo hagan de una manera fácil de consultar cuando sea requerido, les garantizo placeres profesionales. 

lunes, 25 de marzo de 2019

Gráfica de lecturas de un DHT11 en Python

Esta nota corta será para no olvidar como hacer una gráfica en Python de un conjunto de mediciones de temperatura a lo largo del tiempo. El sensor utilizado en un DHT11 (que muy tardé me di cuenta que tenía muy baja resolución y que es mejor el DHT22). Generé un archivo de texto a partir de comunicación serial entre un PIC y una Raspberry Pi dónde cada linea tiene la siguiente estructura:

2019-03-22 23:11:33,22,46
fecha, temperatura, humedad relativa 

Algo muy útilil que aprendí a hacer es trasferir archivos entre un host local y la Raspberry a través de la red con un solo comando de consola. El comando es scp y su sintaxis es la siguiente para copiar del host local a la Raspberry :

$ scp /un/dir/local/archivo usuario@ipremota:/un/dir/remoto/archivo

Y de la Raspberri al host local:

$ scp usuario@ipremota:/un/dir/remoto/archivo /un/dir/local/archivo

Ya con el archivo en mi computadora, utilicé el módulo Pandas para leer el archivo .txt dónde registre cerca de dos dias y medio de datos de temperatura y humedad relativa. Aplique un filtro de mediana con el modulo scipy.signal para quitar los picos abruptos en los datos. Finalmente realice los ajustes necesarios para mostrar únicamente la hora en el eje x. El programa completo es el siguiente:

Gráfica:

martes, 19 de marzo de 2019

CIAA

Hace unos días en un grupo de Facebook me ayudaron con una duda que me tenía intranquilo y no puedo expresar lo agradecido que estoy. Me especialicé en sistemas digitales y comunicaciones y no sé nada de manejo robusto de transientes e interfaces en entorno industrial. Resulta que los benditos argentinos tienen un proyecto de hardware y software abierto de sistemas de cómputo para entornos industriales llamado CIAA (Computadora Industrial Abierta Argentina). Tienen absolutamente todo lo que requería, diagramas de la circuitería de protección, documentación, tesis, pruebas ¡Todo! Esto me ahorra meses enteros de trabajo. Tenía muchas dudas sobre el como implementar circuitos de protección robustos para tarjetas de aplicación de microcontroladores (PIC, AVR, STM32, etc.) aptas para soportar las condiciones de un entrono industrial. Este es el el espíritu del hardware y software abiertos que tanto defiendo: llegar más lejos echándonos la mano entre todos.

lunes, 18 de marzo de 2019

LCD en MPLAB X / XC8

Había comentado en una entrada pasada que las nuevas versiones de XC8 dejaron de usar Peripheral Library y en esa misma entrada explico el truco que pueden hacer para utilizarla. Sin embargo, los usuarios de PIC's modernos deben saber lo cómodo que es usar ahora MCC. Pero también habrán notado que no hay un generador de código para el manejo de LCD's.  Así que he hecho un fork en GitHub de una librería hecha por Manolis Agkopian a la que hecho una mínima modificación para poder usarla en el PIC18F45K50. Pueden acceder a los códigos aquí. Esta librería me parece genial porque te permite usar el puerto que quieras, a diferencia de la mayoría que he visto que te limitan a un puerto fijo (que debes modificar si quieres usar otro). Lo único que deben hacer es agregar los archivos lcd.h y lcd.c a los headers de su proyecto. Como aún hay muchos usuarios del PIC18F4550 voy a poner aquí un ejemplo con él.  Usaré una tarjeta Miuva a 48 MHz: