Dispositivos Móviles |
Cómputo Integrado |
Distribuidos y Paralelos |
Modelado y Simulación |
24 de mayo de 2012
17 de mayo de 2012
Proyecto Arduino: Alcoholímetro
Cómputo Integrado Proyecto Arduino |
|
Descripción
La idea es crear un alcoholímetro, que mediante el sensor, se reciba como dato el grado o nivel de alcohol de la persona que sopla frente al sensor. Según el nivel o grado de alcohol detectado por el sensor, se encenderán de 1 a 10 leds de diferentes colores, empezando con el verde, que indica un bajo nivel de alcohol, amarillo un nivel medio y rojo un nivel alto.
Además como muchos alcoholímetros portátiles o de mano ofrecen la opción de guardar el estado actual de alcohol, también agregue dos botones, uno es para guardar el estado marcado actualmente por el sensor, y el segundo es para ver los estados guardados, que son tres, aunque pudieron haber sido más. Al picar el botón para ver los estados guardados por primera vez, se muestra el estado recién guardado, al picar por segunda vez, se ve el penúltimo estado, y al picar por tercera vez se muestra el antepenúltimo, y para salir de vuelve a picar por cuarta vez, y volver a recibir información del sensor.
Herramientas usadas
- Arduino IDE en Ubuntu 11.10
- Cable para conexión USB
- Arduino Uno
Material utilizado
- 4 leds de 5mm, color verde difuso
- 3 leds de 5mm, color amarillo difuso
- 3 leds de 5mm, color rojo difuso
- 1 led de 5mm, color amarillo
- 11 resistencias de 330 ohms
- 3 resistencias de 10K ohms
- 2 micro switch, de push, con 4 terminales
- 1 sensor de alcohol MQ-3
- Arduino Uno
- Cables de interconexión macho-macho de 6 pulgadas
Código
Este es el código completo de mi proyecto. Las partes que están en comentarios fueron utilizadas como prueba para la consola del monitor serial desde el Arduino IDE.
Nota: Si se usa "Serial" para imprimir contenido en el monitor, la salida digital A0 y A1, quedan automáticamente programadas para salida serial, como yo necesitaba una salida digital más, comente las líneas de salida serial, para tener dos salidas digitales extras.
Circuito creado en Fritzing
Dibuje el circuito desde Fritzing y lo hice en dos partes para no amontonar componentes y que estén bien visibles, por si en algún momento alguien sigue estos pasos para armar el suyo propio, no se pierda viendo solo imágenes.
Esta es la parte donde se conectan todas las salidas del Arduino al protoboard donde se encuentran incrustados los leds.
Y aquí esta por separado lo que conecta al sensor y los botones push.
Imágenes
Vídeo
Y por último les dejo un vídeo que tomé del alcoholímetro funcionando, para dejar evidencia del trabajo realizado. Cabe mencionar que en el vídeo no muestro el uso de los botones, aunque ya estaban funcionales, ya que no tenía quién me ayudará a grabar en ese momento.
Si esta publicación te ayudo en algo para crear tu proyecto, o haces uso del código que yo he creado, no te olvides de incluir el enlace a este blog en tu bibliografía.
Recursos consultados
Sensor Report
MQ-3 and Arduino
12 de mayo de 2012
Ecuaciones Diferenciales con Métodos Numéricos
Modelado y Simulación de Sistemas Dinámicos Complemento |
Pero haciendo uso de programas computacionales y estos métodos, llegar a una solución casi exacta a la real es muy fácil, ya que en realidad se trata de programas en los que se tiene una iteración en la cual siempre se repiten los mismos cálculos pero con cambio de valor en las variables, lo que hacerlo a "mano" resulta muy tedioso.
Pero para entender primero como hacerlo mediante un programa, tenemos que entender como se hace a "mano", o por lo menos yo creo que es la forma más fácil de entenderlo.
Cree este documento explicando paso por paso como resolver un ejemplo con el Método de Euler hacia delante y Runge Kutta 2do. Orden.
Ecuaciones Diferenciales Ordinarias
Ahora que ya vimos como se resuelve a mano, tenemos el siguiente ejemplo de código para resolver en específico una ecuación diferencial escrita con python.
Los datos obtenidos mediante este programa son pasados a un archivo llamado euler.dat que después grafique con gnuplot y se obtuvo lo siguiente.
Y ahora lo mismo pero el código ahora muestra como se resuelve la misma ecuación diferencial, pero ahora con el método de Runge Kutta.
Al igual que con el anterior los datos obtenidos son pasados a un archivo llamado rungekutta.dat y esos datos son graficados con gnuplot y obtenemos lo siguiente.
Y aquí una comparación de las dos gráficas en una sola imagen, el de color verde es el método de Runge Kutta 2do. Orden y con color rojo tenemos el método de Euler hacia delante.
Se recomienda primero probar con una ecuación diferencial sencilla la cual conozcamos su comportamiento como y' = y , la cual nos debería de arrojar una gráfica que se incrementa en Y con el paso de T en X.
En el siguiente enlace podan encontrar más información de estos métodos, y muestran una comparación de exactitud de los métodos, y para diferentes iteraciones se ve el cambio de precisión.
Enlace: Métodos Numéricos
11 de mayo de 2012
Week 16
Distributed and Parallel Systems Contribution: Week 16 |
Enlace al wiki: About CUDA
10 de mayo de 2012
Crear Nuevo Dispositivo en ADV
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 17 |
La forma más sencilla de crear una AVD es utilizar el Administrador de AVD gráfica, que se lanza desde Eclipse por la ventana haciendo clic en Administrador de AVD. También puede iniciar el Administrador de AVD de la línea de comandos llamando a la herramienta de Android con las opciones de AVD, de la
Un AVD se compone de:
- Un perfil de hardware: Define las características de hardware del dispositivo virtual. Por ejemplo, puede definir si el dispositivo tiene una cámara, si se utiliza un teclado QWERTY físico o una almohadilla de marcación, la cantidad de memoria que tiene, y así sucesivamente.
- Una asignación a una imagen del sistema: Se puede definir la versión de la plataforma Android se ejecutará en el dispositivo virtual. Usted puede elegir una versión de la plataforma estándar de Android o la imagen del sistema empaquetado con un SDK add-on.
- Otras opciones: Se puede especificar la piel emulador que desee utilizar con la AVD, que le permite controlar las dimensiones de la pantalla, apariencia, etc. También puede especificar la emulación de tarjeta SD para uso con la AVD. Un área de almacenamiento a su equipo de desarrollo: los datos del dispositivo de usuario (aplicaciones instaladas, configuraciones, etc) y emula la tarjeta SD se almacenan en esta área.
- Puede crear AVDs en que sea necesario, basado en los tipos de dispositivo que se desea modelar. Para probar a fondo su aplicación, debe crear una AVD para cada configuración general del dispositivo (por ejemplo, diferentes tamaños de pantalla y las versiones de la plataforma) con la que su aplicación es compatible y probar la aplicación en cada uno de ellos.
Lo primer que hacemos es dar clic en el botón nuevo.
Nos aparece una ventana como la siguiente, donde especificaremos algunas cosas:
- Un nombre al dispositivo
- La API con la que trabajaremos, en mi caso es la 10 para Android 2.3.3
- Un tamaño de la "memoria SD"
- El tamaño y tipo de la pantalla
Después de dar clic en "Crear AVD" en nuestra ventana nos aparecerá la ahora agregada.
Ahora podemos abrir nuestro nuevo dispositivo, antes de esto nos abre una ventanita donde nos dice que si queremos mostrarla en tamaño real.
Se despliega la ventana del emulador y empieza a cargar.
Cuando es la primera vez se suele tardar mucho, pero no hay que desesperarnos.
Y cuando se carga completamente, tenemos lo siguiente.
9 de mayo de 2012
JSON en Android
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 16 |
Esta es la que tiene la conexión en sí y parsea los datos que recibimos desde el enlace que se menciona en el código anterior.
Nota: La imagen esta cortada porque es una versión anterior a la que tengo actualmente, y no quiero mover cosas antes de presentar mi proyecto.
Relacionados
Uso de JSON
8 de mayo de 2012
Proyecto PIC: Semáforo
Cómputo Integrado Proyecto PIC |
|
Enseguida les muestro material, código y un vídeo del circuito funcionando.
Descripción
Bueno la idea ya quedo planteada, pero ahora veamos un tanto la lógica de un semáforo.
El semáforo pasa por una serie de estados marcados por diferentes colores de luces, verde, ámbar y rojo, cada uno representa una acción diferente para la persona que conduce. El verde significa que el vehículo puede avanzar, y cuando el tiempo esta por terminarse este empieza a parpadear para avisar a los conductores, luego este se apaga para encenderse la luz color ámbar que significa precaución y el conductor debe disminuir velocidad y detenerse, luego se enciende la luz roja que indica alto total, y así da paso a el encendido de la luz verde de otro semáforo, y esto se vuelve un ciclo.
Herramientas usadas
- Mikro Basic Pro for PIC
- Programador para PIC-600
Material utilizado
Los componentes utilizados no son muy caros, a excepción del PIC y el protoboard.
- 1 PIC16F628A
- 2 LED gigante de 10 mm, color ámbar difuso
- 2 LED gigante de 10 mm, color verde difuso
- 2 LED gigante de 10 mm, color rojo difuso
- 6 resistencias de 330 ohms
- 1 regulador de voltage MC7805CT
- 1 protoboard
- 1 pila de 9 volts
- 1 broche para pila
Las uniones están hechas con cables cortados de un cable del usado para conexiones Ethernet.
Además use un poco el voltímetro para verificar el voltaje que estaba pasando por el circuito y no quemar el PIC.
Procedimiento
No quiero entrar en detalles de la elaboración, pero resumo en forma general los pasos que yo seguí.
- Instalar el programador de PIC en la PC
- Instalar Mikro Basic Pro for PIC
- Armar el circuito en el protoboard
- Verificar el circuito
- Pasar programa al PIC
- Probar en el protoboard
Código
El código que hice no es el mejor que pueda haber para un semáforo, pero funciona. Tengo en cuenta que hay cosas que se pueden haber simplificado, como por ejemplo al indicar cuales son las entradas o salidas del PIC y reducirlo a una sola línea, y el cambio de semáforo pudo haber sido realizado con funciones, pero por falta de tiempo este fue el que se compilo para luego pasar al PIC.
Imagen del circuito
Aquí les dejo una imagen del circuito creado. En realidad ayuda mucho hacer un circuito un tanto ordenado y no con cables largos pasando por cualquier lado, ya que así tenemos una visión clara de por donde se está pasando el voltaje y el flujo del circuito, además de que nos ayuda a identificar errores fácilmente.
Cabe mencionar que cerca del regulador de voltaje hay un led que use de prueba para verificar si estaba ingresando corriente, ya que por momentos tenía problemas con los cables que van del broche de la pila y que conectan al circuito.
Vídeo
Tome un vídeo corto del funcionamiento del proyecto para dejar evidencia de que sí funciona, por lo menos en este momento, y con esto término mi entrada.
Esto fue todo para la entrega de este proyecto.
Agradecimientos:
Cecilia Urbina por asesorarme con el uso del programador.
Juan Espinosa por ayudarme a verificar el circuito.
Eduardo Triana por su asesoría en los componentes.
Isaias Garza por encontrar el driver del programador para mi sistema operativo.
Roberto Martínez por su apoyo moral.
Proyectos similares:
Alejandro Avendaño
7 de mayo de 2012
Diseño Android
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 15 |
Un buen diseño siempre va de la mano con la usabilidad que una aplicación pueda tener, esto significa que la interfaz no debe causar confusión o ser molesta a la vista para el usuario.
La página oficial de Android cuenta como en las demás plataformas de desarrollo con patrones y consejos de diseño que se deberían de tomar en cuenta para la creación de una interfaz agradable.
Enlace a la página: Android Design
Android esta presente en millones de teléfonos, tabletas y otros dispositivos en una amplia variedad de tamaños de pantalla y factores de forma. Al tomar ventaja del sistema de distribución flexible de Android, puede crear aplicaciones que con gracia escala de las tabletas grandes a los más pequeños teléfonos.
Consideraciones para el diseño en pantallas:
- Ser flexible: Procura crear aplicaciones que se adapten a los diferentes tamaños de pantalla.
- Optimizar espacio: Se listo y usa adecuadamente el espacio que tienes en cada dispositivo. Crear diferentes vistas ayuda al usuario para que tenga una mejor navegación entre las opciones.
- Calidad: Provee a la aplicación con las imágenes en los 4 diferentes tamaños, ya que estos se seleccionan para diferentes dispositivos con calidad diferente de pantallas.
Los dispositivos no sólo varían en tamaño físico, sino también en la densidad de la pantalla (DPI). Para simplificar la forma de diseñar para múltiples pantallas, pensar en cada dispositivo, ya caer en un cubo de determinado tamaño y densidad de balde. Los cubos son de tamaño auricular (más pequeño que 600dp) y tabletas (mayores o iguales 600dp). Los cubos de la densidad son LDPI, MDPI, IPAP, y XHDPI. Optimizar la interfaz de usuario de su aplicación mediante el diseño de diseños alternativos para algunos de los cubos de diferentes tamaños, y proporcionar alternativas de imágenes de mapa de bits distintos para los cubos de diferente densidad.
Los iconos dentro de una aplicación son de gran ayuda ya que permiten a todos los usuarios a identificar con mayor facilidad las opciones. Es muy primordial incluirlos, ya que con esto hasta los niños que no aprenden a leer aún, pueden relacionar los iconos con las tareas que realiza cada uno de los botones, los cuales deben de ser intuitivos para que no exista discrepancia entre uno y otro.
Se recomienda utilizar una silueta distinta. En tres dimensiones, vista frontal, con una perspectiva ligera, como si se mira desde arriba, de modo que los usuarios perciben una cierta profundidad.
De lo anterior la propia página proporcionada al inicio provee de una galería de iconos que se suelen utilizar y se toman como predeterminados y los cuales están accesibles para descargar y sin costo alguno.
Continuando con lo de los iconos, es importante tomar en cuenta los colores de fondo con que se trabaja, ya que hay que hay que cambiar tal vez los iconos para que hagan contraste con el color predominante de nuestra aplicación.
La versión más reciente de Android ha eliminado el uso de los botones con hardware de los dispositivos, es decir los botones que se ponían en el "home" o los botones capacitivos para las opciones de menú y regresar, ya son cosa que quedaron en el pasado, ahora solo se usan los botones en pantalla.
También se recomienda tener un botón de regreso en nuestra aplicación diferente al que se proporciona en la barra inferior, tal y como se muestra en la imagen anterior.
La diferencia es que la flecha de retroceso, siempre regresa a la pantalla anterior, sin importar la aplicación en la que se encuentre. Puede haberse estado usando Twitter y luego se abre el Gmail, el botón retroceso desde la aplicación de Gmail, nos llevaría hacía la de Twitter nuevamente. En cambio el botón proporcionado desde la aplicación de Gmail, nos debería de llevar a una ventana que normalmente se encuentra como principal.
Bibliografía
Android Examples
6 de mayo de 2012
Crear Tab Bar en Android
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 14 |
Aquí es donde decimos como irá la estructura de los componentes.
Este el el archivo principal de la aplicación y es el que en primera instancia crea los componentes a mostrar en pantalla cuando se ejecuta la aplicación.
Para el contenido que va en el resto de la pantalla creamos un xml diferente para acomodar los componentes por separado.
Esta es la clase que se manda a llamar cuando un tab es seleccionado.
Se necesita crear otros 3 archivos iguales al anterior, solo cambiando el nombre de la clase y los archivos se llamarán SecondActivity, ThirdActivity y FourthActivity.
Modificamos el archivo AndroidManifest.xml y agregamos las cuatro actividades que acabamos de usar.
Nos debería de quedar algo parecido a la siguiente captura.
Es algo sencillo, pero fue así como empecé yo el diseño de mi aplicación.
Bibliografía
Android Examples
5 de mayo de 2012
Cambiar Icono de la Aplicación
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 13 |
En mi caso yo usaré la misma imagen que tengo en todas mis publicaciones de dispositivos móviles, ya que así les serpa más fácil reconocer a mis compañeros que es mi aplicación, además de que tiene el color naranja representativo de blogger.
Lo que tenemos que hacer es ir a la capeta res que se encuentra dentro de la carpeta principal de nuestro proyecto. Ahí podremos ver cuatro carpetas que empiezan con el nombre de drawable, estas son las carpetas donde se guardan las imágenes, y cada una representa una calidad diferente para los diversos dispositivos.
Para que la imagen se acople, tenemos que redimensionarla en los cuatro tamaños diferentes que son:
36x36 pixeles, en carpeta -ldpi
48x48 pixeles, en carpeta -mdpi
72x72 pixeles, en carpeta -hdpi
96x96 pixeles, en carpeta -xhdpi
Ya que tenemos las 4 imágenes en los distintos tamaños cada una guardada en su correspondiente carpeta, ahora vamos a editar el archivo AndroidManifest.xml donde se encuentra ligada el nombre de la imagen con el icono de la aplicación.
Importante haber puesto el mismo nombre y formato a los 4 diferentes tamaños de la imagen en su correspondiente carpeta, para que se pueda ligar correctamente.
Este es mi código:
La línea que nos importa para hacer el cambio de imagen es la siguiente.
android:icon="@drawable/ramonapp"Donde "ramonapp" es el nombre de la imagen que agregué.
Y como podemos ver desde el emulador, el cambio del icono de la aplicación se hizo efectivo, y ahora ya tenemos una mejor apariencia a nuestra aplicación.
Y por último, recomendaría eliminar la otra imagen que se tenia de las mismas carpetas mencionadas, ya que al crear el paquete de nuestra aplicación esas aunque no se usen también se agregan, y no vale la pena poner cosas que la aplicación no utiliza.
4 de mayo de 2012
Tareas del Sistema en Android
Ingeniería de Dispositivos Móviles Laboratorio: Publicación 12 |
El hecho es que Android funciona muy diferente a cualquier sistema operativo de computadora a los que estamos acostumbrados. La intención que tienen los desarrolladores, es favorecer ciertos comportamientos usuales en los dispositivos móviles, a favor de un buen rendimiento y uso de la batería.
Las tareas realizadas por el sistema de Android se pueden clasificar en 5 tipos diferentes, mencionadas en orden de importancia:
- Primer plano: La tarea se está realizando ahora mismo.
- Procesos visibles: Se visualiza la tarea en la pantalla.
- Servicios: Procesos "pendientes" de alguna tarea.
- Segundo plano: Una tarea interrumpida que puede ser reanudada, o no.
- Procesos vacíos: Una tarea que se supone finalizada, pero se mantiene porque puede utilizarse en breve.
Entonces no es necesario tener mucha memoria libre para que todo vaya más rápido. Lo solemos asociar por el modelo de sistemas operativos como Windows XP, donde si liberábamos un poco nuestra RAM los demás programas corrían mucho mejor.
Actualmente se usa el principio de Memoria no utilizada, es memoria gastada (Unused RAM is wasted RAM), que aplica para entornos tipo GNU/Linux, Windows 7 y ahora Android para nuestro caso (que en realidad también usa el sistema Linux).
Así que si vemos la cantidad de memoria RAM utilizada en nuestro dispositivo con Android, veremos que casi siempre esta utilizando todo lo disponible y solo deja unos cuantos MB de memoria libre.
Lo que hace cuando una aplicación diferente se abre, y se necesita una cantidad grande de RAM para esta, empieza a liberar aplicaciones hasta disponer de la cantidad que se necesita para la nueva.
Lo que en realidad es un problema es cuando los dispositivos con pocos recursos de hardware, como uno con poca velocidad de procesador, es que el tiempo que tarda para liberar esa RAM para la nueva aplicación abierta, suele tardar más.
Uso de recursos de las aplicaciones
Matar procesos en Android es una mala idea, sin embargo, tampoco podemos descuidar las aplicaciones que utilizamos.
Algunas aplicaciones, ya sea porque están mal desarrolladas, bugs o simples descuidos, tienen un funcionamiento muy lento y pesado, y pueden llegar a colapsar nuestro dispositivo.
Watchdog Lite es un gestor y monitorizador de tareas, pero con un propósito muy especial: ayudarnos a detectar las aplicaciones que sobrepasan un umbral o tope de uso de procesador, lo que implicaría un posible malfuncionamiento o sobrecarga por parte de dicha aplicación.
Además, podemos ver en todo momento el porcentaje de uso de CPU, memoria consumida y tiempo activo de cada proceso del sistema.
¿Cómo funciona la memoria RAM en Android?
En Android, al igual que en otros sistemas basados en Unix, al contrario de lo que muchos pensáis, la memoria RAM no usada, es memoria RAM desaprovechada. Es decir, que en Android, no es óptimo tener 600MB de memoria RAM libre, sino el mínimo posible, sin llegar nunca al máximo que puede dar de si la memoria RAM de nuestro Android.
Es mucho mejor y más eficiente desde un punto de vista de rendimiento y consumo de batería tener las aplicaciones que más usamos “precargadas” en la memoria RAM que no que esta esté enteramente disponible pero las aplicaciones se tengan que cargar desde la memoria ROM o sólida. Aqui entra el tema de los task killers, muy polémico en este pequeño mundo de androides. Lo que realmente hace un task killer es matar aquellos procesos o aplicaciones que nosotros escojamos, obligando a eliminarlas de la memoria RAM. De este modo, cuando volvamos a abrir una aplicación que hemos “matado”, no solo se abrirá de forma más lenta pues se tendrá que cargar desde la memoria ROM, sino que al abrirla, esta acción consumirá más batería, pues usará prácticamente todo el rendimiento de la CPU para abrirla desde la memoria ROM. Si esta estuviera aún “viva” en la memoria RAM, el consumo de la CPU sería menos elevado y su velocidad de apertura mucho mayor debido a que la memoria RAM escribe y lee mucho más rápido.
Crear partición SWAP en Android
En términos generales el swap o la partición de memoria es hacer memoria adicional para un prosesador, pero solamente me limitare al android. Básicamente nuestro dispositivo android suele venir con determinada mmemoria RAM, el swap lo que hará es particionar tu memoria micro SD para que tu android tenga más memoria RAM de la que tiene.
Requisitos:
- Tener android 2.1+ en adelante.
- Tener permisos de superusuario o acceso root en tu android.
- Tener alguna ROM Cyanogenmod o cualquier otro desarrollador.
Necesitas tener tu celular rooteado o acceso root para poder activar el permiso de superusuario, tener suficiente memoria expandible (recomendable desde 4 GB en adenlante) y ser usuario de alguna ROM cocinada de Cyanogenmod o cualquier otro desarrollador de Roms para android. Para poder hacer el sawp necesitaras una aplicación llamada "Swapper".
La aplicación es sencilla, y solo hace su función, activas la memoria SWAP y seleccionas cuanto quieres dar a esa partición.
Tiene la opción de activar y desactivar el SWAP, ya que si conectamos directo a la computadora con cable USB puede haber conflicto al tener varias particiones, por lo que se recomienda desactivar cada vez que se va a conectar con cable a la computadora.
Bibliografía
Optimizar tu Android
RAM en Android
Partición SWAP en Android
Suscribirse a:
Entradas (Atom)