Experimentación Ondas Cerebrales

Recientemente tuvimos la oportunidad de experimentar un poco con un sensor de ondas cerebrales (Emotiv Insight) que nos ha servido de introducción al fascinante mundo de los BCI (Brain-Computer Interface)

El proyecto que nos trajo a este punto trata de desarrollar formas de comunicación adicionales para personas con algunas dificultades físicas para comunicarse, incluyendo peronas con dificultades para el habla, la escucha o diversos niveles de parálisis cerebral.

En este artículo quiero condensar un poco una propuesta para una metodología de experimentación que nos permita capturar datos de este tipo de dispositivos y que sirvan de insumo para crear modelos de aprendizaje de máquinas que a su vez nos lleven a desarrollar modelos de interpretación de las ondas y por ende los deseos o necesidades de las personas.

Metodología de Experimentación

  1. Definir un repositorio para la documentación oficial de cada experimento y para los resultados de los experimentos.
  2. Definir personas y roles: facilitador, sujeto de experimentación, observadores.
  3. Definir objetivos y metas del experimento
  4. Definir características de los sujetos de experimentación.
  5. Definir un ambiente controlado para minimizar los estímulos no esperados y el ruido
  6. Establecer un guión o protocolo de pasos, tiempos y clases para el experimento,
    1. Definir tareas a realizar: preparación, arranque, ejecución, finalización y cierre.
    2. Identificar estímulos Intencionales: preparación, arranque, ejecución, finalización, cierre
    3. Identificar estímulos no intencionales: derivados, ruido aceptable, ruido no aceptable (invalidación temprana del experimento)
  7. El resultado de cada experimento será un archivo con la información sensada y la pre-clasificación de los diferentes eventos o estímulos ocurridos detectados por el observador. Este archivo se usará para generar modelos de aprendizaje de máquinas que nos permitan estudiar y entender los fenómenos documentados en cada experimento.

Como siempre, sus comentarios para enriquecer esta metodología serán de gran valor para nosotros.


Haga clic acá para una plantilla de ejemplo


Algunas Referencias Interesantes:

Sensor de Proximidad LV-MaxSonar-EZ

En esta entrada 2017-04-27_2207queremos compartirles algunos detalles técnicos de un sensor que hemos estado explorando recientemente. Se trata de  la línea de sensores ultrasónicos fabricados por MaxBotix.Inc LV-MaxSonar-EZ, que poseen las siguientes ventajas:

  • Rango de detección: Son capaces de detectar objetos casi 7 metros de distancia.
  • Multiples Interfaces: Pueden ser leídos de diferentes formas: Ancho de pulso, RS232 Serial y Voltaje Analógico.
  • Versatilidad de Alimentación: Funcionan con una alimentación desde 2.5V hasta 5V.
  • Tamaño: Un diseño pequeño y muy ligero.

Esta línea de sensores posee 7 pines con las siguientes especificaciones:

Pin 1 (BW): Deje abierta o mantenga baja para salida en serie en la salida TX. Cuando el pin BW se mantiene en alto, la salida TX envía un Pulso (en lugar de datos en serie), adecuado para encadenamiento de bajo ruido.

Pin 2 (PW): Este pin emite una representación de ancho de pulso de rango. La distancia se puede calcular utilizando el factor de escala de147uS por pulgada.

Pin 3 (AN): Da salida al voltaje analógico con un factor de escala de (Vcc / 512) por pulgada. Una fuente de 5V produce ~ 9.8mV / pulgada mientras que una de 3.3V produce ~ 6.4mV / pugada. La salida se almacena en búfer y corresponde a los datos de rango más recientes.

Pin 4 (RX): Este pasador está internamente tirado hacia arriba. El LV-MaxSonar-EZ medirá continuamente el alcance y la salida si RX los datos se dejan sin conexión o se mantienen altos. Si se mantiene bajo, el sensor dejará de variar. Trae alto para 20uS o más para comando una lectura de rango.

Pin 5 (TX): Cuando el BW está abierto o se mantiene bajo, la salida TX entrega serial asíncrono con un formato RS232, excepto las tensiones son 0-Vcc. La salida es un capital ASCII “R”, seguido de tres dígitos de carácter ASCII que representan el rango en pulgadas hasta un máximo de 255, seguido por un retorno de carro (ASCII 13). La velocidad en baudios es 9600, 8 bits, no paridad, con un bit de parada. Aunque el voltaje de 0-Vcc está fuera del estándar RS232, la mayoría de los dispositivos RS232 tienen Margen suficiente para leer los datos en serie 0-Vcc. Si se desea un nivel de tensión estándar RS232, invierta y conecte un RS232 convertidor tal como un MAX232. Cuando la clavija BW se mantiene alta, la salida TX envía un solo impulso, apto para ruido bajo encadenamiento (Sin datos en serie).

Pin 6 (+5V- Vcc): Funciona en 2.5V – 5.5V. Capacidad de corriente recomendada de 3mA para 5V, y 2mA para 3V.

Pin 7 (GND): Conexión de retorno a tierra. El suministro de electricidad debe ser libre de ruido y libre de risado para una operación óptima.

Pueden ser utilizados en interiores y/o exteriores, sin embargo, una desventaja que posee esta línea de sensores es que si se necesita una lectura al 100% de las distancias por la física ultrasónica el sensor presenta un error a las 6pulgadas(15cm) aproximadamente.

Según la cantidad de voltaje con la que alimentemos el sensor los parámetros de onda y distancia van a cambiar.

2017-04-27_2207_001

Acá les dejo enlaces donde pueden los códigos para utilizar un los sensores de proximidad ultrasónicos mediante el formato de lectura Pulse Width(Ancho de Pulso):

  • Single Sensor: http://www.maxbotix.com/documents/Arduino%20Codes/LV-MaxSonars/LV_MaxSonar_PW.ino
  • Multiple Sensors: http://www.maxbotix.com/documents/Arduino%20Codes/LV-MaxSonars/LV_MaxSonar_PW_Chain.ino

NOTA: Si se utilizan múltiples sensores, debe de haber un espacio optimo entre cada uno de ellos, porque pueden existir interferencias y retornar valores erróneos para su lectura.

Tips para Impresión 3D con Printbot

Hace unos meses adquirimos unos Printbot Simplemetal de CRCibernetica.

El servicio que nos brindaron fue realmente excepcional. Parte de el servicio fueron unos tipos que nos enviaron por email, que me han resultado utiles al tratar de imprimir en 3D. Así que he decidido transcribirlos acá.

Aunque es probable que algunas instrucciones no apliquen para las versiones más recientes de Cura o de Printbot, espero que sea de utilidad a muchas otras personas.


Materiales requeridos:

  1. 3M Blue Masking Tape
  2. Alcohol de Fricción
  3. Algodón para aplicar el alcohol

Instrucciones Básicas

  1. Usar la version 15.04 de Cura (NO USAR LA ULTIMA VERSION):
    https://ultimaker.com/en/cura-software/list
  2. Seguir el setup Wizard seleccionando su impresora (Printrbot Metal Simple)
  3. Bajar el Profile “Getting Started.ini” de Printrbot:
    https://printrbot.zendesk.com/hc/en-us/articles/203814574-Getting-Started-Profile
  4. En Cura: File–>Open Profile y seleccionar el archivo “Getting Started.ini”
  5. En Preferences cambiar Printing Window type de “Basic” a “Pronterface UI”
  6. Cambiar Printing temperature(C) de 210 a 195. (Importante)

Cuando imprime, la impresora va a hacer los siguientes pasos:

  1. El “hot end” va a calentar al 195. (dura 1 minuto)
  2. Se va a mover a “Home” usando los switches de limite.
  3. Se va a iniciar el proceso de “Auto-Nivel” y mapear tres puntos en la cama.
  4. Va a empezar a imprimir.
  5. Cuando termina de imprimir se va a mover a “Home”.

Para crear sus propios modelos recomendamos tinkercad.com. Es gratuito y fácil de aprender. También sirve para “sanar” modelos de otras aplicaciones.

El sitio thingiverse.com tiene modelos 3D que se puede bajar.  Yo siempre busco alli antes de crear algo desde cero.

El spool holder que yo estoy utilizando es este:
https://www.youmagine.com/designs/printrbot-simple-filament-spool-holder-no-aluminum-handle

Impresión por SD Card

Si quiere imprimir directamente de un SD Card:

  1. Asegura que su impresora no esta conectada a su PC.
  2. Insierte un sd card en su PC
  3. En Cura, notar que el icono que normalmente apreta para imprimir ahora dice “SD”.
  4. Apreta este boton para copiar el GCode directamente al SD Card.
  5. Cambiar el nombre del archivo en el SD card a “auto0.g”. Asegura que NO tiene la extensión .gcode
  6. Con la impresora apagada insierte el SD Card.
  7. Prende la impresora.
  8. Tarda varios minutos en calentar y comenzar a imprimir. Puede tardar hasta 10 minutos.

El slot del SD Card no esta posicionado muy bien.  Para no tener que usar un alicate yo uso este holder que se puede imprimir usando la impresora: http://www.thingiverse.com/thing:416217

Intel Joule – Primeros Pasos

___fadd2efe-349e-4ec3-b03e-b6fbd6b6ebfe-imageId=0a6ed59a-7a19-4839-b801-9691e0c0ae4a (1)En nuestra publicación anterior hicimos un breve recorrido sobre las especificaciones del Joule de Intel, una tarjeta de desarrollo pensada para adentrarnos en el mundo de las aplicaciones de alta demanda computacional en dispositivos pequeños, ya sea vestibles o de tamaño reducido; especialmente sistemas de análisis de imágenes 3D de cámaras Intel Real Sense.

En esta ocasión iremos paso a paso por los tutoriales de Intel sobre cómo empezar a desarrollar soluciones en esta magnífica plataforma.

Para esto nos basaremos en la guía de usuario suministrada por el fabricante mientras tratamos de resumir y enfocarnos en los aspectos más importantes.


1 Materiales Requeridos

Comencemos por los diferentes materiales que serán necesarios para nuestro primera incursión funcional.

  1. Una Plataforma de Desarrollo Intel Joule 570x (enlace)
  2. Un disipador de calor (suministrado con la plataforma)
  3. Fuente de poder 12V, 3A (En este tutorial nosotros usamos una de 12V, 2A) conector de barril de 5mm con centro positivo de 2.1mm
  4. Cable micro-USB tipo B para la comunicación serial con el dispositivo (cable no incluido en el kit). Es el tipo de cable con que actualmente cargamos los telefonos Andriod.
  5. Teclado USB. Nosotros utilizamos un teclado inalámbrico con ratón marca Microsoft sin mayor problema.
  6. Cable HDMI macho estándar a macho conector micro
  7. USB Hub: Opcionalmente un concentrador USB (hub) con suministro eléctrico independiente (en caso de querer conectar dispositivos que demanden más de 900mA)
  8. Bluetooth: Opcionalmente también se pueden conectar dispositivos de teclado y ratón vía Bluetooth.
  9. Computador Anfitrión: Se necesitará un computador para programar el Joule.
    • Para actualizar el BIOS del Joule será necesario un computador anfitrión con sistema operativo Windows 8, 8.1 o Windows 10.
    • El sistema operativo que se vaya a utilizar en el Joule introduce algunas dependencias en el computador anfitrión que se use para programarlo. Así, si se utiliza LINUX de referencia que provee Intel o si se utiliza Ubuntu para IoT, se puede usar un computador anfitrión con sistema operativo Windows, Linux o Mac. Pero si el sistema operativo del Joule es Windows IoT, el computador anfitrión deberá estar equipado con sistema operativo Windows 10 y demás especificaciones de Microsoft descritas acá.

2 Ambientes de Desarrollo de Intel

El Intel Joule se puede programar de muy diversas formas. Intel recomienda usar alguno de los siguientes sistemas para programara la plataforma:

  1. Intel System Studio IoT Edition para Windows, Mac, o Linux en  caso de querer programar la plataforma mediante lenguajes como C/C++ o Java. Nótese Intel System Studio para Linux requiere Ubuntu 16.04 LTS como sistema operativo anfitrión en 64bit.
  2. Intel XDK tambien para Windows, Mac o Linux, en caso de querer programar la plataforma con NodeJS

(!) En esta publicación utilizaremos Intel XDK tanto en un anfitrión Linux (Mint 18) como en Windows 10.


3 Requisitos para Instalación del Sistema Operativo del Joule

La plataforma Intel Joule trae de fábrica una versión optimizada del sistema operativo LINUX. Se recomienda actualizarla ya sea a la imagen más reciente o a alguna versión de Ubuntu Desktop o de Windows for IoT.

Dicha actualización requiere:

  1. Flash Drive de tipo USB 3.0 con 16GB de capacidad conectado a un USB HUB con alimentación independiente. Puede ser USB 2.0 pero la transferecia de datos tendrá una tardanza notoria.
  2. Tarjeta MicroSD de 16GB (puede usarse un Flash Drive adicional si se trata del LINUX de referencia)
  3. El computador anfitrión deberá tener capacidad de leer la tarjeta del punto #2 anterior.
  4. Instrucciones (En inglés) para la actualización del sistema operativo

4 Ensamblando la Plataforma de Desarrollo

Este enlace provee instrucciones muy completas y sencillas sobre cómo preparar / ensamblar los diferentes elementos de la plataforma desarrollo. Se incluyen en dicho enlace pasos importantes como:

  1. Instalación del disipador de calor
  2. Antenas
  3. Instalación de espaciadores

5 Sobre el sistema operativo de la plataforma

En este enlace se describe en detalle las principales opciones de sistema operativo las cuales incluyen:

  1. Ubuntu Desktop 16.04 LTS
  2. Ubuntu Core 16.04 LTS
  3. Windows 10 IoT Edition
  4. Linux de referencia para IoT

6. Actualizando el BIOS

Un primer paso importante en el uso de Joule consiste en actualizar el BIOS. Es el software que orquesta ya carga del sistema operativo y otras funciones de entrada/salida.

El procedimiento es realmente sencillo, nos ha tomado unos 20 minutos en realizarlo. Se describe en este enlace:

https://software.intel.com/en-us/flashing-the-bios-on-joule


7. ¿Qué sigue?

En nuestra siguiente entrega estaremos explorando la instalación de Windows 10 for IoT en el Joule.

Comenzando con Intel Galileo

IMG_20161206_202348Tomando en cuenta una pequeña comunidad que hay acá en C.R. sobre Intel Galileo GEN2, acá les presentamos un pequeño resumen introductorio.

La línea Galileo de Intel parece estar más orientada a la parte didáctica de microcontroladores que funcionan con ARDUINO mezclada con Micro-computadores que corren LINUX.

Enlace con Especificaciones

Para “iniciar” con este dispositivo no se necesita mayor cosa, solo un cable de tipo USB-a-microUSB (~$6) para programarlo mediante el ambiente ARDUINO IDE. Es el mismo tipo de cable que se usa para cargar una mayoría de teléfonos Android desde una PC.

Hay un tutorial en Inglés acá: https://software.intel.com/en-us/get-started-galileo-windows

Para sacarle mayor provecho se recomienda tener lo siguiente:
• Tarjeta Micro SD de 2GB a 32GB (crcibernetica ~$8) Para instalar una versión LINUX personalizada
• Cable de tipo “6-pin Serial to Type A USB cable (FTDI cable # TTL-232R-3V3 is recommended ($20 en Amazon)” o interfaz USB/SERIAL/FTDI tipo FOCA 2.2 ($ 11 en crcibernetica) Para acceder a la consola LINUX
• Tarjeta WiFi para laptop (Centrino N135 o Centrino 6205 ~$11-$14 en Amazon) para darle conectividad WiFi. Ambas tarjetas requieren este accesorio.

La presentación estándar de Intel Galileo GEN2 incluye la fuente de poder.

El dispositivo puede ser programado con ARDUINO IDE o mediante la plataforma LINUX que corre.