jueves, 24 de mayo de 2012

Final

LED CUBE

sábado, 19 de mayo de 2012

Otra opción aumentar I/O Arduino

En esta entrada les compartiré una manera bastante simple de poder aumentar las entradas o salidas del Arduino sin necesidad de comprar shift registers, pero teniendo en cuenta que disponemos de 2 Arduinos, esto es el mejor camino para aumentar salidas o entradas cuando tenemos ArduInos de sobra :).
Materiales que ocupamos:


  • 2 Arduinos
  • 1 Led
  • 4 cables 
  • Fuente de poder


Lo primero que vamos a hacer es conectar nuestros Arduinos de una manera muy simple:



Podemos ver que ocupamos los mismos puertos del Arduino master y del Arduino esclavo, conectamos la salida de 5v del master al esclavo, la salida GND del master al esclavo, y las entradas analógicas 4 y 5 del master al esclavo también a la 4 y 5.

Ahora colocamos un led en el pin 13 del Arduino esclavo, ya que nuestro programa tendrá como propósito apagar y prender un led.

Ahora programamos para el Arduino master:




Y para el Arduino esclavo:




Básicamente estamos diciendo en el programa master en el loop que escriba en el pin 13 del Arduino 2, y manda valores HIGH y LOW cada ciertos segundos para apagar y prender el led.
En el programa esclavo, se recibe el evento y se escribe en la salida digital el estado y el pin que se mando en el master.
Es muy fácil de hacer y bastante útil.

Aquí un vídeo y fotos de como me quedo a mi:



            





miércoles, 16 de mayo de 2012

Semana 14

Aportación al proyecto hice una investigación de una buena herramienta para crear un grid, con Ganga y Python.




Y para la semana de laboratorio hice también una investigación teórica de Grid.

Grid

Grid Computing

Grid Computing se puede definir como la aplicación de los recursos de muchos ordenadores en una red a un único problema, por lo general una que requiere un gran número de ciclos de procesamiento o el acceso a grandes cantidades de datos.



La red de energía computacional es análoga a la red de energía eléctrica. Permite el acoplamiento de los recursos distribuidos geográficamente para ofrecer un acceso consistente y de bajo costo a los recursos, independientemente de su ubicación física o punto de acceso. Las redes de Internet o dedicados pueden ser utilizados para interconectar una amplia variedad de recursos electrónicos distribuidos (como supercomputadores, clusters de ordenadores, sistemas de almacenamiento, fuentes de datos) y los presentan como un recurso único y unificado.

En su esencia, Grid Computing permite a los dispositivos, independientemente de su funcionamiento a las características de ser prácticamente compartida, gestión y acceso a través de una empresa, industria o grupo de trabajo. Esta virtualización de los recursos pone todo el acceso necesario, los datos y potencia de procesamiento en las yemas de los dedos de los que necesitan para resolver rápidamente problemas complejos de negocios, realizar cálculo intensivo de investigación y análisis de datos, y operar en tiempo real.

Una empresa con un poco menos de 2.000 computadoras de escritorio pueden cosechar cerca de 1 teraflop (un billón de operaciones de punto flotante por segundo) de capacidad de computación. Aún mejor, la compañía puede capturar el poder de las computadoras que ya posee de que fuera de uso por la noche y el trabajo en menos de plena capacidad durante el día.

Universidades e instituciones de investigación han utilizado durante mucho tiempo la red de computación en la tecnología, pero recientemente también está haciendo avances rápidos en el mercado empresarial. IBM acaba de llegar a las normas de funcionamiento que va a generar muchas nuevas aplicaciones de negocios y hará que la proliferación de ancho.

Internet de Grid Computing

El Internet está evolucionando más allá del correo electrónico, contenido y comercio electrónico. Se está convirtiendo en una verdadera plataforma, que combina las cualidades de servicio de la computación empresarial con la capacidad de compartir recursos distribuidos a través de la web: aplicaciones, datos, almacenamiento, servidores, y todo en el medio.
Habilitación de dispositivos: Internet amplió la gama de cosas que los ordenadores personales puede hacer, aprovechando sus funciones de comunicación para poner servidores para trabajar el almacenamiento de archivos de copia de seguridad, servicio de páginas web personales y de bloquear el spam. Sin embargo, la computadora personal, asistente personal digital (PDA) u otros dispositivos conectados no tienen acceso transparente a todos los tipos de programas en todo tipo de plataformas. Las aplicaciones que acceden a que no están necesariamente integrados. La computación Grid mantiene la promesa de traer este tipo de poder y la capacidad de dispositivos habilitados para Internet. En un mundo inalámbrico, esta red podría permitir a los dispositivos más simples, tales como buscapersonas - para acceder a la potencia de los ordenadores a través de la red de una manera significativa.


La intensa colaboración: Hoy en día, la colaboración en línea proporciona uso compartido de documentos y permite a los debates. Este proceso va a cambiar con el grid computing, lo que facilitará la utilización conjunta de las solicitudes completas. A pesar de esto tiene gran uso de sofisticadas aplicaciones de colaboración, incluso las aplicaciones mundanas se beneficiarán. Por ejemplo: los patrones pueden ser detectados en el uso de recursos financieros, mejoras para el hogar, planificación de eventos y otras aplicaciones, y todas las aplicaciones relacionadas se beneficiarán de las opciones identificadas, y se tomen decisiones, las personas con necesidades similares. Muchos tipos de simulación, incluyendo prototipos, puede ser posible gracias a la computación grid. Esto animará a nuevas relaciones y nuevas comunidades.
Además de nuevas capacidades, hay un gran potencial para el ahorro de costes. Uso de los ciclos de repuesto (el tiempo de inactividad en el equipo), en paralelo con los ataques a los problemas, el acceso a través de dispositivos más sencillos y utilizar sólo las funciones de la aplicación que necesita debe hacer la mayoría de las aplicaciones de tecnología de la información más económico y asequible en el futuro.


Aplicaciones

Toda el área de la computación distribuida es una cama caliente de desarrollo significativo que se espera que genere avances sorprendentes en los próximos años. Y los primeros grandes aplicaciones ya están aquí.
United Technologies, el conglomerado de fabricación $ 28b, está equipando a más de 100.000 computadoras Wintel con su propio peer-to-peer software para hacer cálculos científicos y resuelve problemas complejos de modelado durante las horas libres. El proyecto es una ampliación de lo que la compañía de aviones Pratt & Whitney división de motores ha hecho para eliminar una supercomputadora Cray con 5.000 estaciones de trabajo Sun Unix, para llevar a cabo simulaciones de diseño de piezas de aviones. El resultado: el 85 por ciento de utilización para cada estación de trabajo.

Con 20.000 PCs en Pratt & Whitney, el proyecto P2P se espera reducir a la mitad el tiempo y el dinero que se necesita para desarrollar motores de turbina y otras partes de aviones, principalmente mediante la eliminación de varios millones de dólares prototipos. Anteriormente, se podría tomar $ 1 mil millones y cinco años entre el momento en un motor ha sido desarrollado y certificado.

Universidades y organizaciones de investigación han utilizado similares de procesamiento de igual enfoques para resolver problemas científicos complejos. El más famoso es un proyecto denominado SETI @ home, que utiliza los equipos de voluntarios en todo el mundo para buscar vida en otros planetas.

El Programa Intel filantrópica P2P ayuda a combatir enfermedades potencialmente mortales mediante la vinculación de millones de ordenadores en lo que se prevé que el recurso de computación más grande y rápido de la historia. Este "supercomputadora virtual" utiliza la tecnología P2P para hacer cantidades sin precedentes de poder de procesamiento disponibles para los investigadores médicos para acelerar el desarrollo de mejores tratamientos y medicamentos que podrían curar enfermedades.


jueves, 10 de mayo de 2012

Usando Canvas de Android

En esta entrada les muestro el código para mostrar bolitas y que reaccionen al evento onTouch:



Y con esto obtengo lo siguiente:



Seeeduino

Seeeduino es compatible con una placa Arduino. Está diseñado basando en Diecimila, el 100% compatible con su actual programa y el IDE. En la parte de hardware tiene cambios notables con medidas para mejorar la flexibilidad y la experiencia del usuario.


Descripción

  • Microcontrolador ATMega168
  • Voltaje de operación 5V/3.3V
  • Voltaje de Entrada (recomendado) 7-12 V
  • Voltaje de Entrada (límites) 6-20 V
  • Digital pines I / O 14 
  • Pines de entrada analógica 8
  • Corriente de I / S de CC Pin 40 mA
  • De corriente continua de 3.3V Pin 50 mA
  • Memoria Flash de 16 MB (2 KB de la cual es utilizada por gestor de arranque)
  • SRAM 1 KB
  • 512 bytes de EEPROM
  • Velocidad del reloj de 16 MHz.

Características

  • Hereda todas las características de la Arduino Diecimila.
  • Compatible con la disposición de las clavijas Diecimila, el tornillo hueco y las dimensiones.
  • Evoluciona con componentes SMD
  • Mejora de la extensibilidad y conveniencia.




¿Cuáles son los cambios de Arduino a Seeeduino?



  • Duplicar digital de IO a 100mil la red para la compatibilidad prototipo de placa.
  • Reducir la altura de los componentes por debajo de los encabezados de las mujeres.
  • Facilitar el acceso a los botones e interruptores.
  • Cambiar tipo-B del puerto USB a Mini USB.
  • Vuelva a colocar 3.5mm DC Power Jack para conectar la batería el pin 2.
  • Restablecer y el indicador de alimentación cerca de botón RST.
  • Auto-reset de selección.
  • Selección de 3.3V Voltaje de operación.
  • Pin de UART para FTDI232 explosión de bits operación.
  • Pin de 2 extra ADC.
  • Condensador opcional para mejorar el rendimiento de salida de 3.3V.
  • Re-ruta de PCB
  • Pin out para I2C y sensores




1. Duplicar digital de IO a 100mil la red para la compatibilidad prototipo de placa.
2. Reducir la altura de los componentes a continuación los encabezados de las mujeres.
3. Un acceso más fácil a los botones y los interruptores.
4. Cambiar tipo-B del puerto USB a Mini USB.
5. Vuelva a colocar 3.5mm DC Power Jack para conectar la batería el pin 2.
6. Restablecer y el indicador de alimentación cerca de botón RST.
7. Auto-reset de selección.
8. Operación de selección de voltaje de 3.3V.
9. Pin out UART para FTDI232 explosión de bits operación.
10. Pin out 2 extra ADC.
11. Pin out para I2C y sensores.
12. Condensador opcional para mejorar el rendimiento de salida de 3.3V.

Ejemplo de uso




miércoles, 9 de mayo de 2012

Seguridad con IPython

Wiki


Paquete de Python IPython.zmq expone toda la potencia del intérprete de Python en una red TCP / IP a los efectos de la computación paralela. Esta característica nos lleva a la importante cuestión de modelo de seguridad de IPython. Este documento da detalles acerca de este modelo y cómo se lleva a cabo en la arquitectura de IPython.



Proceso y topología de la red
Para habilitar la computación paralela, IPython tiene una serie de diferentes procesos que se ejecutan. Estos procesos se discuten en detalle en la documentación IPython y se resumen aquí:


  • El motor IPython. Este proceso es un completo intérprete de Python en el que se ejecuta código de usuario. Varios motores hacen posible la computación paralela.
  • El centro IPython. Este proceso controla un conjunto de motores y programadores, y comprueba el estado de los procesos. Se escucha por conexiones de registro de los motores y los clientes, y las conexiones del monitor de los programadores.
  • Los programadores ipython. Se trata de un conjunto de procesos que transmiten los comandos y los resultados entre los clientes y los motores. Por lo general son en la misma máquina que el controlador, y escuchar las conexiones de los motores y los clientes, sino conectar con el Hub.
  • El cliente IPython. Este proceso es típicamente un proceso interactivo Python que se utiliza para coordinar los motores para obtener un cálculo paralelo.

En conjunto, estos procesos se denominan el grupo IPython, y el cubo y programadores juntos se conocen como el controlador.

Estos procesos se comunican a través de cualquier transporte con el apoyo de ZeroMQ (tcp, pgm, Infiniband, el IPC) con una topología bien definida. El centro IPython y programadores de escuchar en los sockets. Al iniciarse, el motor se conecta a un hub y se registra, que a su vez informa al motor de la información de conexión para los programadores, y el motor se conecta a los programadores. Estas conexiones del motor / eje y motor / programador deben persistir durante la vida útil de cada motor.

El cliente IPython también se conecta con los procesos de mando mediante un número de conexiones de socket. Como la escritura, este es un zócalo por programador (4), y 3 conexiones al centro de un total de 7. Estas conexiones persistir durante la vida útil del único cliente.

Un controlador IPython dado y un conjunto de motores de motores típicamente tiene una vida relativamente corta. Típicamente esta vida corresponde a la duración de una sola simulación paralela a cabo por un solo usuario. Por último, el centro, los programadores, los motores, y los procesos de los clientes por lo general se ejecutan con los permisos de ese mismo usuario. Más específicamente, el controlador y los motores no se ejecutan como root o con permisos de superusuario.

Conexiones de red seguras
Información general


ZeroMQ no proporciona exactamente ninguna seguridad. Por esta razón, los usuarios de IPython debe ser muy cuidadoso en el manejo de las conexiones, ya que un proceso abierto socket TCP / IP presenta el acceso a la ejecución arbitrario como el usuario en las máquinas de motor. Como resultado, el comportamiento predeterminado del controlador de procesos es escuchar sólo para los clientes en la interfaz de bucle invertido, y el cliente debe establecer túneles SSH se conecten a los procesos de controlador.

SSH
Desde ZeroMQ no proporciona ninguna seguridad, los túneles SSH son la principal fuente de conexiones seguras. Un archivo de conexión, como ipcontroller-client.json, contendrá información para la conexión al controlador, que pueden incluir la dirección de un servidor ssh a través con el cliente es hacer un túnel. El objeto del cliente crea túneles que utilizan ya sea OpenSSH o Paramiko, dependiendo de la plataforma. Si los usuarios no desean utilizar OpenSSH o Paramiko, o las utilidades de túneles no son suficientes, entonces se puede construir los túneles de sí mismos, y simplemente conectar a los clientes y los motores, como si el controlador se encontraban en bucle de retorno en el equipo de conexión.


Otras medidas de seguridad
Un número de otras medidas se toman para limitar aún más los riesgos de seguridad involucrados en el funcionamiento del kernel IPython.

En primer lugar, de forma predeterminada, el controlador IPython escucha en números de puertos aleatorios. Si bien esto puede ser anulado por el usuario, en la configuración predeterminada, el atacante tendría que hacer un escaneo de puertos para encontrar incluso un controlador para atacar. Cuando se combina con el tiempo relativamente corto de funcionamiento de un controlador típico (del orden de horas), el atacante tendría que trabajar muy duro y muy rápido para encontrar incluso un controlador en marcha para atacar.

En segundo lugar, la mayor parte del tiempo, especialmente cuando se ejecutan en supercomputadoras o clusters, el controlador se ejecuta detrás de un firewall. Por lo tanto, para los motores o el cliente para conectarse al controlador:

Los diferentes procesos tienen que estar todos detrás del firewall.
o bien:

El usuario tiene que utilizar el reenvío de puerto SSH para hacer un túnel las conexiones a través del firewall.
En cualquier caso, un atacante se presenta con barreras adicionales que impiden atacar o incluso el sondaje.


Referencias

iPy




Nominaciones:

Juan Carlos Espinoza

MPI con IPython


A menudo, un algoritmo paralelo requiere movimiento de datos entre motores. Una forma de conseguir esto es haciendo un tirón y luego un empujón con el cliente multimotor. Sin embargo, esta será lenta como todos los datos tienen que pasar por el controlador para el cliente y luego de vuelta a través del controlador, a su destino final.

Una manera mucho mejor de mover datos entre los motores es el uso de una biblioteca de paso de mensajes, como la interfaz de paso de mensajes (MPI). Arquitectura de cómputo paralelo IPython ha sido diseñado desde cero para integrarse con MPI.


Requisitos adicionales de instalación

  • El estandar MPI como OpenMPI o MPICH.
  • El mpi4py paquete.

Inicio de los motores con MPI


Para utilizar el código que llama a MPI, normalmente hay dos cosas que MPI requiere.

  • El proceso que se quiere llamar a MPI se debe iniciar con mpiexec o un sistema de proceso por lotes (como PBS), que cuenta con el apoyo de MPI.
  • Una vez iniciado el proceso, se debe llamar a MPI_Init ().

Hay un par de maneras para comenzar a los motores de ipython y conseguir que estas cosas pasen.

Arranque automático con mpiexec y ipcluster


El enfoque más sencillo es utilizar los lanzadores de MPI en ipcluster, que primero se iniciará un controlador y, a continuación un conjunto de motores que utilizan mpiexec:

$ ipcluster start -n 4 --engines=MPIEngineSetLauncher

Este enfoque es mejor que la interrupción de ipcluster se detendrá automáticamente y limpiará el controlador y los motores.

Empezar manualmente a usar mpiexec

Si desea arrancar los motores ipython utilizando el mpiexec, lo que hay que hacer es:

$ mpiexec -n 4 ipengine --mpi=mpi4py



Esto requiere tener un controlador en marcha y que los archivos FURL para los motores están en su lugar. También se ha construido en apoyo a PyTrilinos , que se puede utilizar (suponiendo que se instala) por el arranque de motores con:

$ mpiexec -n 4 ipengine --mpi=pytrilinos


Una vez que los motores están funcionando con el MPI, que están listos para ir. Ahora se puede llamar a cualquier código que utilice MPI en los motores de ipython. Y, todo esto se puede hacer de forma interactiva. Este es un muy sencillo ejemplo de la página oficial.

En primer lugar, permite definir una función simplemente que utiliza MPI para calcular la suma de una matriz distribuida. Y guarda el texto en un archivo llamado psum.py:


Referencias

iPy

OpenGL y jPCT-AE

En esta entrada les explicaré  lo poco que llevó de la parte de mi interfaz en 3D, se me ha dificultado bastante el entendimiento de OPENGL y aunque contra el tiempo ahí la la llevo :).
Explicaré algunas cosas básicas del uso de OPENGL en Android y después les mostrare la parte de la librería.
Para usar OpenGL lo que necesitamos primero es saber lo siguiente:


GLSurfaceView


GLSurfaceView es una clase de la API de Android 1.5 que ayuda a escribir aplicaciones OpenGL ES.

  • Proporcionar el código de unión para conectar OpenGL ES para el sistema Vista.
  • Proporcionar el código de cola para hacer el trabajo de OpenGL ES, con la actividad del ciclo de vida.
  • Creación y gestión de un hilo de representación separada para permitir una animación suave.
  • Proporcionar fácil de usar herramientas de depuración para el seguimiento de llamadas a la API OpenGL ES y la comprobación de errores.
La función que necesitamos llamar es:

public void setRenderer(GLSurfaceView.Renderer renderer)


GLSurfaceView.Renderer


GLSurfaceView.Renderer es una interfaz genérica de representación. En su implementación necesitamos poner todas sus llamadas para hacer un marco.
Hay tres funciones para poner en práctica:


// Cuando la interface es creada o recreada.
public void onSurfaceCreated(GL10 gl, EGLConfig config)

// Es llamada para dibujar en la interfaz actual.
public void onDrawFrame(GL10 gl)

// Es llamada cuando la interface cambia de tamaño.
public void onSurfaceChanged(GL10 gl, int width, int height)



onSurfaceCreated
Aquí es para configurar las cosas que no cambian con tanta frecuencia en el ciclo de procesamiento. Cosas como el color para limpiar la pantalla con el, lo que permite z-buffer y así sucesivamente.

onDrawFrame
Aquí es donde se dibuja.

onSurfaceChanged
Si su dispositivo permite cambiar el paisaje cuando se mueve.

jPCT-AE



Por ahora esto es lo básico en cuanto a OpenGl, ahora será necesario usar una librería que nos facilite el uso de OpenGL debido a que usarlo es algo complicado al menos para mi que es la primera vez que trabajo con esto, entonces busqué una solución que parece llamarse jPCT-AE.
jPCT es una potente solución para llevar 3D en el mundo Java. jPCT ofrece un rápido procesador de software que es totalmente compatible con todas las máquinas virtuales Java 1.1.
y lo que se llama jPCT-AE es la edicion para Android, es un puerto, es un nuevo procesador para la versión normal de jPCT y es más adecuado para la plataforma Android.

Es fácil de instalar lo único que hay que hacer es descargar el .jar de la página oficial, en la página oficial lo que obtenemos es un .zip que tiene ejemplos y entre ellos el .jar, lo que hay que hacer para integrarlo al eclipse es muy fácil, siguiendo los siguientes pasos:

1. Creamos un proyecto en Eclipse
2. En ese proyecto agregamos una carpeta que llamaremos "libs", aquí agregamos el .jar de JPCT-AE
3. Ahora damos click derecho en el proyecto y elegimos Build Path:


4. Luego escogemos configurar Build Path, y ahora nos aparece una ventana como esta:


5. Luego en Add Jars.. seleccionas el .jar que acabamos de meter en la carpeta libs y FIN .


Ahora si a probarla:

Cree un nuevo proyecto al que llamé "Esferita" en él agregué la librería como acabo de explicar, y tengo el código masomenos así:




Y me crea lo siguiente:




En la siguiente entrada explicaré linea a línea el código.

:)

jueves, 3 de mayo de 2012

Problemas Arduino BT

Al tratar de conectar el Arduino BT de la forma que expliqué la primera vez , parece que eso solo funciono por ese rato, a la siguiente vez que he intentado no tuve los mismos resultados. así que tuve que empezar a  moverle a otras cosas.



Este es mi archivo modificado, de la manera que a mi me funcionó:




Lo que si se debe hacer es:



  • Agregar el dispositivo BT de la manera explicada en la entrada pasada.
  • Resetear el dispositivo antes de cada subida de código, es necesario antes de picar al botón de Update resetear el BT y esperar aproximadamente 2 segundos para ahora si picar Update al código.


Lo que no es:

Abrir el terminal y desde ahí hacer una conexión previa, esto no sirve de nada, al contrario trae problemas con la conexión del IDE del Arduino ya que dice que el programador esta ocupado con otra cosa, o que el puerto esta ocupado, en fin muchísimos errores relacionados con que dos cosas están usando el mismo dispositivo. Es por eso que NO se debe de abrir el terminal para la conexión previa.

Amarino

Amarino es un proyecto basado en la idea de que podamos ver eventos que ocurran en nuestro celular Android en alguna otra parte, o de alguna otra parte al celular Android, esta basado una aplicación para Android y una biblioteca Arduino, con las que se pueden interactuar con el telefono y arduino.

¿Qué necesitamos?

  • Android Es el sistema operativo con el que trabajan algunos celulares, para usar Amarino no es necesario sabre programar para Android, lo primero que haremos es instalar la aplicación Amarino directamente en el teléfono, trae ya bastantes eventos que pueden ser enviados al Arduino.

  • Arduino. Es la plataforma de código abierto de electrónica de prototipos (contiene software y hardware) que son por lo general bajo costo y bastante fácil de aprender.



Conectar Arduino - Android

1 . Esta es la primera pantalla que muestra la aplicación de Amarino. Desde Amarino es todo acerca de cómo conectar su teléfono a un Arduino, el primer paso que tienes que hacer es buscar el dispositivo Bluetooth Arduino. Para agregar un dispositivo BT se debe esperar hasta que el módulo Bluetooth Arduino aparece. Si no se mostrará incluso si el proceso de descubrimiento ya ha terminado, se debe comprobar si su módulo Bluetooth Arduino está encendido y visible.


2. Es probable que se encuentre más de un dispositivo BT, debido a otros dispositivos Bluetooth que te rodean. Es necesario saber cuál es su módulo Bluetooth Arduino para agregarlo a la Amarino.


3. Por último, ahora solo falta oprimir el botón de conexión. Se obtendrá un "Error de conexión" o un mensaje que le dice que tire hacia abajo la barra de estado que introducir un pin, pero eso está bien.
Es necesario obtener la notificación de solicitud de emparejamiento en la barra de notificación (en la parte superior del teléfono). Tire hacia abajo la barra de notificación, como se muestra en la imagen y podrás ver la "solicitud de vinculación" de notificación.


4. Pulse sobre la "solicitud de vinculación" de notificación y el diálogo de emparejamiento de dispositivos Bluetooth aparece. Aquí es donde puede entrar en el módulo Bluetooth de alta PIN confidencial. Casi siempre se trata de "1234" o para ARDUINOBT juntas "12345". Algunos módulos tendrá "0000", pero menos común. Escríbala y pulse "OK". Si el PIN correcto, el emparejamiento se realiza.
Ahora si nos podríamos conectar.



Conectar

5. Ahora si pulsa el botón de conexión, una vez más. Esta vez debe conectarse correctamente indicada por una luz verde en su módulo Bluetooth y una luz verde justo encima de el botón de conexión. Si no, verifica el proceso emparejamiento.


Activar eventos

6. Toque en el icono rojo de la izquierda para gestionar los eventos que deben ser enviados a la placa Arduino. Seleccione "Agregar evento" y la búsqueda de "Test Event" en la lista siguiente. Seleccione "Test Event". Una página de descripción se abrirá diciendo lo de eventos de prueba. Por ahora simplemente dicen "Guardar". Esto agregará el evento de prueba que envía los datos al azar para Arduino tan pronto como se establezca una conexión.






El teléfono ya está listo para hablar con Arduino. Sin embargo Arduino no está listo todavía, así que vamos a empezar a configurarlo.

Entorno de desarrollo Arduino


7. Se abre en el entorno de trabajo Arduino y seleccionar "File->Examples->MeetAndroid->Test".

8. Se cambia la velocidad de transmisión de su módulo Bluetooth ya sea a 57600 o 115200 baudios. Las nuevas placas Arduino sólo funcionará con 115200 baudios, los mayores sólo con 57600 baudios. Tenga en cuenta que Arduino BT trabajo juntas con 115200 baudios y no se supone que deben cambiar la velocidad de la Arduino BT. Si usted no utiliza un Arduino BT tablero con Bluetooth integrado que se refieren a la documentación del módulo Bluetooth acerca de cómo cambiar la velocidad de transmisión de su módulo Bluetooth externo. Asegúrese de que la velocidad de transmisión de su módulo Bluetooth coincide con la velocidad de transmisión en su boceto Arduino. Todos los ejemplos utiliza 57600 baudios (Serial.begin (57600)), así que si usted utiliza un módulo de BT con 115200 baudios tienes que cambiar el 57600 a 115200 en su declaración Serial.begin.

9. Sube el el código a la placa. Se debe poner un led conectado al pin 13.

10. Enciende tu Arduino BT. En el teléfono Android ve a la pantalla principal de Amarino. Pulse el botón de conexión al lado de su agregado dispositivo BT. Se debe iniciar la conexión. Si la conexión se pudo establecer el indicador cambia a verde.
Si todo ha ido bien a su conducido en el pin 13 parpadea cada 5 segundos durante 1 segundo.




Página oficial Amarino.

Eyes-free




Es una aplicación para teléfonos con Sistema Operativo Android, podemos usar esta aplicación para usar el teléfono sin necesidad de ver la pantalla, entre sus aplicaciones más populares esta el teclado numérico que su implementación parece ser tan simple que es difícil creer que esto no existía antes, de esta manera es muy fácil para lo usuarios con problemas en la vista guiarse al uso del móvil.

Fue creado por programadores independientes que están desarrollando patrones de accesibilidad.

El shell Eyes-Free podemos usarlo para escribir otras aplicaciones, por ejemplo, un mapa que use GPS para poder avsiar donde estas o quiiza algo que avise el estado de la batería o calidad de conexiones inalambricas.


En ese ejemplo podemos ver que podemos marcar números sin que haya teclado, ya que el lugar en donde se ponga tu dedo define la posición del 5, de ahí solo mueves hacia arriba o hacia abajo, derecha o izquierda para los demás números.

Eyes Free fue un proyecto creado en el 2009 con resultados muy interesantes y productivos.
El objetivo de esta aplicación es usar Android sin necesidad de usar los ojos para personas con discapacidades o invidentes. Se basa en el principio de que con un simple desplazamiento de dedos se puedan conocer las opciones que existen en la pantalla y al levantar el dedo sobre la opción que se quiera seleccionar quede activada.

Ya hay programas específicos que pueden enviar mensajes de manera muy sencilla, así como aplicaciones que permiten usar la cámara del teléfono celular como una lupa.

Hay también una aplicación llamada Keyboard Tutor, que ayuda a las personas a aprender cuál es la disposición de botones y el teclado pulsando sobre las teclas para escuchar con un volumen adecuado a    cuales corresponden.

Rock Lock es un reproductor de música que no necesita la visión y emplea la misma interfaz de marcador táctil.


Puede definir el bloqueo de Rock como una pantalla de pre-bloqueo para el dispositivo para permitir un rápido acceso a tu colección de música.
Si antes de la cerradura se activa y tiene un patrón de bloqueo, Rock de bloqueo aparecerá antes de desbloquear el dispositivo.

Pet Android responde a preguntas sencillas.

También tiene aplicaciones para localización, como la llamada Talking Compass que sirve como su nombre lo dice es una brújula parlante, le dice al usuario hacia donde se dirige cuando toca la pantalla.


WalkyTalky es una ayuda accesible de navegación, que actualiza la barra de estado del terminal con la posición en que se encuantra el usuario en ese momento.
WalkyTalky es una ayuda para la navegación accesible.

  • Periódicamente se actualiza la barra de estado con su ubicación actual a la dirección de calle más cercana
  • Capacidad para introducir un destino y poner en marcha directamente mapas de navegación en modo Peatón direcciones

Se debe activar el GPS cuando se ejecuta esta aplicación.

Y también hay juegos, el llamado Mem que consigue que los jugadores relacionen una secuencia de destellos de colores con sonidos.


Text-to-Speech Extended es una biblioteca de texto para hablar disponible para otras aplicaciones Android, como una ampliación de texto para hablar que esta integrado en la interfaz de programación de interfaces.


Referencias

Downloads
Página principal

Instrucciones de microcontroladores clásicos

Esta entrada la había olvidado publicar, se que ahora es tiempo para Arduino :)


Instrucciones de microcontroladores clásicos


Clasificación de instrucciones

En la entrada pasada de procesadores digitales de señales, hable sobre los MCU que son los microcontroladores clásicos estos se diferencian de los DSP (Procesadores Digitales de Señales), en que los MCU ejecutan en varios ciclos instrucciones aritméticas complejas en varios ciclos mientras que los DSP hacen esto en una misma instrucción. Los DSP tiene conversores AD rápidos y precisos, además se pueden programar con lenguajes de alto nivel, como C. La velocidad y rendimiento de los DSP es muy superior que la de los MCU.

Los DSC (Controladores Digitales de señales), combinan las instrucciones típicas de los microcontroladores, llamadas instrucciones MCU, con las especializadas en resolver algoritmos matemáicos para el procesamiento de señales llamadas DSP.

Los DSC cuentan con 84 intrucciones, que se pueden agrupar en 10 categorías, y que se distinguen por las funciones que realizan:

  • Instrucciones de movimiento
  • Instrucciones lógicas
  • Instrucciones matemáticas
  • Instrucciones de rotación y mantenimiento
  • Instrucciones de bit
  • Instrucciones de comparación y brinco
  • Instrucciones de control de flujo de programa
  • Instrucciones de pila y registros sombra
  • Instrucciones de control
  • Intrucciones DSP


Las primaras son las intrucciones de los MCU mientras que la última son las instrucciones DSP de las que pienso hablar en otra entrada.

Instrucciones de movimiento

La instrucción MOV es una de las más usadas en la mayoría de los programas. En lenguaje ensamblador se editan las instrucciones. Explicaré las instrucciones más usadas.
Cuando se especifica el operando {,WREG}, el destino en las instrucciones es WREG (W0), pero si no se específica el operando destino, actúa como tal la dirección de la memoria de datos F.
Las instrucciones EXCH intercambia el contenido de los registros a los que afecta y se ejecuta en una sola instrucción.
La instrucción SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn (es el parámetro de entrada), también ejecuta la instrucción en un solo ciclo.

Instrucciones lógicas

Estas instrucciones estan encargadas de hacer operaciones lógicas bit a bit entre los operandos fuente, depositando el operando en el destino. Incluye las operaciones AND, OR y EXOR.
La instruccion con el nemónico COM se refiere al complemento a 1 del operando fuente dejandolo en el destino.
NEG es el complemento a 2.
CLR borra o pone a 0 el operando al que afecta.
SETM pone a 1 los bits del operando sobre el que actúa. Todos esas operaciones se ejecutan en un solo ciclo.

Instrucciones matemáticas

Soporta las operaciones aritméticas principales como son la suma (ADD), la resta (SUB), la multiplicación (MUL) y la división (DIV).
Hay algunas variantes que además de la suma o resta permiten participar el acarreo o la llevada como ADDC y SUBB.
También hay instrucciones simples que incrementan o decrementan los operandos como INC y DEC.
DAW.B Hace un ajuste decimal del byte de menos peso del registro Wn, dando un resultado BCD.
SE Extiende el signo del byte que esta depositado en Ws y el resultado de 16 bits lo carga en Wnd.
ZE Extiende con 0 el byte de menos peso del registro de trabajo duente Ws y el resultado de 16 bits lo deposita en el destino Wnd.

Instrucciones de rotación y desplazamiento

Este grupo contiene las instrucciones que realizan el desplazamiento aritmético o lógico, a la derecha como a la izquierda, con un máximo de 15 posiciones.
La instrucción ASR Wb, Wns, Wnd produce un desplazamiento aritmético a la derecha del contenido del registro Wb un número de posiciones que esta determinado por los 4 bits de menos peso de Wns de máximo 15, depositando el resultado en el registro Wnd.
La rotación ala izquierda o a la derecha se pueden ejecutar a través del acarreo (RLC y RRC), o sin tener en cuenta el acarro (RLNC y RRNC).
Las instrucciones con nemónico LSR, produce un desplazamiento lógico a la derecha y SL hacia la izquiera, aquí el bit de más peso del operando fuente al desplazarse pasa a ocupar el bit señalizador de acarreo, escribiendo un cero en el bit de menor peso del operando.

Instrucciones de bit

Estas instrucciones hacen una operación sobre un bit concreto de una posición de la memoria de datos direccionada pro F, de un registro de trabajo Ws.
La instruccion BCLR Ws, #bit4 pone en 0 el bit de registro Ws que esta determinado por el valor del #bit4, que es un valor que esta comprendido entre 0 y 15.
La instruccion BCLR f, #bit4, pone en 0 el bit específicado por #bit4 en el contenido de la posición de memoria de datos con la dirección f.
Con el nemónico BSET pone a 1 el bir especificado.
BSW.C Ws, Wb escribe el valor de acarreo C en el bit de registro Ws que se especifíca por los 4 bits de menos peso del registro Wb.
BSW.Z Ws, Wb hace una operación muy parecida a la anterior solo que escribe el valor de señalización Z negado. Las operaciones con nemónico BTG invierte el valor del bit especificado en el operando.
BTST testea un bit de un registro Ws o de una posición de memoria F y lo guarda en el señalizador C cuando tienen la extensión .C, pero si es la extensión Z se carga en Z el valor del bit testado. Entre otras.

Instrucciones de comparación y brinco

Estas son instrucciones que comprueban una condición o que comparan un valor de un bit concreto y según su valor binario se brinca o no. El brinco consiste en un salto pequeño, se salta ala instrucción siguiente. Cuando no se cumple la condición impuesta al bit a comparar se ejecuta normalmente la siguiente instruccion.


Referencias

Angulo Usategui, José María, Susana Romero Yesa, and Ignacio Angulo Martínez. Microcontroladores PIC, Diseño práctico de aplicaciones 2da parte, McGraw-Hill, 2006.


Javascript paralelo

StratifiedJS extiende el lenguaje JavaScript con un pequeño número de construcciones de programación concurrente. Le permite expresar el flujo de control asíncrona en un estilo secuencial sencillo:



En ese código lo que se intenta recuperar las noticias de la BBC, al mismo tiempo trata de la CNN si no se recibió la noticia después de 1 segundo muestra la primera noticia que llega, y cancela cualquier solicitud que todavía podría estar en espera el tiempo de espera después de 1 minuto si no hay noticias recibidas, de forma automática la cancelación de las solicitudes pendientes.


StratifiedJS ejecuta el código en unidades lógicas que llamamos estratos. A diferencia de lo normal el código JS, los estratos se les permite "bloquear", es decir, el flujo de control se le permite detenerse en un punto determinado para ser recogidos más tarde en el mismo punto donde lo dejó. Un ejemplo sería la instrucción espera que bloquea por un período de tiempo dado.
Mientras que un estrato está bloqueado, puede ejecutar otros estratos. Los estratos son un poco como las discusiones, pero son mucho más determinista: un único estrato se está ejecutando en un momento dado y se ejecuta atómicamente hasta el punto en que o bien acabados o suspende. En ese punto el siguiente estrato pendiente se ejecuta hasta que termina o suspende, y así sucesivamente.
StratifiedJS contiene construcciones para la fundición de lógica asincrónica en forma de bloqueo (waitfor ()) y construcciones para la combinación de múltiples estratos (waitfor / y, waitfor / o desove) de una manera estructurada.

La función de StratifiedJS espera puede ser llamada con un argumento t el número de suspender el actual estrato de ~ t milisegundos:

La función de StratifiedJS espera puede ser llamada con un argumento t el número de suspender el actual estrato de ~ t milisegundos:
hold(1000);


Se debe tener en cuanta que sólo suspende el estrato que aparece en, que no bloquea todo el programa y no lo hace 'ocupado espera'. Otras capas simultáneas puede continuar para ejecutar durante este tiempo. Si está ejecutando SSJ en un navegador, la interfaz de usuario se quedará plenamente sensible durante los períodos de suspensión.


Referencia

http://onilabs.com/stratifiedjs

miércoles, 2 de mayo de 2012

Semana 13

Esta semana para la clase, he encontrado una herramienta que pudiera ser e verdader útilidad para el equipo, parece tener un gran soporte para sistemas paralelos y distribuidos, su nombre es iPy.
Explico su funcionalidad, arquitectura, y uso en el Wiki, aquí el enlce.

Para laboratorio hice una entrada, referente a la programación paralela en Javascript <3.
Esta es la entrada.



Nominaciones:

Roberto

martes, 1 de mayo de 2012

Simulación de Ambiente Urbano

Simulación de Medio Ambiente Urbano

A medida que más se presta atención a la planificación urbana "verde", la necesidad de estudios de simulación del medio ambiente ha crecido de forma espectacular. Gobierno y la planificación empresarial son a la vez que impulsa la necesidad de la evaluación de los edificios de efectos, y paisajes urbanos completos, en el medio ambiente. Esto es especialmente cierto para los efectos solares.

A medida que el costo del combustible sigue aumentando, el costo de refrigeración de los edificios comerciales se está convirtiendo en una preocupación importante. Además, como el costo de la energía solar conversión de las caídas, esta fuente ilimitada de energía está siendo rápidamente diseñados en la planificación del nuevo edificio. El programa de la certificación LEED (Liderazgo en Energía y Diseño Ambiental) fue desarrollado para proporcionar una herramienta de calificación práctica para el diseño de edificios verdes e incorpora la selección de materiales, eficiencia energética y calidad ambiental interior. De simulación solar puede proporcionar datos muy valiosos para ayudar a todos estos retos aplicaciones.



Este sistema de simulación se ha instalado para ayudar en el desarrollo de herramientas de software de análisis para permitir la simulación de análisis de la "isla de calor" fenómeno experimentado en los entornos urbanos. Eye Iluminación / Iwasaki trabajó con este cliente para crear un sistema extremadamente flexible que permite que el calor programable (irradiación) de carga en un túnel de viento térmico estratificado. Las lámparas también pueden ser articulados para proporcionar un ángulo de inclinación de hasta 45 grados para simular la luz del sol por la mañana y la tarde.



Eyes / Iwasaki Sistemas Ambientales de simulación solar


  • Iwasaki tecnología patentada de Solarlux las luces cumplan los requisitos de la norma espectral de energía de la EPA distribución y simular un entorno de luz cerca de la luz del sol real.
  • La insolación puede ser fijado y controlado entre 600 y 1.150 W/m2.
  • La razón de uniformidad de la insolación cumple plenamente la norma de la EPA de dentro de ± 15%.
  • Las lámparas de iluminación dentro de la matriz puede ser articulado + / - 45 grados para simular la mañana / tarde la luz del sol.
  • Patrones programables de iluminación se puede emplear para simular patrones específicos de irradiación y reducir aún más el nivel de irradiación.

Referencias