Usando uma matriz de LEDs 8 x 8 (1088AS) com Arduino Uno SEM MAX7219

 

1088AS

Material

Neste projeto vamos precisar de:



Para saber lado de referência, basta olhar onde está escrito o modelo do Led (onde tem um chanfro):



Datasheet da Matriz de Led:


· Emitted Colour: Red
· Face Color: Black
· Type: Row Cathode, Column Anode
· Wavelength : 625 ~ 630nm
· Forward Voltage : 2.1V ~ 2.5V
· Forward Current: 20mA
· Dimesions: 32mm x 32mm x 8.0mm


Cálculo do resistor

Tensão do Arduino 5V
Lei de Ohms: R = V / I
logo, R = (5V - 2.1V) / 0,02A => 2,9 / 0,02 = 145R (Mínimo)


Assim como o display de 7 segmentos, o display de matriz de pontos tem dois tipos: ânodo comum (+) e cátodo comum (-). 

No modelo de ânodo comum, os ânodos dos 64 leds na matriz de pontos são conectados entre si, e no modelo de cátodo comum, os cátodos dos leds são conectados entre si.



    
    No modelo de ânodo comum, para acender o LED, a tensão (+) deve ser aplicada na  linha e o GND ligado na coluna, no modelo Cátodo é o contrário.

Resumindo:

Modelo Ânodo Comum = Linhas (ânodo comum +) | Colunas (cátodo comum -) - imagem à esquerda
Modelo Cátodo Comum = Linhas (cátodo comum -) | Colunas (ânodo comum +) - imagem à direita

Observações:

Neste projeto vou utilizar a matriz Cátodo Comum - Linhas (cátodo comum) |  Colunas (ânodo comum).

Isso quer dizer que o Led só vai acender quando a coluna estiver energizada e a linha estiver em GND ou nível lógico 0. O contrário não vai acender, pois o Led só acende nesse sentido.


Portanto, se quiser acender o LED da 3ª coluna por exemplo e da 4ª linha, você precisa energizar a 3ª coluna (HIGH) e colocar a 4ª linha em nível lógico 0 (LOW)




O visor de matriz 8 × 8 tem 16 pernas. Em vez de conectar diretamente um módulo com tantas pernas ao Arduino, outra opção seria conectar a um CI. O driver IC chamado MAX7219 que é geralmente usado para matriz de leds 8×8. Mas isso num próximo tutorial...




Esquema de conexão com o Arduino


Colocar resistores nas linhas, ou seja, pinos 1, 2, 5, 7, 8, 9, 12 e 14.
* Não foi utilizado os pinos 0 e 1 do Arduino UNO para evitar conflito no upload e na comunicação serial.






Abaixo exemplo da montagem em uma placa de fenolite:




Funcionamento da Matriz de Led

DIGITANDO O CÓDIGO NO ARDUINO


Essa matriz funciona apagando os leds das linhas e acendendo os leds das colunas.


1º - Vamos começar definindo os pinos do Arduino que serão linhas e os que serão colunas:

int linhas[8] = {13, 8, 17, 10, 5, 16, 4, 14}; // Pinos do Arduino que controlam as linhas

int colunas[8] = {9, 3, 2, 12, 15, 11, 7, 6}; // Pinos do Arduino que controlam as colunas

Olhando a tabela em ordem de linha e coluna fica melhor de entender:



2º - Definir seu tipo de Matriz (Ânodo ou Cátodo) comente a que não for usar:
// CATODO = (CATODO COMUM - LINHA | ANODO COMUM - COLUNA)
byte ON = 1, OFF = 0;


// ANODO = (ANODO COMUM - LINHA | CATODO COMUM - COLUNA)
// byte ON = 0, OFF = 1;


3º - Agora vamos definir que os pinos do Arduino (2 a 17), como pinos de saída, usando a função pinMode( ):
*Desta forma, em um Arduino UNO, os pinos analógicos A0, A1, A2 e A3 passam a funcionar como pinos digitais 14, 15, 16 e 17.

void setup() { for (int i = 2; i < 18; i++) { // Vai de 2 até 17 definindo os pinos como saída pinMode(i, OUTPUT); } }


4º - No loop( ) vamos definir quais leds vamos apagar (linha 2) e os que vamos acender (coluna 2):
* Em um Array a contagem começa em 0.

void loop() { digitalWrite(colunas[1], ON); // COLUNA 2 (PINO 3 ARDUINO) digitalWrite(linhas[1], ON); // LINHA 2 (PINO 8 ARDUINO) delay(10); }


ACENDENDO COLUNA 2 E APAGANDO LINHA 2:

Código Completo:

int linhas[8] = {13, 8, 17, 10, 5, 16, 4, 14}; // Pinos do Arduino que controlam as linhas int colunas[8] = {9, 3, 2, 12, 15, 11, 7, 6}; // Pinos do Arduino que controlam as colunas

// CATODO COMUM - LINHA | ANODO COMUM - COLUNA byte ON = 1, OFF = 0; // ANODO COMUM - LINHA | CATODO COMUM - COLUNA // byte ON = 0, OFF = 1; void setup() { for (int i = 2; i < 18; i++) { // Vai de 2 até 17 definindo os pinos como saída pinMode(i, OUTPUT); } } void loop() { digitalWrite(colunas[1], ON); // COLUNA 2 (PINO 3 ARDUINO) digitalWrite(linhas[1], ON); // LINHA 2 (PINO 8 ARDUINO)

    // Como as linhas são todas negativas, a coluna (+) inteira é ligada, mas quando você
    // energiza 'ON' a linha, ela apaga porque não é possível acender um LED
    // quando tem sinal nas duas polaridades ou quando a polaridade é invertida,
    // Por este motivo você não vai coseguir ligar um led energizando a linha e desligando a coluna.

delay(10); }


DEVE FICAR ASSIM:



TESTANTO TODA A MATRIZ:


int linhas[8] = {13, 8, 17, 10, 5, 16, 4, 14}; // Pinos que controlam as linhas
int colunas[8] = {9, 3, 2, 12, 15, 11, 7, 6}; // Pinos que controlam as colunas

//  CATODO- COMUM - LINHA | ANODO+ COMUM - COLUNA
byte ON = 1, OFF = 0;
// ON NA COLUNA ACENDE
// ON NA LINHA APAGA O LED

// ANODO COMUM - LINHA | CATODO COMUM - COLUNA
//byte ON = 0, OFF = 1;

void setup() {
  for (int i = 2; i < 18; i++) { // Vai de 2 até 17 definindo os pinos como saida
    pinMode(i, OUTPUT);
  }
}

void loop() {
  for (byte j=0;j<8;j++) {
    digitalWrite(colunas[j], ON); // ACENDE AS COLUNAS 1 POR VEZ
    delay(500);
    }
  for (byte j=0;j<8;j++) {
    digitalWrite(linhas[j], ON); // APAGA AS LINHAS 1 POR VEZ (LINHA LIGADA NÃO ACENDE LED)
    delay(500);
    }

  desligar();        // (C-) --> (L-)

  digitalWrite(colunas[0], LOW);
  byte i, j;
  for (i = 0; i < 8; i++) {        // COLUNA
    for (j = 0; j < 8; j++) {     // LINHA
      digitalWrite(colunas[i], ON);    // LIGA COLUNA
      digitalWrite(linhas[j], ON);     // APAGA LINHA POR LINHA DESSA COLUNA

      if (j > 0) { // Se não for a primeira linha, apaga a linha anterior
        digitalWrite(linhas[j - 1], OFF); // Acende a linha anterior para apagar a próxima
      }

      delay(200); // Delay entre os LEDs
    }
    digitalWrite(colunas[i], OFF); // Depois de sair do for (linha), apaga a coluna
    digitalWrite(linhas[j - 1], OFF); // para acender a última linha que foi apagada no for
    // VAI PARA A PRÓXIMA COLUNA
  }

  desligar();     // (C-) --> (L-)
}


void desligar() {            // (C-) --> (L-)
  for (int i=0;i<8;i++) {
    digitalWrite(linhas[i],OFF); // LINHAS NEGATIVA(0) SEM COLUNA(1) NÃO ACENDE O LED
  }
  for (int i=0;i<8;i++) {
    digitalWrite(colunas[i],OFF); // APAGA AS COLUNAS
  }
}


RESULTADO DO CÓDIGO ACIMA:





DESENHANDO UM CORAÇÃO:




int linhas[8] = {13, 8, 17, 10, 5, 16, 4, 14}; // Pinos que controlam as linhas
int colunas[8] = {9, 3, 2, 12, 15, 11, 7, 6}; // Pinos que controlam as colunas

// CATODO COMUM - LINHA | ANODO COMUM - COLUNA
byte ON = 1, OFF = 0;
// ANODO COMUM - LINHA | CATODO COMUM - COLUNA
//byte ON = 0, OFF = 1;

void setup() {
  for (int i = 2; i < 18; i++) { // Vai de 2 até 17 definindo os pinos como saida
    pinMode(i, OUTPUT);
  }
}

void loop() {
  int i, j;

  // CORAÇÃO
  digitalWrite(colunas[0], ON); // SELECIONA A COLUNA 1
  for(i=2;i<4;i++) {
    digitalWrite(linhas[i], OFF); // ACENDE AS LINHAS 2 E 4 DESSA COLUNA
  }
  delayMicroseconds(20);
  apagar();
 
  digitalWrite(colunas[1], ON); // SELECIONA A COLUNA 2
  digitalWrite(linhas[1], OFF); // LINHA 2 (ACENDE)
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  delayMicroseconds(20);  
  apagar();
 
  digitalWrite(colunas[2], ON); // COLUNA 3
  digitalWrite(linhas[1], OFF); // LINHA 2 (ACENDE)
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  digitalWrite(linhas[5], OFF); // LINHA 6 (ACENDE)
  delayMicroseconds(20);
  apagar();
 
  digitalWrite(colunas[3], ON); // COLUNA 4
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  digitalWrite(linhas[5], OFF); // LINHA 6 (ACENDE)
  digitalWrite(linhas[6], OFF); // LINHA 7 (ACENDE)
  delayMicroseconds(20);  
  apagar();
 
  digitalWrite(colunas[4], ON); // COLUNA 5
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  digitalWrite(linhas[5], OFF); // LINHA 6 (ACENDE)
  digitalWrite(linhas[6], OFF); // LINHA 7 (ACENDE)
  delayMicroseconds(20);      
  apagar();
 
  digitalWrite(colunas[5], ON); // COLUNA 6
  digitalWrite(linhas[1], OFF); // LINHA 2 (ACENDE)
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  digitalWrite(linhas[5], OFF); // LINHA 6 (ACENDE)
  delayMicroseconds(20);
  apagar();
 
  digitalWrite(colunas[6], ON); // COLUNA 7
  digitalWrite(linhas[1], OFF); // LINHA 2 (ACENDE)
  digitalWrite(linhas[2], OFF); // LINHA 3 (ACENDE)
  digitalWrite(linhas[3], OFF); // LINHA 4 (ACENDE)
  digitalWrite(linhas[4], OFF); // LINHA 5 (ACENDE)
  delayMicroseconds(20);  
  apagar();
 
  digitalWrite(colunas[7], ON); // COLUNA 8
  for(i=2;i<4;i++) {
    digitalWrite(linhas[i], OFF); // ACENDE TODAS LINHAS
  }
  delayMicroseconds(20);
  apagar();
}

void apagar() {
  for (int i=0;i<8;i++) { //
    digitalWrite(linhas[i],ON); // apaga todas linhas
  }
  for (int i=0;i<8;i++) { //
    digitalWrite(colunas[i],OFF); // apaga todas colunas
  }
}




SOFTWARE PARA DESENHO:

Para baixar e instalar:

Dot Matrix do Circuito Maker

OU

Online no GitHub o LED Matrix Editor

* basta clicar nos leds para acender




Material de referência principal: http://squids.com.br/arduino



Nenhum comentário:

Postar um comentário

Postagens mais visitadas