Está en la página 1de 20

Universidad De San Carlos De Guatemala

Facultad de ingeniera
Escuela de ciencias y sistemas
Arquitectura de Computadores y Ensambladores 1
Ing. Otto Rene Escobar Leiva
Aux. Luis Fernando Leal






Documentacio n
Pra ctica #3








Nombre Carnet
Ricardo Alejandro Cortez Linares 200516231
Cesar Agusto Soto Noriega 200614855
Oziel Adolfo Hernndez Sandoval 200714421
Guatemala, 27 de abril de 2013

Cubo de Leds

Arqui1
Practica #3










Introduccin

Como parte del contenido de laboratorio del curso de Arquitectura de computadores y
ensambladores 1, ya entrado en el tema referente al manejo de la plataforma Arduino, el
siguiente documento sirve como apoyo a lo realizado en la prctica que se refiere a la
creacin de un cubo de leds de 3x3x3.
En resumen la prctica consisti en armar dicho cubo junto con una estructura de
resistencias y transistores, los cuales definan interconectadas con el Arduino definan un
orden de filas y columnas a encender para el cubo de leds. A continuacin se ampla lo
referente a la programacin del Arduino para las 7 animaciones que se crearon junto con
las melodas que acompaaron a cada animacin.











Cubo de Leds

Arqui1
Practica #3

Diagrama del circuito:

El circuito fue realizado exactamente tomando como base el siguiente diagrama:



Cubo de Leds

Arqui1
Practica #3
En la estructura armada por nosotros, se utilizaron 12 resistencias de 430k, 9 de ellas conectadas a
las salidas del Arduino en los pines del 3 al 11, las cuales alimentaban con energa a las columnas
del cubo, y 3 ms del pin 0 al 2, que alimentaban los transistores representando las filas o niveles
del cubo.
De forma adicional al circuito visto en la imagen anterior, se agreg un botn con basados en la
metodologa push-down. De modo que cada vez que el botn era presionado, se cambiaban las
animaciones programadas junto con sus melodas. Dichas melodas eran interpretadas por una
bocina de 8 omnios, la cual tambin fue agregada al circuito y cuya salida estaba en el pin 13 del
Arduino.



















Cubo de Leds

Arqui1
Practica #3
Cdigo fuente

Variables globales
int columnas[]={3,4,5,6,7,8,9,10,11}; //Arreglo de pines para las columnas del cubo
int filas[]={0,1,2}; //Arreglo de pines para las filas del cubo
int x; //posicin de columna
int y; //posicin de fila
int boton = 12; //Pin de salida para el botn que cambia las animaciones
int speakerPin = 13; //Pin de salida para los sonidos hacia la bocina
int contador = 0; //Contador para ir cambiando las animaciones
int botonr = 0; //Variable que toma el valor que se obtiene al presionar el botn (HIGH o LOW)
Mtodo de inicializacin
void setup(){
// Se inicia con un ciclo for para identificar los 9 pines de las columnas como salidas
for(int a=0;a<10;a++){
pinMode(columnas[a],OUTPUT);
}

// Se identifican los 3 pines de las filas como salidas igualmente
pinMode(filas[0],OUTPUT);
pinMode(filas[1],OUTPUT);
pinMode(filas[2],OUTPUT);

// Se identifica el pin del botn como un pin de entrada
pinMode(boton, INPUT);

// Se identifica el pin de la bocina como un pin de salida
pinMode(speakerPin,OUTPUT);
}







Cubo de Leds

Arqui1
Practica #3
Mtodo de enciclado
void loop(){
botonr = digitalRead(boton); //Capturamos el valor del boton
contador = contador + botonr; //Se suma el valor capturado al contador

/*El swith es utilizado para comparar el valor del contador y llamar al mtodo o animacin
__correspondiente*/
switch (contador){
case 1:
modo1();
delay(1000);
break;
case 2:
modo2();
delay(1000);
break;
case 3:
modo3();
delay(1000);
break;
case 4:
modo4();
delay(1000);
break;
case 5:
modo5();
delay(1000);
break;
case 6:
modo6();
delay(1000);
break;
case 7:
modo7();
delay(1000);
break;
default:
contador = 0;
}
}





Cubo de Leds

Arqui1
Practica #3
Animaciones
/* Los mtodos de animacin son similares en cdigo uno con otro, consistieron esencialmente en
la llamada a los mtodos digitalWrite y tone, donde el primero enviaba una seal digital para
encender o apagar filas o columnas del cubo de leds y tone enviaba una nota musical en secuencia
con cada luz que se encenda. Por tanto sin ms especificaciones que dar, a continuacin se
presentan los 7 mtodos utilizados para cada animacin.*/

Modo 1:
void modo1(){

//FILA 2
digitalWrite(filas[2],HIGH);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,600,700/8);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,600,700/8);
delay(100);

digitalWrite(columnas[6],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,800,700/4);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,600,700/4);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,0,700/4);
delay(100);

digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,700,700/4);
delay(100);

for (int a=0; a<9; a++){
Cubo de Leds

Arqui1
Practica #3
digitalWrite(columnas[a],HIGH);
}
delay (1000);
for (int a=0; a<9; a++){
digitalWrite(columnas[a],LOW);
}
delay(500);

//FILA 1
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,600,700/8);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,600,700/8);
delay(100);

digitalWrite(columnas[6],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,800,700/4);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,600,700/4);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,0,700/4);
delay(100);

digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,700,700/4);
delay(100);

for (int a=0; a<9; a++){
digitalWrite(columnas[a],HIGH);
}
Cubo de Leds

Arqui1
Practica #3
delay (1000);
for (int a=0; a<9; a++){
digitalWrite(columnas[a],LOW);
}
delay(500);

//FILA 0
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,600,700/8);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,600,700/8);
delay(100);

digitalWrite(columnas[6],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,800,700/4);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,600,700/4);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,0,700/4);
delay(100);

digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,500,700/4);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,700,700/4);
delay(100);

for (int a=0; a<9; a++){
digitalWrite(columnas[a],HIGH);
}
delay (1000);
for (int a=0; a<9; a++){
Cubo de Leds

Arqui1
Practica #3
digitalWrite(columnas[a],LOW);
}
//TODAS ENCENDIDAS
digitalWrite(filas[1],HIGH);
digitalWrite(filas[2],HIGH);
for(int b=0; b<9; b++){
digitalWrite(columnas[b],HIGH);
}
melodia_x();
delay(1000);
//APAGAR
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],LOW);
for(int b=0; b<9; b++){
digitalWrite(columnas[b],LOW);
}
}

Modo 2:
void modo2(){ //CASCADA
for(int a=0;a<3;a++){
digitalWrite(filas[a],HIGH);
digitalWrite(columnas[0], HIGH);
digitalWrite(columnas[1], HIGH);
digitalWrite(columnas[2], HIGH);
digitalWrite(columnas[3], HIGH);
digitalWrite(columnas[4], HIGH);
digitalWrite(columnas[5], HIGH);
digitalWrite(columnas[6], HIGH);
digitalWrite(columnas[7], HIGH);
digitalWrite(columnas[8], HIGH);
tone(speakerPin,a+4*200,100);
delay(100);
digitalWrite(filas[a],LOW);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[1], LOW);
digitalWrite(columnas[2], LOW);
digitalWrite(columnas[3], LOW);
digitalWrite(columnas[4], LOW);
digitalWrite(columnas[5], LOW);
digitalWrite(columnas[6], LOW);
digitalWrite(columnas[7], LOW);
digitalWrite(columnas[8], LOW);
delay(10);
}
}
Cubo de Leds

Arqui1
Practica #3
Modo 3:
void modo3(){
for(int a=0;a<3;a++){
digitalWrite(filas[a],HIGH);
delay(100);
for(int b=0;b<5;b++){
switch(b){
case 0:
digitalWrite(columnas[0],HIGH);
tone(speakerPin,1000,100);
delay(100);
digitalWrite(columnas[0],LOW);
delay(40);
break;
case 1:
digitalWrite(columnas[1],HIGH);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,1200,100);
delay(100);
digitalWrite(columnas[1],LOW);
digitalWrite(columnas[3],LOW);
delay(40);
break;
case 2:
digitalWrite(columnas[2],HIGH);
digitalWrite(columnas[4],HIGH);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,1400,100);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[4],LOW);
digitalWrite(columnas[6],LOW);
delay(40);
break;
case 3:
digitalWrite(columnas[5],HIGH);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,1200,100);
delay(100);
digitalWrite(columnas[5],LOW);
digitalWrite(columnas[7],LOW);
delay(40);
break;
case 4:
digitalWrite(columnas[8],HIGH);
tone(speakerPin,1000,100);
delay(100);
digitalWrite(columnas[8],LOW);
Cubo de Leds

Arqui1
Practica #3
delay(40);
}
}
digitalWrite(filas[a],LOW);
delay(40);
}
}

Modo 4:
void modo4(){
digitalWrite(filas[0],HIGH);
digitalWrite(filas[1],HIGH);
digitalWrite(filas[2],HIGH);
delay(100);
for(int b=0;b<5;b++){
switch(b){
case 0:
digitalWrite(columnas[0],HIGH);
tone(speakerPin,700,50);
tone(speakerPin,600,50);
delay(100);
digitalWrite(columnas[0],LOW);
delay(40);
break;
case 1:
digitalWrite(columnas[1],HIGH);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,900,50);
tone(speakerPin,800,50);
delay(100);
digitalWrite(columnas[1],LOW);
digitalWrite(columnas[3],LOW);
delay(40);
break;
case 2:
digitalWrite(columnas[2],HIGH);
digitalWrite(columnas[4],HIGH);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,1100,50);
tone(speakerPin,1000,50);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[4],LOW);
digitalWrite(columnas[6],LOW);
delay(40);
break;
case 3:
Cubo de Leds

Arqui1
Practica #3
digitalWrite(columnas[5],HIGH);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,1300,50);
tone(speakerPin,1200,50);
delay(100);
digitalWrite(columnas[5],LOW);
digitalWrite(columnas[7],LOW);
delay(40);
break;
case 4:
digitalWrite(columnas[8],HIGH);
tone(speakerPin,1500,50);
tone(speakerPin,1400,50);
delay(100);
digitalWrite(columnas[8],LOW);
delay(40);
}
}

digitalWrite(filas[0],LOW);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],LOW);
delay(40);
}

Modo 5:
void modo5(){
digitalWrite(filas[2],HIGH);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);
tone(speakerPin,1000,50);
delay(100);

digitalWrite(columnas[3],HIGH);
digitalWrite(columnas[0],LOW);
tone(speakerPin,900,50);
delay(100);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,700,50);
Cubo de Leds

Arqui1
Practica #3
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],HIGH);
tone(speakerPin,500,50);
delay(100);

digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);
tone(speakerPin,1000,50);
delay(100);

digitalWrite(columnas[6],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],HIGH);
tone(speakerPin,500,50);
delay(100);

digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);
tone(speakerPin,1000,50);
delay(100);

digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,900,50);
Cubo de Leds

Arqui1
Practica #3
delay(100);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],HIGH);
tone(speakerPin,500,50);
delay(100);

digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);
tone(speakerPin,1000,50);
delay(100);

digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],HIGH);
tone(speakerPin,500,50);
delay(100);

digitalWrite(columnas[1],LOW);
digitalWrite(columnas[4],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(filas[2],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[1],LOW);
digitalWrite(filas[0],HIGH);

tone(speakerPin,1000,500);
Cubo de Leds

Arqui1
Practica #3
tone(speakerPin,800,400);
tone(speakerPin,600,300);
tone(speakerPin,400,200);
tone(speakerPin,200,100);
delay(5000);
digitalWrite(filas[0],LOW);
digitalWrite(columnas[4],LOW);

}

Modo 6:
void modo6(){
digitalWrite(filas[0],HIGH);
digitalWrite(filas[1],HIGH);
digitalWrite(filas[2],HIGH);

for (int a=0; a < 9; a++){
digitalWrite(columnas[a],HIGH);
}
tone(speakerPin,1000,50);
delay(2000);

digitalWrite(columnas[8],LOW);
tone(speakerPin,800,50);
delay(1000);
digitalWrite(columnas[0],LOW);
tone(speakerPin,700,50);
delay(1000);
digitalWrite(columnas[6],LOW);
digitalWrite(columnas[2],LOW);
tone(speakerPin,600,50);
delay(1000);

digitalWrite(filas[0],LOW);
tone(speakerPin,500,50);
delay(1000);
digitalWrite(filas[1],LOW);
tone(speakerPin,400,50);
delay(1000);
digitalWrite(filas[2],LOW);
tone(speakerPin,300,50);
delay(1000);
}

Modo 7:
void modo7(){
Cubo de Leds

Arqui1
Practica #3
digitalWrite(filas[0],HIGH);
digitalWrite(columnas[4],HIGH);
tone(speakerPin,1000,50);
delay(1500);
digitalWrite(columnas[4],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(columnas[1],LOW);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,900,50);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,800,50);
delay(100);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],HIGH);
tone(speakerPin,900,50);
delay(100);

digitalWrite(columnas[6],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,600,50);
Cubo de Leds

Arqui1
Practica #3
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[1],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(columnas[1],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(columnas[5],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,600,50);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,700,50);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[4],HIGH);
tone(speakerPin,600,50);
delay(100);

digitalWrite(filas[1],LOW);
digitalWrite(filas[2],HIGH);
tone(speakerPin,500,50);
delay(100);
digitalWrite(columnas[4],LOW);
digitalWrite(columnas[7],HIGH);
tone(speakerPin,400,50);
delay(100);
digitalWrite(columnas[7],LOW);
digitalWrite(columnas[8],HIGH);
tone(speakerPin,500,50);
delay(100);
digitalWrite(columnas[8],LOW);
digitalWrite(columnas[5],HIGH);
tone(speakerPin,400,50);
delay(100);
digitalWrite(columnas[5],LOW);
digitalWrite(columnas[2],HIGH);
tone(speakerPin,500,50);
delay(100);
digitalWrite(columnas[2],LOW);
digitalWrite(columnas[1],HIGH);
Cubo de Leds

Arqui1
Practica #3
tone(speakerPin,400,50);
delay(100);
digitalWrite(columnas[1],LOW);
digitalWrite(columnas[0],HIGH);
tone(speakerPin,500,50);
delay(100);
digitalWrite(columnas[0],LOW);
digitalWrite(columnas[3],HIGH);
tone(speakerPin,400,50);
delay(100);
digitalWrite(columnas[3],LOW);
digitalWrite(columnas[6],HIGH);
tone(speakerPin,200,50);
delay(1000);
digitalWrite(filas[0],LOW);
digitalWrite(filas[1],LOW);
digitalWrite(filas[2],LOW);
digitalWrite(columnas[6],LOW);
}

Meloda compuesta:
/*Para el mtodo 1, se agreg una meloda compuesta al final de la animacin del cubo, el cdigo
de dicha meloda se muestra a continuacin*/
void melodia_x(){
int melody1[] = {500, 600, 600, 800, 600,0,500, 700};
int noteDurations[] = {4, 8, 8, 4,4,4,4,4};
for(int thisNote=0; thisNote<8; thisNote++){
int noteDuration = 700/noteDurations[thisNote];
tone(speakerPin,melody1[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(speakerPin);
}
}







Cubo de Leds

Arqui1
Practica #3






Conclusiones

Arduino es un microprocesador con un potencial enorme en cuanto a aplicaciones
disponibles para realizar con l y de muy fcil uso y entendimiento, sobre todo para
aquellos que estn familiarizados con la programacin en lenguaje C/C++. Esto representa
una gran ventaja ya que no es necesario programar en lenguaje de bajo nivel, el cual es un
poco ms complejo y nos dificulta ms el encontrar errores de compilacin a diferencia de
lo que es un lenguaje de alto nivel.
Del mismo modo, la implementacin de seales de transmisin serial y anlogo que el
Arduino nos ofrece, pueden ser monitoreadas en pantalla, dndonos una idea en tiempo
de ejecucin de aspectos de nuestros programas que pueden ser mejoradas o de posibles
errores en cuanto a lo que esperamos.
Finalmente concluimos en que Arduino es una herramienta con mucho potencial ms all
de lo que podamos lograr dentro del curso, sino para aplicaciones reales que pretendamos
implementar una vez finalizado el mismo.

También podría gustarte