Category Archives: Opinión

ttpile

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

microsoft-augmented-reality1-1050x580

Una Introducción a la tecnología de Realidad Aumentada (AR)

9 Mar , 2017,
Luis Diego Jimenez Sanchez
, ,
No Comments

El 6 de Julio del 2016 salió Pokemon GO, uno de los actuales juegos pioneros en el mundo de la realidad aumentada y un despertar al mundo del interés sobre AR.  Quizás hayan escuchado sobre realidad virtual y realidad aumentada, así que, que las diferencia?  Realidad virtual, o conocido por sus siglas en inglés como VR, es la aplicación de un entorno o ambiente digital o virtual, que detecta diferentes caracteristicas de tiempo real del usuario y reacciona de manera que este siente que es real.  Realidad aumentada, es la ampliación de imágenes reales mediante el uso de algún dispositivo, de manera que agrega imágenes virtuales a lo que el usuario está observando.

Para empezar la investigación y aprendizaje de la realidad aumentada, un área totalmente desconocida para mí, el plan era iniciar con los Google Glass debido a su fama como empresa, esto antes de darme cuenta que el proyecto había sido descontinuado desde el 2015.  A partir de aquí, lo único que quedaba era iniciar búsqueda de  los productos que hay en el mercado.  Son 5 los que más me llamaron la atención, esto según los siguientes parámetros; precio, quien los produce y a que mercado se dirige el producto y como empezar a usarlos.   Después de investigar en internet por dispositivos de la naturaleza de AR, construí una lista de los dispositivos que mejor se acomodan a mi necesidad de entender el funcionamiento y alcance de estos.  Los dispositivos son los siguientes:

VUZIX M3000 Smart Glasses:

               Producido por la empresa VUZIX, la cual se dedica a la fabricación de lentes de VR y AR, los lentes M3000 tienen fecha de lanzamiento este verano de 2017, con precio que ronda los 900$.  Este producto tiene las capacidades de un teléfono inteligente con capacidad de conectarse a redes WIFI, basada en Android y se puede considerar una mini computadora.  Los M3000 se pueden personalizar, son más dirigidas a empresas de manera que se usen para entrenamientos, registros de procedimiento y data, y otros aspectos de la industria.  A continuación un link con demo de estos Smart glasses, https://www.youtube.com/watch?v=y6SGlOLVpg8.

VUZIX M3000

Imagen 1. VIZUX M3000 Smart Glasses

Microsoft HoloLens:

               El kit de desarrollo de HoloLens se puede encontrar por unos $3000 en la página,  https://www.microsoft.com/microsoft-hololens/en-us/buy.  Producido por los gigantes en la industria, Microsoft, tiene versiones comerciales desarrolladas para casos específicas.  Un ejemplo es para Case Western Reserve University tiene un programa de Anatomía Humana con el uso de hologramas.  Otras empresas que utilizan HoloLens para mejorar aspectos en su performance son Lowes, Volkswagen y Airbus.  Para el interés de desarrollar, el kit viene con su SDK respectivo, hay versión de SDK en Unity Engine donde se pueden crear objetos, escenas y usar comandos para reconocimientos de gestos.

hololens

Imagen 2. Microsoft HoloLens

Sony SmartEye Glass:

               Sony SmartEye Glass, no se puede comprar directamente en Costa Rica ni America Central, sino que es por pedido especial en Estados Unidos y algunos otros países en Europa.  El precio en la siguiente página es de $900.  Al igual que los otros lentes de realidad aumentada, estos también son Developer Kits por lo cual se permite al usuario darle el uso según las capacidades de lo que podas desarrollar.  Sony es la empresa que las produce y una diferencia de las demás es que esta trae un control cableado a los lentes, es pequeño por lo cual no produce incomodidad en el usuario.

sony smarteye glass

Imagen 3. Sony SmartEye Glass

Lenovo Phab Pro 2:

               Este teléfono, Lenovo Phab Pro 2 vale alrededor de $499.99 si se compra directamente de la página de Lenovo.  A mi opinión, no es un kit de desarrollo ni nada por el estilo.  Está destinado más hacia el uso de apps que incluyan AR, juegos por ejemplo ya se encuentran en el mercado.  La aplicación más interesante que encontré es roOomy Reality, esta permite mostrarle al usuario como se vería una nueva pieza de mueblería en algún determinado cuarto de su hogar.  Parece arropar la idea de la realidad aumentada al facilitar una tarea de la vida real mediante el uso de imágenes digitales.

lenovo phab pro 2

Imagen 4. Lenovo Phab Pro 2 celular

Intel RealSense:

              Aunque Real Sense no es una tecnología directamente relacionada con realidad aumentada en lo referente a proyeccion de elementos visuales a la vista del usuario, si permiten un acercamiento a esta mediante la comprensión experimental de las librerías y tecnologías adyacentes tales como captura, análisis y manipulación de imágenes y video.  Real Sense es un producto de un concepto tecnológico denominado “Perceptual Computing” que tiene que ver como los dispositivos computacionales pueden percibir mensajes del usuario diferentes al teclado/mouse tales como los gestos que vas a experimentar. Augmented Reality tiene que ver más con anteponer contenido a las imágenes que se le presentan al usuario; sin embargo en efecto las tecnologías y conceptos se traslapan.

La tecnología Intel RealSense, ofrece varios dispositivos y kits de desarollo, en precios que van desde los $99 para una cámara R200 hasta los $349 para un kit de desarrollo con cámara R200 y sistema computacional UP Board.

real sense

Imagen 5. Intel RealSense camera F200

Las cámaras, cuentan con la capacidad para hacer escaneos en 3D, reconocimiento facial y puede generar imágenes basándose en distancias de cuerpos u objetos de las cámaras.  Los SDK, kits de desarrollo de software, de Intel, en mi opinión es la mejor opción para empezar a trabajar con realidad aumentada y en siguiente mis razones:

  • Precio: es el producto más accesible, siendo el de $349 el kit más costoso. A pesar de que no se pueden comparar estos productos directamente debido a que sus objetivos y alcances son muy distintos, si los puedo comparar al tratarse de un primer acercamiento a esta tecnología.
  • Aplicación del hardware:  Para efectos de aprendizaje, tales como los mios, en el cual es necesario entender el alcance de registrar data a partir de entradas por camara, me parece mejor opcion usar el RealSense debido a las librerias que trae como reconocimiento facial o de gestos.

Mi primer experimento será con Intel RealSense, probablemente algún carro o robot al que pueda darle direcciones con gestos de mis manos.

Capture

EL ARTE TEXTIL EN FUSIÓN CON LA TECNOLOGÍA

7 Mar , 2017,
Rebeca Rodriguez Tencio
,
No Comments

Electrotextil es el nombre que se le da a la idea “mágica” de combinar la industria textil con la electrónica, creando un nuevo concepto de diseño que no solo es “fashion”, sino un impulso a la innovación.

Las prendas o accesorios que normalmente se utilizan no contienen elementos electrónicos, sin embargo dentro de 10 años es factible que cada tipo de ropa o accesorio tenga incorporado distintos componentes con funciones tecnológicas que contribuyan a la comodidad, salud y bienestar de los usuarios.

Actualmente los e-textiles presentan varios retos fundamentales para el progreso en el uso de esta tecnología, ya que un textil electrónico debe ser flexible, discreto, lavable y estéticamente aceptable, lo que provoca un desafío en la construcción del diseño y conectividad confiable.

Acá les comparto unos enlaces muy interesantes donde pueden sacar ideas para empezar a involucrase en el mundo wearable:

Espero sus comentarios acerca del tema :o). En el próximo artículo vamos a empezar a experimentar y crear un proyecto con diferentes componentes wearables paso a paso.

IMG_20170304_142007

SimpleCV Hello World ++ en otros 5 minutos (Linux MINT 18)

4 Mar , 2017,
Jose Nunez
, , , , , ,
No Comments

Siguiendo nuestra serie sobre SimpleCV y como una motivación personal para aprender Python. Acá les presento un par de scripts basados en el ejemplo “Hello World” de SimpleCV.

El primero toma constantemente  una foto de una cámara y la “binariza”; es decir, la convierte cada pixel de la foto en negro o blanco dependiendo de su “posición estadística” respecto de los demás pixeles y muestra el resultado en pantalla.

El segundo toma la fotografía original, sin ser “binarizada” y la muestra en pantalla.

Al correr los scripts de manera simultánea podemos apreciar de mejor manera este filtro de binarización de la imagen.


PASO 1 – simplecv_helloworld.py

Usando un editor de texto como “xed” copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld.py”

from SimpleCV import Camera
# Initialize the camera
cam = Camera()
# Loop to continuously get images
while True:
    # Get Image from camera
    img = cam.getImage()
    img.save('/home/toruk-makto/imageport.jpg')
    # Make image black and white
    img = img.binarize()
    # Draw the text "Hello World" on image
    img.drawText("Hello World!")
    # Show the image
    img.show()

PASO 2 – simplecv_helloworld2.py

De nuevo, mediante el editor de texto copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld2.py”

from SimpleCV import Image

# Loop to continuously get images
while True:
    # Get Image from camera
    try:
        img = Image('/home/toruk-makto/imageport.jpg')
        # Draw the text "Hello World" on image
        img.drawText("Hello World!")
        # Show the image
        img.show()
    except:
        print "skip!"

PASO 3 – Ejecutar ambos scripts

En una terminal ejecutemos los siguientes dos commandos:



python simplecv_helloworld.py &

python simplecv_helloworld2.py &


Vemos como se muestran ambas imágenes “en tiempo real”

Para detener los scripts podemos digitar el comando fg(que trae el comando al “foreground de ejecución”) y luego usar las teclas CTRL C; o ejecutamos el comando sudo kill #### donde “####” corresponde al número del proceso que queremos detener; o simplemente cerramos la terminal.

 

 

IMG_20170113_000211

Intel Joule 570x Developer Kit

13 Ene , 2017,
Jose Nunez
,
No Comments

IMG_20170113_000514Finalmente llegó el momento de evaluar el Intel Joule. Una plataforma de amplio poder computacional y de un tamaño sumamente reducido.

Tal y como se menciona en su sitio de arranque (getting started with Intel Joule), se trata de un módulo de alto desempeño tanto en poder de computación como en procesamiento de gráficos y memoria. Está orientado a la innovación en aplicaciones de visión computarizada, robótica, drones y otras aplicaciones de alta capacidad de cómputo.

En nuestro caso, estaremos probando el kit de desarrollo Joule 570X cuyas principales características incluyen:

  • Procesador Intel Atom de cuatro núcleos a 1.7 GHz (base) hasta 2.4GHz en modo turbo. (Dos hilos por núcleo)
  • Plataforma de direccionamiento de 64bit
  • Procesador gráfico Intel de alta definición HDMI 1.4b a 450MHz (base) hasta 650MHz (modo turbo)
    • Puerto Micro-HDMI
  • Memoria RAM de 4GB con velocidad de 25.6GB/s
  • Almacenamiento de 16GB en Flash eMMC
  • Puertos USB 3.0
  • 3.5 Puertos UART
  • Conectividad WiFi y Bluetooth
  • 8 líneas dedicadas de entrada/salida de propósito general (GPIO) + 48 pines re-mapeables
  • 4 Puertos PWM
  • 1 Puerto SDIO para tarjeta SD
  • Reloj de Tiempo Real (RTC)
  • Alimentación de 12V 3A (fuente no incuida en el kit de desarrollo)
    • La documentación sugiere rango de operación de 4V a 20v *
  • Sistemas Operativos Sugeridos: Linux de referencia, Ubuntu IoT, Windows IoT
  • 7 Interfaces I2C en modo MASTER
  • Optimizado para interactuar con cámaras 3D tecnología Real Sense

Comparativamente se puede analizar el Intel Joule en contraste con el Intel Edison donde se destacan las siguientes diferencias:

  1. Más de 6X adicionales de poder de procesamiento: El Edison tiene un procesador que corre a 500MHz en contraste con 1.7GHz del Joule
  2. 4X más de memoria RAM: El Edison tiene RAM de 1GB DDR3 mientras que el Joule cuenta con 4GB LPDDR4
  3. 4X más de capacidad de de almacenamiento: El Edison provee 4GB de capacidad de almacenamiento, mientras el Joule provee 16GB ambos en tecnología eMMC Flash
  4. WiFi Mejorado: El Edison incluye conectividad WiFi para bandas de 2.4 y 5 GHz, mientras que el Joule incluye WiFi 802.11ac con MIMO.
  5. Capacidad de Video: El Intel Joule incluye controlador de video y salida de video Intel HD, mientras que el Edison no tiene salida de video integrada.
  6. Dimensiones: El Intel Joule mide 48X24x3.5mm ligeramente más grande que el Edison que mide 35.5x25x2.9mm
  7. GPIO: Más de 4X en puertos GPIO disponibles.

En nuestra próxima entrega estaremos compartndo nuestras pruebas prácticas sobre el Intel Joule.

Cabe mencionar que en nuestra prueba inicial (boot up) usamos una fuente de poder de 12V 1A. Tratamos con una de 5V 2A, pero no fue suficiente

IMG_20160315_120952~3

Guía para el ProfesionaI de T.I. de una PYME

27 May , 2016,
Jose Nunez
No Comments

En no pocas ocasiones, las PYMEs enfrentan el reto de asegurar la adecuada operación de sus tecnologías de información mediante modelos de servicios que en lugar de mantener un departamento de Tecnologías de Información o de Tercerizar los servicios, tiene más sentido contratar un solo profesional para administrar esta importante área y a la vez tercerizar algunos aspectos como la creación y modificación de los sistemas empresariales.

En esta guía rápida se discute los diferentes aspectos en los que el profesional de informática de una PYME puede enfocarse para asegurar la operación adecuada y contínua de dichas tecnologías.

  1. Portafolio de Servicios (Internos y Tercerizados)
  2. Continuidad de los Servicios
  3. Seguridad de la Información
  4. Inventario de Redes y Equipos
  5. Perfiles de Configuración
  6. Inventario de Software y Licencias
  7. Registro, Programación y Seguimiento de Incidentes y Solicitudes de Servicio

1. Portafolio de Servicios Internos y Tercerizados

Un primer aspecto que el profesional de T.I. de una PYME debe administrar es conocer los servicios de tecnologías de información y comunicaciones que se brindan, cuales son internos y cuales proveidos por un tercero.

No se trata de una lista de servicios (email, povisión de PC’s, servicio de Internet…) sino un perfil que incluya datos como principales contactos, costos esperados de operación y de mantenimiento tanto preventivo como correctivo, principales oferentes del servicio tercerizado, tiempos esperados de respuesta, procesos de recuperación de desastres, respaldos, etc. A su vez es importante definir el valor de negocio de cada servicio y el tiempo máximo que puede operar la empresa sin ese servicio, así como las medidas alternas en caso de ausencia del servicio. Por ejemplo: ¿Qué sucede si falla el servicio de correo electrónico? ¿cuanto tiempo puede mantenerse la empresa operando sin dicho servicio? ¿hay medidas alternas que se puedan tomar para paliar la falta de dicho servicio?

2. Continuidad de los Servicios

Una vez identificados los servicios que definen las tecnologías de información, es importante definir las actividades que aseguran el correcto funcionamiento de los servicios en el tiempo. Por ejemplo, ¿se cuenta con PC’s de contingencia para cuando se daña la PC de uno de los vendedores? ¿Existe respaldo de los datos de los usuarios? ¿Qué tan rápido se puede disponer de esos datos en caso de pérdida del medio de almacenamiento principal?

3. Seguridad de la Información

Este es un aspecto medular para toda organización que haga uso de las tecnologías de información. No se trata simplemente de “tener el antivirus actualizado”; se trata de asegurar que se tomen medidas razaonables y efectivas para resguardar la integridad, la confidencialidad y privacidad y la disponibilidad tanto de datos y servicios relacionados conm las tecnologías de información; contra el acceso por parte de personas no autorizadas.

De nuevo, no se trata de instalar el antivirus más reciente. Involucra el aseguramiento físico de los servidores, la configuración adecuada de puertos de red en los computadores, el desecho adecuado de documentos confidenciales que, de ser desechados en la basura ordinaria ponen en riesgo la seguridad de la información de la empresa.

Tambien involucra este aspecto un adecuado manejo de las identidades de usuario, de las políticas referentes a contraseñas que conllevan la responsabilidad de que las actividades registradas en un sistema informático por un usuario determinado hacen a este usuario responsable de dichas actividades.

4. Inventario de Redes y Equipos

Este es otro aspecto fundamental de la administración de tecnologías de información. Conocer los equipos que brindan servicio a la organización, no solo PC’s sino tambien teléfonos móviles, servidores, enrutadores, centrales telefónicas. Esto también incluye conocer el estado de los equipos, sus características, su historial de reparaciones e historial de cambios, etc.

5. Perfiles de Configuración

Un aspecto que frecuentemente se deja de lado es la administración de la configuración de los equipos. Es decir, poder contar con perfiles que nos permitan entender cómo se configura de manera efectiva tal o cual equipo. Por ejemplo, es importante mantener un registro de cómo está configurado el enrutador de red; y encaso de que sea necesario reemplazarlo, poder entender cómo configurar el reemplazo para que se desempeñe de manera correcta. Esto aplica tambien para las PC’s, tener un registro del punto de partida de la configuración de las PC’s, qué software deben tener instalado, y qué software no; cual es el desempeño esperado en determinadas actividades, etc.

6. Inventario de Software y Licencias

Es imprescindible tener un inventario de Licencias de Software, y de paquetes instalados de manera oficial en cada PC de la organización; de nuevo, no solo a razón de confeccionar una lista, sino de entender el costo a través del tiempo, de entender la obsolescencia de los paquetes, contratos de licenciamiento, qué sucede si se reemplaza una PC, la licencia se mantiene en la nueva PC (lo cual es poco frecuente) o es necesario pagar una licencia nueva.

7. Registro, Programación y Seguimiento de Incidentes y Solicitudes de Servicio

Finalmente, pero no por ello de menor importancia está el seguimiento, programación y registro de incidentes y solicitudes de servicio. Cuando se contrata un servicio tercerizado por ejemplo, el profesional de T.I. es la persona que está en mejor capacidad de entender de qué se trató el servicio, qué costos adicionales involucra y si el servicio se entregó a cabalidad con las expectativas; si se cuenta con una garantía y en qué consiste esta garantía.

Este aspecto también involucra el seguimiento de las necesidades de servicio de los usuarios. Desde “necesito que me instalen Office en mi nueva PC” hasta “no puedo usar la impresora”.


Esperamos que este artículo les sea de utilidad. En una próxima entrega estaremos discutiendo sobre técnicas prácticas para proveer una administración adecuada a cada uno de estos aspectos.

IMG_20160524_204326

El Nuevo ARDUINO MKR1000 es una belleza

25 May , 2016,
Jose Nunez
No Comments

Hoy probamos por un rato el Arduino MKR1000 (GENUINO MKR1000 que es lo mismo)

Se trata de uno de los productos más recientes de la familia ARDUINO, un microcontrolador que incorpora conectividad WiFi y encripción por hardware, lo cual le permite conectarse al Internet usando protocolo HTTPS; que – en mi opinión – lo ubica por encima del afamado Sparkfun Thing ESP8266.

Pueden ver las especificaciones de este dispositivo acá: https://www.arduino.cc/en/Main/ArduinoMKR1000

Dentro de las funciones más destacadas podemos mencionar:

  • Microcontrolador de bajo consumo eléctrico de 32 bits.
  • Puerto de alimentación USB de 5V
  • Conector para batería LIPO de 3.7V, 700mAh
  • Voltaje de operación de 3.3V (! Importante… por que el voltaje aplicado a los puertos de GPIO no debe superar los 3.3V)
  • 8 (ocho) puertos de I/O Digitales de propósito general, que incluyen 4 (cuatro) pines PWM
  • 1 Puerto serial UART
  • 1 Puerto SPI
  • 1 Puerto I2C
  • 7 Entradas analógicas de 8/10/12 bits
  • 1 Salida Analógica (DAC de 10 bits)
  • 8 Puertos con capacidad de interrupción externa (0,1,4,5,6,7,8,A1,A2)
  • Capacidad de entregar 7mA de corriente en cada I/O Pin
  • Memoria no-volatil (FLASH) de 256KB
  • Memoria Volatil (SRAM) de 32KB
  • RTC de 32.768 KHz
  • 48MHz de Procesamiento
  • Puerto USB como cliente y embedded host
  • Comunicación WiFi
  • Chip de Encripción que permite la comunicación por protocolo SSL
  • Precio al momento de escribir este artículo: ~$35 (aca)
  • Utiliza la libreria Wifi101 disponible en la ultima version del ARDUINO IDE.

Lo primero que probamos – SSL

Por supuesto, la capacidad de conectarse a un servidor via HTTPS/SSL. Para esto utilizamos el tutorial titulado “Scheduled WiFi SSL Web Client“; solo que le realizamos algunas modificaciones para entender mejor el código… pueden encontrarse aca: enlace o ver listado 1 abajo.

Lo segundo que probamos – Access Point

Como ya dijimos, es compatible con la librería WiFi101; así que decidimos probar el ejemplo llamado “AP_SimpleWebSever” el cual implementa un Access Point, y un servidor web que escucha en la dirección IP 192.168.1.1 y sirve un par de enlaces que automáticamente encienden y apagan un LED. Ver Listado 2 abajo.

2016-05-24_2035

 

Listado 1 – SSL + MKR1000 + PVCLOUD TEST

/*
  Scheduled WiFi SSL Web Client for MKR1000

  This sketch connects to the Arduino website every minute and downloads the ASCII logo to display it on the serial monitor

  created 19 Jan 2016
  by Arturo Guadalupi <a.guadalupi@arduino.cc>

  http://arduino.cc/en/Tutorial/

  This code is in the public domain.

  Modified by Jose Nunez <jose.nunez@intel.com> 
  
*/

#include 
#include 
#include 

char ssid[] = "opodiym";      //  your network SSID (name)
char pass[] = "luaus7151";       // your network password

int keyIndex = 0;                  // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

// Initialize the Wifi client library
WiFiSSLClient client;
 
// server address:
char server[] = "costaricamakers.com";

bool sendRequest = true; // used to understand if the http request must be sent

/* Create an rtc object */
RTCZero rtc;

/* Change these values to set the current initial time */
const byte seconds = 50;
const byte minutes = 00;
const byte hours = 17;

/* Change these values to set the current initial date */
const byte day = 24;
const byte month = 05;
const byte year = 16;

void setup() {
  delay(3000);
  Serial.begin(115200);
  serialOut("Begin...");

  serialOut("Connecting to Access Point...");
  connectToAP();    // connect the board to the access point
  
  serialOut("Printing WIFI Status...");
  printWifiStatus();

  serialOut("Making initial HTTP Request...");
  httpRequest();

  serialOut("Calling listenToClient()...");
  listenToClient();

  serialOut("Setting RTC Up...");
  rtc.begin();
  rtc.setTime(hours, minutes, seconds);
  rtc.setDate(day, month, year);

  rtc.setAlarmTime(0, 0, 0);    //in this way the request is sent every minute at 0 seconds
  rtc.enableAlarm(rtc.MATCH_SS);

  rtc.attachInterrupt(alarmMatch);

  serialOut("SETUP COMPLETE");
}
void loop() {
 
  if (sendRequest) {
    serialOut("sendRequest was TRUE");
    sendRequest = false;

    serialOut("Calling httpRequest()...");
    httpRequest();

    serialOut("Calling listenToClient()...");
    listenToClient();
  }
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

void alarmMatch() {
  sendRequest = true;
}

void connectToAP() {
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 1 second for connection:
    delay(1000);
  }
}

// this method makes a HTTP connection to the server:
void httpRequest() {
  sendRequest = false;

  // Print request time
  Serial.println();
  Serial.print("Request sent @ ");
  print2digits(rtc.getHours());
  Serial.print(":");
  print2digits(rtc.getMinutes());
  Serial.print(":");
  print2digits(rtc.getSeconds());
  Serial.println();
  Serial.println();

  if (client.connect(server, 443)) {
    // Make a HTTP request:
    client.println("GET /pvcloud_test/mkr1000test.json HTTP/1.1");
    client.println("Host: costaricamakers.com");
    client.println("User-Agent: MKR1000/1.1");
    client.println("Connection: close");
    client.println();
  }
  else {
    Serial.println("connection failed");
  }
}

void listenToClient()
{
  unsigned long startTime = millis();
  bool received = false;

  while ((millis() - startTime < 5000) && !received) { //try to listen for 5 seconds
    while (client.available()) {
      received = true;
      char c = client.read();
      Serial.write(c);
    }
  }
  client.stop();
  Serial.println();
  serialOut("listenToClient() FINISHED");
}

void print2digits(int number) {
  if (number < 10) {
    Serial.print("0");
  }
  Serial.print(number);
}

void serialOut(String message){
  Serial.println("-------------------------------------------------------------------------------");
  Serial.print(millis());
  Serial.print(": ");
  Serial.println(message);
}

Listado 2 – AP_SimpleWebServer

/*
  WiFi Web Server LED Blink

  A simple web server that lets you blink an LED via the web.
  This sketch will create a new access point (with no password).
  It will then launch a new server and print out the IP address
  to the Serial monitor. From there, you can open that address in a web browser
  to turn on and off the LED on pin 13.

  If the IP address of your shield is yourAddress:
    http://yourAddress/H turns the LED on
    http://yourAddress/L turns it off

  created 25 Nov 2012
  by Tom Igoe
  adapted to WiFi AP by Adafruit
 */

#include <SPI.h>
#include <WiFi101.h>

int led =  LED_BUILTIN;

char ssid[] = "wifi101-network"; // created AP name
char pass[] = "luaus7151";      // AP password (needed only for WEP, must be exactly 10 or 26 characters in length)
int keyIndex = 0;                // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
WiFiServer server(80);

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Access Point Web Server");

  pinMode(led, OUTPUT);      // set the LED pin mode

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // print the network name (SSID);
  Serial.print("Creating access point named: ");
  Serial.println(ssid);

  // Create open network. Change this line if you want to create an WEP network:
  if (WiFi.beginAP(ssid) != WL_CONNECTED) {
    Serial.println("Creating access point failed");
    // don't continue
    while (true);
  }

  // wait 10 seconds for connection:
  delay(10000);

  // start the web server on port 80
  server.begin();

  // you're connected now, so print out the status
  printWifiStatus();
}


void loop() {
  WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click here turn the LED on
");
            client.print("Click here turn the LED off
");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          }
          else {      // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        }
        else if (c != '\r') {    // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(led, HIGH);               // GET /H turns the LED on
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(led, LOW);                // GET /L turns the LED off
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}
IMG_20160315_120952~3

¿Cuándo creamos conocimiento?

15 Mar , 2016,
Jose Nunez
, ,
No Comments

Cuando aprendemos algo nuevo y lo podemos reproducir; lo que implica que lo hemos documentado; y lo hemos publicado/compartido con otros y ellos pueden reproducirlo también.

Crear conocimiento involucra la capacidad de mejorar algo existente.

admin_expr

El último punto funcional reproducible

14 Mar , 2016,
José Núñez
, ,
No Comments

admin_exprMucho del quehacer maker está relacionado con procesos de experimentación, de aprendizaje y con la creación de nuevo conocimiento.

Durante este tipo de procesos de experimentación “ad-hoc” es fácil caer en una parálisis en la cual “giramos en círculo” con partes de experimentos que a veces son éxitosas y a veces no, sin que podamos comprender la causa de estos resultados divirgentes; especialmente cuando no tenemos una forma estructurada de administrar las incertidumbres y los aciertos resultantes de nuestros experimentos.

Recientemente vivimos esto durante nuestra experimentación para grabar sonido usando Intel Edison, donde a ratos teníamos pruebas exitosas y a ratos “las mismas pruebas” fallaban.

Este tipo de parálisis puede resultarnos costosas, no solo a nivel de tiempo y recursos, sino también en lo referente a la motivación del equipo, al verse desvanecer los éxitos del trabajo sin una razón aparente.

Es por esto que compartimos en este artículo algunas medidas que nos permiten asegurar el éxito progresivo alcanzado en diversos experimentos y avanzar con un paso más seguro, evitando parálisis de análisis.

  1. Planee sus experimentos de manera individual y documente el plan
  2. Documente los pasos a realizar en cada experimento. Mantenga una política de “Un cambio a la vez”
  3. Documente los resultados obtenidos y las desviaciones del plan realizadas durante cada experimento
  4. Una vez obtenido el éxito en cada etapa, verifique la repetibilidad del éxito en cada experimento.
  5. Haga una revisión retrospectiva del plan de experimentación luego de terminar cada experimento.
  6. Una vez alcanzado un nivel de éxito aceptable en diversos experimentos, documente y publique los pasos para alcanzar dicho éxito.
  7. Verifique la reptibilidad antes de publicar sus resultados; y lleve seguimiento de cada “punto funcional reproducible

¿Y qué significa el término “punto funcional reproducible” (PFR)?

Básicamente es el conjunto de pasos que hemos verificado que funciona para llevarnos a una conclusión.

Llevar seguimiento de cada PFR significa ponerle un nombre, una identificación que nos permita referirnos a cada PFR y que nuestros nuevos procedimientos se basen en el PFR más reciente, donde se concentra el conocimiento acumulado más reciente.

En el ejemplo, terminamos documentando los pasos de un proceso de grabación con Intel Edison que pudimos constatar como repetibles; de forma que nuestros siguientes experimentos puedan tomar este PFR como su punto de partida.

metodo_cientifico

La cultura Maker es también una cultura de Investigación

28 Feb , 2016,
José Núñez
No Comments

Cuametodo_cientificondo se trata de cultura Maker, la investigación es esencial.

Y no me refiero a la “investigación” esa de simplemente googlear algo que necesitamos aprender.

Me refiero a la adquisición de conocimiento y su respectiva mejora y creación de nuevo conocimiento; a muchas horas practicando, aprendiendo, documentando y publicando.

Algo que hemos estado aprendiendo sobre la marcha de diversos proyectos y colegas; como es el caso de nuestros colegas de UNED-LiiT (http://investiga.uned.ac.cr/)

Wikipedia: Investigación

Wikipedia: Ciclo de la Investigación Científica

Wikipedia: Protocolo de Investigación