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

Documentacion Practica #3

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

Cubo de Leds

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.

Arqui1 Practica #3

Cubo de Leds

Diagrama del circuito:


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

Arqui1 Practica #3

Cubo de Leds 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.

Arqui1 Practica #3

Cubo de Leds

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); }

Arqui1 Practica #3

Cubo de Leds 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; } }

Arqui1 Practica #3

Cubo de Leds 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++){ Arqui1 Practica #3

Cubo de Leds 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); } Arqui1 Practica #3

Cubo de Leds 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++){ Arqui1 Practica #3

Cubo de Leds 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); } } Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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: Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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(){ Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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); Arqui1 Practica #3

Cubo de Leds 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); } }

Arqui1 Practica #3

Cubo de Leds

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.

Arqui1 Practica #3