miércoles, 16 de mayo de 2012

Proyecto #4

Llevo un tiempo trabajando en un nuevo proyecto en el que he querido aunar movimiento, sonido e interacción. Aprovechando un montón de ventiladores de refrigeración de ordenadores viejos que me ofreció un amigo, decidí aprovecharlos para crear algo con ellos y ARDUINO. El resultado es un cuadro cinético que interactúa con el espectador de una forma muy simple. Cuando alguien hace algún ruido que sobrepase cierto nivel de decibelios la pieza se pone en funcionamiento haciendo girar los motores en una secuencia de duración aleatoria (gracias al uso de una placa de 8 relés). Además, a cada motor en movimiento le acompaña una nota musical también aleatoria, originada gracias a la librería pitches.h para ARDUINO y a dos altavoces viejos que me encontré en un punto limpio colocados a derecha e izquierda de la estructura. El resultado es un prototipo que funciona y que puede servir para plantearme proyectos futuros de mayor envergadura.

Mecanismo interno


Esquema de la circuitería interior:


Programa de Arduino (incluye la librería pitches.h):
#include "pitches.h"
int sensorPin1 = A0;
int Knock1 = 52;
int Knock2 = 53;
int sensorValue1 = 0;

#define RELAY_ON 0
#define RELAY_OFF 1

#define Relay_1  2 
#define Relay_2  3
#define Relay_3  4
#define Relay_4  5
#define Relay_5  6
#define Relay_6  7
#define Relay_7  8

void setup()  
{
pinMode(Knock1, OUTPUT);
pinMode(Knock2, OUTPUT);
Serial.begin(9600);
 
  digitalWrite(Relay_1, RELAY_OFF);
  digitalWrite(Relay_2, RELAY_OFF);
  digitalWrite(Relay_3, RELAY_OFF);
  digitalWrite(Relay_4, RELAY_OFF);
  digitalWrite(Relay_5, RELAY_OFF);
  digitalWrite(Relay_6, RELAY_OFF);
  digitalWrite(Relay_7, RELAY_OFF); 
 
  pinMode(Relay_1, OUTPUT);  
  pinMode(Relay_2, OUTPUT); 
  pinMode(Relay_3, OUTPUT); 
  pinMode(Relay_4, OUTPUT);
  pinMode(Relay_5, OUTPUT); 
  pinMode(Relay_6, OUTPUT); 
  pinMode(Relay_7, OUTPUT); 
  delay(1000);

}

void loop() 
{
sensorValue1 = analogRead(sensorPin1);
Serial.println(sensorValue1);
 
   if (sensorValue1 > 500) {
     
  digitalWrite(Relay_1, RELAY_ON);
  tone(Knock1, random(5000), 200);
  delay(random(200, 800));  
       
  digitalWrite(Relay_1, RELAY_OFF);
  digitalWrite(Relay_2, RELAY_ON);
  tone(Knock2, random(5000), random(100, 200));
  delay(200); 
         
  digitalWrite(Relay_2, RELAY_OFF);
  digitalWrite(Relay_3, RELAY_ON);
  tone(Knock1, random(5000), random(100, 300));
  delay(300); 
           
  digitalWrite(Relay_3, RELAY_OFF);
  digitalWrite(Relay_4, RELAY_ON);
  tone(Knock2, random(4000), random(50, 100));
  delay(random(100, 800));
           
  digitalWrite(Relay_4, RELAY_OFF);
  digitalWrite(Relay_5, RELAY_ON);
  tone(Knock1, random(5000), random(100, 300));
  delay(300);  
          
  digitalWrite(Relay_5, RELAY_OFF);
  digitalWrite(Relay_6, RELAY_ON);
  tone(Knock2, random(5000), random(50, 100));
  delay(random(100, 1000));  
          
 digitalWrite(Relay_6, RELAY_OFF);
 digitalWrite(Relay_7, RELAY_ON);
 tone(Knock1, random(5000), random(100, 400));
 delay(400);  
           
 digitalWrite(Relay_7, RELAY_OFF);
  }

}