Anda di halaman 1dari 48

ARTE ELECTRONICO – INTERFASES

EUGENIO TISELLI
2003

2. Sensores y actuadores

Recordemos la definición de transductores: dispositivos que traducen las señales de un dominio a otro.
Los sensores, u órganos de los sentidos del ordenador, son transductores que convierten las señales
físicas en señales eléctricas, los actuadores son aquellos que realizan la tarea inversa. Pues bien, en este
tema analizaremos los diferentes tipos de sensores y actuadores, teniendo siempre en cuenta que nos
interesa conocerlos con el fin de crear interfaces físicas que tendrán un papel específico dentro de alguna
obra interactiva.

Podemos partir de una versión aumentada del diagrama

que anteriormente habíamos analizado, y que constituye el modelo de interacción humano-ordenador. En


esta nueva versión del diagrama, encontramos que la interacción, o sea, el proceso que ocurre entre
humano y ordenador y que posibilita el intercambio de impulsos, puede tener diferentes modalidades. Los
impulsos provenientes del ordenador pueden llegar al humano en forma de luz, sonido y/o percepción
táctil del movimiento. A su vez, los impulsos humanos llegan al ordenador básicamente en diferentes
formas de acción muscular: movimiento, voz, etc., o también como impulsos luminosos, si es que nos
interesa detectar el movimiento o el color sin la utilización de ningún dispositivo añadido al cuerpo. Como
veremos, el tipo de sensor y actuador a utilizar en una interfaz depende directamente del impulso que
deseamos captar.

Hablemos en primer término sobre los sensores. Podemos distinguir fundamentalmente dos grandes
categorías de sensores: los digitales y los analógicos. Es el tipo de señal generada por cada una de estas
categorías lo que nos permite distinguir entre una y otra. Los sensores digitales son aquellos cuya
respuesta a un impulso se da de forma binaria: si o no, 1 o 0, mientras que los sensores analógicos
generan respuestas eléctricas que varían dentro de un rango determinado, y que pueden tomar cualquier
valor comprendido dentro del mismo. Esta categoría está representada por la gran variedad existente de
pulsadores e interruptores: dispositivos que, en
cualquier momento, pueden encontrarse en alguno
de sus dos estados, encendido o apagado. Este
tipo de sensores se adapta de forma magnífica
para las situaciones en las cuales nos interesa
detectar la presencia de algo o de alguien en un
punto determinado, sin importarnos otro tipo de
información añadida. Existe, como hemos
mencionado, una gran variedad de sensores
digitales: los pulsadores, que consisten
generalmente en botones que al ser pulsados
cambian de estado (de encendido a apagado o viceversa), y que al soltarlos regresan a su estado
original, y los interruptores que, a diferencia de los pulsadores, permanecen en uno de los dos estados sin
que tenga que existir sobre ellos una acción continua (pensemos en los interruptores de corriente que
existen para encender o apagar las luces de nuestra casa).

De estos dos tipos básicos de sensor digital se deriva una serie extensa de variantes, que incluyen, por
ejemplo, a las fotocélulas de barrera. Estos sensores consisten
en circuitos eléctricos más o menos complejos en los cuales
existe un emisor y un receptor de señales infrarrojas. Emisor y
receptor se encuentran separados, y necesitan colocarse frente
a frente y sin obstáculos para que la señal llegue de un punto a
otro. Cuando algún objeto se coloca entre los dos puntos la
señal se interrumpe, generando una variación en la respuesta
del circuito. Tenemos así un sensor digital, que nos da una
respuesta si existe un objeto interrumpiendo el haz infrarrojo, y
la respuesta inversa si dicho haz se transmite de un punto a
otro sin interrupción.

El segundo tipo de sensores, los sensores analógicos, son aún mas variados. Esta enorme diversidad nos
obliga a subdividirlos en diferentes categorías. Una primera categorización puede hacerse según la
naturaleza de los impulsos captados por los sensores analógicos. Así pues, tenemos la siguiente lista:

-Movimiento (presión, torsión, inercia)


-Luz
-Sonido
-Temperatura
-Humedad
-Voltaje
-Magnetismo
-Electromagnetismo

2.1. Tipos y clasificaciones de sensores

Esta lista es bastante general, así que nos conviene hacer una clasificación más precisa, en la que
clasificaremos los sensores según la tecnología con la que están fabricados, y mencionaremos, para cada
uno de los tipos, el tipo de energías que permiten captar. Partiendo entonces de la lista anterior,
elaboremos una segunda lista:

- Resistencias variables: Sensores cuya resistencia eléctrica varía según la intensidad de la señal
captadas. Hay diferentes tipos de resistencias variables:
- potenciómetros : captan giro, deslizamiento

- sliders : captan el desplazamiento lineal sobre una superficie

- termistores : captan temperatura


- fotoresistores : captan luz

- sensores resistivos de fuerza (force sensitive resistors - FSR): captan presión o tacto

- flexores : captan flexión, movimiento


- Acelerómetros : Estos sensores son circuitos eléctricos relativamente complejos que permiten captar el
movimiento de un objeto sobre el cual estén colocados, o bien la inclinación de éste.

- Sensores piezoeléctricos : Sensores fabricados con material piezoeléctrico, que tiene la particularidad de
producir una variación de voltaje cuando se deforma. Estos sensores son bastante versátiles, y permiten
captar energías tales como fuerza, temperatura o sonido. Pensemos que estas tres energías, al ser
aplicadas sobre algún material, producen una deformación del mismo y que dicha deformación, a pesar
de ser imperceptible en ocasiones, puede detectarse eléctricamente.

- Sensores infrarrojos : Sensores basados en la transmisión y recepción de señales infrarrojas, que viaja
en un haz invisible desde el transmisor hasta el receptor. Estos sensores pueden tener dos
configuraciones: en la primera, el emisor y receptor se encuentran colocados en un mismo sitio. Esto
implica que, para que el receptor reciba la señal del emisor, ésta ha de rebotar en alguna superficie. Esta
configuración permite tener un sensor infrarrojo que detecta la cercanía de un objeto. La segunda
configuración existe cuando tenemos el emisor y el receptor separados, pero colocados frente a frente. En
este caso, el haz infrarrojo debe viajar desde el emisor hasta el receptor sin encontrar obstáculos, en caso
contrario, la señal no llegará a su destino. Esto nos permite hablar de sensores infrarrojos que detectan la
presencia de un objeto. Notemos que, en este último caso, tendremos un sensor digital, es decir: un
sensor que nos dará un valor cuando el haz infrarrojo fluya sin interrupción, y el valor inverso cuando el
haz se interrumpa. Podemos mirarlo como un interruptor que funciona con señales infrarrojas.

- Sensores biopotenciales : Estos sensores, utilizados generalmente dentro de un contexto médico, sirven
para medir diferentes energías generadas por los procesos vitales del cuerpo humano. En general se trata
de sensores bastante especializados, que pueden llegar a ser muy caros o difíciles de conseguir. Dentro
de este tipo de sensores tenemos a aquellos que miden la tensión muscular, el movimiento de los ojos, la
actividad cerebral, y la actividad cardíaca, entre otros impulsos.

- Sensores de campo electromagnético : Estos sensores permiten medir el campo electromagnético que
se encuentra rodeando a todos los cuerpos físicos. Este campo existe naturalmente en torno a cualquier
objeto debido al fenómeno eléctrico conocido como inductancia, que consiste en la creación de un campo
electromagnético perpendicular a toda corriente eléctrica que fluye a través de un circuito. Existe una gran
cantidad de objetos en la naturaleza, entre ellos el cuerpo humano, a través de los cuales se transmite
electricidad. Mediante estos sensores, que detectan el campo electromagnético, podríamos percibir la
cercanía de un cuerpo. Sin embargo, tengamos presente que los campos electromagnéticos son
enormemente inestables, y que por lo tanto este sensor no nos dará información fiable, ya que es
bastante probable que dicha inestabilidad haga que se comporte casi de manera aleatoria.
- Sensores de sonido : Podemos decir que un micrófono común
y corriente es un sensor de sonido. Las vibraciones captadas por
éste se convierten en impulsos eléctricos y, en el caso de los
micrófonos conectados directamente a un ordenador, en señales
digitales. Podemos utilizar esta señal de diferentes maneras, ya
sea para captar la información física del sonido, como amplitud
(volumen) o frecuencia (tono), o bien, a través de software
sofisticado, reconocer patrones de voz, por ejemplo.

- Ultrasonido : Sensores que captan señales ultrasónicas, es decir, ondas de sonido cuya frecuencia es
tan alta que resultan inaudibles para el oído humano. Los sonares son sensores de ultrasonido que se
basan en el sistema de detección de objetos utilizado por animales como el murciélago: este roedor emite
sonido de altísima frecuencia que, al rebotar y regresar a su oído, le proporcionan información sobre
objetos cercanos. Así pues, los sonares permiten la detección de objetos.

Tenemos, finalmente, un tipo de sensor que será objeto de estudio detallado en temas siguientes: la

cámara digital. Simplemente pensemos ahora que la cámara


puede captar imágenes que, mediante diferentes herramientas de software, pueden ser analizadas para
rastrear movimientos, colores e incluso patrones.
En general, podemos decir que gran parte de estos sensores provienen del campo de la informática
industrial, y que se han utilizado dentro del contexto de fábricas y líneas de producción desde hace ya
bastantes años. Sin embargo, la entrada de estos dispositivos en el mundo del arte electrónico interactivo
es relativamente reciente, y ello nos permite analizarlos de una forma novedosa, encontrando
aplicaciones creativas para ellos.

Una forma de categorización de los sensores que resulta bastante interesante dentro del contexto del
diseño de interfaces para la interacción humano-ordenador es aquella que los agrupa según el tipo de
acciones humanas que permiten percibir. Básicamente se tratará de acción muscular, subdividida en dos
tipos: isométrica, o bien, acciones que generan presión sobre otros objetos, y movimiento. Podemos
trazar el siguiente cuadro:

Acción muscular:
- Isométrica: sensores de presión
- Movimiento:
- con contacto mecánico: potenciómetros, sliders, flexión
- sin contacto mecánico: sensores de ultrasonido, campo magnético, acelerómetros, fotoresistores,
infrarrojos

2.2. Actuadores

Por parte de los actuadores tenemos, además de los dispositivos "tradicionales" que transforman los
procesos que ocurren dentro del ordenador en señales físicas perceptibles (la pantalla genera luz, los
altavoces generan sonido), a toda una serie de dispositivos que permiten transformar las señales digitales
en señales eléctricas, para ser utilizadas dentro de un circuito. Un LED (Light Emitting Diode), por
ejemplo, es uno de los actuadores más simples. Se trata de un componente eléctrico que genera luz al
existir el flujo eléctrico a través de él. Otro actuador muy común, tal vez el más versátil, es el relé.

Un relé es un interruptor
que recibe una señal de
voltaje, y en base al valor
de ésta permite o impide el
flujo de corriente a través
de un circuito. Mediante un
relé, por ejemplo, podemos
controlar el encendido o
apagado de cualquier
dispositivo eléctrico. Tanto
los LEDs como los relés
generan impulsos externos
que podríamos llamar
digitales, haciendo una
analogía con los sensores
digitales: tienen dos
estados, encendido o apagado. Aplicando la dicotomía digital-analógico que utilizamos para clasificar los
sensores, podemos decir que también existen los actuadores analógicos que, a diferencia de LEDs y
relés, generan impulsos físicos cuya intensidad varía analógicamente dentro de un rango. Un ejemplo de
este tipo de actuadores son los altavoces piezoeléctricos, que generan frecuencias proporcionales al
voltaje que se les aplique, o bien de los servomotores, que giran un
número determinado de grados, dependiendo también del voltaje de alimentación

3. Algunos conceptos de electricidad

Antes de continuar, será necesario definir algunos conceptos básicos sobre electricidad. Los últimos
temas de este curso están orientados a la creación de interfaces físicas utilizando microcontroladores.
Para ello, tendremos que tener algunas nociones sobre circuitos y sus diferentes características y
componentes. Ya que hemos hablado sobre sensores, y hemos introducido algún término que pudo haber
creado algunas dudas, presentemos ahora definiciones formales. Más adelante, cuando comencemos a
ensamblar circuitos sencillos, iremos introduciendo nuevas definiciones; sin embargo, hablemos ahora de
ciertos conceptos fundamentales:

-Circuito eléctrico: Un circuito eléctrico es el conjunto de dispositivos que permiten el paso de electrones a
través de él. Los electrones son una de las partículas que componen al átomo; estas partículas tienen una
carga negativa. Para que los electrones fluyan a través de un circuito, necesita existir una diferencia de
polaridades en sus extremos. En uno de ellos, una existirá una polaridad negativa, dada por la
acumulación de electrones. En el extremo opuesto, una carga positiva generada precisamente por la
ausencia de electrones. Naturalmente, los electrones tenderán a equilibrar las cargas del circuito, y fluirán
desde el polo negativo hacia el positivo. Todo aparato eléctrico necesita de este flujo de electrones para
funcionar

-Voltaje y tierra: El voltaje, también llamado diferencia de potencial, nos indica la cantidad de carga que
fluye a través de un circuito. El voltaje se mide en volts (V), y siempre estará expresado en relación a un
punto de referencia llamado "tierra", cuya carga es de 0 volts. Pensemos en las distancias: nosotros
medimos la distancia en metros, siempre expresados en relación a un punto que nosotros consideramos
como "distancia 0". Por ejemplo, si queremos medir la distancia que hay desde la pared hasta la puerta,
comenzamos desde 0 en la pared, y el valor resultante lo obtendremos cuando hayamos llegado hasta la
puerta. Lo mismo ocurre con el voltaje. Cabe mencionar que existen valores estándar para el manejo de
voltajes dentro de los circuitos informáticos. Como sabemos, todas las señales dentro de un ordenador
son de naturaleza binaria, es decir, 0s o 1s. De la misma manera que podemos describir las señales
intercambiadas entre nuestras neuronas como "impulsos eléctricos", las señales digitales son también
impulsos cuyas cargas de voltaje pueden valer 0 volts (0) o 5 volts (1).

- Resistencia: Cuando hablábamos de sensores, nosotros definimos a cierto tipo de sensores como
"resistencias variables". Una resistencia es un componente eléctrico que regula el voltaje en un circuito. Si
hacemos una similitud entre el flujo de electrones a través de un circuito y el flujo de agua a través de una
cañería, las resistencias eléctricas serían una especie de "embudos" que regulan la cantidad de flujo. Las
resistencias son necesarias ya que, de no existir, los electrones fluirían a través de un circuito con tal
rapidez que lo quemarían. Esto es lo que conocemos como "corto circuito". Las resistencias se expresan
en ohms (simbolizados por la letra griega "omega"), y podemos decir que mientras mayor sea una
resistencia, menor será el voltaje que atraviese el circuito.

4.1. Puertos y protocolos

Ahora que hemos hablado de sensores e interfaces, cabe preguntarnos cómo conectar un sensor o un
actuador al ordenador para que éste lo lea. Para responder, demos primero un vistazo a la parte trasera
de nuestro ordenador: observaremos cables conectados a diferentes terminales: el ratón, el teclado, la
pantalla... todas estas terminales, que constituyen las entradas y salidas físicas del ordenador, se llaman
puertos. Los puertos enlazan y comunican al ordenador con dispositivos externos. Observaremos que hay
puertos muy diferentes, que varían de ordenador en ordenador. Algunos de los puertos mas comunes
son:

- Puerto serie, también llamado puerto COM. Este


puerto permite una comunicación serial bidireccional con el ordenador, es decir, los datos, ordenados en
bytes (paquetes de ocho bits) son enviados de manera secuencial desde y hasta el ordenador.

- Puerto paralelo, llamado también puerto LPT.


Generalmente se usa para enviar grandes cantidades de información, ya que permite la circulación
bidireccional de datos en paralelo, a diferencia del puerto serie, en el que los datos circulan de manera
secuencial. Comúnmente encontraremos impresoras conectadas a este puerto, que poco a poco va
cayendo en desuso ya que está siendo substituido por otros de mayor velocidad.

- Puerto USB (Universal Serial Bus). Este puerto


permite la comunicación serial a altas velocidades. Este puerto está substituyendo a los puertos paralelos
e incluso al puerto serie. De hecho, en los ordenadores Macintosh más recientes no existe un puerto
serie, en su lugar encontramos uno o dos puertos USB.
- Puerto MIDI: El puerto MIDI permite la
comunicación entre dispositivos informáticos capaces de comprender el protocolo MIDI. Es poco común
encontrarlo, pero veremos cómo puede sernos útil, y de qué manera podemos introducir mensajes MIDI
en el ordenador adaptando otros puertos. Es importante mencionar que los puertos MIDI son
unidireccionales, y que por lo tanto existirá siempre un puerto de entrada y uno de salida, cada uno por
separado.

Ya que hablamos de MIDI, introduzcamos el concepto de protocolo: ya hemos mencionado que todos los
datos en un ordenador se transmiten como cadenas de 0s y 1s, las cuales podemos ver como señales
eléctricas cuyo voltaje varía de forma discreta entre 0 y 5 volts. Leer estas cadenas nos resultaría
imposible, y por lo tanto necesitamos encontrar una manera de ordenarlas de tal forma que resulten
inteligibles para nosotros. Este ordenamiento, junto con las reglas que rigen el intercambio de la
información, es lo que llamamos protocolo: un lenguaje para el intercambio de mensajes inteligibles cuyo
uso se ha estandarizado, y que permite la comunicación con el ordenador. Existen diferentes protocolos
asociados a las distintas formas en las que es posible comunicar dispositivos informáticos. El protocolo
RS-232, por ejemplo, está asociado al puerto serie, y por lo tanto permite el intercambio de mensajes
secuenciales entre dispositivos.

El protocolo MIDI, asociado a los puertos MIDI, permite el intercambio de mensajes musicales entre
diferentes dispositivos.

4.2. El protocolo MIDI

MIDI significa "Musical Instruments Digital Interface", y fue creado en 1983. Es para nosotros de especial
interés ya que gran parte de las interfaces físicas que utilizan sensores se comunican con el ordenador
utilizando este protocolo. El hecho de que el MIDI sea un lenguaje de alto nivel para el intercambio de
mensajes musicales no significa que pueda ser usado solamente dentro de aplicaciones sonoras. Como
veremos, en última instancia los mensajes MIDI son números y, con un poco de programación, podemos
manipular un número para realizar cualquier tarea: desde la emisión de sonido hasta el movimiento de
una imagen en pantalla.

MIDI es un caso especial de protocolo serial: consiste en la transmisión secuencial de bytes, de la misma
manera que el protocolo RS-232. Sin embargo, en MIDI los bytes están ordenados de una manera
específica. La mayoría de los mensajes MIDI están compuestos por un conjunto de 3 bytes y cada uno de
ellos utiliza solamente 7 bits, en vez de los 8 que generalmente suele tener un byte. El primer byte
representa el tipo de mensaje MIDI, y los dos siguientes serán parámetros que afecten a dicho mensaje,
cuyos valores estarán entre 0 y 127 (para 7 bits existen 128 posibles combinaciones de 0s y 1s).

Existen diferentes tipos de mensajes MIDI que, como veremos, están basados en el paradigma del
teclado musical:
- Note On: Estos mensajes permiten generar una nota. El segundo byte es el número de nota y el tercero
su intensidad. Por ejemplo, el mensaje MIDI Note On 60, 64 genera la nota 60 (Do central en un piano, o
"Do5") con valor de intensidad medio (64).

- Control Change: Estos mensajes permiten aplicar controladores continuos a una nota. Imaginemos un
control de volumen, por ejemplo, que va variando mientras se emite una nota. Ésto se puede lograr
mediante los mensajes Control Change, en los cuales el primer byte indica el tipo de controlador, y el
segundo el valor de dicho controlador. Por ejemplo, el mensaje MIDI: Control Change 7, 127 pone un
valor de 127 (valor máximo) al controlador 7 que es, precisamente, el controlador de volumen.

Existen otros mensajes MIDI, como Program Change por ejemplo, pero con los mensajes que ya hemos
mencionado nos bastará para trabajar.

El MIDI tiene, además, 16 canales de comunicación. Pensemos en cada canal como un instrumento
independiente en una orquesta: MIDI es un protocolo que permite la polifonía, es decir, que puede recibir
hasta 16 voces simultáneamente, o bien, que tenemos hasta 16 conductos independientes para el envío
de datos. Cada uno de los mensajes anteriores (Notas y Controladores) nos indicará, además, en que
canal se está transmitiendo.

4.3. Interfaces digitalizadoras y software MIDI

Para responder la pregunta que nos hicimos al inicio de este tema, sobre cómo conectar un sensor o
actuador al ordenador, definamos un último concepto: la interfaz digitalizadora. Las interfaces
digitalizadoras traducen los voltajes generados por los sensores como resultado de la percepción de
energías físicas a señales digitales organizadas según algún protocolo comprensible para el ordenador.
Después de mirar los puertos en la parte trasera del ordenador, nos quedó claro que es imposible
conectar los transductores directamente. Mas aún, dichos transductores generan señales de voltaje que
no son directamente legibles por el ordenador. Es por eso que necesitamos un dispositivo intermedio al
cual podamos conectar los sensores y actuadores, y que la señal generada por estos se traduzca a una
señal digital. Existen en el mercado diferentes interfaces digitalizadoras, entre ellas: I-cubeX,

desarrollada por Infusion Systems, atoMIC,


http://infusionsystems.com/catalog/index.phpdesarrollado por IRCAM, http://www.ircam.fr/ y SensorLab,
desarrollado en STEIM. http://www.steim.org/steim/ Estas tres interfaces, aunque tienen ligeras
diferencias en cuanto a especificaciones técnicas y utilización, comparten la característica de que todas
ellas generan señales digitales organizadas según el protocolo MIDI. Esto resulta ser ventajoso ya que,
como habremos intuido, no bastan los transductores conectados a una interfaz digitalizadora para
controlar interactivamente los contenidos audiovisuales: también hay que contar con un software que
pueda leer las señales provenientes de la interfaz digitalizadora y mapearlas a diferentes acciones
visuales o sonoras.

La cantidad de software que es capaz de leer señales MIDI es bastante grande, y va desde los
sofisticados secuenciadores de audio, tales como Cubase
o
Audiomulch, http://www.audiomulch.com/ hasta entornos de programación multimedia o visual como
Macromedia Director http://www.macromedia.com/ (con la ayuda de algún Xtra,
http://www.audiomulch.com/midiio/ o extensión para leer MIDI), MAX
http://www.cycling74.com/index.html o PD, pasando por aplicaciones de corte más experimental como
Resolume, http://www.resolume.com/index.php que permite mezclar video en tiempo real, o MIDIPoet,
que permite manipular textos e imágenes de forma interactiva.

Sin embargo, una configuración informática en la que exista una interfaz digitalizadora como IcubeX, y
cuya señal esté siendo leída por Director puede resultarnos bastante cara. Los precios de las interfaces
digitalizadoras disponibles en el mercado suelen ser altos, al igual que los de las herramientas de
software multimedia.

Es por ésto que, en los siguientes temas, estudiaremos la forma de fabricar nuestras propias interfaces
digitalizadoras y leer las señales que éstas generan desde aplicaciones gratuitas o de bajo costo. Es muy
importante pensar que el trabajo con interfaces físicas dentro del arte electrónico no es una cuestión
elitista, se trata simplemente de conocer las diferentes técnicas para lograr la comunicación entre el
mundo físico y el entorno audiovisual utilizando componentes y aplicaciones baratas o gratuitas.
Esta sesión es de carácter eminentemente práctico; aquí abundan ejemplos de aplicaciones
informáticas para la creación de interfaces físicas. Concretamente, estudiaremos cómo
conectar un microcontrolador con el ordenador, y cómo crear y programar circuitos capaces de
trabajar con sensores y actuadores. Aprenderemos a leer la señal que llega desde el
microcontrolador utilizando entornos de creación multimedia, y finalmente hablaremos sobre la
cámara como sensor
1. Microcontroladores, conceptos, componentes

Llegamos a la parte práctica de nuestro curso. Aquí aprenderemos cómo utilizar los microcontroladores
con el fin de crear nuestras propias interfaces físicas, y lograr que se comuniquen con el ordenador. Ya
hemos mencionado una de las ventajas de utilizar microcontroladores en vez de comprar una interfaz
digitalizadora como IcubeX: el costo, mucho más reducido. Sin embargo, otra ventaja no menos
importante es que el microcontrolador es muchísimo más flexible que cualquier interfaz digitalizadora
disponible en el mercado, ya que nosotros programaremos dicho dispositivo para que realice exactamente
la tarea que nos conviene. De hecho, dentro del IcubeX, atoMIC o SensorLab realmente hay
microcontroladores, que ya tienen un programa predefinido, que traduce las señales de los sensores a
MIDI. Mediante los microcontroladores, nosotros seremos capaces de crear dispositivos "a medida", ésto
es, interfaces digitalizadoras que traduzcan los datos de los sensores a cualquier protocolo, y con
diferentes parámetros y condiciones.

Un microcontrolador es un ordenador en miniatura; tiene todas las características que nos hacen
distinguirlo como tal: procesador, memoria y entradas y salidas. Los microcontroladores

ya han sido utilizados desde hace mucho tiempo dentro del contexto
de la informática industrial, al igual que los sensores y actuadores.

Hasta hace pocos años, programar dichos ordenadores era una tarea de expertos: había que
programarlos en un lenguaje llamado Ensamblador, que es tal vez el lenguaje "menos amigable" para el
ser humano; las instrucciones que utiliza son crípticas, y está basado en el manejo directo de la memoria,
lo cual llega a resultar bastante confuso. Sin embargo, con la llegada de nuevos microcontroladores con
lenguajes mucho más fáciles de aprender, estos dispositivos se convierten en algo utilizable por
cualquiera con ciertos conocimientos básicos de programación y electrónica. Decimos básicos, ya que
realmente para fabricar circuitos y hacerlos funcionar no hace falta ser un experto.

Utilizaremos los microcontroladores Basic Stamp II,


fabricados por Parallax. Hemos elegido este modelo ya que, como mencionábamos en el párrafo anterior,
es programable en un lenguaje bastante accesible: el P-Basic. Este lenguaje es una variante del Basic
(Beginners' All-Purpose Symbolic Interchange Code), un lenguaje creado para enseñar programación a
principiantes. La mayor parte de las instrucciones de este lenguaje son palabras en inglés, y su estructura
resulta clara.

El Basic Stamp II tiene, como todo microcontrolador, un procesador, que en este caso particular permite la
ejecución de comandos en P-Basic. La velocidad de este procesador es de 3000 a 4000 instrucciones de
P-Basic por segundo. Si lo comparamos con los microcontroladores programables en lenguaje
Ensamblador, resulta un procesador lento. Sin embargo, esta velocidad ya es suficiente para los fines que
a nosotros nos interesan.

La memoria del Basic Stamp II es una memoria EEPROM, que por sus siglas en inglés (Electrically
Erasable Programmable Read Only Memory) es una memoria de "sólo-lectura" que es eléctricamente
borrable y reprogramable. Aquí hay varias características que vale la pena señalar: las memorias de los
microcontroladores más antiguos no podían ser borradas y reprogramadas, ya tenían programas pre-
establecidos. Posteriormente, surgieron memorias que permitían la reprogramación mediante la aplicación
de luz ultravioleta a lo largo de un tiempo determinado. Estas memorias, sin embargo, tenían un tiempo
limitado de vida, y podían ser reprogramadas un número determinado de ocasiones. Las memorias
EEPROM, de creación más reciente, permiten ser borradas y reprogramadas un número prácticamente
ilimitado de veces mediante la aplicación de una simple señal eléctrica. Por otra parte, tenemos que la
memoria del Basic Stamp II es limitada en cuanto a capacidad: puede almacenar entre 500 y 600
instrucciones. Además, esta memoria solamente acepta un programa a la vez.

En cuanto a las entradas y salidas del Basic Stamp II, tenemos 16 pequeñas patitas metálicas, llamadas
"pins", que pueden fungir como entradas o salidas. Cada una es independiente, y puede generar o recibir
señales eléctricas desde 0 hasta 5 volts. Hay otros 8 pins que, como veremos en un diagrama más
adelante, están reservados para la realización de diferentes funciones específicas.

1.1. Elementos para la práctica

Utilizaremos los microcontroladores Basic Stamp II para la creación de diferentes circuitos básicos: le

lectura de un sensor digital (interruptor) , la lectura

de un sensor analógico, la generación de señal para

actuadores digitales (LEDs o relés,


por ejemplo) y finalmente la comunicación con el ordenador, utilizando el
protocolo serie y el protocolo MIDI. Para ello, necesitaremos el siguiente material:

- Microcontrolador Basic Stamp II

- Protoboard : Se trata de una tabla que nos permite crear circuitos


eléctricos a nivel prototipo. Esta tabla tiene una serie de agujeros que nos permiten insertar y sacar
fácilmente los diferentes componentes del circuito, sin tener que soldar. Si miramos un protoboard de
frente, como se muestra en la foto, encontraremos que en cada extremo hay dos líneas verticales de
agujeros. Cada una de estas líneas es independiente, y a través de ellas se transmite la señal que
conectemos en cualquier punto. Por ejemplo, si conectamos en la esquina superior izquierda del
protoboard una señal de 5 volts, toda esa línea compartirá dicha señal, y a ella podremos conectar
componentes que requieran dicha señal de voltaje (foto).
En el centro del protoboard, encontraremos agujeros
también, que representan líneas horizontales. Estas líneas también son independientes entre sí, y las
señales son compartidas por todos los puntos de la línea. Sin embargo, existen divisiones verticales que
interrumpen la señal de las líneas horizontales, impidiendo su paso (foto).

- Cable serie: Para lograr la comunicación entre el


ordenador y el microcontrolador, necesitaremos de un cable serie. Es importante que al menos una de las
terminales de este cable sea de tipo "hembra", ya que la mayoría de los ordenadores tienen un puerto
serie de tipo "macho". Para aquellos ordenadores que tengan puertos USB pero no cuenten con un puerto
serie, será necesario comprar además un cable adaptador
de serie a USB. Estos cables incluyen además
software, que permite al ordenador reconocer la comunicación serial que llega a través de los puertos
USB.

- Batería de 9 volts, con "capucha" con dos


terminales (tierra y voltaje) para alimentar el microcontrolador.

- Multímetro: Un multímetro es un dispositivo que


nos permite hacer diferentes mediciones de señal eléctrica. No haremos mediciones muy sofisticadas, así
que no hace falta comprar un multímetro caro.
- Pinzas de corte o alicates.

Utilizaremos, además, los siguientes componentes y materiales:

- Cable para conexiones: se trata de cable delgado, también llamado hilo, que pueda ser insertado
fácilmente en los agujeros del protoboard

- Resistencias: Estos componentes regulan el paso


de voltaje a través de un circuito. Como ya vimos en un tema anterior, el voltaje es inversamente
proporcional a la resistencia, es decir: a mayor resistencia, menor voltaje. Los circuitos que montaremos
necesitan, concretamente, de resistencias de dos valores: 220 ohms y 10 Kilo ohms. Podemos saber el
valor en ohms de una resistencia mediante la tabla que se muestra en la figura:

observemos que todas las resistencias tienen una banda dorada.


Si al mirar una resistencia colocamos esta banda del lado derecho, podemos saber el valor de la
resistencia leyendo las bandas de colores impresas sobre dicho componente de izquierda a derecha. Por
ejemplo, si tenemos una resistencia cuyos colores, de izquierda a derecha son: rojo, rojo y café, mediante
la tabla podemos saber que: rojo=2, rojo=2, café=0, por lo tanto tenemos 220 ohms.

- Capacitores o condensadores: Los capacitores o


condensadores son componentes que almacenan electricidad. Son algo así como un cubo que se llena de
agua, y que tiene un tiempo de carga y un tiempo de descarga. Veremos más adelante cómo, midiendo el
tiempo de descarga de un capacitor, podemos saber el valor que tiene una resistencia variable (sensor).
La capacitancia, o cantidad de electricidad que pueden almacenar los capacitores se mide en faradios (F).
Concretamente, necesitaremos capacitores de .1 microfaradio.

- Pulsador o interruptor

- Fotocelda
- Potenciómetro : Los potenciómetros (al igual que
las fotoceldas) son resistencias variables. Como ya habíamos visto anteriormente, estos sensores dan
diferentes valores de resistencia según la intensidad de la señal física captada. Para los circuitos que
nosotros montaremos aquí, utilizaremos potenciómetros con un valor de resistencia entre 100 y 200 Kilo
ohms.

- LEDs

Cabe mencionar que dicho material puede conseguirse prácticamente en cualquier tienda de
componentes electrónicos (con excepción del microcontrolador Basic Stamp II, que probablemente habrá
que pedir por correo o buscar en una tienda especializada), y que su costo no es elevado.

Además de estos materiales, habrá que conseguir el software que permite programar el microcontrolador
desde el ordenador. Dicho software puede descargarse gratuitamente desde la página web de Parallax :
www.parallax.com. Este software funciona para ordenadores PC, ya sea con Windows, DOS o Linux, y
también para Macintosh (solamente sistema operativo OS X). Desde esta misma página web se pueden
descargar varios manuales referentes a la utilización del Basic Stamp, y también ejercicios y proyectos.
Se recomienda ampliamente la descarga de estos textos.

Nuestra primera práctica será crear el cable serie que nos permitirá la comunicación entre el
microcontrolador y el ordenador. Para ello, cortaremos a la mitad dicho cable. Observaremos que dentro
de él hay diferentes conductos eléctricos, cada uno
de un color distinto. Hay también una malla metálica, que protege la señal que transita por el cable de
interferencias externas. Los conductos eléctricos son nueve, y cada uno corresponde a un pin de los
terminales del cable serie.

El siguiente diagrama (ojo esta al revés, cotejar


con los números de la ficha real) nos muestra los pins que utilizaremos para la comunicación con el
microcontrolador: el pin número 2 es Rx (recepción de datos), el pin 3 es Tx (transmisión de datos), el 4
es DTR (línea de atención) y el 5 es GND (tierra) (fig). Necesitamos encontrar los conductos
correspondientes a estos pins para conectarlos a los terminales correspondientes en el microcontrolador.
Para identificarlos, haremos lo siguiente: primeramente, colocaremos el multímetro en el modo "diodo".

Este modo permite saber si hay una línea que conecta un punto con
otro. Si tomamos los terminales de medición del multimétro colocado en este modo y los juntamos,
obtendremos en el display un valor que tiende a llegar a cero; ésto indica que hay conexión. Pondremos
uno de los terminales de medición en alguno de los pins del cable serie, y el otro en cada uno de los
conductos, hasta que encontremos las correspondencias.
Para poder colocar un terminal de medición en un
pin del cable serie hembra, podemos insertar un trozo de hilo eléctrico, el cual nos ayudará a realizar la

medición (foto).

Los pins 6 y 7 del cable serie, DSR y RTS respectivamente, han de ser conectados entre sí para lograr
que el software editor del Basic Stamp haga la autodetección del puerto, es decir, que detecte
automáticamente a qué puerto está conectado el microcontrolador. Bastará con unir los conductos
correspondientes a dichos pins.

Una vez que hemos identificado los pins y los conductos, podremos conectar el microcontrolador al puerto
serie del ordenador.

1.2. Conexión del microcontrolador


Para realizar la conexión del microcontrolador con el ordenador, miremos primero el diagrama

del Basic Stamp. O

bservaremos que, en la parte superior del gráfico que


representa el microcontrolador, hay una señal en forma de semicírculo o media luna. Tomemos el Basic
Stamp y busquemos en uno de sus extremos esta misma señal, que nos indicará la forma correcta de leer
los pins: siempre comenzaremos de izquierda a derecha y de arriba a abajo teniendo la señal en la parte
superior. Veremos entonces que los cuatro primeros pins, en la parte superior izquierda del
microcontrolador, están reservados para la comunicación serial con el ordenador: sirven tanto para
programarlo como para intercambiar diferentes datos. Siguiendo un orden de arriba a abajo, tenemos la
siguiente distribución: Tx, Rx, ATN y GND. Dichos pins guardan una correspondencia con los conductos
que hemos identificado en el cable serie. Para conectar los conductos a los pins correspondientes del
microcontrolador, primero insertaremos el Basic Stamp en el Protoboard,

procurando ponerlo en la parte central de forma que una de las


divisiones verticales pasen por el centro de éste. Una vez colocado, insertaremos los conductos en los
agujeros del protoboard que están inmediatamente a la izquierda del microcontrolador. Observemos que
el conducto correspondiente a Rx del cable serie va al pin Tx del microcontrolador. Ésto resulta lógico, ya
que los datos transmitidos por el Basic Stamp serán los datos recibidos en la conexión serie. De forma
complementaria, el conducto Tx del cable se conecta al pin Rx del microcontrolador. El conducto DTR se
conecta al pin ATN, y el conducto GND se conecta al pin GND. Hemos seguido un orden descendente,
comenzando desde el extremo superior izquierdo (foto).

1.2. Conexión del microcontrolador

Nos falta simplemente conectar la alimentación necesaria para el funcionamiento del microcontrolador. Si
miramos nuevamente el diagrama que muestra los pins del Basic Stamp, encontraremos que también
los cuatro pins de la parte superior derecha están reservados para funciones específicas. En un orden
descendente, los dos primeros, PWR y GND representan voltaje y tierra respectivamente. Es aquí donde
conectaremos la batería de 9 volts para hacer funcionar el microcontrolador (foto).

El siguiente pin, RES, es una entrada que permite hacer un


"reset" o borrado de la memoria. Nosotros no utilizaremos este pin, ya que dicho borrado se realiza de
forma automática cada vez que reprogramamos el Basic Stamp desde el editor. Por último, tenemos el pin
"+5V", muy importante ya que en él existe una señal constante de 5 volts. La mayor parte de los circuitos
que ensamblaremos requieren de una alimentación precisamente de 5 volts, así que tomaremos dicha
alimentación desde este pin.

Los 16 pins restantes, llamados P0-P15, quedan libres para trabajar.

1.3. Test de conexiones


Demos un primer paso, que nos permitirá saber si hemos realizado correctamente las conexiones de
comunicación con el ordenador. Una vez colocado el cable serie y la alimentación junto a los pins
correspondientes del microcontrolador, hagamos funcionar el editor del Basic Stamp. En Windows tendrá
la apariencia que se muestra en la figura.

Este editor consiste en una interfaz de texto que nos permitirá introducir el código en P-Basic para
programar el microcontrolador. En el tema siguiente comenzaremos a estudiar algunos aspectos de este
lenguaje. De momento, nos centraremos en las generalidades sobre el funcionamiento del editor, y la
comunicación con el Basic Stamp. En la parte superior del editor hay un menú que nos permite realizar
diferentes operaciones: abrir un archivo de código (estos archivos tienen la extensión .bs2), salvarlo,
editarlo, etc. Hay, sin embargo, algunas operaciones especiales que cabe mencionar: En la opción del
menu "Edit", elijamos la opción "Preferences". Aparecerá una pantalla en la cual detallaremos algunos
aspectos del funcionamiento del editor. En la lengüeta "Editor operation"
de dicha pantalla, se
encuentran los parámetros de conexión con el microcontrolador. Generalmente mantendremos los valores
por defecto, sin embargo, en la opción titulada "Default COM Port", o puerto COM (esta es otra forma de
llamar al puerto serie) por defecto, elegiremos el puerto al cual está conectado el Basic Stamp [alta] [baja].
Es posible que algún ordenador tenga más de un puerto serie; en este caso, habremos de elegir el puerto
correspondiente. La nomenclatura de dichos puertos es COM1, COM2, ... COMn, donde 'n' es el número
de puertos serie del ordenador.

Si hemos conectado entre sí los conductos DSR y RTS de nuestro cable serie, podemos utilizar la opción
AUTO, que permite detectar automáticamente el puerto al cual está conectado el microcontrolador.
Pulsemos el botón "OK" o "Aceptar" de esta pantalla, y procedamos a revisar si el editor es capaz de
comunicarse con el Basic Stamp. En la opción del menú "Run", elegimos la opción "Identify". Esta opción
nos responderá con un mensaje satisfactorio, si es que se ha logrado identificar al microcontrolador, o
bien con un mensaje de error, donde nos indica que no ha podido comunicarse. Las causas de error más
comunes son: el cable serie está mal conectado, la alimentación está mal conectada o la batería está
descargada, o bien no hemos elegido el puerto serie adecuado.

2. Circuitos y programación del Basic Stamp, circuitos básicos

Podemos decir que el trabajo con microcontroladores se divide en tres grandes rubros: la creación de
circuitos, utilizando los componentes eléctricos, la programación del microcontrolador para dar
funcionalidad a dicho circuito, y finalmente, la intercomunicación entre microcontrolador y ordenador.

Los circuitos son configuraciones físicas que nos permiten introducir señales al microcontrolador, o bien
percibir los procesos que ocurren en un nivel interno del mismo. Debemos saber que la creación de
circuitos es una tarea que cuenta con métodos y lenguajes estandarizados en forma de diagramas, que
nos permitirán leer cualquier circuito y traducirlo a una configuración física, o bien reproducir algún circuito
que hayamos ensamblado, para permitir que otros lo conozcan. Así pues, estudiemos la simbología de los
circuitos:

- Voltaje
-
-

- Tierra
-
-

- Diodo
-
-

- Resistencia
-
-

- Resistencia variable
-
-

- Condensador

Vayamos directamente a nuestro primer circuito, que habremos de ensamblar en el protoboard (figura):

Este circuito nos permite conectar un LED a uno de los pins del microcontrolador. Para comprender este
esquema y traducirlo a una configuración física, comencemos por examinar lo que hay en los extremos
del mismo. En la parte superior, tenemos una alimentación de 5 volts, que provendrá del Basic Stamp.
Tomemos en cuenta que, además de haber un pin del Basic Stamp que ya nos da esta alimentación,
cualquier otro pin puede controlarse internamente para generar dicha señal de forma intermitente. Es muy
importante no utilizar voltajes superiores, ya que podríamos quemar el microcontrolador. En el extremo
inferior del diagrama, tenemos la conexión a tierra. Recordemos que, para el funcionamiento de cualquier
circuito, es necesario que exista voltaje y tierra, lo cual asegura un flujo de electrones a través de él. En la
parte central del circuito observemos dos elementos: una resistencia de 10 K (abreviación de Kilo ohms) y
un diodo (LED). Así pues, tenemos que uno de los terminales de la resistencia se conectará en un orificio
contiguo a algún pin del Basic Stamp (tomemos el pin 8, por ejemplo, que es el que está en la esquina
inferior derecha), y el otro se llevará a otra línea. En esta misma línea se conectará un terminal del LED, y
su otro terminal se llevará a una línea en la que exista tierra. El circuito queda montado tal como se

muestra en la fotografía y el vídeo [alta] [baja].

Ahora queremos dar funcionalidad a este circuito, y lograr que el microcontrolador controle el LED,
haciendo que éste se encienda y se apague de forma intermitente. Es lógico que el circuito por sí mismo
no basta, hay que escribir un programa.

De la misma manera que tenemos componentes y estructuras básicas para trabajar con circuitos, también
tenemos comandos y estructuras para escribir programas en P-Basic, el lenguaje de programación del
Basic Stamp.

El lenguaje P-Basic tiene, como todos los lenguajes de programación, la capacidad de definir variables y
constantes. Las variables son una especie de "casilleros" que pueden contener diferentes "objetos" a lo
largo del tiempo. En el caso de P-Basic, dichos "objetos" son valores numéricos, cuyo rango de variación
dependerá del tipo de variable. Existen 3 tipos básicos: BIT (0 y 1), BYTE (desde 0 hasta 255), y WORD
(2 bytes, desde 0 hasta 65,535). Conforme vayamos avanzando, iremos mirando ejemplos de cómo
declarar estas variables, y cuándo conviene usar un tipo u otro.

Las constantes, por su parte, son valores fijos que se definen desde el inicio de un programa. También
pueden ser de tipo BIT, BYTE o WORD.

La estructura de los programas escritos en P-Basic es secuencial, es decir, los comandos se van
ejecutando desde el inicio del programa hasta el final, uno a uno. Veremos, sin embargo, que a través de
ciertas instrucciones, podemos modificar el flujo de la ejecución del programa, realizando bucles o
saltando de un punto del programa a otro. Los diferentes puntos de un programa se pueden definir con
nombres que llamaremos "etiquetas". Al hacer una referencia a una etiqueta, saltaremos al punto del
programa marcado con dicha etiqueta

2.1. Comandos de P-Basic

A continuación hacemos una selección de algunos de los comandos más utilizados en P-Basic,
clasificados según su función. Asumimos aquí que partimos desde nociones básicas sobre lo que es
programación. Asimismo, evitamos hacer una revisión exhaustiva del lenguaje, ya que para ello están los
manuales de Parallax, que se pueden descargar gratuitamente desde su página web.
http://www.parallax.com/
Referencia de comandos:

- Estructuras de decisión y control de flujo:


IF ... THEN : evalúa una condición, que resultará ser verdadera o falsa. Si el resultado es verdadero,
saltará a la etiqueta indicada.
GOTO : salta directamente a la etiqueta indicada.

- Estructuras para crear bucles:


FOR ... NEXT : Establece un bucle que se repite un número determinado de veces.

- Entradas y salidas digitales:


INPUT : Permite configurar un pin del Basic Stamp como entrada
OUTPUT : Permite configurar un pin del Basic Stamp como salida
LOW : Pone un voltaje de 0 volts en un pin
HIGH : Pone un voltaje de 5 volts en un pin

- Entradas y salidas analógicas:


PWM : Coloca un voltaje que puede variar entre 0 y 5 volts en un pin de salida
RCTIME : Lee un voltaje variable en un pin de entrada

2.1. Comandos de P-Basic

- Comunicación a través del puerto serie:


SERIN : Recibe un caracter o caracteres a través de la entrada serial del Basic Stamp
SEROUT : Envía un caracter o caracteres a través de la salida serial del Basic Stamp

- Tiempo:
PAUSE : Hace una pausa, expresada en milisegundos

Depuración de errores y trazado de variables:


DEBUG : Permite depurar un programa, observando los valores que van tomando las variables en un
punto determinado de la ejecución.

Después de esta breve introducción al lenguaje P-Basic, procedamos a escribir diferentes programas que
activarán nuestro primer circuito. Recordemos que hay un LED conectado al pin8 del microcontrolador.
Consideremos este primer programa:

inicio:
high 8
goto inicio

Examinémoslo línea por línea: en primer lugar, estamos definiendo una etiqueta, llamada inicio.
Observemos que hace falta escribir dos puntos después de la etiqueta cuando ésta se define. La
siguiente instrucción, high 8, coloca un voltaje de 5 volts en el pin 8, que es justamente donde está
conectado el LED. Finalmente, tenemos goto inicio: esto significa que estamos estableciendo un bucle
infinito, y que por lo tanto los 5 volts serán constantes

Para introducir este programa en el microcontrolador, hay que seguir estos pasos:

1. Para revisar si el código está escrito correctamente, elegiremos del menú "Run" la opción "Check
Syntax". El editor del Basic Stamp nos responderá con un mensaje satisfactorio, si es que no se han
encontrado errores de sintaxis, o bien nos indicará la ubicación del error.
2. En el mismo menú "Run", elegir la opción "Run". Este proceso introduce el código en el Basic Stamp;
este código se queda allí almacenado hasta que introduzcamos un programa nuevo.

Sigamos estos pasos, y observemos cómo el LED se enciende de inmediato. Antes de continuar
introduciendo nuevos programas para este circuito, hagamos un experimento: primeramente, quitemos la
pila para evitar cualquier problema. Substituyamos la resistencia de 10 k por una de nuestras resistencias
de 220 ohms. Una vez hecho esto, volvamos a colocar la pila. ¿Que sucede? El LED es notoriamente
mas brillante. Podemos observar así que fluye mas voltaje a través del circuito, ya que la resistencia es
menor. El brillo del LED es proporcional al voltaje.

Ahora, queremos que el LED titile. Debemos encenderlo y apagarlo. Consideremos entonces este
programa:

inicio:
high 8
low 8
goto inicio

Al introducir este programa en el microcontrolador, veremos que el LED se enciende pero no titila, a pesar
de que hemos colocado intermitentemente voltajes de 5 y 0 volts (high y low, respectivamente) ¿Por qué
no titila? La respuesta es sencilla: Las instrucciones se ejecutan tan rápidamente, que nuestro ojo no
alcanza a apreciar que el LED efectivamente titila, pero a una velocidad muy alta. Modifiquemos entonces
el programa de esta manera:

tiempo con 500

inicio:
high 8
pause tiempo
low 8
pause tiempo
goto inicio

Aquí estamos definiendo una constante, llamada "tiempo", cuyo valor es de 500. Esta constante la
utilizamos en la instrucción "pause", que nos permite introducir un retraso en la ejecución del código.
Estos retrasos se miden en milisegundos, así que tendremos medio segundo de pausa cada vez.

Hagamos un último ejercicio usando este mismo circuito. Supongamos que queremos hacer titilar el LED
10 veces solamente, y después apagarlo. Podríamos hacer los siguiente:

i var byte
tiempo con 500

inicio:
for i = 1 to 10
high 8
pause tiempo
low 8
pause tiempo
next
fin:
low 8
goto fin

Analicemos: estamos definiendo "i", una variable de tipo byte (recordemos: número de 0 a 255), y una
constante. Después de la etiqueta inicio, estamos generando un bucle que se repite 10 veces mediante la
instrucción "for i = 1 to 10", donde i es la variable que lleva el conteo de bucle. Se ejecutan entonces todas
las instrucciones que se encuentran enseguida, hasta que la instrucción "next" hace que el bucle se
repita, incrementando en 1 la variable "i". Cuando i vale 11, entonces salimos del bucle, y nos
encontramos con la etiqueta "fin", que está justo después del final del bucle. Aquí establecemos un bucle
infinito, en el que lo único que hacemos es poner 0 volts en el pin 8.

2.2. Función del pulsador

Modifiquemos ahora nuestro circuito, introduciendo un pulsador. Este circuito nos servirá para aprender
no solamente a generar salidas de voltaje, sino a revisar la señal que hay en alguna entrada. Observemos

el siguiente circuito . Tenemos aquí un interruptor cuyas


terminales van a tierra por una parte, y por otra a un pin del microcontrolador. En el otro extremo, una
resistencia de 10 k cuyas terminales van a un voltaje 5 volts y al mismo pin que el interruptor. Nos
interesa conservar el circuito del LED, ya que lo encenderemos y apagaremos mediante el interruptor.

Observemos en esta foto cómo quedaría el circuito


en el protoboard: hemos hecho una pequeña modificación. Ahora el LED está conectado en el pin 9, y el
interruptor está en el 8. Notemos también que estamos tomando la alimentación constante de 5 volts
provista por el Basic Stamp para alimentar la sección del circuito con el interruptor. Una vez colocados los
componentes en el protoboard, introduzcamos el siguiente programa:

inicio:
if in8 then enciende
low 9
goto inicio

enciende:
high 9
goto inicio

Recorramos el código línea por línea. Después de la etiqueta inicio, utilizamos un condicional, que hace la
siguiente pregunta: "¿Hay un voltaje de 5 volts en el pin 8?". La instrucción "in8" devuelve un valor de 1
(verdadero) si lo hay, y 0 (falso) si no lo hay. En el caso de que la condición se cumpla, saltamos a la
etiqueta "enciende", en la cual se colocan 5 volts en el pin 9, que es donde está conectado el LED, y de
allí volvemos al inicio. En caso contrario, colocamos 0 volts en el pin 9, y volvemos también al inicio.

Los pulsadores pueden ser de muchos tipos: hay algunos que permiten el flujo de corriente al pulsarlos, y
otros que lo hacen cuando no están pulsados. Si queremos cambiar el "sentido" de nuestro pulsador,
podemos modificar la instrucción condicional de esta forma: "if not in8 then enciende". El operador "not"
invierte el valor devuelto por "in8". De esta forma, si in8 devuelve "verdadero", tendremos "falso" y
viceversa.

Quitemos ahora todos los componentes del protoboard, ya que ensamblaremos un último circuito básico:
un circuito RC, que nos permitirá leer el valor de un sensor analógico

2.3. Circuitos RC

Los circuitos RC, o "resistencia-condensador", son precisamente combinaciones de resistencias y


capacitores que nos permiten conocer las magnitudes de los voltajes variables. Pensemos en los
capacitores como cubos que almacenan agua: un cubo se llena, y dependiendo de que tan lleno esté,
tarda más o menos tiempo en vaciarse. Los circuitos RC funcionan bajo un principio muy similar: el
capacitor se carga con voltaje hasta un cierto nivel, dependiendo del valor de la resistencia, y es
precisamente el tiempo de descarga lo que nos permitirá leer el valor de dicha resistencia. Recordemos
que nosotros definimos cierto tipo de sensores como "resistencias variables", por ejemplo los
potenciómetros o fotoceldas. En el siguiente digrama tenemos un circuito RC.

En el extremo inferior del diagrama, tenemos una resistencia variable con una de sus terminales
conectada a tierra. En el extremo superior, un condensador con una de sus terminales conectada a un
voltaje de 5 volts. Las terminales restantes, tanto del condensador como de la resistencia variable se
conectan a un mismo punto, a partir del cual hay una resistencia 220 ohms que se conecta a un pin del
Basic Stamp. Esta resistencia es de protección, ya que cuando la resistencia variable tenga un valor de
cero, el voltaje que llegará al microcontrolador será de 5 volts. Nos interesa estar siempre un poco por
debajo de este límite máximo. Si elegimos el pin 8 como el pin de conexión con el Basic Stamp, nuestro

circuito quedará tal como se muestra en la foto y el


vídeo [alta] [baja]. Aquí hemos utilizado una fotocelda; sin embargo se puede sustituir directamente por
cualquier otro sensor resistivo.

Ahora escribamos el siguiente programa, que nos permitirá leer los valores obtenidos por la combinación
de resistencia y condensador:

valor var word

inicio:
high 8
pause 1
rctime 8,1,valor
debug ? valor
goto inicio

Revisemos el programa: en primer lugar, definimos una variable llamada "valor" de tipo word, que
contendrá el resultado del sensor. Recordemos que los valores de tipo word van desde 0 hasta 65,535.
Por lo tanto, podemos decir que la resolución del sensor será de 65,535; esto significa que, al menos
potencialmente, nuestra resistencia variable podrá tomar 65,535 valor distintos. Después de la etiqueta
"inicio", lo primero es descargar totalmente el condensador. Imaginemos nuevamente a un condensador
como si fuera un cubo de agua. Si queremos medir de forma confiable el tiempo que tarda en vaciarse,
antes de llenarlo por primera vez tenemos que asegurarnos de que no hay un residuo de agua que haya
quedado dentro. De forma similar, antes de cargar el condensador, nos interesa que se encuentre
totalmente libre de carga; de esta forma nuestra lectura será fiable. Esto lo logramos colocando 5 volts en
el pin 8 y haciendo una pausa de 1 milisegundo. Este tiempo es más que suficiente, ya que los
condensadores se cargan y descargan a velocidades medibles en microsegundos.

Una vez que el condensador se descarga, éste se vuelve a cargar con un voltaje proporcional al valor de
la resistencia variable. Utilizamos la instrucción "rctime", que nos permite medir el tiempo de descarga del
condensador. Esta instrucción tiene los siguientes parámetros: el número de pin (8), el siguiente valor es
el estado (puede ser 0 o 1). En este caso utilizamos un 1, ya que nos interesa medir el tiempo de
descarga del circuito. Un 0 mediría el tiempo que tarda en cargarse.) y por último la variable en la que
será almacenado el valor del sensor, en este caso la variable "valor". La siguiente instrucción, "debug",
nos permite mirar desde el editor los valores que la variable "valor" va tomando. La instrucción debug
permite la utilización del modificador "?", que indica al editor del Basic Stamp que ha de desplegar el
nombre de la variable, seguido de su valor. Una vez que introducimos este programa, en el editor
aparecerá una ventana de depuración ,
donde podremos ir observando los valores [alta] [baja] que va tomando la variable. Estos valores irán
variando en relación directa con la manipulación física que hagamos del sensor.

3. El protocolo serie, comunicación del Basic Stamp con Eyesweb

Después de haber conectado diferentes tipos de sensores al microcontrolador, llega el momento de


plantearnos la comunicación de los valores obtenidos de dichos sensores al ordenador. Tal como ya
habíamos mencionado, el Basic Stamp se comunica con el ordenador a través del puerto serie.
Cualquiera de los pins del microcontrolador puede servir como entrada o salida de datos seriales. El
protocolo serie tiene diferentes características que definen la forma en la que éste se configura y
transmite. Aquí las analizaremos:

- Baud rate: Indica la velocidad con que los datos se transfieren. Esta velocidad se mide en "bauds", que
se traduce como "número de símbolos, o estados únicos del canal de comunicación por segundo"
(definición tomada del Free Online Dictionary of Computing). http://wombat.doc.ic.ac.uk/foldoc/ Existen
velocidades estándar, que en el caso del Basic Stamp van desde 300 hasta 9600 bauds.

- Data bits: Número de bits que conforman un paquete de datos, o byte. Por lo general, utilizaremos 8 bits,
aunque en ciertos casos la comunicación requerirá de 7 bits.
- Stop bits: Bit extra, con valor de "1", que indica la terminación de un paquete transmitido a través de la
vía de comunicación serial.
- Parity: Bit extra, utilizado para la detección de errores dentro del protocolo serie.

En el Basic Stamp, generalmente utilizaremos los siguientes parámetros: 9600 baud rate, 8 data bits, no
stop bits, no parity.
Resultará obvio que, para comunicar el Basic Stamp con el ordenador hace falta crear un circuito

que sea capaz de enviar y/o recibir información a través del


puerto serie, y también utilizar un software en el ordenador que nos permita realizar esta tarea.
Comencemos por crear el circuito. Utilizaremos el circuito del interruptor que ensamblamos en el tema
anterior, conectando dicho componente al pin8, tal como se muestra en la foto .

Ahora, escribiremos el siguiente programa para


hacer que, cada vez que activamos el interruptor, se envíe un carácter al ordenador:

pin con 16
baud con 16468

inicio:
if in8 then mensaje
goto inicio

mensaje:
serout pin,baud,["x"]
goto inicio

Analicemos el código: en la primera línea estamos definiendo una constante, llamada "pin". Esta
constante la utilizaremos para definir el número de pin por el cual saldrá el mensaje serial. Recordemos
que el Basic Stamp tiene pins que van desde el 0 hasta el 15. Cuando utilizamos el pin 16 para
comunicación serial, estamos especificando que usaremos el conducto que ya está conectado por
defecto. El mismo cable serie que hemos utilizado para programar el microcontrolador nos servirá, sin
necesidad de mover las conexiones, para realizar el intercambio de mensajes. Definimos también otra
constante, llamada "baud", que nos indica los parámetros de la comunicación serial. Este valor proviene
de unas tablas que podemos encontrar en el manual del Basic Stamp. El valor 16468 equivale a decir que
usaremos una velocidad de 9600 bauds, 8 bits de datos, sin bit de paridad e invertido. Este último
parámetro indica que estamos usando el pin 16 para comunicación serial. Siempre que se usa este pin,
los datos se invierten.

Tenemos nuestra primera etiqueta: "inicio". Aquí estamos revisando, mediante la instrucción in8, si es que
hay alguna señal de voltaje en el pin número 8, que es donde tenemos conectado el interruptor. De ser
así, saltaremos a la etiqueta "mensaje", en la cual estamos enviando un caracter a través del puerto serie
mediante la instrucción "serout". Esta instrucción tiene tres parámetros: el pin que se utilizará para enviar
el caracter, el "baud mode", y el caracter a enviar. Los dos primeros parámetros los hemos definido a
través de sus respectivas constantes, el tercero se especifica con la sintaxis de paréntesis cuadrados y
comillas dobles: ["x"], significa que enviaremos un caracter que corresponde a una "x". Así pues, tenemos
un circuito en el cual hay un pulsador que, al ser activado, envía una "x" al ordenador a través del puerto
serie

Nuestro programa está listo para cargarse en el Basic Stamp, pero ahora tenemos que resolver la
cuestión de cómo leer este caracter. El software a elegir depende principalmente de lo que queramos
hacer con las señales provenientes del microcontrolador: mostrar un gráfico o una animación, reproducir
un sonido... existe una gran variedad de aplicaciones multimedia que pueden leer el protocolo serie. Por
ejemplo:

- Macromedia Director: http://www.macromedia.com/ a través de un Xtra o extensión, llamado commXtra,


http://www.directxtras.com/main.asp?UUID=1484112& podemos tener acceso al puerto serie desde este
popular entorno de desarrollo.

- PD, http://www.seeq.com/popupwrapper.jsp?referrer=&domain=pure-data.org MAX:


http://www.cycling74.com/index.html Estos dos entornos de programación visual ya cuentan con objetos
que pueden leer el puerto serie. Estas dos herramientas se adaptan especialmente bien a la utilización de
sonido, aunque no se limitan a ello.

- Processing: http://processing.org/ Esta nueva herramienta, que permite escribir programas en un


lenguaje similar a Java, cuenta también con métodos de lectura del puerto serie. Processing está
especialmente dirigido para la creación de gráficos algorítmicos, con diferentes niveles de interactividad.

- Eyesweb: http://www.eyesweb.org/ Esta herramienta, dirigida específicamente a la manipulación de


imagen y video en tiempo real, cuenta con objetos para comunicarse con el puerto serie. Usaremos esta
aplicación por diferentes motivos: se trata de una aplicación gratuita, desarrollada por la Universidad de
Génova. Esta aplicación, junto con manuales, documentación y ejemplos, puede bajarse de Internet. Se
trata, además, de una aplicación que en un tema posterior nos permitirá hablar sobre la utilización de la
cámara como sensor

4. Una breve introducción a Eyesweb

Eyesweb es un entorno de programación visual que funciona en Windows, dedicado al desarrollo de


aplicaciones multimedia en tiempo real. Está especialmente dirigido al análisis de imágenes, y del
contenido expresivo del movimiento. Es una plataforma abierta capaz de interactuar con diferentes
puertos de comunicación: MIDI, TCP/IP (lo cual nos permite intercomunicar dos o más ordenadores
conectados a una red) y, por supuesto, el puerto serie. Actualmente hay una gran cantidad de artistas e
investigadores interesados específicamente en la captura de movimiento a través de cámaras que están
utilizando este software.

En cuanto al entorno de programación, se trata de un sistema visual e intuitivo, en el que a través de la


interconexión de módulos se logran diferentes configuraciones ejecutables, que realizan funciones
complejas orientadas al multimedia. Los principales elementos que componen a Eyesweb son:
- Manager (Administrador): Este componente mantiene la información de las interconexiones entre los
bloques, y verifica que sean correctas. Verifica que el intercambio de información entre dos ligas sea
homogéneo. También se encarga de manejar la información sobre el número de entradas y salidas de
cada bloque.

- Scheduler (Temporizador): Este componente regula el intercambio de información entre bloques en


tiempo de ejecución. Existen dos tipos de bloques: activos, que generan datos nuevos, y pasivos, que se
activan solamente cuando tienen nuevos datos que procesar.

- Blocks (Bloques): Los bloques son módulos de software que generan o procesan datos. EyesWeb tiene
un conjunto de bloques predefinidos, clasificados en librerías. Sin embargo, el sistema puede extenderse
con nuevos bloques creados por el usuario.

- Datatypes (Tipos de datos): Los tipos de datos son las diferentes cualidades de la información
intercambiada entre bloques.

Veamos

un pequeño ejemplo de un programa (demo5 en carpeta programas eyesweb, abrir con eyesweb) escrito
con los bloques de Eyesweb. Ya que estamos experimentando con el intercambio de mensajes con el
microcontrolador, veamos este sencillo programa, que nos permite leer el puerto serie. Tenemos un
módulo que permite leer los datos del puerto serie, y un pequeño campo en el cual se desplegarán estos
datos. El primer módulo lo hemos tomado de la librería "Input", subcarpeta "Serial", que se encuentra en
la parte izquierda de la pantalla. Lo hemos incluido dentro del área del programa (el área central de la
pantalla) simplemente arrastrándolo hasta allí. Este módulo, "serial input" tiene una salida; si pasamos el
cursor sobre dicha salida, en la parte inferior de la pantalla veremos que se trata de un tipo de datos
Math.scalar, o sea, un valor numérico escalar. Por lo tanto, si queremos observar los datos que entran por
el puerto serie, tenemos que elegir un campo de despliegue para este tipo de datos. El campo de
despliegue de números escalares lo hemos tomado de la librería "Output", subcarpeta "Math", subcarpeta
"Scalar", y lo hemos arrastrado hasta el área del programa. Finalmente, los dos módulos se unen creando
un conector desde la salida del módulo "serial input" hasta la entrada del módulo "display". Ésto se logra
arrastrando el ratón desde un punto hasta otro. Algunos módulos tienen parámetros internos que pueden
ser modificados. En el caso de "serial input", tenemos que especificar los parámetros de comunicación
serial. Si hacemos doble click sobre dicho módulo, aparecerá una pequeña pantalla en la cual podemos
especificar estos valores. Los parámetros que nos interesan para comunicarnos con el Basic Stamp se
expresan de la siguiente manera: 9600,n,8,1, es decir: baud rate de 9600, sin paridad, 8 bits de datos y 1
stop bit.

Especificaremos además el número de puerto serie al que está conectado el microcontrolador: 1 = COM1,
2 = COM2, etc.

Pues bien, tenemos ahora un emisor de mensajes seriales, el microcontrolador con el pulsador
conectado, y un receptor, Eyesweb con un programa para leer el puerto serie.

Una vez programado el Stamp y listo el patch de Eyesweb, hay que desconectar el cable "ATN" (el
tercero de arriba hacia abajo en el extremo superior izquierdo del Stamp) para que la
comunicación pueda darse.
-Obviamente, si hace falta reprogramar el Stamp, hay que reconectar este cable

Conectemos de esta manera el microcontrolador y activemos el programa de Eyesweb utilizando el botón

"Lock & start", ubicado en la barra de botones de la parte superior de la pantalla. Deberíamos
observar que, en el campo de despliegue aparece el número 120. ¿Por qué? Es precisamente este
número el correspondiente a la letra "x" en la codificación ASCII (American Standard Code for Information
Interchange). Esta codificación, convertida en un estándar dentro de lo computación, asigna números a
todos los símbolos y caracteres alfanuméricos. Una "A" mayúscula, por ejemplo, tiene un código ASCII de
65, mientras que la "a" minúscula tiene el código 97. Vemos así que, lo que realmente se transmite a
través del cable serie son números que van desde 0 a 255 (8 bits) y que corresponden a caracteres.

Modifiquemos el programa del pulsador, para obtener un código "120" (x) cuando el pulsador esté
activado, y un código de "121" (y) cuando esté desactivado:

pin con 16
baud con 16468

inicio:
if in8 then mensaje
serout pin,baud, ["y"]
goto inicio

mensaje:
serout pin,baud,["x"]
goto inicio
Ensamblemos ahora nuestro circuito RC, utilizando una

fotocelda o un potenciómetro conectados al pin 9.


Leeremos ahora valores provenientes de un sensor analógico, y los aplicaremos al siguiente programa
(demo6, en carpeta programaseyesweb) de Eyesweb. Este programa tiene los siguientes módulos.
Inicialmente, el módulo "bitmap reader", que lee una imagen tipo bitmap (extensión .bmp). Al hacer doble
click sobre este módulo, podremos elegir la imagen a utilizar. Esta imagen pasa a través de un operador
de imagen, llamado "rotate" (se encuentra en la librería "Imaging", subcarpeta "Operations") que, como su
nombre lo indica, permite rotar una imagen. Finalmente, la salida de esta operación llega a un módulo que
despliega la imagen (librería "Imaging", subcarpeta "Output"). Observemos que el módulo "rotate" tiene
además una entrada que permite especificar el ángulo de rotación en grados

4.1. Ejemplo: control del ángulo de rotación de una imagen desde el


microcontrolador

Utilizaremos el sensor para controlar el ángulo de rotación, y para ello escribiremos el siguiente programa
en P-Basic:

pin con 16
baud con 16468
sensor var word

inicio:
high 9
pause 1
rctime 9,1,sensor
if sensor <= 300 then grados1
if sensor >400 and sensor <= 1000 then grados2
if sensor >1200 then grados3
goto inicio

grados1:
serout pin,baud,[0]
goto inicio

grados2:
serout pin,baud,[30]
goto inicio

grados3:
serout pin,baud,[60]
goto inicio

Analicemos: en las primeras líneas, hasta el comando "rctime", estamos leyendo el sensor tal y como
habíamos aprendido en el tema anterior. En las siguientes líneas, enviaremos distintos ángulos
dependiendo del valor del sensor: si el valor es menor que 300, entonces enviamos 0 grados (etiqueta
"grados1"). Si es mayor que 400 y menor que 1000, enviamos 30 grados. Notemos aquí la utilización del
operador "and", que nos permite unir varias condiciones en una sola evaluación. Si el valor del sensor es
mayor que 1200, enviamos 60 grados. Estos valores son totalmente arbitrarios, lo cual quiere decir que
cada quien podrá modificarlos según su conveniencia. Se podrían enviar mas de 3 valores de ángulos,
por ejemplo. Conectemos ahora el microcontrolador, carguemos el programa y activemos por otra parte el
programa de Eyesweb. La interacción con el sensor nos dará diferentes rotaciones de la imagen.

Hemos explorado aquí algunas formas básicas de intercomunicación entre sensores y elementos
multimedia a través de microcontroladores y software especializado. A partir de aquí se abre un camino
extenso, en el cual podremos experimentar con diferentes configuraciones, conectar varios sensores a la
vez, montarlos en diferentes interfaces y, por otra parte, realizar manipulaciones audiovisuales cada vez
mas complejas

Como conclusión a esta sección, se ofrece un programa (esta en carpeta programas eyesweb) en P-Basic
-------------

'Este programa mide hasta 15 potenciometros u otros sensores

'resistivos, y envía datos de controladores MIDI de 7 bits.

'Se puede modificar facilmente para enviar mensajes de nota o

'pitch-bend. Los valores no están normalizados para escala completa,

'esto se debe hacer en el programa que recibe los mensajes, por ejemplo

'Eyesweb, tomando en cuenta las particularidades del sensor utilizado.

'

'Aquí está el circuito de conexión para la salida MIDI:

'
'

' vista posterior del conector MIDI out

' ___ ___

' +5 volts / l_l \

' | / \

' | NC l o1 3o l NC

' | \ o4 2 5o /

' |__/\/\/______\_| o |_/___/\/\/_____> al pin de datos de Basic Stamp

' 220 ohms \___|___/ 220 ohms

' |

' _l_

' ///

' tierra

'

'

'constantes, no modificar

midibaudmode con 32780 '31.25kb, 8n1, non-inverted, open collector

'MIDI status bytes:

controller con %10110000 + midichannel

noteon con %10010000 + midichannel

pitchbend con %11100000 + midichannel

'declaracion de variables

valor var word 'almacena el valor de 16 bits leido del sensor

pin var nib 'pin/sensor que se está leyendo actualmente


statusbyte var byte 'MIDI status; controller, noteon, o pitchbend

data1 var byte 'primer byte de datos MIDI, por ejemplo numero de controlador o nota

data2 var byte 'segundo byte de datos MIDI, por ejemplo valor o velocidad de la nota

'configuracion del usuario - modificar según las necesidades

'los pins no utilizados se convierten en salidas

DIRS = %1111111111111111 'todos salidas

OUTS = %0000000000000000 'todos con 0 volts

midichannel con 1 'canal MIDI de transmisión

midioutpin con 0 'pin conectado a la salida MIDI.

sensor1 con 14 'primer pin con un sensor conectado

sensor2 con 15 'ultimo pin con sensor conectado

inicio:

for pin = sensor1 to sensor2

'lee el valor del sensor

high pin

pause 1

rctime pin, 1, valor

valor = valor >> 1 'quitar el bit menos significativo

'enviar los 7 bits mas significativos como valores de controlador continuo

statusbyte = controller 'mensaje de tipo controlador

data1 = pin 'numero de controlador

data2 = value.highbyte
serout midioutpin, midibaudmode, [statusbyte, data1, data2]

next

goto inicio

capaz de generar MIDI desde el microcontrolador. Este programa, totalmente comentado para su
comprensión y modificación, lee el valor de un sensor o sensores, y los convierte a mensajes MIDI. Como
habíamos mencionado, el MIDI es una forma de comunicación serial, por lo tanto podemos utilizarlo junto
con el microcontrolador, basta especificar algunos parámetros particulares sobre la velocidad de
transmisión del MIDI (baud rate) y orden de los bytes de datos. El cable MIDI, cuyo diagrama se incluye
en el código, se conectará al pin 0, y los sensores pueden conectarse desde el pin 1 hasta el 15. El
número del controlador MIDI enviado corresponderá al número de pin en el que se encuentra el sensor, y
el valor del controlador será proporcional al valor del sensor.

Por otro lado, Eyesweb tiene diferentes módulos capaces de leer MIDI; a partir de estos módulos se
puede generar sonido, manipulaciones de imagen y muchas otras cosas. Los manuales y ejemplos
pueden descargarse desde la misma página de Eyesweb

5. La cámara como sensor: Software, ejemplos y nuevas tendencias

A lo largo de este curso hemos hablado sobre interfaces físicas. Específicamente, en los último temas,
hemos visto algunas aproximaciones técnicas para la creación de interfaces físicas. Todas ellas implican
un contacto directo del interactor humano, es decir, los sensores han de ser directamente manipulados
por la persona mediante diferentes manifestaciones gestuales relacionadas con algunos objetos. La
tendencia actual, sin embargo, es convertir al propio cuerpo humano en interfaz para la introducción de
datos en el ordenador y la interacción audiovisual, sin necesidad de que el interactor manipule ninguna
clase de objeto. Actualmente se han hecho experimentos en este sentido en los cuales están involucradas
las cámaras digitales que, mediante programas especializados, son capaces de "ver" e interpretar aquello
que ven. Así pues, podemos hablar de la utilización de estas cámaras como sensores; como los "ojos" del
ordenador. A continuación haremos algunas breves consideraciones sobre técnicas de visión por
ordenador, y aprovecharemos Eyesweb, que como ya habíamos mencionado, es un entorno enfocado a
la captura y análisis del movimiento.

En general, podemos dividir las técnicas de visión por ordenador en tres grandes rubros:

-Detección de color: El flujo de imágenes captado por una cámara no es otra cosa que una secuencia de
mapas de píxeles, cada uno con un diferente valor de color. Pensemos en estos mapas como matrices de
NxM, donde N es la anchura y M la altura medida en píxeles. Por lo común, las webcams capturan a
resoluciones que son múltiplos o submúltiplos de 320x240 píxeles, aunque ésto varía según el modelo.

La detección de color está basada en el análisis en tiempo real de cada fotograma para encontrar píxeles
cuyo valor de color sea igual o cercano a un valor especificado.

-Detección de movimiento [alta] [baja]: Cada fotograma capturado por una webcam puede ser comparado
píxel a píxel, o bien con el fotograma anterior, o bien con un fotograma de referencia para detectar
movimiento.

-Detección de patrones [alta] [baja]: Este método de visión por ordenador es el más sofisticado, y el que
más procesamiento requiere. Consiste en el reconocimiento de patrones específicos por parte del
ordenador, y su ubicación en el espacio real. Existen pocas aplicaciones que logren implementar este
método satisfactoriamente. Una de ellas es ARToolkit,
http://www.hitl.washington.edu/research/shared_space/download/ una librería de funciones para
programas escritos en C++ que permite el reconocimiento de patrones rectangulares, y su ubicación en el
espacio tridimensional. ARToolkit trabaja con el concepto de "Realidad aumentada", en el cual se busca la
fusión de imágenes y entornos reales con elementos digitales. En estas imágenes

podemos ver algunos ejemplos de aplicaciones

de esta librería que, desafortunadamente, aun


requiere de un alto nivel de conocimientos en programación

para ser utilizada.

Regresemos entonces a los dos primeros métodos de visión por ordenador: estos métodos están a
nuestro alcance gracias a diferentes aplicaciones o extensiones de entornos de programación. Por
ejemplo, para Macromedia Director existe el Xtra "Track Them Colors", http://www.smoothware.com/
que permite la detección de colores y movimientos mediante sencillas funciones aplicables en Lingo, el
lenguaje propio de este entorno

Para MAX existe Jitter, uhttp://www.cycling74.com/index.html na extensa librería de objetos para


manipulación de imagen que incluyen algunos objetos para detección de color y movimiento. También
para MAX existe Cyclops, un objeto bastante flexible utilizable para estos fines. Sin embargo, es probable
que la herramienta mas sofisticada y cercana a nosotros sea precisamente Eyesweb, que cuenta con una
variada gama de módulos específicos para el trabajo con visión por ordenador.
Comencemos con un programa (demo2) simple, que posteriormente nos permitirá hacer operaciones mas
sofisticadas. Se trata de una configuración que permite la substracción de fondo a partir de un fotograma
de referencia, es decir, nos permite obtener solamente las figuras que son ajenas a un "fondo", que es
precisamente el fotograma inicial de nuestro flujo de video. Al iniciar este programa, el módulo "frame
grabber", en el extremo izquierdo, nos permite obtener imágenes provenientes de una webcam. Cuando
comienza el flujo de estas imágenes, el comando "Start" activa el módulo "Buffer", en el cual se almacena
el primer fotograma, que será el fotograma de referencia. Estos fotogramas son convertidos previamente
de color a escala de grises, gracias al proceso hecho por el módulo "color to gray". Esta conversión hará
que el procesado necesario para la substracción de fondo sea mas rápido, ya que la resolución de color
de una imagen en escala de grises es menor, y por lo tanto mas manejable, que la resolución de una
imagen a color. Después del primer fotograma, a los fotogramas sucesivos se les "restará" el fotograma
de referencia, mediante la operacion "dyadic arithmetic", de la librería "imaging". Este módulo hace una
resta de las matrices de ambos fotogramas; la imagen resultante estará compuesta exclusivamente por
los píxeles que se encuentren en el fotograma actual y no en el de referencia, es decir, por las imágenes
que han entrado en escena.

Ejecutemos este programa activando el botón "Lock & start". Es importante que al iniciar captemos
solamente el "fondo" de la escena. De esta manera, cuando nosotros entremos en el encuadre, seremos
detectados como "figuras ajenas al fondo", y por lo tanto cualquiera de nuestros movimientos podrá ser
utilizado como información significativa dentro de Eyesweb.

Veamos el siguiente ejemplo (demo 4 en carpeta programas), que parte de este programa inicial para
crear un índice de cantidad de movimiento. Mediante diferentes módulos específicos para análisis de
movimiento, se logra, a partir de la substracción de fondo, encontrar un valor que es directamente
proporcional con las figuras en movimiento captadas por la webcam. Al ejecutar este programa, veremos
por un lado las imágenes captadas por la webcam, transformadas a blanco y negro para facilitar los
cálculos, y por otro una gráfica que varía, aumentando y disminuyendo según las figuras se mueven
frente a la cámara.

Observemos que la imagen proveniente de la webcam tiene una latencia, que variará según la potencia
del ordenador. Esto significa que los cálculos realizados por Eyesweb son bastante sofisticados, y
consumen bastantes recursos del sistema. Si quisiéramos hacer una manipulación sofisticada de imagen
o sonido, es probable que un solo ordenador no sea suficiente para procesarlo todo. En este caso,
tenemos que plantearnos la posibilidad de interconectar varios ordenadores, cada uno dedicado a una
tarea específica: uno a recoger datos del entorno, y otro a manipular imágenes y/o sonido basándose en
dichos datos. Las formas de interconectar ordenadores son muchas, aquí mencionaremos dos de las mas
simples:

- MIDI: a través del intercambio de mensajes MIDI entre dos ordenadores (un receptor y un emisor)
podemos transmitir cualquier tipo de datos numéricos. Recordemos que MIDI, a pesar de ser un protocolo
dirigido al intercambio de mensajes musicales, permite de hecho el envío de diferentes valores numéricos,
independientes de su significado. Este ejemplo (demo9 en carpeta programas) envía los valores
obtenidos mediante el programa anterior a través de algún puerto MIDI de salida. Se utiliza el módulo
"linear rescale", para convertir los índices de cantidad de movimiento (que varían entre 0 y 1) a valores
MIDI (que varían entre 0 y 127). Se utiliza también el módulo "midi output", que envía un mensaje MIDI,
en este caso un mensaje tipo "Control Change", con el controlador 1, y un valor que depende del índice
de movimiento. Este programa se utilizaría para enviar valores a otro ordenador, en el cual tendríamos
que hacer funcionar este programa.(demo10 en carpeta)

- TCP/IP: Este protocolo, propio de las redes informáticas, también nos puede servir para transmitir
cualquier tipo de datos entre dos o mas ordenadores conectados a la misma red. La comunicación a
través de TCP/IP también necesita de un emisor, llamado "cliente", y un receptor, llamado "servidor". El
cliente debe enviar los datos a la dirección del servidor, que en el protocolo TCP/IP consiste en una
secuencia de 4 números cuyo rango va de 0 a 255, llamados "dirección IP", por ejemplo 127.26.0.250. Se
debe además especificar un puerto de envío, que consiste en un número que puede ir desde 1025 hasta
65,535 (los números inferiores se encuentran reservados para diferentes servicios de comunicación a
través de la red).

Para conocer la dirección IP de una máquina en la red, y el número de puerto que se puede utilizar, lo
mejor es ponerse en contacto con el administrador de la red. Para transmitir los datos de captura de
movimiento a través de la red, utilizaremos este programa (demo11) El índice de cantidad de movimiento
se transmitiría tal cual, sin necesidad de conversiones, utilizando el módulo "send to network", en el cual
hay que especificar la dirección IP y el puerto de la máquina que va a recibir el dato. Este otro programa
(demo12) deberá estar funcionando en la máquina receptora. Se utiliza el módulo "receive from network",
que deberá estar esperando información en el mismo puerto especificado en el módulo de envío.

Como ejemplo final, aprovecharemos el programa de cantidad de movimiento y retomaremos un tema que
había quedado pendiente al hablar de microcontroladores: el envío de mensajes seriales desde el
ordenador al Basic Stamp para el control de los actuadores. Haremos el siguiente programa (demo13)en
Eyesweb, que enviará un "1" a través del puerto serie si la cantidad de movimiento es mayor a 0.5, o un
"0" si es menor. Dicha comparación se hace mediante el módulo "unary operator logical", que devuelve 0
si una condición de comparación no se cumple, u otro valor si se cumple. Finalmente, convertimos este
valor resultante a un "string", o caracter alfanumérico, ya que nos interesa enviar el caracter "0", y no el
caracter cuyo código ASCII sea 0.

Por el lado del microcontrolador, conectaremos un LED (recordemos aquí el circuito

para la conexión de un LED) que se encenderá si


recibimos un "1" desde el ordenador, y se apagará si recibimos un "0". Asegurémonos que los parámetros
de envío de mensajes serie en Eyesweb sean 9600,n,8,1 (9600 bauds, no parity, 8 bits de datos, 1 stop
bit) y que el puerto de envío sea el mismo al que está conectado al Basic Stamp. En el microcontrolador,
introduzcamos el siguiente programa:

datain var byte


pin con 16
baud con $4054

inicio:
serin pin,baud, [datain]
if datain = "1" then on
if datain = "0" then off
goto inicio

ciclo:
on:
high 8
goto ciclo

off:
low 8
goto ciclo

Aquí vemos la introducción de un nuevo comando, "serin", el complemento del comando "serout". Al igual
que este último, "serin" requiere de un pin y un "baud mode", y además de una variable en la cual se
recibirán los datos, en este caso la variable tipo byte "datain". Al cargar este programa en el Basic Stamp,
tendremos un sistema configurado en el cual se enciende o se apaga un LED dependiendo de la cantidad
de movimiento detectada por una webcam

Sesión 1
1
Jameson, Frederic, "Postmodernism, or, The Cultural Logic of Late Capitalism", Post-Contemporary Interventions. Durham, NC:
Duke University Press, 1991
2
Schwarz, Hans-Peter, "Media Art History", Media Museum ZKM. Prestel, Munich, 1997
3
Paul, Christiane, "Digital Art", Thames & Hudson World of art. London, 2003
4
Matthews, Harry, Brotchie, Alastair, Ed, "OULIPO Compendium", Atlas Arkhive Six. Atlas Press, London, 1998
5
Varios, "STEIM", Folleto publicado por los veinticinco años de STEIM, Amsterdam, 1993
Sesión 2
1
Schwarz, Hans-Peter, "Media Art History", Media Museum ZKM. Prestel, Munich, 1997
2
Paul, Christiane, "Digital Art", Thames & Hudson World of art. London, 2003
3

Bowers, John, Fleischmann, Monika, Hellström, Sten-Olof, Hoch, Michael, Jää-Aro, Kai-Mikael, Kulessa, Thomas, Novak,
Jasminko, Shaw, Jeffrey, Strauss, Wolfgang, "Navigation and Devices", deliverable 6.1, eRENA, 1998

4
Eco, Umberto "Opera Aperta", Bompiani. Milano, 1995
5
Kramer, Sybille, "Spielerische Interaktion", Schone Neue Welten? Auf den Weg zu einer neuen Spielkultur, Florian Rotzer (ed.),
Munich, 1995
6
Bongers, Bert, "Physical Interfaces in the Electronic Arts: Interaction Theory and Interfacing Techniques for Real-Time
Performance", Trends in Gestural Control of Music, IRCAM, Centre Pompidou, Paris, 2000
Sesión 3
1
Jord à , Sergi, "Audio Digital y MIDI", Guía Monográfica, Anaya Multimedia. Madrid, 1997
2
O'Sullivan, Dan, "Physical Computing", New York University
1
Parallax, "Basic Stamp Programming Manual"

Anda mungkin juga menyukai