Nesta primeira aula sobre o shield Multi-function para o Arduino Uno eu vou explicar os componentes principais da placa e vamos fazer um primeiro programa para usar alguns deles.
Como eu já disse no blog, este shield é ideal para quem está aprendendo os conceitos básicos de eletrônica e também aprendendo a programar com o Arduino. Outra vantagem deste shield é que ele é muito barato. Eu comprei o meu na Santa Efigênia por R$30,00. Mas já vi que no mercado livre estão vendendo por até R$25,00.

Nesta série de aulas sobre o Multi-function eu vou dar alguns exemplos de aplicações e explicar passo a passo como escrever os programas para estas aplicações. Ao mesmo tempo eu vou ir explicando como funcionam os componentes dos circuitos da placa para que o aluno saiba como resolver os problemas que certamente irão aparecer durante os testes.

Vamos começar logo, mas antes eu gostaria de dar um alerta sobre um problema que ocorreu com a minha placa. Logo na primeira vez que eu instalei minha placa Multi-function no meu Arduino eu percebi que um dos displays não acenderam. Logo achei que fosse um defeito na placa que havia comprado, mas uma inspeção mais cuidadosa revelou que a placa Multi-function estava encostando no conector USB da placa Arduino. Pesquisando na internet mais tarde, pude comprovar que este é um problema comum na placa Multi-function. Ao encaixar a placa Multi-function no Arduino os terminais do display ficam perigosamente próximos do conector USB do Arduino, que é de metal, causando um curto. Felizmente no meu caso este curso não danificou minha placa. Então eu passei a usar uma fita isolante entre a placa Multi-function e o Arduino e não tive mais problemas. Mas fica o alerta para o leitor: Melhor já colocar uma isolação neste ponto antes de ligar o conjunto para evitar que algo se queime.

O primeiro componente da placa Multi-function que eu vou explicar é o módulo com 4 displays de 7 segmentos de led. A figura 1 mostra o esquemático desta parte da placa. Podemos ver neste esquema o display U1 com seus 8 pinos de segmentos chamados “a, b, c, d, e, f, g, h”, e seus 4 pinos de comum chamados “1, 2, 3, 4”. Para acionar os dígitos do display temos que aplicar sinais multiplexados. O multiplex é muito usado para acionar matrizes de leds e displays porque desta forma economizamos sinais e consequentemente pinos. Para ter uma idéia do que estou falando, para acionarmos 4 displays separadamente iríamos precisar de 8 sinais para cada display, ou seja 32 pinos. Como o multiplex, usamos apenas 12 pinos para fazer a mesma tarefa. O truque é fazer cada display acender em um período de tempo diferente e de forma bem rápida. Desta forma nossos olhos nem percebem que o display está piscando e mostrando um número de cada vez. Vamos ter a oportunidade de detalhar melhor como funciona o multiplex em uma aula futura.

Os sinais do multiplex são gerados pelos CIs MC74HC595AD. Estes CIs recebem o sinal de forma serial dos pinos do Arduino e transforma para sinais paralelos que por sua vez ligam e desligam os segmentos dos displays.

fig1

Figura 1- Display multiplexado

Além do display a placa Multi-function possui 4 leds para visualização das funções. A figura 2 mostra o esquema de ligação dos leds indicando os sinais do Arduino que são usados para o acionamento desses leds. É importante observar no esquema a polaridade do led. Eles estão em montagem anodo comum. Isso quer dizer que para fazer qualquer um dos leds acenderem temos que colocar o respectivo sinal em nível lógico 0 (false). Desta forma o led fica polarizado e acende.

fig2

Figura 2- esquema dos leds

 

Em seguida vamos analisar o esquema das teclas. A placa Multi-function possui 3 teclas de uso geral e uma tecla de reset. As teclas de uso geral estão montadas conforme o esquema da figura 3. Os sinais A1, A2 e A3 são entradas analógicas do Arduino e aqui elas foram usadas para a leitura do estado das teclas deixando outros sinais digitais do Arduino para livres para outros usos. Os sinais das teclas ficam em 5V quando não está sendo acionada. Ao pressionarmos alguma tecla seu sinal fica em 0V. Para ler o estado de uma tecla temos que usar o conversor analógico-digital do Arduino. Vamos ver como isso é feito no programa de teste no final desta aula. O jumper J1 dever estar sempre montado na placa para podermos ler as teclas desta forma.

FIG3

Figura 3- esquema das teclas

 

Outras funções presentes na placa Multi-function são o potenciômetro para teste da entrada analógica A0 e o buzzer para geração de som. Na próxima aula iremos explicar estes circuitos dando exemplos de uso em programas.

O programa exemplo desta aula apresenta no display uma contagem de 0 até 9999 com tempo de incremento de 100ms. Além disso quando uma tecla é acionada na placa um led acende. São algumas tarefas bem simples, mas que já faz uso de todos os componentes que foram explicados nesta aula. No final do post está todo o programa transcrito. Acompanhe a descrição das funções pelos números das linhas.

Na primeira parte do programa, a partir da linha 9, temos as definições de constantes que serão utilizadas no programa. A diretiva “#define” é usada para que o compilador substitua no corpo do programa toda palavra que for igual a palavra que vem logo após o #define pelo número que vem na sequência. Em nosso caso, por exemplo, o compilador substitui as palavras LATCH_DIO pelo número 4 no corpo do programa. Uma das razões para se usar o #define é para facilitar uma eventual troca de pinos do Arduino. Se for o caso de uma troca de pino após o programa estar pronto, só precisamos alterar o número que aparece após a palavra da definição, e não no corpo do programa. Outra razão é para facilitar a compreensão do programa pelo uso de nomes ao invés de números no corpo do programa.

Nas linhas 20 e 23 as constantes SEGMENT_MAP e SEGMENT_SELECT são os valores que devem ser enviados pela interface serial para acender os números no display. Em seguida temos as definições de variáveis que são usadas no programa a partir da linha 26.

Em seguida temos a função SETUP(), iniciando na linha 34, que é executada no inicio do programa apenas para que sejam feitas as inicializações de variáveis e periféricos do Arduino. Em nosso programa vamos usar a função SETUP() para inicializar os pinos do Arduino que serão usados como saídas. Além disso vamos ler o valor atual da contagem de milissegundos e guardar em nossa variável ultimoMilis na linha 47.

A variável ultimoMilis é usada no programa para contar um tempo predefinido de 100 ms. Usamos este tempo para fazer o incremento da variável contador cujo valor é mostrado no display. Mas isso estamos fazendo dentro da função LOOP() a partir na linha 53. Esta é a função principal de qualquer programa do Arduino, e fica em execução continuamente em um looping infinito.

Logo no inicio da função LOOP() chamamos a rotina writeNumberToSegment 4 vezes para escrever os 4 dígitos de nosso contador no display. Cada vez que chamamos a rotina writeNumberToSegment acendemos apenas 1 digito do display e apagamos os demais. Mas isso acontece de forma tão rápida que parece que todos os 4 dígitos estão acesos ao mesmo tempo. Essa é a multiplexação do display.

A partir da linha 62, temos uma instrução “if” que verifica quando completa um período de tempo igual a 100ms. O restante do programa está todo dentro do escopo desta instrução “if”, desde a linha 64 até a linha 86, e, portanto, só é executado uma vez a cada 100ms. Dentro deste escopo acontece o incremento da variável contador com uma proteção para que quando estourar o valor de 9999 retorne para o valor 0 (linha 68). Da linha 69 até a linha 75, temos os cálculos para separar os dígitos da variável contador em 4 variáveis distintas para poderem ser mostradas no display.

Finalmente da linha 79 até 86 temos as instruções de leitura das entradas analógicas onde estão ligadas as teclas da placa Multi-function. Do modo que está feita a conexão das teclas no esquema da placa, vamos ter um resultado de leitura analógica próximo de 0 quando a tecla está pressionada e próximo de 1023 quando a tecla não está pressionada. Por isso usamos um valor de comparação igual a 100. Quando o valor da leitura analógica é maior que 100 colocamos a saída que está ligada a um led em estado lógico “true” e o led fica apagado. Se o valor for menor que 100 quer dizer que a tecla está pressionada e colocamos a saída em estado lógico “false” e o led acende.

E isso é tudo que nosso programa exemplo faz. Nas próximas aulas iremos fazer outros exemplos usando ainda outros componentes da placa Multi-function.

 

prog1

prog2

prog3

prog4

prog5