17 de mayo de 2012

Proyecto Arduino: Alcoholímetro

Cómputo Integrado
Proyecto Arduino

Como última entrega de proyecto para la materia de Cómputo Integrado usando un Arduino, decidí hacer un alcoholímetro sencillo, esto para hacer uso del sensor de alcohol. Pudo haber sido cualquier otro sensor de gases, pero para fines prácticos y de demostración frente al grupo, el más adecuado fue el de alcohol, ya que existen otros que detectan, por ejemplo, el gas butano o metano.


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
Los métodos numéricos son técnicas mediante las cuales es posible formular problemas de tal forma que sean resueltas con operaciones aritméticas, Aunque hay muchos tipos de métodos numéricos todos comparten una característica común, llevan cabo un buen número de cálculos aritméticos que se resuelven una y otra vez.

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
Para esta semana no se me ocurría que hacer, así que como nunca leí ni investigue nada sobre lo que era CUDA, y como nunca es tarde para hacerlo fue lo que hice para esta semana.

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
Un dispositivo virtual Android (AVD) es una configuración del emulador que permite modelar un dispositivo real mediante la definición de opciones de hardware y de software para ser emulados por el emulador de Android.

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 / herramientas / directorio.

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.
Después de que hemos instalado los paquetes necesarios del SDK de Android, lo primero que se nos ocurre hacer es crear un dispositivo en el emulador, para ver nuestras aplicaciones corriendo desde la computadora antes de probarlos en un dispositivo real.

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 publicación esta relacionada con la anterior de creación de un Tab Bar para la aplicación de Android, para no copiar de nuevo todos los códigos solo puse los dos en los cuales se hacen cambios significativos.


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

Para esta entrega del proyecto PIC decidí hacer algo simple, un semáforo, con la idea de que nos encontramos en un cruce donde solo hay dos semáforos que controlan el flujo de autos, por lo que tengo dos semáforos que están intercambiando de estado para conceder luz verde de uno a otro y sus estados intermedios de la luz ámbar y luz roja.

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í.
  1. Instalar el programador de PIC en la PC
  2. Instalar Mikro Basic Pro for PIC
  3. Armar el circuito en el protoboard
  4. Verificar el circuito
  5. Pasar programa al PIC
  6. 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