O Arduino é uma excelente plataforma para aprender eletrônica e programação porque permite transformar uma ideia relativamente simples em um sistema físico que realmente funciona.
Um exemplo interessante é este projeto que desenvolvi: um marcador eletrônico para jogo de tênis, utilizando Arduino, display LCD e um controle remoto para registrar os pontos dos jogadores.
A ideia é simples:
cada vez que um jogador ganha um ponto, pressionamos uma tecla do controle remoto e o Arduino atualiza automaticamente o placar apresentado no LCD.
Mas por trás dessa ideia existe uma combinação muito interessante de conceitos: entrada de dados, comunicação por infravermelho, processamento, armazenamento de estados e apresentação de informações.
A ideia do marcador eletrônico
Em vez de atualizar o placar manualmente, podemos deixar o Arduino responsável por controlar a pontuação.
A estrutura básica do projeto pode ser representada assim:
CONTROLE REMOTO
↓
INFRAVERMELHO
↓
RECEPTOR IR
↓
ARDUINO
↓
LÓGICA DO JOGO
↓
DISPLAY LCD
↓
PLACAR
O controle remoto funciona como a interface de entrada.
O LCD funciona como a interface de saída.
E o Arduino fica no meio, interpretando os comandos e decidindo o que deve aparecer no placar.
Por que usar um controle remoto?
Uma possibilidade seria simplesmente instalar dois botões próximos ao display:
[JOGADOR A] [JOGADOR B]
Funcionaria.
Mas o controle remoto cria uma solução mais interessante: o placar pode ficar em determinado local enquanto a pontuação é atualizada à distância.
Isso também torna o projeto uma excelente experiência para aprender como um Arduino pode receber comandos infravermelhos.
Como o controle remoto se comunica com o Arduino?
Controles remotos infravermelhos não enviam simplesmente um sinal contínuo de luz.
Quando pressionamos uma tecla, o controle transmite uma sequência codificada de pulsos infravermelhos.
De maneira simplificada:
BOTÃO
↓
CÓDIGO
↓
PULSOS INFRAVERMELHOS
↓
RECEPTOR IR
↓
ARDUINO
Cada botão pode ser associado a determinado comando.
Por exemplo:
BOTÃO 1 → ponto para jogador A
BOTÃO 2 → ponto para jogador B
Assim, o Arduino consegue identificar qual botão foi pressionado e executar a ação correspondente.
Bibliotecas como a IRremote permitem ao Arduino receber e decodificar diversos protocolos utilizados em controles infravermelhos, incluindo NEC, Sony, Samsung, RC5, RC6 e outros.
O receptor infravermelho
No circuito precisamos de um receptor IR compatível com o controle utilizado.
Conceitualmente teremos:
RECEPTOR IR
│
┌─────┼─────┐
│ │ │
VCC GND SINAL
│
ARDUINO
A pinagem não deve ser presumida apenas pela aparência do componente, porque pode variar entre modelos.
O receptor transforma os pulsos ópticos recebidos em um sinal elétrico que pode ser processado pelo microcontrolador.
Primeiro precisamos descobrir os códigos do controle
Essa é uma etapa interessante do projeto.
Antes de programar:
“Quando receber o botão 1, some um ponto.”
precisamos saber qual código corresponde ao botão 1 daquele controle.
Uma maneira comum é carregar inicialmente um programa receptor e observar pelo Monitor Serial os comandos recebidos.
A documentação atual da biblioteca IRremote inclusive recomenda utilizar seu exemplo ReceiveDemo para identificar protocolo, endereço e comando transmitidos pelo controle.
Depois podemos criar nossa associação:
comando X → jogador A
comando Y → jogador B
comando Z → zerar placar
Isso também significa que o projeto pode ser adaptado para diferentes controles remotos.
O LCD apresenta o resultado
O segundo elemento importante é o display LCD.
Ele permite transformar os valores armazenados pelo Arduino em informações compreensíveis para os jogadores.
Poderíamos imaginar algo como:
+----------------+
| A: 30 B: 15 |
| |
+----------------+
ou qualquer outra organização adequada ao display utilizado.
O importante é perceber que o LCD não controla a pontuação.
Ele simplesmente apresenta o estado calculado pelo programa.
Temos:
entrada → processamento → saída.
Esse é um conceito fundamental em sistemas embarcados.
O interessante do tênis: a pontuação não é uma simples contagem
Se estivéssemos construindo um placar para alguma atividade em que os pontos fossem:
0
1
2
3
4
5
...
a programação seria muito simples.
Mas o tênis oferece um desafio adicional.
A sequência convencional de pontos dentro de um game é:
0
15
30
40
e depois entram as condições necessárias para determinar o vencedor do game.
Isso torna o projeto particularmente interessante para programação.
Em vez de simplesmente fazer:
pontos++;
precisamos representar o estado atual do jogo.
Podemos separar o valor interno do que aparece na tela
Uma estratégia elegante é manter internamente uma variável numérica:
0 → 0
1 → 15
2 → 30
3 → 40
Ou seja, o Arduino não precisa armazenar literalmente:
15
30
40
como se esses números representassem a quantidade matemática de pontos.
Podemos ter:
pontosA = 2;
e a função responsável pelo LCD sabe que:
2 = "30"
Isso separa duas coisas diferentes:
a lógica interna do programa e a forma como a informação é apresentada ao usuário.
É uma prática muito útil em programação.
O programa passa a funcionar como uma máquina de estados
Podemos pensar no marcador como uma sequência de estados:
0
↓
15
↓
30
↓
40
↓
GAME / outras
condições
Cada comando recebido do controle provoca uma possível mudança de estado.
Por exemplo:
controle remoto
↓
"ponto jogador A"
↓
ler placar atual
↓
aplicar regra
↓
atualizar estado
↓
atualizar LCD
Isso é muito mais interessante didaticamente do que simplesmente acender um LED com Arduino.
E se apertarmos o botão duas vezes?
Aqui aparece outra questão prática.
O controle remoto pode transmitir informações de repetição quando mantemos uma tecla pressionada.
A biblioteca IRremote atual, por exemplo, trata explicitamente repeat frames e também permite detectar pressionamentos prolongados.
Para um placar isso precisa ser considerado.
Imagine:
15
o operador segura o botão um pouco mais do que deveria e o programa interpreta:
15 → 30 → 40
Isso seria um problema.
Dependendo da implementação, podemos programar o sistema para aceitar apenas um evento válido por acionamento ou tratar adequadamente os códigos de repetição.
Também é interessante ter uma função para corrigir erros
Na prática alguém inevitavelmente vai apertar:
o botão errado.
Por isso uma evolução interessante seria permitir:
+ ponto A
+ ponto B
- ponto A
- ponto B
RESET
Ou ainda implementar:
DESFAZER.
Nesse caso o Arduino poderia guardar o estado imediatamente anterior.
Teríamos:
ESTADO ANTERIOR
↓
ESTADO ATUAL
↓
DESFAZER
↓
ESTADO ANTERIOR
Esse pequeno detalhe transforma o projeto em um exercício ainda mais interessante de programação.
O LCD também pode apresentar outras informações
Depois que temos o Arduino controlando o jogo, não precisamos ficar limitados aos pontos.
Dependendo do tamanho do display e da evolução do projeto, poderíamos apresentar:
JOGADOR A
JOGADOR B
PONTOS
GAMES
SETS
E talvez outras informações.
Nesse momento começamos a perceber que o projeto pode evoluir de um simples contador para um verdadeiro placar eletrônico programável.
O projeto reúne hardware e software
É justamente isso que considero interessante neste tipo de experiência.
No hardware temos elementos como:
Arduino
+
receptor infravermelho
+
display LCD
+
alimentação
+
conexões
No software temos:
recepção do comando
+
identificação do botão
+
lógica da pontuação
+
controle dos estados
+
atualização do display
Separadamente, cada parte é relativamente simples.
O projeto surge da integração de todas elas.
Veja o marcador funcionando no vídeo
No vídeo abaixo mostro o marcador de jogo de tênis que desenvolvi utilizando Arduino e LCD, com os pontos sendo somados através de um controle remoto.
É um bom exemplo de como um projeto com Arduino pode sair das experiências tradicionais de LEDs e sensores e resolver uma tarefa concreta.
Um projeto simples que pode crescer bastante
O marcador também abre espaço para várias evoluções.
Poderíamos futuramente acrescentar comunicação sem fio, display maior, bateria recarregável, buzzer, nomes dos jogadores, memória do placar ou até armazenamento das partidas.
Mas existe uma lição mais importante.
O projeto mostra uma arquitetura extremamente comum na eletrônica digital:
ENTRADA
↓
PROCESSAMENTO
↓
ESTADO
↓
SAÍDA
Neste caso:
CONTROLE REMOTO
↓
ARDUINO
↓
LÓGICA DO PLACAR
↓
LCD
Quando entendemos essa estrutura, percebemos que o mesmo princípio pode ser utilizado para construir muitos outros equipamentos.
O que muda são os sensores, os comandos, as regras e as saídas.
É justamente aí que o Arduino deixa de ser apenas uma placa para experiências e passa a ser uma plataforma para transformar uma ideia em um equipamento funcional.