Friday, June 20, 2008

Juliana Rosales - Nature_data


La artista uruguaya Juliana Rosales cuenta con un espacio en OBORO a fin de desarrollar su proyecto nature_data, una instalación botánica donde son examinados los comportamientos de las plantas nativas en un ambiente urbano. Por medio de un sistema de sensores (Arduino + Max/MSP + PureData), la instalación genera datos que proporcionan las más ínfimas modulaciones de crecimiento o la regresión de las plantas. Estas informaciones son recuperadas por la artista, que las traduce en forma de diagrama, de imágenes, sonidos, vídeos, permitiendo dar lugar a ver y oír los movimientos de la naturaleza desde un ángulo diferente.
Juliana propone descubrir un terreno de exploración donde la naturaleza bordee con lo artificial, permitiendo de la misma manera resaltar la fragilidad de la naturaleza y experimentar su capacidad de resistencia al choque.
Aquí, Rosales atrae nuestra atención sobre las sutilezas del comportamiento distintas plantas típicas de la región, como ser: la gaulteria (thé des bois), la cala de tres hojas (ariséme), de la mitella, del cornejo (cornouiller) y colonias de helecho; experimentando también con motivos y ritmos que allí se encuentran ocultos.
[Traducción del francés. Marcela Zena]

link: http://www.oboro.net/pdf/press/0708/exhibi_event/comm_rosales_fr.pdf

Friday, March 28, 2008

Arduino PWM

En algunos artículos anteriores escribí sobre la modulacion PWM. Esta se usa entre otras cosas para controlar la velocidad en motores de corriente continua (DC) y regular el brillo en los LEDS.
Arduino (Decimilia y derivados) usa el microcontrolador Atmel ATMEGA168, este micontrolador tiene 6 salidas PWM (patas 3,5,6,9,10 y 11). La función analogWrite(pin, value) permite controlar cada una de las salidas PWM. La frecuencia de la PWM se encuentra fija en 490Hz y lo que controlamos con esa función es el ciclo de actividad de la PWM.
Un valor value=0v producirá una salida en 0v, mientras que un valor value=255 producirá una salida de 5v constante. Valores intermedios producirán valores medios proporcionales de tensión de salida Vmediosalida = (value/255)*5v.
Por ejemplo para controlar un LED, una frecuencia de 100Hz alcanza para que el sistema de visión humana no perciba el parpadeo del mismo, asi que los 490Hz que usa Arduino son mas que suficientes.


Tuesday, March 18, 2008

Technology Sketches | Prototipos Tecnológicos

En el proceso de desarrollo de nuevas tecnologías de interacción, me encontré con un concepto interesante a la hora de probar una idea. La cuestión es crear prototipos sencillos y ágiles que muestren como debería funcionar el producto, sin poner tanto foco en como el producto funcionará realmente. Pensar en la experiencia del usuario, la interacción, dejando los detalles tecnológicos para mas adelante. Poder explorar ideas sin pensar en las limitaciones tecnológicas, luego habrá que crear las tecnologías para poder resolver esas limitaciones.
¿Como se entiende esto a la hora de desarrollar? ¿Que se entiende por prototipos en este contexto?
Uno de los ejemplos que se me ocurrió es usando Arduino o CUI, por nombrar algunos ejemplos. Supongamos que queremos probar cierto tipo de interacción usando un acelerómetro (pienso en un objeto que reaccione de alguna manera a los cambios de aceleración). Usando Arduino podemos probar estas ideas concentrándonos en los algoritmos que controlan la interacción, ya que la comunicación y la lectura del sensor, se encuentran resueltas.
Si quisiéramos pensar en un prototipo clásico, desde cero, deberíamos preocuparnos por elegir un microcontrolador, construir una plaqueta, escribir las rutinas I2C (o usar algunas) y finalmente implementar la lectura del acelerómetro.
Este es un ejemplo trivial, contado de manera sencilla y muy esquemática, pero me parece que sirve para ilustrar la idea.
Esta claro que a la hora de convertir esta idea en un producto, no se puede pensar en usar Arduino como plataforma, dadas las limitaciones tecnológicas y económicas. Es en este punto donde debemos pensar en desarrollar la tecnología necesaria. Sin embargo, la interacción, motivación principal de nuestro proyecto, ya fue probada usando el prototipo (Sketch).
No hay que tomar esto como una definición general, es decir, puede suceder que una plataforma como Arduino sea tecnológicamente insuficiente para el tipo de interacción que queremos desarrollar (como puede ser el caso de procesar audio). Es allí donde el concepto debe ampliarse para generar una nueva escala de prototipo, usando bloques constructivos grandes.
Links:
ThingM

Thursday, March 06, 2008

DMX512 en acción

Les dejo el vídeo de un proyecto en el que participe junto a Capri . Lasser Jacket, es una campera DMX512, totalmente controlable desde un secuenciador MIDI.

Saturday, February 23, 2008

LEDs inteligentes

Pensar en un LED con algún nivel de interacción estaba limitado a los LEDs titilantes (blinking LEDs) que prenden y apagan a una frecuencia constante. Con la aparición de los microcontroladores de 6 y 8 patas, a precios bajos, amplio rango de tensión de alimentación y oscilador interno, la posibilidad de integrar un microcontrolador y un LED se convirtió en una posibilidad real. El objetivo es lograr un objeto/dispositivo, autónomo e interactivo, compuesto por un LED y microcontrolador.
Unos de los primeros prototipos fue el Programmable LED desarrollado por Alex Weber y que permite, mediante un fotocelda (sensor de luz visible) programar un secuencia de encendido y apagado del LED. Esta secuencia sera grabada y reproducida por el microcontrolador.
Otro prototipo mas reciente es el LED inteligente desarrollado por Tod E. Kurt, a diferencia de los desarrollados por Alex Weber, estos Smart LEDs usan un LED RGB (3 colores). Usando las técnicas de control de luminosidad Tod creo un LED, como unidad autónoma, con capacidad de detectar estímulos del medio y reaccionar cambiando de color. Para este proyecto uso un microcontrolador ATmel (la misma familia de microcontroladores que usa Arduino). El ATtiny13 es un pequeño microcontrolador de 8 patas con oscilador interno de 4.8 MHz, barato y fácil de programar. Si sabes programar Arduino, puedes programar este.



Normalmente los LEDs RGB tienen un angulo de emisión muy estrecho, lo que los hace ideales para iluminar de forma puntual, pero poco útiles para iluminar el ambiente. Para lograr una luz mas uniforme es conveniente usar un difusor de luz, algo tan simple con un pequeño cilindro de algún plástico translucido.



Lindos objetos, fáciles de hacer y económicos. Mas abajo dejo los links con los procedimiento constructivos.

Links:
Programmable LED
Smart LEDs

Monday, January 21, 2008

Libros | Designing Interactions



Designing Interacions

Viendo algunas revisiones de libros, este aparece con muy buenos comentarios. Les dejo el link a la pagina del autor de donde se puede bajar el capitulo seis en PDF y ver algunas entrevistas incluidas en el libro.

Capitulo seis y entrevistas

Friday, January 18, 2008

Bionic Arduino | Introducción a los microcontroladores usando Arduino


todbot publica el material utulizado en una serie de clases dictadas en Noviembre de 2007 por Machine Project e ideado por Tod E. Kurt. Es una introducción al uso de microcontroladores usando la plataforma Arduino. El curso se centra en mostrar como sensar variables del mundo real y lograr movimiento.
Se introdujo a los alumnos en los conceptos básicos del conexionado de un microcontrolador a sensores analógicos, interruptores, LEDs y motores.
Los participantes del curso no debían tener conocimientos previos de microcontroladores.
Las clases fueron presenciales. El material del curso esta disponible libremente.

Notas de clase

Ejemplos de Arduino usados en clase

  • Blink – Parpadeo de un LED
  • Fading – Control de brillo de un LED
  • FadeOrBlink – Un botón para cambiar de parpadeo a intensidad
  • SerialMotorSpeed – Control de velocidad de un motor por puerto serie
  • PiezoKnock – Sensor con un piezoelectrico
  • PiezoMotorPulse – Sensor de contacto con un piezoeléctrico para controlar un motor
  • PotSend – Mandar datos binarios de un potenciometro (para Processing)

Ejemplos de Processing usados en clase

Links:
todbot - Bionic Arduino

Thursday, January 17, 2008

Prendas Interactivas | introducción

Este es un proyecto simple. No es necesario tener conocimientos previos de electrónica.La idea es empezar con prototipos fáciles de realizar, y así poder familiarizarse con las técnicas; para luego, ir agregando elementos más sofisticados que vuelvan a estos proyectos más interactivos. Este artículo está basado en el instructivo de Leah Buechley, una investigadora de la Universidad de Colorado (EEUU).



Siguiendo las instrucciones aquí descritas: aprenderás a hacer tu propia "prenda electrónica", utilizarás LEDs y otros componentes electrónicos que serán cosidos en la tela con hilo conductor. En este ejemplo, usaremos una remera como la de la imagen.
  • Una tela o prenda
  • Hilo conductor (Esto es difícil de conseguir, mas abajo encontraras enlaces de lugares donde venden este hilo)
  • Aguja
  • Luces: 2 LEDs
  • 2 pilas AA
  • Un porta pilas para dos pilas AA
  • Alicates
  • Pinza de puntas
  • Tela de red (opcional para el botón)
  • Un recorte de pana o felpa fina (opcional para el botón de tela)
  • Maquina de coser (opcional)
  • Multimetro o tester (opcional)
  • Soldador de electrónica y estaño (opcional)
Comercios de electrónica:En Buenos Aires – Argentina, existen varios lugares donde puedes conseguir los elementos para realizar tu "prenda electrónica". Por ejemplo, sobre la calle Paraná entre el 100 y el 300, hay varias casas de electrónica. Entre los negocios que cuentan con variedad de stock, se encuentran Paraná 180 o Paraná 220. Todos los elementos usados son elementos básicos y se pueden conseguir en cualquiera de estas casas de electrónica. El único elemento difícil de adquirir es el hilo conductor, que hasta donde se hay que pedirlo en el exterior. Al final de este articulo, dejo anotado algunos links dónde se puede pedir el hilo conductor.


Izquierda:Leds
Derecha:Porta pilas



Elementos varios

Circuitos con LEDs
Si es la primera vez que te enfrentas a un circuito electrónico, seríaprovechoso entender un poco el funcionamiento básico de éste antes de comenzar con el proyecto. Como introducción a la electricidad, podes recurrir a algún libro básico de electrónica o electricidad.
Les dejo algunos links para ver los conceptos básicos de electricidad:
Corriente Continua
Inglés. Circuitos en general:
Electronics Club - Electricity and the ElectronDoctronics - Circuits
Doctronics - Circuits

Los LEDs (diodos emisores de luz) son un tipo especial de lamparita.Un LED se enciende cuando la electricidad pasa a través de él en el sentido adecuado. Normalmente, los LEDs tienen dos patitas metálicas: por un lado, la patita positiva (+) , llamada "ánodo"; y por otro, la patita negativa (-), llamada "cátodo". En la figura superior, se pueden ver que en los LEDs una patita es más larga que la otra. La patita más larga corresponde al ánodo. Les dejo algunos links para entender cómo funcionan los LEDs:
Diodo LED
Explícame: LEDs
Inglés. LEDs:
Electronics Club - Light Emitting Diodes (LEDs)

Diseño

1. Elige una prenda o tela.

2. Diseña el circuito que deseas mostrar en la prenda. Elige el numero de LEDs que deseas usar, y la posición de cada uno o ubicación de los mismos en la prenda. Escoge un lugar para la fuente de alimentación.
En este ejemplo, vamos a usar 4 LEDs. Las pilas serán colocadas cerca del borde de la prenda; de forma tal, de poder llevar las pilas en el bolsillo. Recuerda que a cada LED deben llegarle dos costuras de hilo conductor.


En el próximo artículo, de esta serie verás cómo hacer los botones de encendido y apagado de los LEDs. Por este motivo, haz el diseño dejando el lugar disponible para colocar los botones.



Izquierda: Diseño de la prenda
Derecha: Esquema eléctrico

Nota: Debes planear el circuito de forma tal, que queden conectadas las patitas de los LEDs de forma directa a las pilas. Debido a que al utilizar las pilas AA como fuente de alimentación, no se puede optar por una configuración de LEDs en serie (no se alcanza el voltaje necesario); y se debe optar por una configuración de 4 LEDs en paralelo ( como muestra la figura anterior).


3. Transfiere el diseño a la prenda usando un lápiz para tela.Delimita las zonas donde irán los LEDs, las pilas y los botones (opcional para completar en el próximo artículo).

Armado
1 . Coser el circuito de acuerdo al diseño dibujado. Se puede coser a mano o con maquina de coser. Si estás usando una maquina de coser, coloca la bobina de hilo conductor como lo harías con cualquier hilo de coser. Seguir la líneas trazadas, dejando el lugar suficiente para ubicar los LEDs y demás componentes.

2. Prepara ahora el LED para poder coserlo. Usando las pinzas de punta crea dos ojales para poder coser el LED, enrollando una parte de la patita metálica sobre si misma (se entiende mejor al ver la foto). Deja alguna marca visible para saber cual es la pata (+) del LED. Intenta no ejercer fuerza sobre la unión entre la patita metálica y el cuerpo del LED para no deteriorar la conexión interna.




Enroscando la patita del LED para hacer el ojal

3. Llego el momento de montar los LEDs. Colocar el LED de forma tal de dejar en la parte de atrás de la tela las patas. Se puede agujerear levemente la tela colocando el LED desde atrás de forma de hacer pasar el cuerpo del LED al otro lado. Otra forma de montarlo puede ser sin haber enroscado previamente las patitas. Colocar el LED por el frente de la tela, haciendo pasar solo las patitas para el lado del reverso de la tela y luego hacer el ojal con la patita.
Hay que tener en cuenta de alinear bien las patas en relación a los costuras de hilo conductor, respetando el (+) y el (-).


Izquierda: Pasando el LED a través de la tela
Derecha: Metodo del punto 3 pasar las patitas y luego el ojal


Con una aguja e hilo conductor vamos a unir el ojal hecho con la patita del LED y la costura previa. El objetivo de esto es lograr un buen contacto eléctrico entre la costura y la patita de LED, para eso debe coserse cuidadosamente logrando una buena superficie de contacto entre los elementos a conectar.




Cosiendo el LED

Costuras (nudos) de las patitas del LED

Nota: La electricidad debe circular por el LED. Si hubiera quedado algún trozo de hilo conductor entre la patita (+) y (-) del LED este no encenderá.


Una vez lograda la costura, fije y cubra el hilo conductor (de la conexión anterior) utilizando pegamento para telas. Este es un paso importante para evitar que se descosa en el futuro.




Pegando la costura (nudo) entre
el LED y el hilo conductor

4. Vamos ahora a preparar el porta pilas. Retirar el plástico aislante del cable del porta pilas, dos a tres centímetros. Una vez que el cobre quedo a la vista, crear un ojal enroscando varias veces el cable. Estos ojales son los que coseremos a la tela y deberán soportar el peso de las pilas. Debe quedar lo mas firme posible.


Izquierda: Pelando los cables
Derecha: El conector del porta pilas con lo cables enroscados


5. Es hora amarrar el cable del porta pilas dejando listos los ojales. Recuerda que el cable rojo del porta pilas debe ir conectador a las costuras (+) y el negativo a las costuras (-). Recuerda hacer una buena costura para lograr buen contacto eléctrico.

6. Agrega los detalles de terminación. Probablemente sea necesario algún parche en el lugar donde están la patitas de los LEDs de manera que no molesten al usar la prenda.




Decoración

Protección para que la prenda no lastime

7. Es hora de probar !. Coloca las pilas en el porta pilas. Los LEDs deben encender.
Si los LEDs no encienden, repasa esta lista de posibles problemas.
  • Los LEDs están cosidos de forma que el (+) y el (-) quedaron invertidos. Prueba dar vuelta los LEDs.
  • Verifica que no exista ningún cortocircuito. Revisa costuras con hilo conductor para asegurarte que no haya entre el (+) y el (–) sin pasar por medio de un LED.
  • Verifica que ninguna costura con hilo conductor este cortada
  • Prueba con pilas nuevas
La prenda puede ser lavada con detergente suave y secada al aire.
En el próximo post voy a poner la instrucciones para armar un botón de tela.

Links:
Fuente: do it yourself - make you own electronic sewing kit
Hilo conductor: Lame Lifesaver
Hilo conductor, cinta: Fine Silver Products
Velcro conductor, tela y pintura: Less EMF

Monday, January 14, 2008

Arduino LilyPad



Arduino le da la bienvenida a una nueva familia de dispositivos: Arduino LilyPad. Prendas y productos textiles corriendo Arduino.

El diseño fue realizado por Leah Buechley y SparkFun Electronics para ser usado en proyectos de indumentaria y productos textiles (e-textile). La familia LilyPad cuenta con una cantidad de accesorios: fuente de alimentación, sensores y LEDs, entre otros.

La característica principal de los módulos LilyPad es que pueden ser conectados mediante hilo conductor (si, hilo conductor que se puede usar para coser) permitiendo crear una prenda liviana y factible de ser usada. Las plaquetas son violetas, de deforma y distribución de componentes muy convenientes para llevar a la vista.

La idea de la familia LyliPad es utilizar la plataforma Arduino adaptando sus características (especialmente físicas) a la necesidades de la realización de prendas con tecnología.

Links:

LilyPad Arduino and Arduino 0010

Getting started with the LilyPad Arduino

Sensores | Guía de referencia

encontré el otro día esta guía de referencia de sensores de la universidad de Princenton. Se trata de una introducción a los sistemas de adquisición. Estos permiten conectar el mundo físico al mundo digital. Algunas cosas pueden resultar un poco complicadas si no se conoce algo de electrónica, de todas maneras creo que puede ser útil.
Input/Data Acquisition System Design for Human Computer Interfacing

Monday, January 07, 2008

Acelerómetro o como medir aceleración


Wii Remote, es el super controlador de la consola Nintendo Wii. iPhone, es el super teléfono de Apple. Ambos dispositivos cuentan con un sensor de aceleración de tres ejes o acelerómetro de tres ejes. Este sensor esta dentro la categoría de sensores MEMS (abreviatura de Micro-Electro-Mechanical System), que son aquellos sensores electrónicos que tienen internamente algún dispositivo mecánico para funcionar, en este caso una masa (si, f=m.a).
El acelerómetro que estuve mirando es el LIS302 de STMElectronics (hay otros com el ADXL330). Algunas de las características mas interesantes de este acelerómetro son: bajo consumo, interfase I2C/SPI, amplio rango de medición ±2g / ±8g y detección de click y doble click.
La comunicación con el acelerómetro es I2C/SPI según se prefiera, esto vale tanto para la configuración como para la lectura de los valores de aceleración.
Una de las cosas que me llamo la atención es la función de detección de click y doble click. Según leí cuando se somete al sensor a un estimulo (aparemente, en una única dirección) generara un señal indicando un click (interrupción). Una variante mas avanzada de la misma función permite generar una interrupción cuando se detecta una secuencia de dos estímulos consecutivos (doble click). La intensidad del estimulo y el tiempo entre el primer y el segundo estimulo es programable. La ventaja de esta función es que simplifica la programación en el microcontrolador/procesador. La interfase estándar para comunicarse con el sensor es I2C/SPI, pero usando esta funcionalidad, leer el click o doble click simplemente implica conectar una entrada del micro a la salida de INT del sensor.
¿Como usar este sensor?, se puede fabricar una placa ad-hoc con un micro estándar o utilizar algunas de las plataformas para prototipar, Arduino o CUI USB. Wiring (el lenguaje de programación Arduino) incluye rutinas para manejar dispositivos I2C lo que simplifica bastante el tema.

Links:
STMElectronics
Wiring: rutinas para manejar dispositivos I2C

Friday, December 07, 2007

Entornos y Contornos | UNQ | Cierre de Ciclo 2007

JUEVES 13 de DICIEMBRE - 20 hs. | Entornos Simultáneos | Cierre de Ciclo 2007
P R O Y E C C I O N E S S I M U L T Á N E A S + B R I N D I S


Thursday, November 29, 2007

Sensores de Campo Magnético

El efecto Hall es un fenómeno descubierto en 1879 por Edwin Herbert Hall y consiste en la aparición de un campo eléctrico en un conductor cuando este es atravesado por un campo magnético. Industrialmente se fabrican sensores que se basan en este principio y pueden ser usados para detectar el movimiento de un engranaje, cambios de dirección y sentido, medir velocidad y posición, entre muchas otras cosas.

Estos dispositivos vienen integrados y básicamente entregan una tensión (voltaje) de salida en función de la densidad campo magnético a la cual están expuestos.

Podemos empezar clasificando estos sensores en dos grandes grupos, lineales y conmutados. Los sensores lineales son aquellos en los que la tensión de salida es proporcional a la intensidad de campo magnético. Por otro lado los conmutados son aquellos que la salida varia entre dos valores que llamaremos “on” y “off” (encendido y apagado) dependiendo de la intensidad y/o polaridad del campo magnético. El punto (o intensidad) de campo magnético necesario para conmutar el sensor esta especificado para cada modelo en particular.

Los sensores conmutados son comúnmente utilizados en pulsadores, botones sin contacto mecánico y medidores de velocidad. Dentro de los sensores conmutados están los llamados bipolares, que diferencian que polo magnético del imán esta expuesto, por ejemplo pasan al estado “on” cuando se lo expone al polo sur del imán y al estado “off” frente al polo norte (por ejemplo, posibilita detectar dos caras de una pieza).

En el caso de los sensores lineales, son utilizados para medir corriente eléctrica, proximidad entre objetos, entre otras cosas.

La siguiente clasificación nos servirá a la hora de elegir un sensor (eso espero):

Conmutados

  • Onmipolar: Conmutan de acuerdo a la intensidad de campo magnético. No diferencian polo norte de polo sur.
  • Bipolar: Conmutan de acuerdo a la intensidad y polaridad del campo magnético. El valor de salida es indeterminado ante la ausencia de campo magnético.
  • Latches: Son equivalentes a los bipolares pero a diferencia de estos el valor de salida quedara constante si se elimina el campo magnético aplicado.
  • Contador de dientes de engranaje: Es una pastilla que incluye un imán y un sensor, con capacidad para contar los dientes de un engranaje metálico que pasa por delante de el.
  • Diferenciales: Presentan inmunidad al ruido causado por ejemplo por variaciones mecánicas.
  • Histéresis: Presentan una memoria que los hace inmunes al ruido magnético.

Lineales

  • Lineales: el voltaje de salida de este sensor es proporcional a la intensidad de campo magnético aplicado.
  • Sensores de corriente: Esencialmente son sensores lineales con características mecánicas y de operación particulares, para montar cerca de cables y/o en plaquetas.

Para muchas de las aplicaciones es necesario construir piezas con imanes adosados o utilizar imanes industriales de formas particulares.

Estos sensores pueden ser obviamente conectados a cualquiera de las plataformas de desarrollo disponibles, como así también a microcontroladores en general.

Les dejo el enlace a uno ejemplo de Arduino que se llama ReadingRPM (no esta muy documentado, pero si saben leer código de Processing lo podrán entender) que hace uso de un sensor de efecto hall para medir la velocidad de rotación de un ventilador de PC.

Este es otro enlace de un proyecto muy interesante (y bastante complicado) que hizo la gente de CUI que se llama Musical Interaction Design with the CREATE USB Interface.

Enlaces de los fabricantes de sensores:

Allegro MicroSystems


Wednesday, November 28, 2007

Gainer



Gainer es una plataforma para realizar prototipos de sistemas interactivos e instalaciones en general. Gainer puede manejar sensores y actuadores desde una PC usando Flash, Max/MSP y Processing. Algunos puntos básicos a destacar son:
  • Puede ser usado en las etapas de desarrollo y producción
  • Utilizando una plaqueta de experimentación el usuario puede aprender por prueba y error
  • El usuario puede construir sus propias interfaces de entradas y salidas
  • Existen varias configuraciones disponibles
  • Todo el proyecto es abierto (hardware y software)
El proyecto esta basado en el microcontrolador Cypress CY8C29466. En una próxima entrada voy comentar un poco cuales son las particularidades de este microcontrolador.

Sunday, November 25, 2007

Processing: Manejando imágenes

Processing es un entorno de desarrollo que permite a artistas, diseñadores y entusiastas en general crear aplicaciones para manipular imágenes, sonidos e interacción en general de manera sencilla.
La idea es presentar alguna de las posibilidades de processing usando una cámara.
En este articulo me voy a concentrar en un programa que captura y muestra constantemente imágenes de la cámara, en el momento que se hace clic en el mouse una nueva imagen estática es volcada al área de visualización como si fuese una foto.
La forma de implementar este programa no es única, elegí una forma que sea sencilla de leer y muestre varios elementos de processing.
Los comentarios están incluidos en el código de forma tal que se pueda copiar y pegar directamente en processing.
// Indico que paquetes importar.
import processing.video.*;

// Declaro los objetos que voy a usar.
// La forma de declarar un objeto es:
// TipoDeObjeto nombreDelObejto;
// myCapture representara a la cámara.
Capture myCapture;
// capturedPhoto: almacenara la imagen capturada al
// momento de hacer clic en el mouse

PImage capturedPhoto;
// graphicBuffer es un objeto intermedio que permite
// manipular las gráficos
PGraphics graphicBuffer;

// Declaro dos números enteros y les asigno el valor:

// w representa el ancho de una imagen.
// h representa la altura de una imagen.
int w = 320;
int h = 240;

// Declaro e inicializo una variable que me servirá
// como indicador para saber si debo volcar una
// nueva imagen en la visualización.
boolean newPhoto = false;

// Función de inicialización:
void setup() {
// Preparo la zona de visualización, serán dos
// imágenes distribuidas horizontalmente,
// por eso w*2 indica un ancho del doble de una imagen

size( w * 2, h, P2D );

// Negro para el fondo del área de visualización
background( 0 );
// Creo gráfico intermedia para guardar la imagen
// capturada

graphicBuffer = createGraphics( w, h, P2D );

// Creo el objeto que maneja la cámara:
// En este caso usara la ultima cámara utilizada por
// quicktime. Parámetros:
// this: Esta aplicacion
// w, h: son el ancho y el largo de la imagen capturada
// 5: es la cantidad de cuadros por segundo a capturar

myCapture = new Capture( this, w, h, 5 );

}
// Esta función es llamada por procesing cada vez que
// el usuario hace clic con el mouse
void mouseClicked() {
// Guardo la imagen actual, este área de gráficos que
// me permitirá en un futuro dibujar o trabajar sobre la

// imagen capturada
graphicBuffer.set(0, 0, myCapture);

// Convierto el área de gráficos en una imagen común
// para poder mostrarla fácilmente.
capturedPhoto = graphicBuffer.get();
// Inidico que se ha capturado una nueva imagen.

newPhoto = true;
}

// Esta función es llamada por processing por cada imagen
// disponible de la cámara
void captureEvent(Capture myCapture) {

// ¿Existe una nueva imagen desde la cámara?
if(myCapture.available()) {
// Leo de la cámara la nueva imagen
myCapture.read();

}
}

void draw() {
// Actualizo la visualización con la imagen obtenida
// captureEvent()

image(myCapture, 0, 0);
// Pregunto si existe una imagen capturada con el clic
// del mouse

if (newPhoto != false) {
// Si hay imagen, la vuelco en el área de visualización,
// al lado de la imagen antes dibujada, por eso la

// posición de esta nueva imagen, será w,0 que indica
// un desplazamiento horizontal igual al ancho de una
// imagen (w)
image(capturedPhoto, w , 0);

// Vuelvo el aviso de imagen capturada a falso
newPhoto = false;
}
}

Tuesday, November 20, 2007

LED Dimming

Recently, I’ve been seeing several projects using LEDs. One of the most interesting things to control on a LED is its brightness. Controlling LED brightness not only allows you to modulate the amount of light emitted by the LED but also compose colors if you are using a RGB (3-color) LED. I wrote this article to show the inner workings behind the LED dimming.

In order to control LED’s brightness we can use Pulse-Width Modulation (PWM.) The idea behind this mechanism is, given a desired brightness and a time period, which we call ‘T’, we’ve to set the percentage of ‘T’ in which the LED will be turned on and which one it will be turned off. We call Pulse Width to the time in which the LED is turned on (See figure).

Let’s say that during 50% of ‘T’ the LED is turned on and during 50% of ‘T’ it is turned off, the LED will emit an amount of light which we call L1. However, if we choose to turn it on during 75% percent of ‘T’ and to turn it off during 25% of ‘T’, the LED brightness will be L2, where L2>L1. We can conclude that LED brightness is proportional to the percentage of ‘T’ in which the LED is turned on (considering ‘T’ as a constant.)

Won’t I see a blinking LED instead of a constant brightness? No, but you have to choose the right value for the time period ‘T’. Human vision system has a property called persistence in which, changes that happen quickly aren’t detected by our vision system. Because of that, if we toggle the LED state (on and off) quickly we won’t see those changes, but a constant brightness (as long as we maintain the on-off ratio constant). The maximum recommend value for T is 0.01 seconds.

The hottest physical computing projects such as Arduino and CREATE USB Interface have implemented this kind of brightness controls.



The previous figure shows three different PWM setups.

Sunday, November 18, 2007

Control de luminosidad para LEDs

Muchos de los proyectos que vi últimamente, hacen uso de LEDs y una de las variables fundamentales a controlar cuando usamos LEDs es su brillo. Mediante el control de brillo no solo se puede iluminar mas o menos, si no también controlar el color resultante cuando utilizamos LEDs RGB (componiendo un color). Se me ocurrió escribir este articulo de forma tal de enteder como funcionan la mayoria de los controles de intensidad de lumínica de LEDs.

Una de las manera de implementar un control de intensidad de lumínica para LEDs es usando una técnica denominada PWM, Pulse-Width Modulation en ingles y Modulación de Ancho de Pulso en español. La idea de este mecanismo de control de intensidad es la siguiente, dado un intensidad lumínica deseada y un periodo 'T' que porcentaje de 'T' estará prendido el LED. El tiempo de encendido se lo denomina ancho de pulso (ver grafico).

Por ejemplo, si durante el 50% de 'T' el LED esta prendido y el otro 50% de 'T' el LED esta apagado lograre obtener una intensidad lumínica que llamamos L1. Si ahora decido que el LED este prendido un 75% del tiempo 'T' y apagado un 25% del tiempo 'T' lograre una intensidad lumínica L2. Podemos pensar sin temor a equivocarnos que L2 > L1, es decir el LED presentara mas brillo para el caso de 75% encendido que para el caso de 50% encendido. Concluimos que el brillo será proporcional al porcentaje de ‘T’ en el cual se encuentre encendido el LED o dicho de otra manera al valor medio de la salida que controla el LED.

Ahora una pregunta que puede surgir, ¿No veré el LED titilando constantemente? La respuesta es NO, siempre y cuando 'T' este bien elegido. El sistema de visión humano tiene una persistencia, es decir no detecta los cambios de manera instantánea, por lo tanto si 'T' es lo suficientemente chico como para que el ojo no vea los cambios "prendido" a "apagado", no veremos al LED titilando, en cambio percibiremos un nivel de brillo que para nosotros será constante mientras mantengamos constante la proporción tiempo prendido, tiempo apagado de ‘T’. El valor máximo recomendado para ‘T’ es de 0,01 segundos.

Este tipo de control ya se encuentra implementado en plataformas como Arduino, CREATE USB Interface y otras.
El gráfico muestra tres situaciones distintas de PWM.
En el tercer caso, el tiempo de encendido es mas grande y como consecuencia sera el caso de mayor voltaje medio.