
Durante el taller se construyó una máquina de forma colectiva la cual celebra el nacimiento de un nuevo niño en la ciudad. La máquina se activa cada 7 minutos, canta y arroja confetis.
Cada participante se familiarizó con nociones básicas de electrónica y computación física, construyendo y programando el microcontrolador Arduino, plataforma de software y hardware abiertos (www.arduino.cc).





Participaron:
Manuela Alarcón, diseñadora industrial, perteneciente al grupo
de Cultura Material, U. Bolivariana.
Alejandro Arroyave, estudiante de ingenieria física, U. Nacional.
Julián Giraldo (brolin), estudiante de ing. electrónica, U.
de Antioquia.
Juan Esteban Giraldo (kalashnikov), estudiante de estadística, U. Nacional.
Francisco Peláez, estudiante de economía y negocios internacionales,
EAFIT.
Maria Cecilia Restrepo, arquitecta, estudiante de artes plásticas,
Bellas Artes.
Miguel Angel Tamayo, estudiante de artes plásticas, Bellas Artes.
Juan Gonzalo Vélez, ingeniero electrónico, estudiante de artes
plásticas, Bellas Artes.
Gracias a todos.
------------
Código:
/* MAQUINA QUE CELEBRA
* -------------------
*
* Desarrollada durante el taller dictado en la Casa del Encuentro,
* como complemento a la muestra "Alumbramientos y Ultimo Suspiro".
* Medellín, Oct. 9, 10 y 11 del 2007
* Dentro del XV Salón de Arte BBVA
*
* Participaron:
* Manuela Alarcón, Alejandro Arroyave, Julián Giraldo,
* Juan Esteban Giraldo, Francisco Peláez, Maria Cecilia Restrepo,
* Miguel Angel Tamayo y Juan Gonzalo Vélez.
*
* Descripción:
* El programa hace que cada 7 minutos (cálculo alegre del ritmo de
nacimiento de la ciudad basado en estadísticas mundiales y la población
actual de Medellín)
* se escuche el cumpleaños, alleluyah y el "feliz cumpleaños
de ponque-ramo"
* y se active un motor que arroja confetis.
* Más info sobre
el taller y video: www.thepopshop.org/tallermedellin /// contacto: a.tamayo:
laimagendelmundo@yahoo.ca
*
* Basado en el código desarrollado por David Cuartielles para el K3,
2005: http://www.arduino.cc/en/Tutorial/PlayMelody
*/
// TONES ==========================================
// Start by defining the relationship between
// note, period, & frequency.
#define c 3830 // 261 Hz
#define d 3400 // 294 Hz
#define e 3038 // 329 Hz
#define f 2864 // 349 Hz
#define g 2550 // 392 Hz
#define a 2272 // 440 Hz
#define b 2028 // 493 Hz
#define C 1912 // 523 Hz - la frecuencia de una nota una octava superior es
el doble
#define D 1700 // 588 Hz
#define G 1275 // 784 Hz
#define E 1519 // 658 Hz
#define F 1432 // 698 Hz
#define gg 5100 // 196 Hz - la frecuencia de una nota una octava inferior
es la mitad
#define cc 7660 // 130-5 Hz
#define h 2145 // 466 Hz // si bemol - media entre a y b
#define AA 4544 // 220 Hz
#define hh 4300 // 232 Hz
#define bb 4056 // 246.5 Hz
#define Cd 3612 // 272 Hz
#define DD 3400 // 294 Hz
#define fg 1353 // 739 Hz
// Define a special note, 'R', to represent silence
#define R 0
// SETUP ============================================
// Set up speaker on a PWM pin (digital 9, 10 or 11)
int speakerOut = 9; // pin para el parlante
int turbinita = 13; // pin que controla la turbina
// Do we want debugging on serial out? 1 for yes, 0 for no
int DEBUG = 1;
void setup() {
pinMode(speakerOut, OUTPUT);
pinMode(turbinita, OUTPUT);
if (DEBUG) {
Serial.begin(9600); // Set serial out if we want debugging
}
}
// MELODY and TIMING =======================================
// melody[] is an array of notes, accompanied by beats[],
// which sets each note's relative length (higher #, longer note)
int melody[] = { g, g, a, g, C, b, R, g, g, a, g, D, C, R, g, g, G, E, C,
b, a, R, F, F, E, C, D, C, R, d, AA, bb, AA, R, d, AA, bb, AA, R, AA, AA,
bb, AA, R, AA, AA, bb, AA, R, AA, Cd, DD, Cd, DD, R, E, E, fg, E, R, E, E,
fg, E, R, E, E, fg, E, R, E, E, fg, E, R, AA, Cd, DD, Cd, DD, R, AA, c, c,
c, hh, AA, hh, c, c, R, c, c, d, e, f, d, c, c, R};
int beats[] = { 8, 8, 16, 16, 16, 16, 32, 8, 8, 16, 16, 16, 16, 32, 8, 8 ,16
,16, 16, 16, 16, 32, 8, 8, 16, 16, 16, 16, 1, 24, 8, 8, 8, 4, 24, 8, 8, 8,
4, 4, 4, 8, 8, 4, 4, 4, 8, 8, 4, 8, 8, 16, 8, 16, 4, 24, 8, 8, 8, 4, 24, 8,
8, 8, 4, 4, 4, 8, 8, 4, 4, 4, 8, 8, 4, 8, 8, 16, 8, 16, 1, 8, 8, 8, 4, 4,
4, 4, 8, 8, 32, 4, 4, 8, 8, 8 , 8, 8, 8 ,1};
int MAX_COUNT = sizeof(melody) / 2; // Melody length, for looping.
// Set overall tempo
long tempo = 30000;
// Set length of pause between notes
int pause = 1000;
// Loop variable to increase Rest length
int rest_count = 100; //<-BLETCHEROUS HACK;
// Initialize core variables
int tone = 0;
int beat = 0;
long duration = 0;
// PLAY TONE ==============================================
// Pulse the speaker to play a tone for a particular duration
void playTone() {
long elapsed_time = 0;
if (tone > 0) { // if this isn't a Rest beat, while the tone has
// played less long than 'duration', pulse speaker HIGH and LOW
while (elapsed_time < duration) {
digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone / 2);
// DOWN
digitalWrite(speakerOut, LOW);
delayMicroseconds(tone / 2);
// Keep track of how long
we pulsed
elapsed_time += (tone);
}
}
else { // Rest beat; loop times delay
for (int j = 0; j < rest_count; j++) {
delayMicroseconds(duration);
}
}
}
// LET THE WILD RUMPUS
BEGIN =============================
void loop() {
// Set up a counter to pull from melody[] and beats[]
digitalWrite(turbinita, HIGH);
for (int i=0; i<MAX_COUNT; i++) {
tone = melody[i];
beat = beats[i];
if(i == MAX_COUNT - 1){
digitalWrite(turbinita, LOW);
delay(420000); // espera 7 minutos
}
duration = beat * tempo; // Set up timing
playTone();
// A pause between notes...
delayMicroseconds(pause);
if (DEBUG) { // If debugging,
report loop, tone, beat, and duration
Serial.print(i);
Serial.print(":");
Serial.print(beat);
Serial.print(" ");
Serial.print(tone);
Serial.print(" ");
Serial.println(duration);
}
}
}