Garoa Dojo Shield

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
O maior display de 7 segmentos que cabe em um shield, um potenciômetro e um LDR: tudo que você precisa para um Coding Dojo com Arduino
Shield projetado e fabricado pelo Lab de Garagem, inspirado pelo painel Dojo XXL do Garoa.

O Garoa Dojo Shield é uma placa de expansão didática (shield) para o Arduino UNO e compatíveis como o EasyBlack.

Desenvolvido em parceria pelo Garoa Hacker Clube e Laboratório de Garagem, o Garoa Dojo Shield é um circuito pronto para usar no Coding Dojo com Arduino, uma atividade didática que o Garoa vem realizando desde 2012. Basta plugar um Arduino e sair programando.

Componentes

A placa contém:

  • um display de 7 segmentos + ponto decimal com leds vermelhos.
  • um potenciômetro de 10KΩ.
  • um LDR (sensor de luminosidade).
  • 9 resistores para fazer o display e o LDR funcionarem.
  • conectores (headers) para ligar mais componentes.

Modo de usar

No Coding Dojo com Arduino o Garoa Dojo Shield é usado assim:

1) O apresentador conecta o Arduino com Garoa Dojo Shield no computador e carrega o sketch Blink (fonte). Isso faz piscar o segmento F do display (superior esquerdo).

2) O apresentador explica que cada segmento do display está conectado a um dos pinos digitais do Arduino, e o potenciômetro e LDR estão ligados a pinos analógicos.

3) Mostrando o código do Blink no telão, o apresentador pergunta aos participantes: "Mesmo sem saber nada de linguagem C, quem me diz onde temos que editar este código para piscar um segmento diferente?" Depois: "Onde precisa mexer para mudar a velocidade da piscada?". As pessoas respondem rapidamente essas perguntas. Isso quebra o gelo e os participantes percebem que o código não é impossível de ler, mesmo para quem nunca programou.

4) O apresentador explica o desafio: "Nossa missão é fazer uma animação tipo luz sequencial usando os 6 segmentos que formam o numero zero: acende um segmento, deixa um tempo aceso, apaga e imediatamente acende o próximo, repetindo para sempre. Uma vez feito isso, colocar interatividade: a velocidade da animação deve ser controlada pelo potenciômetro."

5) Agora pode começar o Coding Dojo, usando a metodologia tradicional de programação em pares, trocando o piloto a cada 5 minutos. Dependendo da experiência do público com programação e/ou Arduino, a missão leva de 25 a 45 minutos. Nota: faz parte do desafio os participantes descobrirem como os pinos do Arduino estão ligados aos segmentos. Quando me perguntam, eu respondo: "O pessoal da engenharia não mandou a documentação ainda, mas o software tem que ficar pronto em meia hora!" É inútil inspecionar as trilhas da placa sem o datasheet do display. É mais divertido descobrir por software.

6) Quando a animação estiver feita, e a dupla quiser saber como ler o potenciômetro, o apresentador sugere rodar o sketch AnalogReadSerial (fonte) para ver o que ele faz. A parte de comunicação serial do AnalogReadSerial precisa ser explicada, mas a única parte daquele código relevante para a missão é a função analogRead(A0). O potenciômetro está ligado ao pino A0 do Arduino, assim não é preciso caçar os pinos analógicos.

Notas sobre o display de 7 segmentos

Display com segmentos identificados por letras de A a G.
  • Os displays de um dígito costumam ter 8 LEDs: 7 para formar o dígito, e um ponto decimal.
  • Nos displays de catodo comum, todos os catodos dos LEDs estão ligados em um pino que deve estar sempre ligado ao terra; para acender cada segmento, alimente o pino correspondente. Nos displays de anodo comum é o contrário: os anodos estão ligados em um único pino que deve ser alimentado o tempo todo, e para acender cada segmento o pino correspondente deve ser colocado em nível baixo (0V).
  • Para falar de cada segmento, a convencão é nomeá-los com letras de A a F, a partir do topo, no sentido horário. O segmento central é o G, e o ponto decimal costuma ser chamado "DP" (decimal point).

TDD com hardware

O TDD (Test-Driven Development) faz parte da metodologia do Coding Dojo. Isso significa que um teste devem ser escrito antes de cada nova funcionalidade implementada, e nenhuma funcionalidade deve ser implementada sem que haja um teste para ela. Como testes automatizados com hardware são complicados (o ambiente de teste seria mais complexo que o próprio circuito sendo testado), no Coding Dojo com Arduino fazemos testes manuais. Antes de escrever qualquer código o piloto deve escrever um comentário no início do arquivo-fonte dizendo qual é o comportamento esperado quando a nova funcionalidade estiver pronta. Por exemplo: "Piscar um segmento diferente do segmento F" ou "Piscar alternando entre dois segmentos".

Vídeo de um Coding Dojo com Arduino

No TDC 2013 realizamos um Coding Dojo com Arduino que foi registrado pelo Agaelebe e publicado pela InfoQ: http://www.infoq.com/br/presentations/dojo-com-arduino

Desafios extras

Uma vez que os participantes já fizeram o desafio básico da animação sequencial, outras missões podem ser propostas:

  • Controlar a velocidade da animação com o LDR.
  • Indicar o nível de luminosidade acendendo 1, 2 ou 3 dos segmentos horizontais.
  • Fazer uma animação mais complexa: uma cobrinha com 2 segmentos; uma cobrinha que faz um trajeto em 8; uma cobrinha que se move aleatoriamente, às vezes mudando de direção nas "esquinas" do segmento G (central). A cobrinha aleatória dá um resultado visualmente interessante, mas é bem mais difícil de programar que as sugestões anteriores.
  • Exibir dígitos de 0 a 9 conforme a posição do potenciômetro ou a luminosidade. Note que isso é bem mais trabalhoso que a animação sequencial. Uma solução razoável usa um array de arrays -- complicado para principiantes. Uma solução bem simples requer o uso intensivo de copiar e colar (é feio mas funciona, e com principiantes o importante é fazer funcionar, principalmente quando se está programando hardware, a beleza do software é secundária!).
  • Usar a função setup do Arduino para "calibrar" o LDR na inicialização. Faz parte do exercício especificar como seria exatamente o procedimento de calibração. De alguma forma o usuário tem que indicar (talvez com o potenciômetro) quando o LDR está exposto à luminisidade mínima e quando está exposto à luminosidade máxima. Assim o programa pode ajustar os valores lidos do LDR para amplificar o efeito sobre o display.

Outros usos

É fácil conectar outros sensores e/ou atuadores externos ao Garoa Dojo Shield. Este shield não foi projetado para receber um shield em cima (afinal, o outro shield cobriria o display ;-), mas os headers permitem usar jumpers comuns para conectar um circuito montado em um breadboard, possibilitando outros experimentos e desafios.

Repositório de código

https://github.com/garoa/dojo-shield/

Onde comprar

Laboratório de Garagem: http://www.labdegaragem.org/loja/garoa-dojo-shield.html