Taller de Audio del Centro Multimedeia del CNA

Curso iniciación al Arduino


El circuito integrado Arduino es una de las herramientas electrónicas más usadas actualmente en el ámbito del arte electrónico por su potencial creativo y de implementación de elementos electrónicos físicos. Los alumnos aprenderán y aplicarán los conocimientos básicos que les permitan desarrollar proyectos con Arduino. Dirigido al público en general y músicos interesados en las interfases electrónicas para la creación artística. Inclinación al código y al DIY (Hazlo tú mismo).

////////////////////////////////////////////////////

1- Cómo controlar un LED con un botón

Para este ejercicio necesitamos un push button, un LED, un protoboard, y alambre calibre 22. El propósito del ejercicio es conectar un LED al Arduino y poder encenderlo y apagarlo con el push button.

Primero hay que conectar el protoboard a los 5 volts y la tierra del Arduino como se muestra en la figura 1. También conectamos el botón al protoboard: una pata a 5 volts, la otra al pin digital 12 del Arduino y a tierra a través de una resistencia de 10 kiloohms. Después conectamos el LED: el ánodo (pata larga o positivo) va al pin digital 2 del Arduino y el cátodo (pata corta o negativo) a tierra a través de una resistencia de 220 ohms.

Figura 1
int boton;

void setup() {
pinMode(12,INPUT);
pinMode(2,OUTPUT);
}

void loop() {
boton=digitalRead(12);
digitalWrite(2,boton);
}


Figura 2

////////////////////////////////////////////////////

2- Cómo controlar un LED con un potenciómetro

Para este ejercicio necesitamos un potenciómetro, un LED, un protoboard, y alambre calibre 22. El propósito del ejercicio es conectar un LED al Arduino y poder variar su intensidad con el potenciómetro.

Primero hay que conectar el protoboard a los 5 volts y la tierra del Arduino como se muestra en la figura 3. También conectamos el potenciómetro al protoboard: una pata de un extremo a 5 volts, la pata de en medio al pin análogo 0 y la pata del otro extremo a tierra (gnd).Después conectamos el LED: el ánodo (pata larga o positivo) va al pin digital PWM 3 del Arduino y el cátodo (pata corta o negativo) a tierra a través de una resistencia de 220 ohms.

Figura 3
int potenciometro;

void setup() {
pinMode(3,OUTPUT);
}

void loop() {
potenciometro=analogRead(0)/4;
analogWrite(3,potenciometro);
}


Figura 4

////////////////////////////////////////////////////

3- Cómo controlar Arduino desde SuperCollider

Ejemplo de cómo utilizar un SynthDef para mandar mensajes a Arduino mediante la clase SendTrig.
Conectar un LED en el pin digital 9 PWM del Arduino. Si se quieren usar mas LEDs se pueden
conectar en los pines PWM 9, 10 y 11.


Para usar este código de SuperCollider es necesario cargar en Arduino el siguiente programa:

int inByte;
int led = 0;

void setup() {
Serial.begin(9600);
}

void loop() {

if(Serial.available() >0) {

inByte=Serial.read();

if(inByte==255) {
led=0;
}
else
{
analogWrite((led%1)+9,inByte); // Cambiar el módulo al número de LEDs que se deseen usar
led++;
}
}
}



Ahora pasamos a SuperCollider.
Este SynthDef envía la señal de una onda sinusoidal con el protocolo OSC a través de la clase SendTrig

(
SynthDef(\ej, {|freq 1, gate 1|
var sig, osc;
osc=SinOsc.kr(0.1,3pi/2,0.5,0.5);
sig=LFPulse.ar(osc*200+200);
Out.ar(0,sig!2);
SendTrig.kr(Impulse.kr(10), 2000, osc);
EnvGen.kr(Env.asr(0,1,0),gate, doneAction:2);
}).send(s)
)

~ej=Synth(\ej)
~ej.set(\gate, 0)



Aquí se reciben los datos OSC de la onda sinusoidal. La señal recibida tiene un rango de 0 a 1
y es mapeada a un rango de 0 a 254 para luego ser asignada a la variable global ~led2. Esta
variable determina la intensidad del LED que está conectado a Arduino.
El command name “/tr” está predeterminado para ser usado por el servidor en conjunto con la
clase SendTrig. Para mayor información sobre command names revisar el archivo de ayuda
Server-Command-Reference de SuperCollider

(
~oscImpulse=OSCresponder(nil, "/tr", {|...msg|
msg[2].postln;
~led2=msg[2][3]*254;
// ~led3=msg[2][3]*254; // Así se asignaría el valor para un segundo LED
}).add
)

Con esta rutina se manda el valor de la variable global ~led2 al Arduino

Tdef(\alfa, {
inf.do{
p.put(255);
0.005.wait;
p.put(~led2);
0.005.wait;
//p.put(~led3); // De esta forma se enviarían datos a un segundo led
//0.005.wait;
              }
}).quant_(0);
)


Con esto se inicia la comunicación

(
p = SerialPort("/dev/tty.usbserial",9600,crtscts: true);
Tdef(\alfa).play;
)

Con esto se detiene la comunicación

(
Tdef(\alfa).stop;
p.close;
)

Material de apoyo

LED_Botón
LED_Potenciómetro
Arduino-SuperCollider-SerialPort(SynthDef)-
Increíble