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) ********/
//***  ***// 

}



2 comentarios:

  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
  2. Me dar mandar el puro codigo para el cubo de led 3x3x3 para la nueva version de arduino?

    ResponderEliminar