Está en la página 1de 11

Universidad

Tecnolgica
de Bolvar
Informe Laboratorio #4:
LED MATRIX
Gloria Isabel Montoya Navarro T00022006
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

OBJETIVOS
Reconocer el proceso adecuado para crear una secuencia de caracteres mediante una matriz
de LEDs de 5x8.
Escribir, simular, compilar un cdigo con un propsito especfico en una tableta de Arduino
usando cdigo C++.
Usar el software provisto por Arduino para desarrollar un proyecto sencillo, en este caso
usar una matriz de 5x8 para percibir el nombre completo de una persona.

DESCRIPCIN DE LA APLICACIN
En este laboratorio usaremos el cdigo ejemplo Displaying images with a LED Matrix que se
encuentra en la seccin 7.8 del CookBook. Compilamos y cargamos al micro controlador. Lo que
hace este programa es usar mostrar imgenes almacenadas en mapas de bits, en este caso se
mostrara un corazn latiendo. Las columnas y las filas son multiplexadas, pero en este caso el valor
escrito para el LED se basa en imgenes almacenados en las matrices bigHeart y smallHeart. Cada
elemento de la matriz representa un pxel (un nico LED) y cada fila de la matriz representa una fila
en la matriz. Una fila se compone de ocho bits representan usando formato binario (como designado
por B al comienzo de cada fila). Un poco con un valor de 1 indica que el correspondiente LED
debe estar encendido, un 0 significa apagado. El efecto de animacin se crea por la velocidad de
conmutacin entre las matrices. Por ultimo modificamos y diseamos un cdigo que nos permita
crear una secuencia de caracteres, en este caso nuestro nombre, que se desplacen horizontalmente,
controlando la velocidad usando un potencimetro conectado a una entrada analgica.
EJERCICIO
Parte A
Descripcin de la aplicacin: En la primera parte se conecta el circuito como se muestra en la
figura X, donde las etiquetas conectadas al arduino con cable morado representan las filas de la
matriz (nodos) y las etiquetas conectadas con cable verde representan las columnas (ctodos); el
objetivo es mostrar un corazn que de la sensacin de latido para esto se guarda cada imagen como
un bitmap o mapa de bit, el cual se organiza usando 1s y 0s de manera que se pueda obtener la
imagen deseada. Los 0 indican LEDs apagados los 1 LEDs encendidos. Los pines de la matriz son
relacionados con la tarjeta arduino como se muestra en la figura X, para as poder mostrar la imagen
del corazn pequeo y la del corazn grande una al tiempo, esperando entre cada imagen 300ms,
para as crear el efecto de latido.
Relacionar el mapa bit con la matriz de LEDs se logra a travs de una funcin que hemos
denominado: show, la cual bsicamente hace un recorrido por las filas y las columnas de la
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

matriz para encender aquellos bits asignados como 1s y mantener apagado los asignados
como 0s de manera tal que se pueda as visualizar la imagen o las imgenes configuradas.

Circuito






























Fig. 1
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3


Diagrama de Flujo
































Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

Cdigo
/*
Animacin Corazn Latiendo
*/
byte smallHeart[] ={
B00000,
B00000,
B00100,
B01110,
B01010,
B00000,
B00000,
B00000};
byte bigHeart[] = {
B00000,
B00100,
B01110,
B11111,
B11111,
B01010,
B00000,
B00000};

//2,17,15,7,12
const int columnPins[] = {6, 5, 4, 3, 2};
//19,11,20,14,4,10,1,9
const int rowPins[] =
{10,11,12,15,16,17,18,9};

void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(rowPins[i], OUTPUT);
}
for(int j=0;j<5;j++)
{
pinMode(columnPins[j], OUTPUT);
digitalWrite(columnPins[j], HIGH); //
disconnect column pins from Ground
}}

void loop() {
int pulseDelay = 300 ; // milliseconds to
wait between beats
show(smallHeart, 120);// show the small
heart image for 160 ms
delay(pulseDelay); // show nothing
between beats
show(bigHeart, 170); // followed by the
big heart for 160ms
delay(pulseDelay);
}
void show( byte * image, unsigned
duration)
{
unsigned long start = millis();
while (start + duration > millis())
{
for(int row = 0; row < 8; row++)
{
digitalWrite(rowPins[row], HIGH); //
connect row to +5 volts
for(int column = 0; column < 5;
column++)
{
boolean pixel =
bitRead(image[row],column);
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

if(pixel == 1)
{
digitalWrite(columnPins[column],
LOW); // connect column to Gnd
}
delayMicroseconds(300); // a small delay
for each LED
digitalWrite(columnPins[column],
HIGH); // disconnect column from Gnd
}
digitalWrite(rowPins[row], LOW); //
disconnect LEDs
}}}

Parte B: NOMBRE
Descripcin de la aplicacin: En esta parte se implementara un cdigo que permita visualizar
GLORIA ISABEL MONTOYA NAVARRO T00022006 en la matriz de LEDs, variando la
velocidad con la que las letras pasan por la matriz, lo cual se logra a travs de la variacin de voltaje
de un potencimetro el cual es usado como un regulador de velocidad, usando el siguiente cdigo se
lee la entrada analgica del potencimetro:
int val=analogRead(AO);
int dig=map(val,0,1023,0,100);
dispSpeed=dig;
Al inicio de cdigo de debe declarar las variables a implementar y la asignacin de los pines de la
tarjeta arduino como filas y columnas.
Es importante recalcar que al inicio del programa se utiliza una nueva forma de hacer un mapa de
bit por medio de #define, esta instruccin permite dar un nombre a un valor constante antes de que
se compile en el programa, de manera que luego se puede llamar simplemente nombrndola.
Para entenderlo mejor en la siguiente imagen donde se muestra un ejemplo para declarar el numero
6









Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

De tal manera que al introducirlo en el cdigo se escribe:
#define g {127, 73, 73, 73, 79}//6



Por medio de #define se puede definir los caracteres o imgenes con equivalente en decimal del
nmero en binario correspondiente a cada columna. Esto se hace para tener un fcil el manejo del
mapa de bit.
Se sigue con la configuracin de los pines para comenzar el lazo fundamental a travs del cual se
van mostrando letra por letra usando internamente adems de algunos ciclos for para el correcto
sondeo del mapa de bits, dos funciones denominadas shiftLeft() y display().
shiftLeft(): permite ir corriendo la letra de derecha a izquierda mediante un ciclo for
interno.
display(): permite sondear el mapa de bits interno de cada letra que previamente
declaramos, para as encender los LEDs de la Matriz correspondiente a cada letra
configurada.
Al final es posible visualizar la frase almacenada en la variable
byte string[NumLetra][5] =
{G,L,O,R,I,A,SP,I,S,A,B,E,L,SP,M,O,N,T,O,Y,A,N,A,V,A,R,R,O,SP,T,o,o,o,l,l,o,o,g,SP};












NOTA: No se escribe #define 6 ya que al compilar presentar un error:
NombreCompleto.ino:38:9: error: macro names must be identifiers
NombreCompleto:42: error: braces around scalar initializer for type 'byte'
Por esta razn se definieron los nmeros con letras minsculas aclarando en un comentario a que numero
correspondan.
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

Diagrama de flujo:






Circuito:






















Fig. 2
Cdigo:
/*
Mi Nombre Secuencial
*/
int pins[14]= {-1, 2, 15, 16, 17, 18, 19, 5, 6,
10, 11, 12, 3, 4};
int AO=19;
int dispSpeed = 15;
int cols[5] = {6,5,4,3,2};
int rows[8] = {10,11,12,15,16,17,18,9};
#define SP {0, 0, 0, 0, 0}
#define A {31, 36, 68, 36, 31}
#define B {127, 73, 73, 73, 54,}
#define C {62, 65, 65, 65, 34}
#define D {127, 65, 65, 34, 28}
#define E {127, 73, 73, 65, 65}
#define F {127, 72, 72, 72, 64}
#define G {62, 65, 65, 69, 38}
#define H {127, 8, 8, 8, 127}
#define I {0, 65, 127, 65, 0}
#define J {2, 1, 1, 1, 126}
#define K {127, 8, 20, 34, 65}
#define L {127, 1, 1, 1, 1}
#define M {127, 32, 16, 32, 127}
#define N {127, 32, 16, 8, 127}
#define O {62, 65, 65, 65, 62}
#define P {127, 72, 72, 72, 48}
#define Q {62, 65, 69, 66, 61}
#define R {127, 72, 76, 74, 49}
#define S {50, 73, 73, 73, 38}
#define T {64, 64, 127, 64, 64}
#define U {126, 1, 1, 1, 126}
#define V {124, 2, 1, 2, 124}
#define W {126, 1, 6, 1, 126}
#define X {99, 20, 8, 20, 99}
#define Y {96, 16, 15, 16, 96}
#define Z {67, 69, 73, 81, 97}
#define l {79, 73, 73, 73, 121}//2
#define o {127, 65, 65, 65, 127}//0
#define g {127, 73, 73, 73, 79}//6
byte bit[8] = {1,2,4,8,16,32,64,128};
byte colVals[5] = {0, 0, 0, 0, 0};
const int NumLetra = 39;
byte string[NumLetra][5] =
{G,L,O,R,I,A,SP,I,S,A,B,E,L,SP,M,O,N,T,
O,Y,A,N,A,V,A,R,R,O,SP,T,o,o,o,l,l,o,o,g,S
P};
void setup() {
for (int i = 1; i <= 13; i++)
{pinMode(pins[i], OUTPUT); }
for (int col = 0; col < 5; col++)
{digitalWrite(cols[col], HIGH);}
for (int row = 0; row < 8; row++)
{digitalWrite(rows[row], HIGH);}
}
void loop() {
for (int ltr = 0; ltr < NumLetra; ltr++)
{for (int y = 0; y < 7; y++)
{shiftLeft();
if (y < 5)
{colVals[4] = string[ltr][y];}
else {colVals[4] = 0; }
int val=analogRead(AO);
int dig=map(val,0,1023,0,100);
dispSpeed=dig;
for (int x = 0; x < dispSpeed; x++)
{display();}
Universidad Tecnolgica de Bolvar, INFORME DEL LABORATORIO #3

}}}

void shiftLeft(){
for (int x = 0; x < 8; x++)
{colVals[x] = colVals[x + 1];}
}

void display() {
for (int col = 0; col < 5; col++)
{for (int row = 0; row < 8; row++)
{if (colVals[col] & bit[row])
{digitalWrite(rows[row], HIGH);}
}
digitalWrite(cols[col], LOW);
delay(1);
for (int row = 0; row < 8; row++)
{digitalWrite(rows[row],LOW);}
digitalWrite(cols[col], HIGH);
}}

CONCLUSIONES
Al finalizar esta prctica de laboratorio con el programa y la tarjeta arduino, y luego de los
resultados obtenidos del cdigo implementado, se obtienen las siguientes conclusiones:
Se observ y entendi el funcionamiento y distribucin de pines de una matriz 5x8 bicolor.
Se aprendieron nuevas funciones para declarar variables y llamarlas en un punto dado del
programa como #define.
En la parte fsica del circuito se omitieron los transistores, ya que aunque estos proveen
ganancia para q los leds de la matriz iluminen ms se logr una buena iluminacin intensa y
uniforme conectndolos a travs de la resistencia y an ms conectndolos directamente
con las entradas del arduino.

REFERENCIAS
Matriz LED 8x8 Bicolor + 74CH595 [En lnea]: http://www.arduteka.com/2012/02/tutorial-
arduino-0008-matriz-led-8x8-bicolor-74ch595/
http://fritzing.org/download/ - Programa para crear el circuito
Arduino CookBook

También podría gustarte