Category Archives: Evaluaciones de Productos

Neural Compute Stick Movidius

20 Nov , 2017,
Rebeca Rodriguez Tencio
,
No Comments

En los últimos años se escuchado el término de “machine learning” y los procesos que han existido para el análisis de los datos normalmente han sido ejecutados a través de la nube, sin embargo el Neural Compute Stick Movidius INTEL viene a ofrecer una alternativa adicional al proceso a través de un procesamiento local.

El Movidius Neural Compute Stick es el primer kit de aprendizaje basado en USB, que permite acelerar el entrenamiento de AI (Inteligencia Artificial), con una capacidad de procesamiento de una red neuronal.

El dispositivo utiliza una VPU (Vision Processing Unit) Myriad 2 personalizada que ofrece una potencia de 100 GFLOPs con un consumo de 1 vatio y 4GB de memoria LPDDR3, sin embargo una de las características que más me llamo la atención es el “multi-stick”, lo que permite utilizar varias unidades del Movidius Neural Compute Stick para que trabajen en forma conjunta (Si se conectaran 4 Movidius, tendríamos 400 GFLOPS de potencia, lo que es increíble para un USB que tiene un precio $79).

Caracteristicas relevantes:

  • Compilar: Movidius convierte automáticamente una red neuronal convolucional (CNN) basada en Caffe y ya entrenada en una red neuronal integrada y optimizada para operar directamente en la VPU Myriad 2 de Movidius.
  • Ajustar: Permite realizar ajustes efectivos para obtener un rendimiento óptimo con datos reales y con un consumo ultra bajo. Los scripts de validación permiten comparar la precisión de los modelos optimizados en el dispositivo con la de los modelos originales.
  • Acelerar: El Movidius Neural Compute es el único capaz de actuar como un acelerador periférico de redes neuronales añadiendo la capacidad de aprendizaje profundo a las actuales plataformas informáticas para mejorar el rendimiento y la eficiencia.

Conceptos relacionados:

  • VPU (Vision Processing Unit): Es un tipo de acelerador diseñado para procesamiento de argumentos gráficos, como redes neuronales profundas, estimación de pose, detección de profundidad 3D, entre otros.
  • CPU Risc (Reduced Instruction Set Computer): No se trata de usar pocas instrucciones, si no de simplificar la carga de datos de memoria sin realizar operaciones sobre ellos.

NOTA: La siguiente imagen es con fines ilustrativos, únicamente para conocer el Neural Compute Stick por dentro, no intente esto en casa!

Modelando Bases de Datos Relacionales con XAMPP y phpMyAdmin

12 Sep , 2017,
Jose Nunez
, , , , , , ,
No Comments

Alguna vez habrán enfrentado la necesidad de modelar una base de datos relacional.

El mundo de bases de datos relacionales (RDBM) está regido por unos cuantos titanes en el tema. Desde Oracle, pasando por MS SQL Server y sin olvidar MySQL (y su hermana MariaDB) y PostgreSQL.

Para efectos de este artículo nos enfocaremos en MySQL y su nueva ramificación MariaDB.

MySQL forma parte de una pila de tecnologías web sumamente influyentes a nivel mundial. Nos referimos al “Stack LAMPP” que se traduce en Linux, Apache, MySQL, PHP/PERL.

En este conjunto de tecnologías, LINUX figura como un principal contendor en el mercado de sistemas operativos para servidores web (si es que existe tal cosa); mientras que Apache se desempeña como uno de los principales programas de servidor web a nivel mundial. Luego tenemos MySQL que es el componente de base de datos y finalmente PHP como lenguaje de programación para la web del lado del servidor.

Existen varios sistemas de instalación de la pila LAMPP; en nuestro caso usaremos una publicada por la organización ApacheFriends.org denominadada XAMPP. La “X” viene por la compatibilidad con sistemas operativos fuera de LINUX. Así XAMPP permite la instalación de la pila AMPP tanto en LINUX como en MS Windows y OSx de Mac.

A su vez, XAMPP trae algunas utilidades adicionales de las cuales vale la pena mencionar el sistema phpMyAdmin. Una herramienta avanzada que permite el diseño y manipulación de bases de datos MySQL.

Una vez que hemos descargado e instalado XAMPP en nuestro computador, y que nos hemos asegurado de que los servicios para Apache y MySQL están funcionando adecuadamente, podemos acceder al poder de XAMPP la dirección del servidor local: http://localhost/

La siguiente imagen muestra nuestra pantalla principal de XAMPP por medio del navegador.

Nótese entonces que en el menú superior a la derecha tenemos la opción “phpMyAdmin”

Seguidamente se ilustra como luce nuestra versión de phpMyAdmin en este momento.

Al lado izquierdo tenemos las diferentes bases de datos que están ya definidas en el servidor; mientras que a mano derecha tenemos el área de trabajo con diversos puntos de funcionalidad para editar bases de datos y cualquier otro elemento de base de datos.


PASO 1 – CREACIÓN DE BASE DE DATOS

Comenzamos este ejercicio haciendo clic en el nodo “New” que se encuentra a mano izquierda sobre la lista de bases de datos.

Esto nos muestra un formulario para crear una nueva base de datos que básicamente pregunta por el nombre de la base de datos y por el conjunto de caracteres (collation) predeterminado para la base de datos. Este parámetro define qué tipo de simbología usará la base de datos para almacenar texto. Uno de los conjuntos de caracteres más efectivos para occidente es el utf8 con sus variantes por idioma. Para este ejemplo que soporta símbolos en español y otros idiomas usaremos utf8_bin.

Una vez creada la base de datos podemos comenzar con el proceso de modelado.

Para esto utilizaremos el siguiente enunciado:

Se requiere diseñar una base de datos relacional para manejo de inventarios. El inventario contabiliza las cantidades disponibles de productos de diversos tipos; tomados del catálogo de productos que vende la organización. Para efectos de inventario se tienen dos tipos de producto: (1) los productos “serializables” que son productos que se pueden identificar de manera única (por número de serie asignado por el fabricante) y (2) los productos “a granel” que no se pueden identificar de manera unica sino por cantidades, por ejemplo 1 Kg de tornillos, o 300 destornilladores. El inventario se maneja en diversas bodegas y a su vez se contabilizan las entradas y salidas de inventario para y desde cada bodega.

Con este enunciado vamos a dar un siguiente paso para la identificación de los elementos fundamentales del modelo conceptual, es decir las entidades y sus relaciones.


PASO 2 – Identificación de Elementos

Una técnica que proponemos para esto es la de marcar el enunciado con un color (azul) aquellas partes que describen una entidad y con otro color (verde) aquellas partes que describen una relación. Así el enunciado queda de la siguiente manera:

Se requiere diseñar una base de datos relacional para manejo de inventarios. El inventario contabiliza las cantidades disponibles de productos de diversos tipos; tomados del catálogo de productos que vende la organización. Para efectos de inventario se tienen dos tipos de producto: (1) los productos “serializables” que son productos que se pueden identificar de manera única (por número de serie asignado por el fabricante) y (2) los productos “a granel” que no se pueden identificar de manera única sino por cantidades de alguna unidad de medida; por ejemplo 1 Kg de tornillos, o 300 destornilladores. El inventario se maneja en diversas bodegas y a su vez se contabilizan diferentes movimientos como entradas y salidas de inventario para y desde cada bodega.

De esta forma hemos identificado las siguientes entidades:

  1. Catálogo de Producto
  2. Tipo de Producto
  3. Unidad de Medida
  4. Bodega
  5. Movimiento
  6. Tipo de Movimiento
  7. Fabricante

También se identifican algunas relaciones:

  1. Catálogo de Producto >==> Tipo de Producto
  2. Catálogo de Producto >==> Fabricante
  3. Catálogo de Producto >==> Unidad de Medida
  4. Movimiento >==> Tipo de Movimiento (entrada/salida)
  5. Movimiento >==< Bodega

Finalmente algunos atributos relevantes son:

  1. Número de serie
  2. Cantidad
  3. Nombre del Producto
  4. Nombre de Bodega
  5. Descripción de Unidad de Medida
  6. Nombre de Tipo de Movimiento

PASO 3 – Modelo Conceptual

Una vez identificados los elementos básicos del modelo de datos, podemos realizar un diagrama de Entidad-Relación que nos permita comunicar cuales son las entidades que componen el modelo y como se relacionan entre si.

Aunque basta con Power Point o algun otro software que nos permita generar cajitas y conectarlas con líneas; en nuestro caso usaremos el poder de phpMyAdmin.

Para esto tomamos cada entidad y definimos las tablas respectivas con los valores más fundamentales que podemos pensar para cada entidad:

  1. Tipo de Producto (Código de Tipo de Producto, Descripción)
  2. Unidad de Medida (Código de Unidad de Medida, Descripción)
  3. Fabricante (Código de Fabricante, Nombre)
  4. Catálogo de Producto (Código de Producto, Descripción, Código de Tipo de Producto, Código de Fabricante, Código de Unidad de Medida)
  5. Bodega (Código de Bodega, Descripción)
  6. Tipo de Movimiento (Código de Tipo de Movimiento, Descripción)
  7. Movimiento (ID de Movimiento, Código de Bodega, Código de Producto, Código de Tipo de Movimiento, Cantidad)

Nótese que hemos reorganizado las entidades de forma que primero se definen aquellas de las cuales hay dependencia en otras entidades. También debemos acotar que los nombres de las tablas (entidades) y sus atributos los realizamos usando una nomenclatura estándar, donde “cd” refiere a código, “dsc” refiere a descripción y “id” refiere a identificador numérico automático. Se usan ID’s en las entidades transaccionales, mientras que se usan códigos en las entidades tipificadoras.

La siguiente imagen muestra cómo se definen los campos básicos de una tabla (entidad). Para poder acceder a este formulario se hace clic en el nodo de base de datos “inventario” a la izquierda. En el área de trabajo hay una opción para iniciar la creación de una tabla (entidad) con una cantidad predeterminada de columnas (atributos)

 


PASO 4 – Modelado de las Relaciones

Una vez definidas las entidades (tablas) podemos visualizarlas usando el área de la izquierda, expandiendo los nodos correspondientes como se muestra en la siguiente imagen.

A su vez, si hacemos clic en la base de datos “inventario” podremos acceder a la función “Designer” la cual nos permitirá ir construyendo las relaciones entre las entidades (tablas) mientras que construimos el diagrama Entidad-Relación correspondiente.

La siguiente imagen muestra la función de diseño, desde donde se pueden crear relaciones entre las diferentes tablas.

Si hacemos clic en “Toggle small/big” en el menú de la izquierda podremos ver todos los atributos.

También, si hacemos clic en “Create relationship” podremos seleccionar – primero – un atributo de tipo “llave primaria” y – segundo – un atributo en otra tabla de tipo “referencia foránea” y así conformar las relaciones.

De esta forma podemos ver el diagrama con relaciones logrado como sigue, el cual no solamente expresa las relaciones en sí, sino también la cardinalidad entre las entidades.

Volviendo al diagrama reducido a solamente las entidades podemos ver que queda así; incluyendo indicadores de cardinalidad entre las entidades.

Estos diagramas son sumamente útiles para discutir y razonar sobre el modelo de datos. A su vez se puede utilizar phpMyAdmin para agregar o modificar atributos en la fase de modelado detallado de la base de datos.

Comandos por BLE – (Parte 1 de 2) – El Receptor

21 Jul , 2017,
Jose Nunez
, ,
No Comments

Para continuar la exploración de la tecnología BLE que comenzó nuestra compañera Rebeca Rodriguez Tencio acá, les presentamos este primer tutorial de dos relacionados. La idea es poder implementar una forma de enviar comandos a una tarjeta de prototipado via Bluetooth Low Energy (BLE) desde una App de un teléfono Móvil.

En esta primera parte implementaremos un servicio “Comando LED” en un microcontrolador compatible con Arduino 101 llamado TinyTILE (basado en el chip Curie de Intel)

En la segunda parte, implementaremos una App (Android y IOS) usando IONIC 3 que le envía comandos al micro-controlador mediante el sistema BLE del teléfono.

(!) Antes de seguir estas instrucciones asegúrese de entender las Condiciones de Uso de nuestro sitio.

Primero: Programemos el Curie

En resumen:

  1. Necesitaremos un protoboard, un LED, una resistencia de 150 Ohm, un TinyTILE y un cable USB a micro-USB y una PC
  2. El circuito es muy sencillo:


  3. En la PC instalamos los controladores de placa “Arduino/Genuino 101” en el IDE de ARDUINO (V.1.8.2)
    • Menu: Tools >  Board > Board Manager > Search “Curie” > Instalar V 2.0.2 o superior.
  4. Descargamos el programa (sketch) de ejemplo de mi repositorio de Github y lo abrimos con el IDE de ARDUINO.
  5. Instalamos el boceto de ejemplo en la placa
    • Menu: Sketch > Upload
  6. Usamos una app para pruebas BLE denominada “BLE Scanner” para enviar comandos “ON” y “OFF”
  7. Nótese que hemos implementado una función “parpadear” que nos permite ver si el sketch arrancó adecuadamente.

Las siguientes imágenes ilustran el uso de BLE Scanner para enviar los comandos.

Seguidamente mostramos el código original del programa con los comentarios detallados sobre su funcionamiento. Es realmente sencillo; podemos resumirlo en:

  1. Definir un servicio BLE “ServicioBLE_Comando” (línea 5)
  2. Deinir una característica BLE “CaracteristiciaBLE_Comando” de tipo genérica, de lectura y escritura con mensajes de 20 bytes (línea 8)
  3. Darle un nombre al dispositivo “COMANDO LED” e inicializarlo, agregando el servicio y la característica (línea 19)
  4. Publicitamos el servicio (línea 23)
  5. Leemos eventos BLE en la característica (nuevos comandos) que luego son interpretados y ejecutados (líneas 31,33,57,61)
  6. Para esto convertimos el valor recibido a un String (línea 63)

 


#include <CurieBLE.h>
#define ledPin 13

//Definimos un servicio BLE
BLEService servicioBLE_Comandos("db938b80-f010-44b6-8aa9-1835adf9419a"); // create service

//Definimos una característica que pueda ser leida o escrita desde una central BLE, con capacidad de 20 bytes por mensaje.
BLECharacteristic caracteristicaBLE_Comandos("9906064e-9bbe-4eba-b415-bbd223f7d3d9", BLERead | BLEWrite, 20);

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); 
  delay(500); //Esperamos un poco de tiempo (500ms) por si se puede habilitar la terminal serial.
  parpadear(5,200);//Señalizamos con el LED que estamos iniciando el sketch
  
  BLE.begin(); //Inicializamos el sistema Bluetooth Low Energy (BLE) del Curie
  parpadear(2 ,100);//Señal de aviso de que la operación anterior fue exitosa
  
  BLE.setLocalName("COMANDO LED"); //Definimos un nombre para publicitar nuestro dispositivo
  BLE.setAdvertisedService(servicioBLE_Comandos);//Definimos el servicio que se va a publicitar
  servicioBLE_Comandos.addCharacteristic(caracteristicaBLE_Comandos); //Agregamos la característica al servicio
  BLE.addService(servicioBLE_Comandos); //Agregamos el servicio al dispositivo  
  BLE.advertise(); // Publicitamos el dispositivo
  parpadear(3 ,100);//Señal de aviso de que la operación anterior fue exitosa

  Serial.println("En este punto el dispositivo queda listo, publicitado y esperando conexiones...");
  parpadear(10,50);//Señal de aviso de que SETUP se concluyó satisfactoriamente
}

void loop() {
  BLE.poll(); // Obtenemos cualquier evento BLE que haya sido enviado al dispositivo

  if (caracteristicaBLE_Comandos.written()) { //Si hay datos, ejecutamos el comando
    leerYEjecutarComado();
  } // ... caso contrario simplemente se termina el flujo de loop()
}

/**
 * Este método lee el comando registrado en la característica BLE y lo ejecuta.
 */
void leerYEjecutarComado(){
    String valorDelComando = obtenerValorDelComando();

    if (valorDelComando.startsWith("ON")) {
      Serial.println("LED on");
      digitalWrite(ledPin, HIGH);
    } else {
      Serial.println("LED off");
      digitalWrite(ledPin, LOW);
    }
}

/**
 * Extraer el valor del comando en formato String
 */
String obtenerValorDelComando(){
    int longitudDelComando = caracteristicaBLE_Comandos.valueLength();
    Serial.print("Longitud: ");
    Serial.println(longitudDelComando);
      
    const byte* val = caracteristicaBLE_Comandos.value();
    
    String strValor = String((const char *)val).substring(0, longitudDelComando);
    Serial.println("|" + strValor + "|");

    return strValor;
}

void parpadear(int times, int milliseconds){
  for(int i=0; i<times; i++){
    digitalWrite(ledPin, HIGH);
    delay(milliseconds);
    digitalWrite(ledPin, LOW);
    delay(milliseconds);
  }
}

 

 

Prototipos de Software con Computadoras Virtuales c9.io

11 Jun , 2017,
Jose Nunez
, , , ,
No Comments

Este es un post realmente corto.

Cuando uno está experimentando o desarrollando con tecnologías de software para cosas como desarrollo web y de aplicaciones móviles, sistemas como NodeJS o Python, visión computarizada, etc… usualmente requerimos instalar en nuestros computadores una cantidad importante de bibliotecas y paquetes para realizar pruebas con dichas tecnologías.

C9.io es un servicio comercial de máquinas virtuales en la web.

La verdad me ha parecido muy sencillo y completo.

https://c9.io

Todo es cuestión de crear una cuenta de usuario, ojalá enlazada con nuestra cuenta de usuario de github.com (si la tuvieramos) y vualá, podemos crear nuevas máquinas virtuales, clonar las existentes, y operarlas para instalar y desinstalar cosas a nuestro antojo casi ilimitado.

Una cuenta gratuita nos permitirá generar nuevas máquinas virtuales con ciertas limitaciones de capacidad de procesador, memoria RAM (512MB) y almacenamiento (2GB) que por lo general son suficientes para realizar pruebas de concepto o experimentación.

En próximas entregas estaré discutiendo un poco cómo realizar pruebas en C9.io para desarrollo de apps en ionic, nodejs, python-opencv entre otros.

Mis primeros pasos con ionic

5 Jun , 2017,
Jose Nunez
, , , ,
No Comments

Bueno, como nos pasa a todos, un día desperté con esa imperiosa necesidad de crear una app para teléfonos inteligentes; y pues, comenzar no es fácil si tomamos en cuenta que las principales plataformas de desarrollo (IOS y Android) tienen sus costos y complejidades.

(!) Antes de seguir estas instrucciones asegúrese de entender las Condiciones de Uso de nuestro sitio.

Afortunadamente, mis compañeros del centro de innovación habían estado realizando una investigación sobre algo similar, y me hablaron del Ionic Framework, un sistema para desarrollar aplicaciones móviles usando tecnologías web (HTML, CSS, JS/TS, ANGULARJS) etc que luego pueden implementarse tanto en Android como IOS.

Dentro de las bondades de Ionic podemos listar las siguientes:

  1. Manejo de plantillas de proyecto predefinidas
  2. Acceso a características específicas de hardware (bluetooth, gps, camara, etc)
  3. Pre-visualizacion de las apps usando IonicView directamente en los dispositivos móviles tanto para Android como para IOS

Pero bueno, he querido comenzar con el pie derecho, configurando una estación de trabajo LINUX UBUNTU 16.04 así que aquí van algunos lineamientos básicos para comenzar:


#1 – NodeJS

Es necesario instalar nodeJS y npm. Para Ubuntuo 16.04 he encontrado esta guía que me ha parecido muy completa. En ella se discuten diferentes métodos. Yo elegí usar el método de nvm (node version manager) que se puede resumir en los siguientes comandos uno por uno.

Antes de iniciar vaya a https://nodejs.org/en/download/ y determine cual es la versión LTS (en nuestro caso es la 6.11)

cd
sudo apt-get update
sudo apt-get install build-essential libssl-dev
curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh
bash install_nvm.sh
source ~/.profile
Opcionalmente: nvm ls-remote | grep Latest
nvm install  6.11
node -v
npm -v

#2 – Instalación de IONIC

Ahora, de acuerdo con la guía de inicio de IONIC procedemos con el siguiente comando (puede tardar muchos minutos):

npm install -g cordova ionic --verbose

Luego de unos minutos (como 15 con mi conexion 3G) y de mucho texto en la consola, podemos usar el comando ionic -v para determinar la versión que hemos instalado.

En este punto es importante crear una cuenta personal en https://apps.ionic.io/signup para poder visualizar las aplicaciones con Ionic View. Una vez creada la cuenta podemos usar el siguiente comando para que nuestra instalación de ionic quede conectada a nuestra cuenta.

ionic login

#3 Creación de un nuevo proyecto

(!) Antes de crear un nuevo proyecto, es importante asegurarse que su GIT local esté instalado y configurado.

Al momento de escribir este artículo, la guía de inicio hace mención de 3 tipos de proyecto: blank, tabs y sidemenu (aunque hay todo un mercado de tipos de proyecto en la red). La verdad nos gustó más el de tabs, así que usamos estos comandos:

cd
mkdir myIonicTests
cd myIonicTests
ionic start myApp tabs

Dado que ya habíamos hecho login en el paso anterior, podemos decirle que si (Y) a la pregunta de la terminal “Link this app to your Ionic Dashboard to use tools like Ionic View? (Y/n)“. Al decir que sí el sistema termina de crear el app y nos lleva al navegador de Internet a la página de ionic para crear nuevas apps para el visor. Más tarde será necesario utilizar el comando ionic link para conectar el código de nuestra app local con su correspondiente entrada en Ionic View.

(!) Notas: Algo importante de resaltar es que este template de una vez crea el proyecto como un repositorio GIT. Reconectar un repositorio GIT a nuestra cuenta GIT de preferencia es una tarea importante a  futuro, pero eso lo dejaremos para otro artículo.
Otra cosa importante es que el comando start de ionic necesitará una conexión a Internet estable para poder descargar todos los archivos, bibliotecas y dependencias necesarias.

En este punto ya podemos ejecutar el comando ionic serve para pre-visualizar el app en nuestro navegador local.


#4 Ejecutar la aplicación en un celular

Nótese que al crear la aplicación en el sitio web de ionic, se generó un código de identificación de la app. En la aplicación IonicViewer de Android o IOS se puede acceder con sus credenciales de ionic, o usando el código de identificación de la aplicación.

Antes de subir el código a Ionic View, necesitamos enlazarlo con nuestra nueva app; usando el comando ionic link. Se usan las flechas arriba y abajo del teclado para seleccionar el app.

Para subir el código más reciente utilizamos el comando ionic upload; luego en la aplicacion de celular Ionic View usamos la opción “Clear App Data” y luego “View App”

En una próxima entrada estaremos discutiendo cómo modificar el código.

 

Introducción al ESP8266

31 May , 2017,
Jose Nunez
, , , , ,
one comments

Aquí resumo algunas cosas que he ido descubriendo del ESP8266 esta semana:

#1 – El ESP8266 viene programado de manera nativa con un firmware que responde a comandos AT para realizar conexiones y comunicación WiFi. Una referencia útil al set de comandos se puede encontrar acá.

#2 – El ESP8266 puede ser programado mediante el IDE de ARDUINO. Para esto es necesario instalar la definición de placa usando la opción de Tools > Board Manager; pero antes de esto es necesario configurar la siguiente URL para definición de tarjetas adicionales usando la opción File > Preferences > Additional Boards Manager URLs.

URL:  http://arduino.esp8266.com/stable/package_esp8266com_index.json

Es necesario cerrar el IDE y volverlo a cargar para poder utilizar el board que aparece en la lista abajo como “Generic ESP8266 Module“. (!) Importante: Una vez re-programado el módulo se pierde el firmware que habilita los comandos AT. Para re-habilitarlos será necesario seguir alguno de los procedimientos disponibles para cargar el firmware

#3 – Se puede conectar el módulo directamente a la PC usando un convertidor USB-Serial FOCA 2.2 con las siguientes conexiones; pero antes se debe configurar el FOCA 2.2 para operar a 3.3V, caso contrario se daña el ESP8266:

esp8266_pinoutFOCAV2.2        ESP8266
   VCCIO -----> VCC (3.3V)
     TXD -----> RXD
     RXD <----- TXD
     GND <----- GND
   VCCIO -----> CH_PD

 Opcionalmente se enciende el dispositivo con el GPIO0 conectado a tierra (GND) para habilitar la descarga de sketches de ARDUINO en el módulo; y luego se desconecta de GND para operar con el Sketch descargado.
FTDI Cable             ESP8266
 VCCIO (red)    -----> VCC (3.3V) 
   TXD (orange) -----> RXD 
   RXD (yellow) <----- TXD
   GND (black)  <----- GND
 VCCIO (red)    -----> CH_PD

#4 – La definición de placa del ESP8266 de ARDUINO (“Generic ESP8266 Module“) incluye una cantidad importante de ejemplos muy básicos para la operación del módulo, ya sea como Cliente HTTP, o cliente WiFi, o Access point, e incluso la creación de redes tipo Mesh usando WiFi.

#5 – El módulo ESP8266 no tiene capacidad para comunicarse con servicios de Internet por canales seguros de tipo HTTPS, lo cual representa una limitante sobre el tipo de aplicación que se pueda implementar. Como medida mínima es recomendable conectar el ESP8266 a un IoT Gateway con capacidad de comunicación HTTPS hacia la nube y no usarlo en aplicaciones suceptibles en caso de ser “hackeadas” ya que es relativamente facil para un hacker poder interceptar los datos provenientes del ESP8266 (no cifrados) interpretarlos e incluso suplantarlos.

#6 – El ESP8266 se puede conseguir en Costa Rica en CR Cibernetica. Nótese que al momento de escribir este artículo el precio estaba en $7.95, solamente $1 por debajo del SONOFF que aparte de traer uno de estos módulos tiene el hardware necesario para manejar corriente AC y un programa predeterminado para poder operarlo mediante un App de teléfono.

#7 – En Amazon se puede conseguir hasta por $15 cuatro módulos ($3.75 cada uno!). En Wish.com se pueden conseguir incluso a $2. Aunque para ser sinceros la comodidad de comprarlos en CR Cibernética y que me los traigan a domicilio el día siguiente es inigualable.

 #8 – Volviendo a los comandos AT, se puede acceder a estos mediante una terminal como Putty usando el puerto serial del FOCA V2.2 a una velocidad de 115200 bauds, pero es necesario (al menos en el caso de Putty) utilizar [ENTER] y [CTRL]+[ J ] para enviar los comandos al módulo y obtener una respuesta. Una conexión parecida se puede usar desde un ARDUINO 101 (que opera a 3.3V) usando la librería SoftwareSerial para operar el ESP8266 usando comandos AT enviados desde el ARDUINO. También se puede operar el ESP8266 desde un arduino usando los GPIO del ESP8266 como indicativos de qué hacer y que un Sketch de ARDUINO en el ESP8266 tome decisiones y realice comunicaciones WiFi basadas en esas señales.

#9 –  Finalmente cabe mencionar que el módulo tiene la capacidad de almacenar información en estado apagado. Lo cual permite, por ejemplo, recordar cual fue el último SSID/Passphrase que se usó y reconectar al encender, tanto para aplicaciones basadas en comandos AT como para aplicaciones basadas en sketch de Arduino ejecutados en el módulo ESP8266.

Sensor de Proximidad LV-MaxSonar-EZ

28 Abr , 2017,
Jorge Chacon
, , ,
No Comments

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.

Creando una cámara de fermentación con BrewPi

20 Abr , 2017,
Allan R Cascante Valverde
No Comments

1. Descripción

Hoy vamos a realizar la instalación y la conexión de Brewpi; para tener nuestra propia cámara de fermentación para cervezas caseras.

2. Referencias Externas

http://www.homebrewtalk.com/showthread.php?t=466106

3. Disclaimer sobre Intención y Responsabilidad

(!) Antes de seguir estas instrucciones asegúrese de entender las Condiciones de Uso de nuestro sitio.

4. Resumen

Brewpi es una solución completa para crear nuestra propia cámara de fermentación; para los que nos gusta la cerveza y en particular hace nuestra propia cerveza; un reto interesante es el control de la temperatura del proceso de fermentación; muchos de los sabores en la cerveza (apropiados o inapropiados) para un tipo particular están relacionados directamente con la temperatura en la que se encontraba la levadura en el momento de la fermentación.

En esta guía vamos conectar y configurar todas las partes necesarias para echar a andar brew pi de manera de que podamos conectar cualquier refrigerador a este para que este funcione como nuestra cámara de fermentación.

5. Lista de Materiales

  • Arduino 101
  • Relay board
  • 2 DS1B820
  • Enchufe y Toma corriente
  • Conectores macho/hembra x 4
  • Conectores macho x 3
  • Cable eléctrico 14-16
  • Resistencia 4.7 Oms
  • Cinta Aislante Eléctrica
  • Una regleta para conexiones
  • RaspberryPI con Raspbian instalado (para monitorear el sistema)

6. Pasos Detallados

En el caso de este proyecto encontré varias guías en inglés; en particular la que coloque en las referencias externas fue la que me pareció más util.  De esa guía solo es necesario seguir este diagrama para hacer el cableado de las partes:

Con respecto al diagrama anterior y la siguiente fotografía (que corresponde a mi propia instalación) pueden notar algunas diferencias.

IMG_0730

Los colores de los cable son las diferencias más notables; para construir esto solo ocupe la guía anterior; estos son los pasos que seguí:

  1. Conecte las terminales de los “termómetros” (DS1B820) a la regleta conectado las lineas de datos, voltaje y tierra, cada color se conecta a la misma terminal; hay que revisar los colores de estos cada fabricante es distinto (si no da lecturas hay que hacer algo de prueba y error).
  2. Luego de esto conecte los terminales macho como se muestra en el diagram, la tierra, la linea de voltaje y la linea de datos en A4 del arduino y se coloca la resistencia entre la linea de datos y la linea de voltaje.
  3. Luego conecte la tierra y el voltaje al relay board, tal como se muestra en el diagrama.
  4. Se conecta las lineas digitales 4 y 5 al relay board.

Con lo anterior ya se puede probar la instalación, aún cuando no se a conectado la alimentación eléctrica al relay board. Para instalar brewpi seguí esta guía:

Instalación Brewpi

Solo se ocupa bajar un script de shell y correrlo; para mi instalación si hay una limitante; que al utilizar un arduino la version soportada es la legacy (mas sobre como cambiar esto mas adelante)

Estos son los comandos:

git clone https://github.com/BrewPi/brewpi-tools.git ~/brewpi-tools
sudo ~/brewpi-tools/install.sh

Luego de esto se ejecuta el siguiente comando para seleccionar la version que se desea instalar:

sudo ~/brewpi-tools/updater.py –ask

En mi caso seleccione legacy para que funcione mi arduino.

Luego de esto conseguí la dirección ip del arduino con un comando ifconfig y la puse en un browser esto debe mostrar la interfaz web del brewpi. Ahí tenemos que ir al Maintenance Panel y hacer las configuraciones de los dispositivos detectados; si todo esta bien conectado debería aparece tanto los termómetros como el relay board, ahi se selecciona la función de cada uno; en mi caso seleccione fridge temp and beer temp y prove que así fuera (enfriando y calentando cada uno por aparte para ver los valores que se desplegaban y así reconocer cual es cual. Lo mismo con los relays se puede ver cual corresponde a cual.

Luego de estos ajustes en la configuración realice la conexión del relay board y el cableado restante tal como se ve en la diagrama mas arriba.

7. Agradecimientos

A José Nuñez quien me facilito algunas de las piezas necesarias para este proyecto.

 

Visión Computarizada: Contando Gente con OpenCV, ROS, UP Board y una cámara Real Sense

7 Abr , 2017,
Jose Nunez
, , , ,
No Comments

En artículos anteriores hemos tocado el tema del kit de robótica de Intel con RealSense y UPBoard.

Como seguimiento a las instrucciones de inicio del Up Board les compartimos acá algunos comandos de ROS / LINUX para hacer uso de algunos de los ejemplos para aplicaciones de visión computarizada.


PASO 1 – Paquete OpenCV Apps

El primer paso sería la instalación de un paquete de ROS denominado “opencv_apps” mediante el siguiente procedimiento:

cd /opt
sudo apt-get install ros-kinetic-opencv-apps

PASO 2  – Ejemplo de la aplicación de detección de personas

El paquete OpenCV Apps de ROS contiene archivos de lanzamiento (.launch files) con ejemplos muy concretos sobre aplicaciones de visión computarizada.

Mediante el siguiente comando de ROS, la consola de LINUX se ubica en la ubicación del paquete OpenCV Apps:

roscd opencv_apps

Una vez en este directorio, echaremos un vistazo a la lista de archivos de lanzamiento:

cd launch
ls

El comando ls anterior lista en la consola todos los archivos .launch.

Uno de estos archivos es el denominado “people_detect.launch” el cual contiene las definiciones de ROS (en formato XML) que definen cómo tomar imágenes de una fuente (una cámara por ejemplo) y aplicar los métodos de detección de personas de OpenCV.

Para que este archivo funcione con las cámaras Real Sense, será necesario modificar este archivo “people_detect.launch” de la siguiente manera:

(!) Nota: Este procedimiento será necesario solamente una vez para una misma versión del paquete de ROS OpenCV Apps. Solo será necesario ejecutarlo nuevamente si se actualiza la versión del paquete de ROS OpenCV Apps.

Ejecute el comando gedit para editar el archivo:

sudo gedit people_detect.launch

Ubique las siguientes líneas en el archivo ver (estado inicial) y cámbielas para que luzcan como se especifica en (estado editado)

(estado inicial)

<arg name="image" default="image" doc="The image topic. Should be remapped to the name of the real image topic." />

<arg name="debug_view" default="true" doc="Specify whether the node displays a window to show edge image" />

(estado editado)

<arg name="image" default="camera/color/image_raw" doc="The image topic. Should be remapped to the name of the real image topic." /> 

<arg name="debug_view" default="false" doc="Specify whether the node displays a window to show edge image" />

PASO 3 –  Ejecución del ejemplo ROS para detección de personas

Ejecute los siguientes comandos de consola de manera individual, preferiblemente en una pestaña nueva de terminal (SHIFT CTRL  T)

1. Iniciar el nodo maestro de ROS

roscore &

2. Ubicarse en el directorio de ROS referente a la cámara Real Sense

roscd realsense_camera/

3. Lanzar (ejecutar) el procesador ROS de la cámara Real Sense

* Para una R200 use el siguiente comando: roslaunch realsense_camera r200_nodelet_default.launch &

* Para una SR300 use el siguiente comando: roslaunch realsense_camera sr300_nodelet_default.launch &

4. Ejecutar el procesador ROS para el proceso de detección de personas

roslaunch opencv_apps people_detect.launch

5. Carguemos ahora el visor de imágenes de ROS

rqt_image_view

* Este comando abre una ventana que tiene una caja de selección donde podemos elegir el canal que queremos visualizar.

 

El Tiny Tile con tecnología Intel

31 Mar , 2017,
Rebeca Rodriguez Tencio
, ,
No Comments

Hoy quiero presentarles nuestra primera impresión del TinyTILE de Element14. Se trata de una versión miniatura de la famosa placa Arduino/Genuino 101 (https://costaricamakers.com/?p=580), mide aproximadamente 35x26mm y de igual manera está basada en Intel Curie y es compatible con el software de Arduino. El TinyTILE tiene un costo de $39.00 al momento de escribir este tutorial y lo pueden conseguir en: la tienda de Element14

El tinyTILE posee 32bits, con una SRAM de 80kB y una memoria flash de 384kB, tiene instalado un sensor DSP (Procesador Digital de Señales ) de baja potencia, además de la opción BLE para el bluetooth, tiene los sensores del acelerómetro y giroscopio con 6 grados de libertad, posee un botón de “master reset” y un led que indica el estado de la alimentación (on\off), con una salida de voltaje de 3.3V.

Acá les dejo una guía muy sencilla de como iniciar y aprender más acerca del TinyTILE:

  1. Es importante tener instalado el software con el cual queremos empezar a experimentar con el tinyTILE, puede ser el muy conocido ARDUINO IDE (https://www.arduino.cc/en/Main/Software) o Intel Curie Open Developer Kit (https://software.intel.com/en-us/node/674972#). En este caso para el tutorial usaremos el software de Arduino.
  2. Hay que instalar las bibliotecas de Intel Curie y seleccionar la placa que es de tipo Arduino/Genuino 101

101

Nota: Es importante revisar que en el Administrador de Dispositivos, tenga el puerto correcto y haya detectado la placa utilizada.

101 error

 

devicemanager

EJERCICIOS:

En este caso se pueden utilizar los mismos ejercicios de práctica realizados por Jose Núñez en el blog de aprendizaje Arduino 101 (https://costaricamakers.com/?p=580 ) los ejercicios funcionan a la perfección con el TinyTILE de Intel.

En el caso que ya hayan realizado los ejercicios y quieran probar con algo diferente, pueden intentar con estos recursos adicionales:

TinyTILE – Getting Started Guide: https://www.element14.com/community/servlet/JiveServlet/previewBody/84364-102-1-362023/tinytile-GettingStartedGuide.pdf

TinyTILE – Pin Mapping: https://www.element14.com/community/servlet/JiveServlet/previewBody/84365-102-1-362024/tinytile-Pin-Mapping.pdf