martes, 31 de enero de 2012

Reporte Inicial

Actualmente los dispositivos móviles se han convertido en aparatos indispensables para la vida diaria, aparte de mantenernos comunicados nos brinda otros servicios que nos son muy útiles como cámaras fotográficas, radio, reloj, juegos, agenda, entre muchos otros.



A pesar de que los dispositivos móviles no tienen la capacidad de un computador han sido ampliamente aceptados por la gente por su personalización y la posibilidad de estar siempre conectado.

Los dispositivos móviles de hoy en día poseen tecnologías que antes no nos hubiéramos imaginado tener en un aparato tan pequeño como Wifi, Bluetooth. GPS, Acelerometros, batería con alta duración, sistema operativo multitarea(Android, iOS), etc.

Todas estas nuevas tecnologías dan oportunidad a los desarrolladores de software para dispositivos móviles a crear aplicaciones que aprovechen al máximo estas características.

Esta es mi primer entrada para el curso Ingeniería de dispositivos móviles, para este curso el objetivo es poder desarrollar una aplicación, yo he elegido hacerlo en Android.

¿Qué es?

El proyecto que yo quiero desarrollar es un juego para niños que también funciona como lámpara, consiste en un programa para celulares android que se comunica vía bluetooth con un cubo construido de leds, con la ayuda de un arduino bluetooth.



¿Por qué?

La noción del espacio es sumamente importante para las personas, esta habilidad se desarrolla generalmente en niños en la etapa de preescolar.

Con la ayuda de este juego será mucho más fácil para ellos tener noción de la ubicación de objetos en el espacio, creando figuras que su imaginación permita en tercera dimensión, tratando de reproducir objetos que ve en la matriz o guiando alguna línea a alguna dirección(juego de snake).
El niño podrá trabajar con la geometría de objetos que es de suma importancia para desenvolverse en la vida cotidiana, para orientarse reflexivamente en el espacio, para hacer estimaciones sobre formas y distancias, entre otras cosas.

El cubo lo pueden usar grandes y chicos, sin embargo esta pensado principalmente para niños.




Mi idea vs productos existentes

Lo que tengo como propósito que mi programa realice es poder dibujar dentro del cubo figuras, mostrando al usuario las capas que constituyen el cubo, y poder elegir alguna animación predeterminada para la figura. La idea es tener en la pantalla del celular un espacio para dibujar "pixeleado" en 10x10, la aplicación deberá mostrar las 10 capas de 10x10. Podra tener la vista de lo que esta haciendo en su matriz de leds, o ver como esta quedando la figura de alguna vista en 3D que dará la misma aplicación.
Encontre un proyecto en youtube que hace algo parecido solo que en una pantalla led bidimensional prefabricada.







Mi idea es bastante parecida solo que mi aplicación mostrara capa por capa del cubo, y se podra ver la vista previa desde la misma aplicación o directamente en el cubo.

Es una idea bastante novedosa ya que ademas de poder jugar y aprender con el cubo de leds y el celular también puedes dejar figuras en en cubo funcionando como un aparato decorativo y lámpara.

¿Qué limitaciones tiene?

La principal limitación del proyecto es que los materiales que ocuparé para construir el cubo, para establecer la comunicacion cubo-celular, es bastante costoso.

Otra cosa que pudiera complicarse sería la construcción del cubo ya que implica mucho
trabajo pero esto queda fuera de este curso ya que el cubo será construido para otra materia, que estará documentado en este mismo blog con la etiqueta Cómputo Integrado.

Fuera de eso creo que la programación en plataforma android no será muy complicada ya que actualmente existen librerías para simplificar el dibujo en un canvas2D y canvas3D.

El costo es el inconveniente fuera de eso espero no tener ninguna más, de todos modos estaré actualizando constantemente mis avances del proyecto en el este blog con la etiqueta Proyecto Ingeniería de dispositivos móviles.


Importancia de mi aportación a la Ingeniería en Software

Es importante porque será código libre, con el que los demás desarrolladores si lo desean podrán jugar con él, cambiar a alguna otra plataforma o lenguaje, voi a mostrar algunas cosas de conexión bluetooth android-arduino, dibujos en canvas 2D, y 3D. También tomaré encuentra principios de diseño para la aplicación y lograr ser un sistema intuitivo para los usuarios.

lunes, 30 de enero de 2012

Semana 1

Esta primer semana estibe trabajando en el equipo de Lenguajes de Programación, a mí en particular me ha tocado realizar código en python para el problema de los filósofos.
Como muchos de nosotros sabemos este problema trata de 5 filósofos que viven en una casa , donde hay una mesa preparada para ellos. Básicamente la vida de cada filosofo consiste en pensar y comer, y después de años de haber estado pensando, todos los filósofos están de acuerdo en que la única comida que contribuye a su fuerza mental son los espaguetis. Como los espaguetis están muy resbalosos, cada filosofo ocupa dos tenedores para comer espaguetis.

Es fácil de imaginarlo: en una mesa redonda hay un gran plato para servir espaguetis, cinco platos, uno para cada filosofo y cinco tenedores. Cuando un filosofo quiere comer se dirige a su sitio asignado en la mesa y utilizando los dos tenedores situados a su lado izquierdo y derecho, come algunos espaguetis.
El problema consiste en u algoritmo que satisfaga la exclusión mutua, evitando el interbloqueo y la inanición.

Si no te es familiar por la clase de Sistemas Operativos probablemente este video te ayude:

En mi caso utilice semáforos para resolver el problema, en donde cada filosofo toma n tenedor primero el de la izquierda y luego el de la derecha. Una vez que el filosofo acaba de comer vuelve a colocar los dos tenedores en la mesa.

Para hacer esto primero fue necesario saber como se hacen los hilos en python, los semáforos, y locks, más bien fue una tarea de recordar el semestre pasado algunas cosas que hicimos en Sistemas adaptativos al simular un cruce de semáforos y la simulación del virus.

Se crea un hilo de la siguiente manera:


#!/usr/bin/python

import threading

class hilo(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self.num = num

def run(self):
print "Soy el hilo", self.num

print "Soy el hilo principal"

for i in range(0, 10):
t = hilo(i)
t.start()
t.join()


Debes notar que es importante incluir la librería threading.

Bastante sencillo en python, espero tener la oportunidad de mostrar algunos lenguajes más.

Ahora el código que implemente para la cena de los filósofos, cree la clase Filosofo que toma de parámetro el numero de filosofo y los tenedores.
La clase filosofo tiene las funciones de come, piensa, obtiene tenedor izquierdo, obtiene tenedor derecho, libera tenedor izquierdo y libera tenedor derecho.

#!/usr/bin/python                                                                                                                                                     

import random
import threading
import time

class Filosofo(threading.Thread):
def __init__(self, num, tenedor):
threading.Thread.__init__(self)
self.tenedor = tenedor
self.num = num
self.temp = self.num + 1 % 5

def come(self):
print "El filosofo "+str(self.num)+" come"

def piensa(self):
print "El filosofo "+str(self.num)+" piensa"

def obtieneTenIzq(self):
print "El filosofo "+str(self.num)+" obtiene tenedor izquierdo"
print "obtiene el tenedor "+str(self.num)
self.tenedor[self.num].acquire()

def obtieneTenDer(self):
print "El filosofo "+str(self.num)+" obtiene tenedor derecho"
self.tenedor[self.temp].acquire()

def liberaTenDer(self):
print "El filosofo "+str(self.num)+" libera tenedor derecho"
self.tenedor[self.temp].release()

def liberaTenIzq(self):
print "El filosofo "+str(self.num)+" libera tenedor izquierdo"
self.tenedor[self.num].release()


def run(self):
while(True):
self.piensa()
self.obtieneTenIzq()
self.obtieneTenDer()
self.come()
self.liberaTenDer()
self.liberaTenIzq()

Nfilosofos = 5

tenedor = [1,1,1,1,1]

for i in range(0, 4):
tenedor[i] = threading.BoundedSemaphore(1)

for i in range(0, 4):
t = Filosofo(i, tenedor)
t.start()
time.sleep(0.5)



Referencias
Conceptos hilos
Hilos en python

jueves, 12 de enero de 2012

Letrero Luminoso móvil

Voy a explicar los pasos necesarios para armar un letrero luminoso móvil de un kit comprado en STEREN.

Lo que se tiene que hacer es formar una palabra con una tira de 8 leds en movimiento. Para esto se va a usar un micro controlador PIC16F628A, un ventilador como motor, y los LEDs, entre otras cosas.
Requerimos una batería de 9V para la operación del micro controlador, y luces; el ventilador requiere una fuente de alimentación externa.

Al final de la prácticas podrás hacer algo como esto:





Lo que debemos de tener previamente:

Cautín tipo lápiz


Pinzas de punta


Pinzas de corte


Convertidor de voltaje o eliminador fijo de 9Vcc


Batería cuadrada 9V.


Conocimientos de soldar con cautín. Guía

Conocimiento de que son los microcontroladores, para esto dejo una liga con un tutorial en PDF, algo extenso pero no tenemos que leerlo todo para entender lo necesario para esta práctica.

Saber convertir de binario a hexadecimal para saber formar las letras luminosas. Aquí una guía rápida.

En el kit debemos identificar cada pieza que debe de venir:
1 Ventilador



1 Base



1 Pic 16F628A


1 Broche de Batería



1 Foto transistor



1 Led infrarrojo



8 Leds


1 Capacitor electrolitico


1 Regulador 7805


3 resistencias(22 Ohms *rojo-rojo-negro*, 560 Ohms *verde-azul-cafe*, 10 K Ohms *café-negro-naranja*)



Ahora podemos empezar con el armado e instalación.

Comenzemos por interpretar el diagrama:


1. Debemos de colocar la base del circuito integrado en su posición(U3). Verificando la posición del pin 1. Y se soldan las terminales por la parte inferior.

2. Colocar las resitencias de 10 Ohms y la de 22 Ohms en sus posiciones(R1-R2). Se soldan y cortamos lo que sobre de metal.

3. Soldamos los leds(L1-L8, verificando la posición del cátodo de cada uno de ellos). Soldamos y cortamos excesos.



4. Colocamos el regulador en posición(U2).De nuevo soldamos y cortamos excesos.

5. Ahora reducimos la longitud del cable del portapila cortandole 6cms. Soldamos los cables de la batería en su posición (J1).

6. Se coloca el capacitor de 10uF en su respectiva posición (C1). Verificamos la posición de la terminal positiva(+), soldamos las terminales por la parte inferior y cortamos los excesos de metal.

7. El foto transistor lo soldamos en posición (D1), levántandolo del circuito impreso con un excedente en las terminales de 1.5 cm, esto para después poder doblarlo y apunte hacia el led infrarrojo. Se solda y se cortan los excesos de metal.




8.(Sí aún no programan su microcontrolador deben saltar este paso) Colocamos con cuidado el microcontrolador PIC, teniendo cuidado de insertarlo en la base del CI y verificando la posición del pin 1.

9.(Sí aún no programan su microcontrolador deben saltar este paso) Ahora verificamos que el ensamble fue correcto, colocando en el porta baterías una batería de 9 volts, y dirija el foto transistor a una fuente de luz, los LEDs deberán parpadear.




10. Colocamos la pila de 9 volts en el broche de la batería.

11. Ajustamos la batería con los dos cinchos.

12. Conectamos el eliminador.

13. Atornillamos el circuito a la base que esta adherida al ventilador. Debes poner atención en que el diodo infrarrojo y el foto transistor queden alineados y lo más cercano posible.




14. Atornillamos el ventilador a la base de madera.

15. Conectamos el eliminador.

Algunas otras vistas:







Así nos debe quedar al final:



Ahora el Software

Primero que nada debemos de tener nuestro programador de PIC's. En donde debe de venir un cd de instalación.

Ahora seguimos estas instrucciones:

1. Insertar el disco de instalación proporcionado con el PIC-600 en la unidad de CD de su computadora.

2. Ejecutar el programa de instalación según sea su caso Windows 98_ME_2K_XP ó Windows Vista_7.

3. Seguir las instrucciones que le aparecerán durante el proceso de instalación.

4. Conectar su PIC-600 a la computadora mediante un cable USB tipo impresora (no suministrado).

5. Abrir el programa PIC-600 mediante el icono en su menú de programas o el acceso directo de su escritorio.

Grabé un pequeño vídeo para mostrar la manera en que yo lo instalé:



Para programar el PIC usé el lenguaje BASIC, editor y compilador mikroBasic PRO for PIC.

También aquí grabé un vídeo para mostrar como se usa:


En esta parte es donde aplicamos conversión de binario a hexadecimal, con esta imagen sera fácil de comprender como usamos esto en las letras:



El código original de Steren aunque con modificaciones para que funcione bien aquí lo dejo:

program prueba

symbol sensor = PortA.1

main:

dim i as byte
dim CT1 as BYTE '//Se declara un arreglo de 68 elementos todo debe ir en un solo renglon
const luces as byte[68] =($00,$00,$00,$00,$00,$00,$00,$72,$FB,$DB,$DB,$DB,$DF,$4E,$00,$00,$00,$40,$C0,$C0,$FF,$FF,$C0,$C0,$C0,$00,$00,$00,$FF,$FF,$DB,$DB,$DB,$C3,$00,$00,$00,$FF,$FF,$D8,$D8,$DC,$FE,$73,$01,$00,$00,$00,$FF,$FF,$DB,$DB,$DB,$C3,$00,$00,$00,$FF,$FF,$70,$38,$1C,$FF,$FF,$00,$00,$00,$00)
portB=0
cmcon=7

trisb = 000000
trisa = 000010
CT1 = 0
sinc:
if sensor = 1 then
goto sinc
end if

for i= 0 to 68
for CT1 = 0 to 3 '//Ancho de la letra
portb = luces [i]
delay_us (75)
portb= 0
delay_us (30)
next CT1
next i
GOTO MAIN

end.


Con ese código logramos algo como esto:


Podemos jugar con las letras y formar palabras diferentes, como lo que muestro al principio de la entrada.

NOTAS IMPORTANTES:
-A la hora de programar tu PIC debes fijarte que este puesto en posición correcta ya que si no lo echaras a perder.
-Cuando insertas el PIC en la base debes de fijarte que también este en la posición adecuada, ya que si no le programa no funcionara como debe.
-Fíjate bien que los componentes tienen su lado de insertarse en el circuito, debes encontrar el correcto, guiate en los colores de los cables, los signos + o -, etc.
-Sí aún así no funciona debes de fijarte que la soldadura de los componentes esten en los lugares correctos.
-Para saber si funciona el led infrarrojo debemos conectarlo a alguna fuente de energía y tratar de verlo a través de alguna cámara como la del celular.
-Para ver si funciona el led infrarrojo puedes tomarlo con la cámara del celular, debe 'prender color rosa.




Referencias:

Manual de Steren


Blog de Rafita un compañero de clase que me ayudo mucho.