Páginas

martes, 22 de mayo de 2012

[Emb Comp Class] ARDUINO: Proyecto Final

Control de la Instalación Eléctrica y Medidor del Consumo Eléctrico

Material


General
  • Arduino UNO con su cable USB
  • Protoboard
  • Cables Jumper para las conexiones
  • Cable de cobre delgado para realizar las conexiones en la protoboard

Para el control de la instalación eléctrica
  • 5 Resistencias 330 Ohms
  • 4 push buttons
  • 2 leds blancos de alta luminosidad
  • 2 Relevadores compatibles con Arduino [instrucciones de armado: AQUI]
  • Contacto Duplex con tierra física, cubierta y caja protectora
  • Extensión eléctrica o cable de cobre
  • Lamparita de noche o cualquier otro dispositivo electrico para probar.

Para el sistema de medición (REFERENCIA How to build an Arduino Energy Monitor)
  • Arduino Ethernet Shield
  • Para la medición del voltaje
    • Transformador de corriente alterna 120V - 9V (o un adaptador de corriente AC-AC con salida de 9V)
    • 1 resistencia de 100 KOhms
    • 2 resistencias de 10 KOhms
    • 1 capacitor de 10 uF
  • Para la medición de la corriente
    • Sensor CT SCT-013-000
    • Burden Resistor (resistencia de 33 Ohms)
    • 2 resistencias de 10 KOhms
    • 1 capacitor de 10 uF
    • 1 jack 3.5mm hembra

Advertencias y consideraciones previas

  • Se trabajara con corriente alterna, se recomienda utilizar no conectar ningun componente a la misma hasta terminar el armado
  • Es importante tener un multimetro a la mano, nos ayudara a realizar correctamente nuestras conexiones y verificar que funcionen correctamente antes de conectarlas a la corriente alterna.

Armado para la el control de la instalación eléctrica


Vamos primero con lo mas simple, armemos el contacto duplex de tal forma que simulemos la instalación eléctrica de la casa, es algo complejo explicarlo, pero es algo básico y super fácil que todos podemos hacer, así que mejor les dejo un esquema:

Y estas son las fotos de como yo arme mi contacto duplex



Por si no recuerdan como conectar correctamente los relevadores, aqui les dejo las entradas y salidas correspondientes.

Para las entradas del relevador (son 3 inputs)


  • Arduino 5V: Es la salida regulada (5V) que nos proporciona nuestro Arduino
  • Arduino Digital Out: Esta conectada al pin desde el cual enviaremos la señal
  • Arduino GND: Es la tierra (GND) que proporciona nuestro Arduino


Para las entradas del relevador de corriente alterna:



  • AC/DC Input: Es el cable ya sea de corriente alterna o directa de donde entra el voltaje
  • Sin usar: Por seguridad para cuando usemos corriente alterna, se deja sin usar para separar la corriente y evitar un arco y provocar algun corto circuito
  • AC/DC Output: Es el cable por el que continuara circulando la corriente una vez que el relevador cierre el circuito

Después hay que conectar nuestros relevadores al arduino, para ello prepare el siguiente esquema en Fritzing:



Armado para la el control de la iluminación


Ahora continuamos con el control de la iluminación, para ello utilizaremos 2 entradas, una para aumentar la luminosidad de los leds y otra para bajarla; además de una salida regulada. Esquema en fritzing:



La idea es combinar ambos sistemas, para tener todo en uno solo, así se ven ambos sistemas conectados:


Armado para la el sistema de medición


Primero preparamos las conexiones en nuestro protoboard siguiendo el esquema que les adjunto:

Tomado de OpenEnergyMonitor URL=http://openenergymonitor.org/emon/buildingblocks/how-to-build-an-arduino-energy-monitor


Tomado de OpenEnergyMonitor URL=http://openenergymonitor.org/emon/buildingblocks/measuring-voltage-with-an-acac-power-adapter


Conectaremos la entrada de nuestro transformador a la corriente alterna y la salida (9V-300mA) a la protoboard,



Tomado de OpenEnergyMonitor URL=http://openenergymonitor.org/emon/buildingblocks/ct-sensors-interface


Para conectar el CT a la protoboard utilizaremos un jack 3.5mm hembra, conectaremos solamente el positivo (cabeza o tap) y la tierra (brazo o sleeve).



Con esto vamos a construir un monitor de energía electrica simple que se puede utilizar para medir la cantidad de energía eléctrica que utiliza en una casa. Se mide la tensión con el transformador 120V-9V y la corriente con el sensor CT.

El monitor de energía se puede calcular la potencia real, potencia aparente, factor de potencia, voltaje rms, corriente eficaz. Todos los cálculos se hacen en el Arduino.

Los datos son enviados al servidor por medio de un shield Arduino Ethernet y son recogidos para su posterior procesamiento.

OpenEnergyMonitor es el proyecto en el que base, valga la redundancia, mi proyecto. OpenEnergyMonitor se compone de diversos módulos, en este caso el hardware EmonTX, para el Arduino la librería que realiza los cálculos EmonLib, y un servidor que se encarga de graficar los datos de salida del Arduino EmonCMS

Toda la teoría la podemos encontrar en esta página: http://openenergymonitor.org/emon/buildingblocks.
En ella se explican de forma bastante detallada los conceptos necesarios para comprender el funcionamiento del monitor de energía.

Este es todo el circuito, los 3 modulos montados en la protoboard



Código

Video





Referencias

martes, 8 de mayo de 2012

[MDE Lab] ANDROID: Tabs

Para una primera parte del proyecto decidí hacer una barra de Tabs para elegir entre los 2 posibles módulos que el usuario tiene al momento de ejecutar mi aplicación, entonces, después de mucho intentar ahora les mostraré como realizar esta tarea.

1. Creamos un proyecto en Eclipse


Abrimos Eclipse y creamos un nuevo proyecto Android:


Despues introducimos el nombre de nuestro proyecto y damos siguiente, este se llamara TabTuto, damos click en next.


A continuacion elegimos la API de Android con la cual trabajaremos, en mi caso elijo la API 2.3.3 que es compatible con mi celular, damos clic en next.


Por ultimo agregamos la informacion de nuestra aplicacion


2. Creamos las Tabs


Cada tab necesita su clase independiente, entonces necesitamos crear archivos .java diferentes para cada tab y necesitamos crear tantos archivos como tabs queremos tener.
Entonces, para crear las tabs, tenemos que crear nuevas clases:


Y le ponemos un nombre, en este caso las pondré numeradas, es decir Tab1, Tab2, ..., TabN


Y este es el código que debemos colocar a cada clase que hemos creado para cada Tab, cuidando por supuesto cambiar el nombre para las clases de las Tabs. Cada tab es una actividad, es decir, una ventanita individual en el teléfono. Como es una prueba lo único que agregaremos a la ventana sera un TextView.



Lo siguiente es agregar las actividades de cada Tab al archivo AndroidManifest.xml, como son 3 Tabs entonces agregamos 3 actividades.



3. Creamos el contenedor de las Tabs


En el archivo principal del código, vamos a teclear el siguiente código, con el agregaremos las Tabs al contenedor de la ventana principal.



Y por ultimo, pero no menos importante, debemos configurar el main.xml para que se muestren las tabs correctamente en nuestra ventana principal. Convertimos la ventana en un TabHost y le agregamos un LinearLayout vertical para acomodar nuestras tabs con el mismo tamaño y hacia la derecha. Agregamos el Widget de las tabs y cada tab contiene un FrameLayout para mostrar su contenido.



4. Prueba

Solo nos queda probar nuestro codigo, en las barras de herramientas damos clic en el boton Run As... y en la ventana emergente seleccionamos la opcion Android Application, con ello se abrira nuestro emulador de Android.



Y este debe ser nuestro resultado final.



Espero les haya servido el minitutorial, saludos :)

Referencias

Android Developer: TabWidget

[Emb Comb Lab] ARDUINO: Trabajando con relevadores

Material

  • Relevador RAS-0510
  • Diodo 1N4007
  • Transistor 2N2222A
  • Resistencia 10KOhms
  • Terminales para circuito con 3 entradas
  • Placa fenólica pequeña para realizar las conexiones (opcional)
  • Cable de cobre calibre 14 (opcional)

Advertencias y consideraciones previas

  • El relevador que vamos a utilizar es capaz de trabajar con corrientes y voltajes altos, es muy util para controlar la instalación eléctrica, que es lo que queremos hacer. También puede trabajar con corrientes directas, útil para controlar circuitos en proyectos pequeños
  • El cable de cobre es opcional también, yo lo usaré porque trabajare con corriente alterna.
  • La placa fenólica es opcional, pueden hacer su propia placa impresa.
  • Se puede utilizar una protoboard en caso de querer utilizar el relevador para corriente directa.
  • No es recomendable utilizar una protoboard si se quiere utilizar el relevador para corrientes alternas.


Armado

Para armar el relevador, vamos a seguir el siguiente esquemático:



El relevador tiene 5 patitas, con el podemos controlar 2 estados diferentes para un circuito en lugar de solo prenderlo y apagarlo. Podemos medir la continuidad de las patitas utilizando un multímetro.



La posición natural del relevador es tener el circuito cerrado conectando la patita 4 y 3, es decir, que si giramos el relevador con las patitas arriba y después ubicamos 3 de las patitas en la parte inferior y 2 en la superior podremos ver que la patita 3 corresponde a la que queda en la parte superior derecha.

Esta sera nuestra posición de apagado.

La posición de encendido sera cuando el circuito este cerrado con las patitas 4 y 5, que si giramos el relevador igual que antes la patita 5 sera la que se encuentra en la parte superior izquierda.

Esta posición sera para cerrar el circuito que queremos controlar.

Las terminales para circuito son opcionales, a mi se me hace una forma bastante cómoda para cablear, en mi caso, las terminales las conecte asi:

Para las entradas del relevador (3)


  • Arduino 5V: Es la salida regulada (5V) que nos proporciona nuestro Arduino
  • Arduino Digital Out: Esta conectada al pin desde el cual enviaremos la señal
  • Arduino GND: Es la tierra (GND) que proporciona nuestro Arduino


Para las salidas del relevador (2)



  • AC/DC Input: Es el cable ya sea de corriente alterna o directa de donde entra el voltaje
  • Sin usar: Por seguridad para cuando usemos corriente alterna, se deja sin usar para separar la corriente y evitar un arco y provocar algun corto circuito
  • AC/DC Output: Es el cable por el que continuara circulando la corriente una vez que el relevador cierre el circuito


Este es el circuito ya armado.



Pruebas con Arduino


Para las pruebas hice un sketch bastante simple que solo envía una señal desde el PIN 13, cierra el circuito del relay, espera 3 segundos, abre el circuito, espera 3 segundos.

Video





Espero que les haya sido util la entrada, el Relay Shield compatible con Arduino de Sparkfun cuesta aproximadamente $8 USD + envió, nuestro Relay también es 100% compatible y la inversión fue de aproximadamente $50 pesos MXN, la mitad :)

Referencias

jueves, 3 de mayo de 2012

[Emb Comb Lab] Juego con Stars Wars The Force Trainer

Para la competencia del iPad tuvimos que desarrollar un juego utilizando este dispositivo. Para ello habia que hackear el MindReader y despues interfacear el mismo al Arduino.

Este es el tutorial hecho por el compañero Saul para lograr dicho objetivo:

LINK: Como hacer un hack a un dispositivo EEG con Arduino

Preparación


Primero que nada hay que instalar la IDE de Arduino, aqui un minitutorial hecho por mi

LINK: Programando con Arduino

Después hay que instalar la librería Brain, los pasos son sencillos:
  • 1. Descargar la libreria de aquí: Arduino Brain Library
  • 2. Descomprimimos y la agregamos a la carpeta libraries en la carpeta de Arduino, en mi caso el path es:


    Y ya dentro:


Esto nos permitirá exportar la libreria y utilizar el ejemplo BrainSerialOut que viene en la IDE de Arduino, lo encontramos así:


Así se ve el sketch, si se fijan en la función loop comente la línea Serial.println(brain.readErrors()); , esto es para que no nos regrese ninguna otra información que no sean los datos que nos interesan del MindReader.


Ahora simplemente lo compilamos y lo subimos a nuestro Arduino conectado al MindReader, con el botón UPLOAD

Yo usé Python para el juego, entonces, para escuchar los datos enviados por Arduino debemos instalar pySerial, los pasos son ultra sencillos:

El juego


El juego lo llame Magic Warriors!.


El objetivo del juego es sencillo, se trata de algo parecido a hacer Genkidamas. Según tu nivel de concentración es la cantidad de energía que se agrega a la Genkidama, asi pues, de todos los datos que me da el MindReader solo me quedo con dos que son atención y meditación; dichos valores se suman y se saca un promedio, el promedio es la energía que se agrega cada segundo a la Genkidama. Básicamente son sumas, del valor anterior mas el nuevo valor durante un tiempo determinado que son 5 segundos.

Por el lado de la CPU, es una simple sumatoria que se realiza mediante números random, que, según la dificultad, son obtenidos dentro de determinado rango. Entre mayor es el nivel el rango es más ajustad y se mueve hacia valores más altos.

El ganador se selecciona comparando quién acumulo la mayor cantidad de energía, una comparación entre tu sumatoria final y la del CPU.


Código relevante



El juego fue desarrollado utilizando pygame, la temática es simple, y como ven el cálculo que realiza es super sencillo, entonces, veamos algunas partes relevantes del código desarrollado.

Escuchando al Arduino



Jugador y Enemigo



La Batalla!!



Lo demas ya son funciones propias de python para interconectar clases, enviar variables y bueno, los métodos obligados de PyGame para la asignación de teclas y demás. Por ultimo, les dejo las librerías que utilice por si a alguien le interesa.



Espero que les guste, lo que falta es obviamente lo gráfico en en 6 horas fue imposible de terminar, adicional quise agregar algo de interactividad con OpenCV, NADA DE TECLAS!!, quería hacer que el juego se controlara con movimientos en la webcam, hacer un movimiento con el brazo para avanzar entre pantallas y levantar los brazos como si realmente estuvieras haciendo la Genkidama para recargar energía, pero bueno, eso era mas complejo, y ademas quería imprimir los valores del EEG en todo momento pero igual, por falta de tiempo no pude instalar las dependencias y demás.

Sin embargo, me divertí mucho haciéndolo y deseo terminarlo un día de estos, comprar mi EEG y todo el rollo porque realmente estuvo genial.

Bueno, esa fue mi idea en la competencia, espero les haya gustado :)