lunes, 23 de junio de 2014

Proyecto Arbolduino Navideño



1.- INTRODUCCIÓN
Este proyecto consiste en hacer prototipo de árbol de navidad con Arduino. Es una caja de zapatos forrada de papel de regalo, que aparentemente se ha hecho para que parezca un regalo de navidad. En la planta de la caja está el dibujo de un árbol de navidad en el que el árbol está adornado con los leds que se ha incrustado en el.
Los leds están conectados al Arduino y con la ayuda del potenciómetro podremos elegir el tipo de juego de luces que queramos asignar.
También se ha adaptado un buzzer para que suenen los tonos navideños, enciendo o apagando según se quiera con el interruptor.

2.- MATERIALES
Relación de los materiales utilizados son:

-      Caja de zapatos
-      Papel de regalo
-      Pegamento de cola
-      Tijeras
-      Alfiler
-      Papel fotográfico
-      Impresora
-      18 Leds
-      5 Resistencias
-      Protoboard
-      Cables de conexión
-      Soldador de estaño
-      Termofusible
-      Portátil
-      2 Arduino
-      Buzzer
-      Potenciómetro
-      Botón


3.- DESARROLLO PRÁCTICO
-    Circuito con fritzing.

-    Montaje.


1º Buscar una caja de zapatos y forrar con papel de regalo.

2º Escoger una foto de un árbol de navidad en internet, imprimirlo con papel fotográfico y pegarlo con cola. Una vez hecho esto, se procederá a clavar los 18 leds ayudándonos con un alfiler para hacer los agujeros en la caja.

3º Una vez tengamos la distribución de los leds colocados, procederemos a soldar con estaño formando el circuito. En este caso, se ha formado 5 líneas de leds en paralelo, para que cada línea vaya a un pin del Arduino. Se ha soldado con estaño uniéndolos con cable las patillas de los leds. Cada una de las 5 líneas van unidas al ánodo pasando por una resistencia cada una, llegando hasta los pines (positivo) del Arduino. Por último, todos los leds estarán unidos al cátodo e irán directos a masa (negativo).

4º Seguidamente como queremos que los leds hagan diferentes juegos de luz en las luces del árbol, colocaremos un potenciómetro para que cuando variemos el valor de este (entre 0 y 1024), podamos elegir el juego de luz que queramos. Se conectará a positivo y masa, y el del medio irá a Analogic 0.
    

5º Una vez que ya tenemos toda la parte de los leds hecha, ahora procederemos a crear la parte de sonido, para que suene la caja con tonos navideños. Utilizaremos otro Arduino para esto. Pondremos un botón para poder cerrar y abrir el circuito cuando queramos, es decir, encender o apagar el buzzer.


-    Programación Arduino.
Utilizaremos dos Arduinos. Esto se divide en dos partes. Primero la parte de los leds y segundo la parte del sonido. Lo que pretendía era conectar todo en un Arduino, pero esto no se puede conseguir ya que el Arduino ejecuta las órdenes de forma ordenada y en forma secuencial.

PROGRAMACION JUEGO DE LOS LEDS

int i = 0;
int pinPotenciometro =A0;
int valorPotenciometro = 0;
void setup()
{
  pinMode(pinPotenciometro, INPUT);  //Asigna al potenciometro
  for (i = 2; i < 7; i++)  //Las lineas de leds, abren los pines del 2 al 6
  pinMode(i, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  valorPotenciometro = analogRead(pinPotenciometro);
  Serial.println(valorPotenciometro, DEC);

  //1 Primer juego de luces
  if (valorPotenciometro > 141 && valorPotenciometro < 332) {  
    digitalWrite(2, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    delay(1000);
    digitalWrite(3, LOW);
    delay(100);
    digitalWrite(5, HIGH);
    delay(1000);
    digitalWrite(5, LOW);
    delay(100);
    digitalWrite(6, HIGH);
    delay(1000);
    digitalWrite(6, LOW);
    digitalWrite(2, LOW);
    delay(100);
  }
  
  //2 Segundo juego de luces
  if (valorPotenciometro >= 333 && valorPotenciometro < 505) {
    for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
      analogWrite(2, fadeValue); 
      analogWrite(3, fadeValue);  
      analogWrite(4, fadeValue);    
      analogWrite(5, fadeValue);  
      analogWrite(6, fadeValue);
      delay(20);                            
  } 
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
      analogWrite(2, fadeValue); 
      analogWrite(3, fadeValue);  
      analogWrite(4, fadeValue);    
      analogWrite(5, fadeValue);  
      analogWrite(6, fadeValue);
      delay(20);                      
  } 
  }
  
  //3 Tercer juego de luces
  if (valorPotenciometro >= 506 && valorPotenciometro < 677) {
        digitalWrite(4, HIGH);
    for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
      analogWrite(2, fadeValue); 
      delay(100);  
      analogWrite(3, fadeValue); 
      analogWrite(5, fadeValue);  
      analogWrite(6, fadeValue);    
      delay(20);                            
  } 
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
      analogWrite(3, fadeValue);
      analogWrite(5, fadeValue);
      analogWrite(6, fadeValue);
      delay(100);                            
  } 
  }
  
  //4 Cuarto juego de luces
  if (valorPotenciometro >= 678 && valorPotenciometro < 850) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    delay(1500);
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    delay(200);                         
  }
  
   //APAGA TODOS LOS LEDS
  if (valorPotenciometro <= 140) apagarLeds();
  
  //ENCIENDE TODOS LOS LEDS
  if (valorPotenciometro >= 851) encenderLeds();
  if (valorPotenciometro == 1023) encenderLeds();
}


void apagarLeds()   //Funcion que apaga todos los leds
{
for (i = 2; i < 7; i++)
digitalWrite(i, LOW);
}
void encenderLeds()   //Funcion que enciende todos los leds
{
for (i = 2; i < 7; i++)
digitalWrite(i, HIGH);


PROGRAMACIÓN DEL TONO MUSICAL
int speakerPin = 9;

int length = 144; //Numero de notas
char notes[] = 
"eeeeeeegcdeffffeeeddedgeeeeeeegcdeffffeeggfdcggeegedggffgggeegedggffgggeegedggffgffcfgfcagbagffedefgaedcCbabagafgedcffefgfcaagabagabagfedcbagf"; //Notas

int beats[] = {1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,4,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,3,1,2,1,1,1,1,2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,2,2,3,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,4}; //Tiempo de cada nota
int tempo = 300; //Velocidad del tono

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}

void playNote(char note, int duration) {
char names[] = { 'G','c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
             /*   si  do   re   mi   fa  sol  la    si   do*/
int tones[] = { 1950,1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };//La escala del tono que se a elegido

// Reproducir el tono que corresponde al nombre de la nota
for (int i = 0; i < 9; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}

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

void loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); //Tiempo restante
} else {
playNote(notes[i], beats[i] * tempo);
}
//Pausa entre notas
delay(tempo / 2); 
}
}