jueves, 23 de febrero de 2012

Proyecto #2

Seguimos trabajando con Arduino y luces. En este caso pasamos de utilizar relés con bombillas de 220V a usar bombillitas led de 3.3V. Este proyecto básicamente consiste en crear una obra de carácter cinético que consta de luces que se apagan y se encienden siguiendo una secuencia de tiempo descargada en la microcontroladora. El programa que vamos a cargar en la placa Arduino es una versión del código básico del famoso BLINK contenido en los ejemplos del IDE de Arduino. La placa está conectada a 12 luces led, utilizando resistencias de 220 Ohm para que no se fundan con los 5V que los pines digitales de la microcontroladora dan por defecto. A continuación se muestran los diferentes elementos que componen el cuadro, un video con el resultado final y el código que lo hace funcionar.

Materiales:

- 12 diodos led
- 12 resistencias de 220 Ohm
- Arduino Duemilanove
- 2 Regletas fluorescentes de 14V
- Adaptador de corriente 220V/9V
- Maderas
- Metacrilato
- Pintura acrílica y óleo

La estructura consta en su interior de dos tubos de luz fluorescente para iluminar la imagen frontal, realizada usando óleo sobre una plancha de metacrilato. La cara posterior es la que consta de una iluminación mediante leds controlados por la placa Arduino.

Vista frontal

Vista lateral

Interior del cuadro

Placa ARDUINO conectada a las luces led

A continuación el código para la placa Arduino. Es muy simple:

//Definimos los pines para cada led.

int ledPin1 = 1;
int ledPin2 = 2;
int ledPin3 = 3;
int ledPin4 = 4;
int ledPin5 = 5;
int ledPin6 = 6;
int ledPin7 = 8;
int ledPin8 = 9;
int ledPin9 = 10;
int ledPin10 = 11;
int ledPin11 = 12;
int ledPin12 = 13;

// El Setup () sólo se lee UNA vez (como en Processing).

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin12, OUTPUT);
}

// El Loop () se lee constantemente.

void loop() {
 
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin9, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin12, LOW);
delay(1000);

// Esperamos 1000 milisegundos (1 seg)

digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin9, LOW);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin8, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin12, HIGH);
delay(1000);

// Esperamos 1000 milisegundos (1 seg)

digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin8, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin12, LOW);
delay(1000);

digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin9, HIGH);
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin11, LOW);
delay(1000);

digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin8, HIGH);
digitalWrite(ledPin9, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin12, HIGH);
delay(1000);

digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin11, LOW);
delay(1000);

digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin9, LOW);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin12, LOW);
delay(1000);

digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin11, LOW);

delay(500);

}

//Puedes cambiar las ordenes encendido/apagado como quieras.

Este es el resultado final:


miércoles, 22 de febrero de 2012

Proyecto #1

A continuación os detallo mi primer trabajo artístico utilizando la microcontroladora opensource ARDUINO. Se trata de una caja de luz en la que, mediante una placa de 4 relés conectados a una Arduino Mega, se logra controlar el encendido y apagado de 4 grupos de luces diferentes.

ARDUINO Mega
Placa de 4 relés a 5V

Todo el tinglado está embutido en una caja de madera de DM de dimensiones 100 x 100 x 10 cms, pintada con acrílico y en la que se han hecho diferentes orificios con una taladradora. En dichos orificios hay una placa de metacrilato con diferentes filtros coloreados. El resultado se muestra en las siguientes fotos:

Estructura interna
Placa ARDUINO + placa de 4 relés

Las 4 fases de luz

A continuación unas líneas de código para quien esté interesado:

/* YourDuino Example: Relay Control 1.10
  Handles "Relay is active-low" to assure
  no relay activation from reset until
  application is ready.
   terry@yourduino.com */

/*-----( Import needed libraries )-----*/
/*-----( Declare Constants )-----*/

#define RELAY_ON 0
#define RELAY_OFF 1

/*-----( Declare objects )-----*/
/*-----( Declare Variables )-----*/

#define Relay_1  2  // Arduino Digital I/O pin number
#define Relay_2  3
#define Relay_3  4
#define Relay_4  5

void setup() 
   /****** SETUP: RUNS ONCE ******/
{
//-------( Initialize Pins so relays are inactive at reset)----

  digitalWrite(Relay_1, RELAY_OFF);
  digitalWrite(Relay_2, RELAY_OFF);
  digitalWrite(Relay_3, RELAY_OFF);
  digitalWrite(Relay_4, RELAY_OFF); 
 
//---( THEN set pins as outputs )---- 

  pinMode(Relay_1, OUTPUT);  
  pinMode(Relay_2, OUTPUT); 
  pinMode(Relay_3, OUTPUT); 
  pinMode(Relay_4, OUTPUT);   
  delay(4000); 
//Check that all relays are inactive at Reset

} 

//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
//---( Turn all 4 relays ON in sequence)---

  digitalWrite(Relay_1, RELAY_ON);
  delay(1000);        
  digitalWrite(Relay_2, RELAY_ON);
  delay(1000);            
  digitalWrite(Relay_3, RELAY_ON);
  delay(1000);           
  digitalWrite(Relay_4, RELAY_ON);
  delay(4000);           
 
//---( Turn all 4 relays OFF in sequence)--- 

  digitalWrite(Relay_1, RELAY_OFF);
  delay(1000);             
  digitalWrite(Relay_2, RELAY_OFF);
  delay(1000);            
  digitalWrite(Relay_3, RELAY_OFF);
  delay(1000);             
  digitalWrite(Relay_4, RELAY_OFF);
  delay(4000);             
 
}
//--(end main loop )---