Materiales
- 2 x Motores DC (preferiblemente ventiladores de PC de 50mm aproximadamente).
- 2 x Espejos cuadrados o redondos cuyas dimensiones dependerán del tamaño de los motores.
- 1 x Láser Pointer o módulo Láser de 5mW o más.
- 1 x Arduino (para este proyecto se utilizó el Arduino UNO).
- 2 x Transistores TIP31C.
- 2 x Resistencias de 220 ohm.
- 1 x Resistencia de 100 ohm.
- Fuente de poder de 12Vdc .
- Fuente de poder de 5Vdc.
- PC con puerto USB y Mac OS X, Linux o Windows (en este caso se utilizó Mac OS X 10.6.6).
- iPhone o iPad o iPod Touch - iOS 3.1.3 o superior (también puede hacerse utilizando Android).
Software
- Processing - http://processing.org
- Arduido IDE - http://www.arduino.cc/
- Arduino Library for Processing - http://www.arduino.cc/playground/Interfacing/Processing
- oscP5 Library for Processing - http://www.sojamo.de/libraries/oscP5/
- TouchOSC y TouchOSC Editor - http://hexler.net/software/touchosc
Hardware
La primera fase consiste en hacer un montaje sencillo de los dos motores DC y el módulo Láser, para posteriormente conectarlo con el circuito correspondiente que nos permitirá mediante el Arduino controlar los motores DC utilizando PWM, tal como se puede observar en el siguiente diagrama:
![]() |
| La imagen es cortesía de: http://www.láserfx.com/Science/Science8.html |
El segundo paso es el circuito, para el cual les dejo un diagrama completo que realicé:
La resistencia del módulo Láser depende de las especificaciones técnicas del mismo, pero generalmente los Láser Pointer comerciales aceptan voltajes entre 4.5 y 5V DC a 50mA aproximadamente. Si no estás seguro, puedes medir la corriente que consume el Láser con un multímetro y calcular la resistencia. Las resistencias de los motores DC también dependen de las especificaciones técnicas de los mismos.
Programando el Arduino:
Generalmente el Arduino debe ser programado para reaccionar a cada mensaje recibido por el puerto serial. La librería Firmata nos permite un acercamiento más directo, actuando como un protocolo genérico de comunicación con el Arduino desde algún software en nuestra PC. Con esta librería, otras aplicaciones pueden controlar el Arduino directamente vía serial, sin la necesidad de hacer un programa para interpretar los datos recibidos.
Para programar el Arduino simplemente debemos abrir la aplicación Arduino y seleccionar File > Examples > Firmata > StandardFirmata posteriormente aparecerá el Sketch con el código correspondiente. El siguiente paso es cargar el código en el Arduino haciendo click en Upload
Creando el Layout de control con TouchOSC Editor:
TouchOSC Editor, nos permite crear diversos Layout de control ajustados a nuestras necesidades, en este caso crearemos uno muy simple el cual consta de dos Faders y un Toggle Button. Para crear el Layout debemos seguir los siguientes pasos:
El Layout debería quedar más o menos así, pero es totalmente variable la posición y tamaño de los botones, lo importante es que los valores de las variables estén bien definidas. En este caso presentamos la versión de iPad:
Una vez terminado, hacemos click en Sync para cargar el layout en el iPhone/iPad, abrimos la aplicación TouchOSC y seleccionamos Layout > Add, debería aparecer el nombre de la PC en Found Hosts, seleccionamos el host y se debería cargar el Layout automáticamente. Es importante que la PC y iPhone/iPad estén conectados a la misma Red, de lo contrario no se podrá cargar el Layout ni continuar con el procedimiento, en el caso que no se disponga de una red WiFi se podrá crear una red Ad-Hoc entre los dispositivos. Para finalizar, seleccionamos el Layout en la lista, presionamos Back y seleccionamos Network, donde vamos a configurar los siguientes parámetros:
Host:xxx.xxx.xxx.xxx (IP de la PC donde estará corriendo la aplicación de Processing)
Port(outgoing):8000 (puede ser modificado en el código de Processing)
Programando el Arduino:
Generalmente el Arduino debe ser programado para reaccionar a cada mensaje recibido por el puerto serial. La librería Firmata nos permite un acercamiento más directo, actuando como un protocolo genérico de comunicación con el Arduino desde algún software en nuestra PC. Con esta librería, otras aplicaciones pueden controlar el Arduino directamente vía serial, sin la necesidad de hacer un programa para interpretar los datos recibidos.
Para programar el Arduino simplemente debemos abrir la aplicación Arduino y seleccionar File > Examples > Firmata > StandardFirmata posteriormente aparecerá el Sketch con el código correspondiente. El siguiente paso es cargar el código en el Arduino haciendo click en Upload
Creando el Layout de control con TouchOSC Editor:
TouchOSC Editor, nos permite crear diversos Layout de control ajustados a nuestras necesidades, en este caso crearemos uno muy simple el cual consta de dos Faders y un Toggle Button. Para crear el Layout debemos seguir los siguientes pasos:
- Seleccionar el Layout Size dependiendo de si vamos a usar un iPhone o iPad.
- Hacer click derecho y seleccionar Fader V, se creará un Fader vertical, es importante mantener los nombres por defecto, en este caso Name:fader1 y abajo OSC:/1/fader1. En mi caso tuve problemas dejando el checkbox de auto en activo, así que recomiendo desactivarlo y escribir manualmente la ruta OSC:/1/fader1.
- Repetir para el Fader 2 pero utilizando Name:fader2 y OSC:/2/fader2.
- En el Value Range de los dos Fader colocar valores entre 0 y 255.
- Haciendo click derecho de nuevo, agregar un Toggle Button, el cual tendrá los siguientes valores Name:toggle1 y OSC:/1/toggle1, este botón se usará para activar una función que genera valores aleatorios para los motores DC. El Value Range estará entre 0 y 1 en este caso.
El Layout debería quedar más o menos así, pero es totalmente variable la posición y tamaño de los botones, lo importante es que los valores de las variables estén bien definidas. En este caso presentamos la versión de iPad:
Una vez terminado, hacemos click en Sync para cargar el layout en el iPhone/iPad, abrimos la aplicación TouchOSC y seleccionamos Layout > Add, debería aparecer el nombre de la PC en Found Hosts, seleccionamos el host y se debería cargar el Layout automáticamente. Es importante que la PC y iPhone/iPad estén conectados a la misma Red, de lo contrario no se podrá cargar el Layout ni continuar con el procedimiento, en el caso que no se disponga de una red WiFi se podrá crear una red Ad-Hoc entre los dispositivos. Para finalizar, seleccionamos el Layout en la lista, presionamos Back y seleccionamos Network, donde vamos a configurar los siguientes parámetros:
Host:xxx.xxx.xxx.xxx (IP de la PC donde estará corriendo la aplicación de Processing)
Port(outgoing):8000 (puede ser modificado en el código de Processing)
Port(incoming):9000
Listo! Ya tenemos TouchOSC configurado para ser conectado con Processing sólo hace falta seleccionar Done para entrar en el Layout y empezar a enviar los datos a Processing.
Listo! Ya tenemos TouchOSC configurado para ser conectado con Processing sólo hace falta seleccionar Done para entrar en el Layout y empezar a enviar los datos a Processing.
Conectando Arduino con TouchOSC utilizando Processing:
Processing actuará como un intermediario entre TouchOSC y la plataforma Arduino. Un vez instalado Processing, debemos instalar las librerías correspondientes, en este caso “oscP5” para que Processing reciba los paquetes de OSC vía UDP y la librería “Arduino” para poder establecer la comunicación entre Processing y el Arduino utilizando Firmata. Las librerías, que podemos bajar de los URL indicados anteriormente, deberán ser instaladas en las siguientes rutas, en este ejemplo utilizamos Mac OS X:
~/Documents/Processing/libraries/oscP5
~/Documents/Processing/libraries/arduino
Una vez instaladas las librerías, crearemos un nuevo “Sketch” para la aplicación. Les dejo la primera versión del código:
Copiamos el código en la ventana y hacemos click en Run, ahora vamos a la aplicación TouchOSC seleccionamos el Layout correspondiente y deberíamos poder ver en la consola de Processing como varían los valores entre 0 y 255. Esos valores estarían reflejados en los puertos 10 y 11 de la placa Arduino, la cual a su vez estará conectada con el circuito que controla los motores DC y el módulo Láser. Les dejo el video del proyecto en funcionamiento:
Espero que este tutorial les haya servido de algo, bien sea como referencia o para implementación del mismo. Adicionalmente les dejo algunos tutoriales interesantes los cuales hicieron posible la realización de este proyecto:
Saludos!
Processing actuará como un intermediario entre TouchOSC y la plataforma Arduino. Un vez instalado Processing, debemos instalar las librerías correspondientes, en este caso “oscP5” para que Processing reciba los paquetes de OSC vía UDP y la librería “Arduino” para poder establecer la comunicación entre Processing y el Arduino utilizando Firmata. Las librerías, que podemos bajar de los URL indicados anteriormente, deberán ser instaladas en las siguientes rutas, en este ejemplo utilizamos Mac OS X:
~/Documents/Processing/libraries/oscP5
~/Documents/Processing/libraries/arduino
Una vez instaladas las librerías, crearemos un nuevo “Sketch” para la aplicación. Les dejo la primera versión del código:
// Laser Spirograph @ Pablo Gerbasi 2011 V 1.0
//////////////////////////////////////////////////////
// import oscP5 libraries and Arduino serial libraries
import oscP5.*;
import netP5.*;
import processing.serial.*;
import cc.arduino.*;
// Make a new Arduino object
Arduino arduino;
// Make a new oscP5 object
OscP5 oscP5;
// Setup the value for the Faders and Buttons
float fader1 = 0.0f;
float fader2 = 0.0f;
float toggle1 = 0.0f;
// Run the setup loop
void setup() {
// start oscP5, listening for incoming messages at port 8000
// if your outgoing port on TouchOSC is not 8000, edit it here
oscP5 = new OscP5(this,8000);
// establish a serial connection with the Arduino at 57600 baud
// this will use the first listing in the serial list, change if necessary
arduino = new Arduino(this,Serial.list()[0],57600);
}
// when OSC packets are received
void oscEvent(OscMessage theOscMessage) {
// set the current address to the control name
String addr = theOscMessage.addrPattern();
// get the value of the control
float val = theOscMessage.get(0).floatValue();
// if statements to assign values of OSC controls
if(addr.equals("/1/fader1")) { fader1 = val; }
else if(addr.equals("/2/fader2")) { fader2 = val; }
else if(addr.equals("/1/toggle1")) { toggle1 = val; }
}
// the program loop
void draw() {
// Random function to generate Random Laser Patterns
while (toggle1 == 1) {
arduino.analogWrite(11, (int) random(0,255));
arduino.analogWrite(10, (int) random(0,255));
delay(1000); }
// write the int value of Fader to pin 11 on Arduino
arduino.analogWrite(11, (int) fader1);
// write the int value of Fader button to pin 10 on Arduino
arduino.analogWrite(10, (int) fader2);
// print the status of Faders in serial debugger
print(fader1);
print(" ");
print(fader2);
println(" ");
}
Copiamos el código en la ventana y hacemos click en Run, ahora vamos a la aplicación TouchOSC seleccionamos el Layout correspondiente y deberíamos poder ver en la consola de Processing como varían los valores entre 0 y 255. Esos valores estarían reflejados en los puertos 10 y 11 de la placa Arduino, la cual a su vez estará conectada con el circuito que controla los motores DC y el módulo Láser. Les dejo el video del proyecto en funcionamiento:
Espero que este tutorial les haya servido de algo, bien sea como referencia o para implementación del mismo. Adicionalmente les dejo algunos tutoriales interesantes los cuales hicieron posible la realización de este proyecto:
- http://www.sparkfun.com/tutorials/152
- http://cbrobotics.com/2010/09/interfacing-arduino-and-touchosc/
Saludos!


