Básico - Projeto 61

Dado eletrônico com leds e manipulação direta de portas

Objetivo

Como no projeto anterior vamos criar um "dado eletrônico" que irá sortear números de 1 a 6 só que agora com leds. Cada jogada é realizada ao pressionar um botão. Iremos também, como no projeto anterior, apresentar o conceito de manipulação direta de portas do Arduino onde mostraremos como utilizar um registrador de portas DDR e PORT.

ATENÇÃO: Tome muito cuidado em utilizar o conceito de manipulação direta de portas. Qualquer erro pode danificar permanentemente o seu Arduino.

Registradores de portas (PORT) do Arduino Uno R3

Registradores de portas (PORT) permitem o acesso direto às portas do Arduino. Veja abaixo a imagem que mostra todas portas disponíveis do Arduino UNO:

Nos microcontroladores Arduino Uno, existem 3 canais de portas:

  • B (portas digitais de 8 a 13)
  • C (entradas analógicas)
  • D (portas digitais de 0 a 7)

Vamos utilizar neste projeto apenas as portas do canal D que são referentes às portas digitais de 0 a 7 do Arduino ( PORTPD).

Também podemos utilizar os registradores:

  • DDR que configura o sentido da porta se ela é saída (OUTPUT) ou entrada (INPUT). Substitui a função pinMode().
  • PORT que controla se a porta está no estado lógico alto (HIGH) ou baixo (LOW).
  • PIN que efetua a leitura das portas configuradas como INPUT pela função pinMode().

No nosso projeto vamos utilizar os registradores DDR e PORT conforme as instruções abaixo:

DDR

  • No caso do registrador DDR, vamos acrescentar o canal de portas D, ficando portanto como DDRD (portas digitais de 0 a 7 no Arduino Uno).
  • Definimos para cada porta se é saída (OUTPUT), usando o 1 ou se é entrada (INPUT), usando o 0.
  • A ordem das portas é decrescente e vai de PD7 até PD0.
  • Como é um número binário, devemos colocar o modificador "B" na frente, veja o exemplo a seguir:

Ex.:

DDRD = B11111110;  // configura portas 1 ate 7 como saídas,e a porta 0 como entrada

PORT

  • Como no registrador DDR, vamos acrescentar no PORT o canal de portas D, ficando portanto como PORTD (portas digitais de 0 a 7 do Arduino Uno).
  • Definimos para cada porta, se está no estado lógico HIGH, usamos 1 ou se está no estado lógico LOW, usamos 0.
  • A ordem das portas vai de PD7 até PD0.
  • Como é um número binário, devemos colocar o modificador "B" na frente, veja o exemplo a seguir:
PORTD = B10101000;  // registra valor HIGH nas portas digitais 7,5 e 3

Aplicação

Para fins didáticos e projetos com relógios digitais e equipamentos com contadores.

Componentes necessários

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Led Difuso 5mm LEDs 5mm alto brilho 7

7 LEDs alto brilho vermelho

 

Você poderá utilizar também LEDs de qualquer outra cor ou LEDs difuso de 3 ou 5mm nas cores que desejar.

Resistor Resistor 7

7 Resistores de 150Ω ou superior

Push Button Push button 6X6X5mm 1  
Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito. Simulação

Atenção

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led.

2.1 . Se você não tiver os dados do componente, utilize um resistor maior ou igual a 150 Ω. Lembre-se, quanto maior o valor do resistor menor será a intensidade do brilho dos leds do display.

Atenção: Para evitar danos no componente, não utilize resistores menores que 150 Ω. Para saber mais como calcular o resistor, leia Teste 02 - Leds ligados em série e em paralelo.

3. Faça a ligação dos leds com o arduino conforme a tabela abaixo:

ARDUINO Led
Pino 1 Pino 7
Pino 2 Pino 6
Pino 3 Pino 4
Pino 4 Pino 2
Pino 5 Pino 1
Pino 6 Pino 9
Pino 7 Pino 10

Nota: Observe que utilizamos o pino 1 do Arduino neste projeto. Entretanto, a utilização do pino 1 só é recomendável quando não houver transmissão de dados (uso do Monitor Serial) pois faz com que o led (segmento A no nosso exemplo) acenda durante a transmissão. Isto faz com que a visualização no display de 7 segmentos fique confusa. Portanto, só use o pino 1 quando não utilizar o Monitor Serial.

3) Monte o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino)  ou assista o vídeo Arduino: Botão e Resistor de Pull Up Interno

5) Para usarmos o recurso de registros de portas para um display, vamos definir os valores binários que usaremos para acender (HIGH) ou apagar (LOW) os segmentos para cada porta "D" do Arduino Uno. Para isso, vamos fazer uma tabela:

Tabela para montagem dos leds e definição dos valores binários

Obs1.: A tabela acima foi definida tomando como premissa a posição dos leds conforme as faces do dado abaixo:

Obs2.: Veja como fica a montagem dos leds neste projeto: