jueves, 14 de diciembre de 2017

Curioseando con LabView


LabView es una herrramienta desarrollada por National Instrument que permite de manera muy fácil a científicos e ingenierios programar interfaces (fuera códigos, solo diseño de interfaces) para interactuar con elementos hardware.

Hasta ahora estaba acostumbrado a interactuar con mis proyectos a través de una simple ventana de comandos o un trazador gráfico pero con este nuevo alto nivel de programación puedo interactuar directamente con los botones, barras, gráficos y prácticamente todo lo que quiera sin complicaciones.
Si bien es cierto que antes también podía (con Qt o cualquier entorno de desarrollo de programación), LabView está enfocado a sistemas embebidos o interacción directa con hardware para su monitorización o adquisición de datos para instrumentacion virtual.

Por la parte que me toca, he probado a establecer un enlace radio con Arduino programado con LabView.
  • He colocado un barato transmisor 433 Mhz en algún PIN digital de mi Arduino MEGA.
  • He cargado el sketch con el IDE de Arduino su firmware para que se "entienda" con LabView.
  • He programado el comportamiento en LabView que describe el siguiente algoritmo:
  1. Inicializa la comunicación con Arduino y selecciona el modo de funcionamiento de los pines.
  2. Ejecuta con un bucle for (hasta que el usuario no pulsa STOP o ocurre algún error) los siguientes puntos:
  3. Lee el estado del PIN en donde tenemos conectado el módulo de transmisión.
  4. Invierte el estado con una simple expresión matemática (no he encontrado otra manera, por ahora, de hacerlo porque no es un tipo booleano lo que retorna el bloque de READ Arduino).
  5. Escribe en el PIN deseado el estado invertido (si es 0, será 1 y a la inversa).
  6. Espera un tiempo X ms (leído desde el slider que cambiaremos en tiempo real desde el Interfaz del usuario) para volver a ejecutar el bucle for.
  • Finalmente he comprobado si realmente está transmitiendo los pulsos con el periodo deseado (un slider) con un escáner de frecuencias.
Diagrama de bloques e Interfaz del usuario

 
Comprobación de pulsos del transmisor con escáner de frecuencias

Hay cantidad de manuales y tutoriales obre Arduino-LabView para su instalación y manejo, os invito a realizar una rápida búsqueda por Google para que vosotros mismos aprendáis.

viernes, 1 de diciembre de 2017

Simple Analizador Lógico

El otro día tuve un cierto contratiempo en una de las tareas de la Universidad.
Se trataba del examen práctico del montaje y funcionamiento de un circuito. El circuito es relativamente simple pero la cantidad de cables necesarios para interconectar todos los dispositivos hacen que puedas confundirte o dejarte algún PIN sin conectar. En teoría, tenemos hasta 4-6 horas para el diseño, simulación y montaje del circuito completo (El diseño, la simulación y el montaje se puede realizar en casa, excepto su comprobación).

La gracia de todo esto es que para comprobar realmente el circuito, es necesario un instrumento del laboratorio llamado Analizador Lógico realmente caro, algo que no tenemos en nuestra casa y esas 4 horas se reducen solo a comprobar el circuito. Hay que tener en cuenta que hay que medir 16 canales y rezar para que funcione como es debido (No creo que nadie, nunca, le haya salido bien a la primera medida). Para muestra un imagen del circuito montado:
 

El circuito a diseñar y montar es relativamente simple, se trata de un circuito tipo Pipeline con realimentación con 4 modos de funcionamiento M(1:0) que realizan las siguiente funciones:
  1. Carga del dato en paralelo.
  2. Desplazamiento del dato a la derecha con señal SR como dato nuevo de entrada.
  3. Complemento del dato a la salida
  4. Incremento del dato de salida.
Las señales del esquemático se representan en el analizador lógico (ver solución) siguiente siguiendo este orden:
  • Señal reloj, modo de funcionamiento y SR - CLK,M0,M1,SR - Canales (15:12)
  • Datos de entrada - D(3:0) - Canales (11:8)
  • Dato siguiente de salida - S(3:0) - Canales (7:4)
  • Dato de salida - DX(3:0) - Canales (3:0)
 Esquemático

Por desgracia, mi compañero de esta práctica y yo no lo hemos podido hacer funcionar el dia del examen y hemos tenido que recurrir a un dia extra. Por lo que el siguiente dia, o funciona, o no funciona.

SOLUCIÓN:
Comprobar el circuito montado desde casa y que sabemos que va a funcionar si o si con un Analizador Lógico simple realizado con Arduino (MEGA, ya que disponible de 16 canales Analógicos).

La idea es utilizar los canales analógicos para muestrear las señales y autogenerar cada flanco de subida y bajada de manera manual mediante algún PIN digital. Como no estamos sometiendo nuestro circuito a estudios de tiempo (introduciendo altas frecuencias de reloj) podemos estar seguros de que el cumplimiento de tiempos es correcto, ya que solo queremos saber su función lógica.

El resultado es realmente satisfactorio y he podido comprobar su funcionamiento en el Serial Plotter del IDE de Arduino:


He subido el código de Arduino a GitHub de forma pública para que cualquiera pueda realizarlo (creédme, es MUY sencillo si estáis ante un problema como este). Lo tenéis disponible aqui.

Hasta la próxima.

martes, 31 de octubre de 2017

Démosle forma

Para que un proyecto salga adelante hay que darle forma y tener claro lo que vamos a hacer, así como sus requisitos.
En primer lugar, pensé en ponerle un nombre tal como "Puto aparcamiento" o "The Fucking Parking Slot Finder" (el último me lo acabo de inventar escribiendo estas líneas) pero aún no me he decidido, de momento no es relevante.

Me he tomado la libertad de realizar un pequeño diagrama de bloques, sin entrar en detalles técnicos, cual sería la idea del proyecto.



A grandes rasgos, el sistema recoge datos de una camara y los envía al movil en tiempo real, de hecho, ese sería el MVP (Producto Mínimo Viable). Pero quisiera ir mas allá y utilizar sistemas de Deep Learning para intentar mejorar la eficiencia y el procesado de datos para interpolar los datos y utilizarlos en el caso de que no existan cámaras disponibles, o simplemente, quiera saber algún dato que aún no se ha recogido.

Teniendo en cuenta este diagrama, iré de menor a mayor complejidad y por etapas. De hecho, lo mas simple es intentar conseguir algún modulo para la camara de arduino y "jugar" con este para ver el procesado de imagen (he visto que arduino es MUY malo para este tipo de procesado, pero creo que en ciertos casos se pueden hacer "trucos"... ya veremos si al final tengo que cambiarlo por otro uC / uP u omitir esta etapa) y hacer debug con un PC mediante el serial.

Por regla general, las etapas que seguiré será como el flujo del diagrama, es decir, desde que se recoge una muestra hasta que está totalmente procesada.

Sin más, hasta la próxima.

domingo, 15 de octubre de 2017

Aquí no hay sitio.

Lo cierto es que no se por donde empezar pero sé que es algo que molesta a muchos conductores.

Y es que, a la hora de encontrar aparcamiento en la vía pública en un lugar transitado puede ser tedioso, yo mismo he llegado a estar hasta 45 minutos intentando buscar sitio.

Si, claro, hay dispositivos que te indican cuantos sitios hay libres antes de entrar por una calle pero el sistema tiene una fiabilidad del 70%, al menos en mi zona se suele cumplir ese porcentaje. El sistema de detección se basa en sensores de aproximación (e incluso en algunos lugares de luz), probablemente ultra sonidos.

Pero, ¿Que ocurre si dos vehículos estacionan de manera que justo coloquen el espacio que los separa encima del sensor? Pues que el sistema indica que hay un aparcamiento libre, cosa que no es cierta.

Esto me ha llevado a desconfiar totalmente de estos sistemas y prescindir de ellos.

Un buen día, mientras llegaba a mi casa buscando aparcamiento y bastante mosqueado por no encontrar sitio después de acudir a una reunión sobre un trabajo (1) que utiliza procesamiento de imagen y reconocimiento y Deep Learning se me ocurrió que también se podría implementar para este caso.

Mas tarde (o mejor dicho, ayer) descubrí que ya existen algoritmos y sistemas entrenados para el reconocimiento de parkings.

Por lo tanto y llegado al nivel de conocimientos que he adquirido durante mi vida académica, creo interesante poder hacer esto por el nivel de complejidad técnica y “satisfacción” que puede llegarme a dar.
Tengo la suerte de vivir en un piso alto, por lo que podría situar un dispositivo permanente en mi propia casa.

Dicho esto, tengo que plantearme el proyecto desde el punto de vista técnico y logístico o fechas límites ya que hasta ahora solo había hecho especulaciones.

Hasta la próxima.

(1) : El trabajo era de una asignatura de la Universidad sobre la monitorización en tiempo real mediante procesado de imagen del campo de juego y geolocalización indoor mediante RF de jugadores para medir su posición, mapas de calor, movimientos del jugador, probabilidad de que el jugador se encuentre en A o B en ataque o defensa, en definitiva, BIG DATA con los datos proporcionados en tiempo real.