lunes, 15 de octubre de 2018

Construye tu propio cubo de luz LED



Materiales:

- 27 Led´s (Cualquier color   de preferencia difusos)
- 1 terminal con 2 tornillos
- 1 micro boton
- 9 resistencias de 330 ohms
- 4 resistencias de 10k ohms
- 3 transistores 2n2222 (Cualquier transistor NPN)
- 1 PCB de 8x8 cm
- 4 tornillos de 1/8"x1"
- 2 tiras hembra de 28 pines
- Arduino nano
- 1 pila de 9v
- 1 broche para pila de 9v
- Alambre Galvanizado Calibre #20
- Cuadro de madera de 10x10cm
- Pinzas
- Soldadura
- Pintura acrilica

Diagrama:


 
Programacion:

/*
    *** Cubo Led 3x3x3 ***
*/
//Pines para cada una de las columnas
const int led2 = 2;
const int led3 = 3;
const int led4 = 4;
const int led5 = 5;
const int led6 = 6;
const int led7 = 7;
const int led8 = 8;
const int led9 = 9;
const int led10 = 10;
//Pines de los 3 niveles
const int nivel1 = 11;
const int nivel2 = 12;
const int nivel3 = 13;

//Definimos el pin analógico como digital
const int pb = 14; //El pin analógico como digital será el pin 14
int push;          //Variable donde se guarda el cambio lógico del pin digital
int contador = 1;  //Variable local que nos servirá como contador
                   //cada que presionemos el push button.

void setup() {
  Serial.begin(9600);
//Inicializamos los pines digitales como salidas.
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);

pinMode(nivel1, OUTPUT);
pinMode(nivel2, OUTPUT);
pinMode(nivel3, OUTPUT);
//Inicializamos el pin A0 como pin-Digital 14 de entrada
pinMode(pb,INPUT);
}

void loop() { 
 push = digitalRead(pb); //Leemos el valor digital del push button
 //Podemos visualizar el estado en el que se encuentra
 //usando el monitor serial (Esquina superior derecha "Lupa")
 Serial.print("PB = ");
 Serial.println(push);
 Serial.print("Contador = ");
 Serial.println(contador);
 
  if(push == 1)//Si se pulsa el push button se realiza lo que esta dentro de este if
   {
     contador = contador+1; //Aumentamos en 1 el contador
     delay(500);            //Tiempo que permite el incremento en una unidad del contador
     //Recuerden que si sólo hay una línea dentro de un "if" se pueden omitir las llaves "{}"
     if(contador > 10)       //Si el contador toma un valor mayor a 10
       contador = 1;        //el contador vuelve al valor/estado 1.
   }//Llave del primer if
//******* Secuencia 1 -Modo Apagado *******//
//*****Por defecto inician apagados los led´s *****//
    if(contador==1)
     {
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led5, LOW);
      digitalWrite(led6, LOW);
      digitalWrite(led7, LOW);
      digitalWrite(led8, LOW);
      digitalWrite(led9, LOW);
      digitalWrite(led10, LOW);
  
      digitalWrite(nivel1, LOW);
      digitalWrite(nivel2, LOW);
      digitalWrite(nivel3, LOW);
     }
//****** Secuencia 1 - Tipo Lámpara ********//
//*** Se mantienen prendidos todos los led´s ***// 
    if(contador==1){
      digitalWrite(led2, HIGH);
      digitalWrite(led3, HIGH);
      digitalWrite(led4, HIGH);
      digitalWrite(led5, HIGH);
      digitalWrite(led6, HIGH);
      digitalWrite(led7, HIGH);
      digitalWrite(led8, HIGH);
      digitalWrite(led9, HIGH);
      digitalWrite(led10, HIGH);
  
      digitalWrite(nivel1, HIGH);
      digitalWrite(nivel2, HIGH);
      digitalWrite(nivel3, HIGH);
    }
//****** Secuencia 2 - Parpadeo ********//
//*** Se prenden y apagan todos los led´s ***//  
  if(contador==2)
   {
      int tiempo = 80;//Puedes cambiar el tiempo de parpadeo
   
      digitalWrite(led2, HIGH);
      digitalWrite(led3, HIGH);
      digitalWrite(led4, HIGH);
      digitalWrite(led5, HIGH);
      digitalWrite(led6, HIGH);
      digitalWrite(led7, HIGH);
      digitalWrite(led8, HIGH);
      digitalWrite(led9, HIGH);
      digitalWrite(led10, HIGH);
      //Activamos los niveles (Prenden led´s)
      digitalWrite(nivel1, HIGH);
      digitalWrite(nivel2, HIGH);
      digitalWrite(nivel3, HIGH);
      delay(tiempo);
      //Desactivamos los niveles (Apaga Led´s)
      digitalWrite(nivel1, LOW);
      digitalWrite(nivel2, LOW);
      digitalWrite(nivel3, LOW);
      delay(tiempo);
   }
//****** Secuencia 3 - Centro estático laterales girando ********//
//*** Se mantienen prendidos todos los led´s***// 
if(contador==3)
{
int g=100;
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

digitalWrite(led7, LOW);
digitalWrite(led10, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(g);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led8, HIGH);
delay(g);
digitalWrite(led5, LOW);
digitalWrite(led2, LOW);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
delay(g);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led7, HIGH);
delay(g);
}
 
//****** Secuencia 4 - Tipo estrella ********//
//*** Se prenden los led´s de manera que parezca una estrella ***// 
if(contador==4)
{
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

int j=150;    //Puedes cambiar este tiempo
digitalWrite(nivel1, LOW);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, LOW);

digitalWrite(led6, HIGH);
delay(j);//500
digitalWrite(led3, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led9, HIGH);
delay(j);//200
digitalWrite(nivel1, HIGH);
digitalWrite(nivel3, HIGH);
delay(j);//200
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led10, HIGH);
delay(j);//500
// apagamos todo
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
}

//****** Secuencia 5 - Por Niveles ********//
//*** Se prenden cada uno de los niveles de led´s ***// 
if(contador==5)
{
  int d=100;
  // Prendemos todo
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
//Efecto de SUBIDA Y BAJADA
     //Activamos el nivel1
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, LOW);
digitalWrite(nivel3, LOW);
delay(d);
 //Activamos el nivel2
digitalWrite(nivel1, LOW);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, LOW);
delay(d);
 //Activamos el nivel3
 digitalWrite(nivel1, LOW);
digitalWrite(nivel2, LOW);
digitalWrite(nivel3, HIGH);
delay(d);
 //Activamos el nivel2
digitalWrite(nivel1, LOW);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, LOW);
delay(d);
}

//****** Secuencia 6 - Tipo Cruzado ********//
//*** Se prenden los led´s en forma de cruz ***// 
if(contador==6){

  int t=100;
   //Activamos todos los niveles
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
delay(t);
digitalWrite(led5, LOW);
digitalWrite(led7, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led8, HIGH);
delay(t);
digitalWrite(led4, LOW);
digitalWrite(led8, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led9, HIGH);
delay(t);
digitalWrite(led3, LOW);
digitalWrite(led9, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led10, HIGH);
delay(t);
digitalWrite(led2, LOW);
digitalWrite(led10, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
delay(t);
digitalWrite(led5, LOW);
digitalWrite(led7, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led8, HIGH);
delay(t);
digitalWrite(led4, LOW);
digitalWrite(led8, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led9, HIGH);
delay(t);
digitalWrite(led3, LOW);
digitalWrite(led9, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led10, HIGH);
delay(t);
digitalWrite(led2, LOW);
digitalWrite(led10, LOW);

//Cruz girando 
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

  int v=100;
digitalWrite(led2, HIGH);
delay(v);

digitalWrite(led6, HIGH);
delay(v);

digitalWrite(led10, HIGH);
delay(v);//los demas 300

digitalWrite(led6, LOW);
delay(v+30);//400

digitalWrite(led8, HIGH);
delay(v);

digitalWrite(led6, HIGH);
delay(v);

digitalWrite(led4, HIGH);
delay(v);

digitalWrite(led6, LOW);
delay(v+30);

digitalWrite(led5, HIGH);
delay(v);

digitalWrite(led6, HIGH);
delay(v);

digitalWrite(led7, HIGH);
delay(v);

digitalWrite(led6, LOW);
delay(v+30);

digitalWrite(led9, HIGH);
delay(v);

digitalWrite(led6, HIGH);
delay(v);

digitalWrite(led3, HIGH);
delay(v);

digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(v-20);//200 
}
//****** Secuencia 3 - Lámina giratoria ********//
//*** Se mantienen prendidos todos los led´s***// 
if(contador==7)
{
int g=200;
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(g);
//Se mantiene prendido Led4
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led7, HIGH);
digitalWrite(led10, HIGH);
delay(g);
//Se mantiene prendido Led10
digitalWrite(led4, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
delay(g);
//Se mantiene prendido Led8
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led2, HIGH);
delay(g);

//nivel3 se mantiene encendido
digitalWrite(nivel1, LOW);
digitalWrite(nivel2, LOW);
//Se mantiene encendido 2,5,8
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
delay(g);

//Se mantiene prendido Led4, 7 y 10
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);

digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
delay(g);

//Se mantiene prendido Led4, 7 y 10
//y nivel1
digitalWrite(nivel2, LOW);
digitalWrite(nivel3, LOW);

digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
delay(g);
}
//****** Secuencia 3 - Lámina deslizable ********//
//*** Se mantienen prendidos todos los led´s***// 
if(contador==8)
{
int g=80; //Un tiempo de 150ms genera un  buen efecto
digitalWrite(nivel1, HIGH);
digitalWrite(nivel2, HIGH);
digitalWrite(nivel3, HIGH);

digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
delay(g);
//Se mantiene prendido Led3 y 4
digitalWrite(led2, LOW);
digitalWrite(led7, HIGH);
delay(g);
//Se mantiene prendido Led4 y 7
digitalWrite(led3, LOW);
digitalWrite(led10, HIGH);
delay(g);
//Se mantiene prendido Led7 y 10
digitalWrite(led4, LOW);
digitalWrite(led9, HIGH);
delay(g);
//Se mantiene prendido Led9 y 10
digitalWrite(led7, LOW);
digitalWrite(led8, HIGH);
delay(g);
//Se mantiene prendido Led8 y 9
digitalWrite(led10, LOW);
digitalWrite(led5, HIGH);
delay(g);
//Se mantiene prendido Led5 y 8
digitalWrite(led9, LOW);
digitalWrite(led2, HIGH);
delay(g);
//Se mantiene prendido Led5
digitalWrite(led8, LOW);
digitalWrite(led3, HIGH);
delay(g);
}
//****** Secuencia 9 - Parpadeo ********//
//*** Se prenden y apagan todos los led´s ***//  
  if(contador==9)
   {
      int tiempo = 10;
   
      digitalWrite(led2, HIGH);
      digitalWrite(led3, HIGH);
      digitalWrite(led4, HIGH);
      digitalWrite(led5, HIGH);
      digitalWrite(led6, HIGH);
      digitalWrite(led7, HIGH);
      digitalWrite(led8, HIGH);
      digitalWrite(led9, HIGH);
      digitalWrite(led10, HIGH);
      //Activamos los niveles (Prenden led´s)
      digitalWrite(nivel1, HIGH);
      digitalWrite(nivel2, HIGH);
      digitalWrite(nivel3, HIGH);
      delay(tiempo);
      //Desactivamos los niveles (Apaga Led´s)
      digitalWrite(nivel1, LOW);
      digitalWrite(nivel2, LOW);
      digitalWrite(nivel3, LOW);
      delay(tiempo);
   }
/*NOTA: Recuerda que al agregar una secuencia debes cambiar el valor máximo
de la variable contador, por ejemplo: tenemos 8 secuencias
entonces if(contador > 9) aquí colocamos un 8
si tuvieramos 10 secuencias  -  if(contador > 10)
este if esta en la línea 59...
/*
//****** Secuencia _ - (Agrega tus secuencias) ********/
//***  ***// 

}



1 comentario:

  1. hola caty disculpa me gustaría hacer este circuito pero no aparece claro las conexiones de como van posicionados los leds de la base inferior al arduino

    ResponderEliminar