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