Meio Bit » Engenharia » Aprendendo Arduino — Parte 5 — dos Bauds ao Fusca

Aprendendo Arduino — Parte 5 — dos Bauds ao Fusca

Neste 5º episódio de nossa série sobre eletrônica e Arduino vamos descobrir o que há em comum entre um Arduino controlando vários displays, um cabo submarino do Google e… um Fusca.

6 anos e meio atrás

displaysarduinomenos1

Feedback é uma parte essencial do dia-a-dia. Nada irrita mais do que aqueles elevadores onde você aperta o botão e nada acontece. Há toda uma área do design de interfaces dedicadas ao feedback. O mais simples LED de Power é uma forma de feedback, e já é útil. Um bom circuito é informativo, e nem é preciso uma interface sofisticada. Os bipes da BIOS de uma placa-mãe já informam um monte de coisa.

Claro, às vezes é preciso exibir bastante informação para o usuário, e a plataforma Arduino é imensamente versátil nesse campo. Podemos usar com facilidade uma imensa quantidade de mecanismos diferentes para exibir dados.

displaysarduino

Um dispositivo extremamente simples e barato é o display de LEDs de 7 segmentos, que você vê diariamente em todo lugar, principalmente se sua especialidade é desarmar bombas de Hollywood.

displaysarduino2

Esses displays não são novidade. A primeira menção a algo parecido é uma patente de 1903. Por muito tempo os mecanismos eram mecânicos, e em alguns casos ainda são. Há relógios de rua no Rio que ainda usam o modelo mecânico.

dsc00177

O funcionamento é muito simples. Cada um dos sete segmentos é iluminado por um LED. Os pólos negativos são ligados em um pino em comum, os pólos positivos são ligados a pinos individuais. A combinação dos segmentos produz números de 0 a 9 e várias letras. Dá até pra escrever BOOBS.

displaysarduino3

Como o Arduino tem um monte de pinos de entrada e saída, o circuito, tudo que precisamos para fazer usar um display de 7 segmentos é conectar um pino ao negativo e outros sete a sete pinos dos Arduino.

displaysarduino4

Se você só precisa de um carácter, problema resolvido. Mas e se seu contador for de 00 a 99? De 8 conexões seu circuito passa a exigir 15. 000 a 999 são 22 pinos e seu Arduíno não tem isso tudo. Deveria existir um meio de usar menos pinos.

Existem vários. O mais antigo de todos, e ainda eficiente surgiu antes da invenção do Arduíno, dos LEDs e mesmo das válvulas. Foi uma necessidade criada quando os serviços de telégrafo não conseguiam acompanhar a demanda, mesmo com os operadores substituídos por máquinas de teletipo.

A primeira máquina do gênero foi criada em 1855 por David Edward Hughes, ela recebia e transmitia em uma variação do código Morse, sem que o operador precisasse conhecer a codificação. Bastava um teclado, que era um teclado mesmo.

1200px-printing_telegraph

Cada ligação monopolizava o cabo entre as duas pontas. Seria preciso uma forma de transmitir mais de uma ligação ao mesmo tempo. Entra em cena um sujeito chamado Émile Baudot, que trabalhava para Hughes, e inventou o Código Baudot, que usava cinco bits para representar caracteres alfanuméricos.

Baudot colocou várias conexões em cada ponta de um cabo. Cada uma era uma ligação telegráfica distinta. Cada conexão de uma ponta permanecia ativa por um determinado período de tempo. Do outro lado, o mesmo ocorria, em sincronia.

telephony_multiplexer_system

O nome desse processo é multiplexação, e graças a ele o MUNDO funciona. Ligações de dados, telefonia, vídeo, tudo isso demandaria uma quantidade inviável de canais, se não fosse a multiplexação.

Até seu computador faz isso, mas chama de “multitarefa”. Na verdade o processador divide o tempo entre várias tarefas, mas é tão rápido que você acha que ele está fazendo várias coisas ao mesmo tempo (tecnicamente está, mas as partes que trabalham simultaneamente também estão dividindo seu tempo em várias sub-tarefas).

Quem mais faz isso? Seu Fusca. Você tem quatro cilindros mas somente uma bobina de ignição. Como fazer para que a alta tensão que aciona a vela e gera a centelha seja distribuída para cada um dos cilindros? Com um distribuidor.

kit-distribuidor-fusca-kombi-com-hall-e-avanco-tudo-novo-_mlb-o-3178091299_092012

Essa peça pega o sinal da bobina e através de um contato rotativo, popularmente chamado de cachimbo, fecha circuito com cada uma das velas, na ordem e no momento correto. Se você sincronizar dois distribuidores de Fusca pode transmitir quatro conversas telefônicas por um único cabo. Taí um experimento legal praqueles canais com tempo espaço e dinheiro pra essas brincadeiras.

A própria internet que você acessa depende de multiplexação. Um cabo submarino não passa uma conexão física para cada conexão lógica. Em alguns casos há apenas uma conexão, um par de fibras ópticas.

submarine-cable-cutaway-100596340-large.idge_

O cabo FASTER, que o Google está instalando entre EUA e Japão tem 9.000 km, capacidade de 60 terabits por segundo, tudo isso usando 6 pares de fibra. Cada par transmitirá 100 canais de 100 gigabits. Como? Multiplexando as frequências. Serão 100 feixes de lasers em 100 frequências diferentes, ao mesmo tempo.

Então a solução para fazer o Arduino funcionar com vários displays é multiplexar, mas acender um de cada vez não ficará estranho? Não, tudo graças à nossas limitações evolutivas. Vamos aproveitar um defeito de nosso sistema visual para viabilizar nosso display.

O Olho Não É Uma Câmera

Eu sei, todas as analogias que você encontra dizem o contrário, mas nossos olhos não são câmeras. Eles são complexas máquinas de processamento de sinais, transmitindo de forma contínua para a área do cérebro responsável pela visão.

Nosso olho não tem resolução nem frame rate. Uma câmera captura um determinado número de imagens por segundo. O olho humano funciona de forma diferente. Nossa percepção visual se resume a uma pequena área diretamente à frente. Se você ler este texto em um monitor a dois palmos de distância e focar no começo do parágrafo, não conseguirá ler da 4ª palavra em diante, mas seu cérebro indicará que ela está ali.

Nossa visão periférica é essencialmente dedutiva. Eu ACHO que estou vendo uma caneca de café com o canto do olho, mas apenas porque eu SEI que há uma caneca de café ali. A imagem desfocada não é suficiente para que eu identifique a caneca, se não tivesse as pistas iniciais.

Outra característica é que somos programados para identificar movimento, mesmo onde ele não existe. Veja estas imagens:

mental8-14-1

phiphenomenon

As duas imagens mostram objetos em movimento, certo?

Errado. Na segunda os círculos azuis se tornam brancos em sequência, mas não saem do lugar. Na primeira imagem as barrinhas mudam de tom mas também não se movem.

O nome desse fenômeno é chamado Movimento Beta, e é reforçado pela Persistência da Visão. Não somos projetados para lidar com mudanças rápidas de imagem, é algo que não existe na Natureza. O Movimento é privilegiado em detrimento da informação visual, então nós descartamos as imagens individuais e as transformamos em uma imagem em movimento.

Experimentos determinaram que qualquer coisa acima de 10 ou 12 imagens por segundo, nosso olho transforma em movimento contínuo. Essa é a base do cinema e da TV. Simplificando, claro. Para uma explicação bem mais completa e detalhada assista este episódio do criminosamente pouco conhecido Filmaker IQ.

Com essas informações, sabemos que se eu selecionar um display, acender, apagar, selecionar outro, acender, apagar e repetir o ciclo mais de 10 vezes por segundo, veremos os dois acesos. E isso só adicionaria UM pino ao nosso circuito.

displaysarduino5

No vídeo de demonstração você vai reparar que a imagem está piscando. Parte é culpa da câmera, com o frame rate batendo de frente com a frequência de atualização do display, e parte é culpa do meu código porco não-otimizado.

Os LEDs também parecem fracos, e são. O Arduíno sozinho não consegue alimentar 28 LEDs, o ideal sera incluir alguns transistores no circuito para aumentar a corrente mas isso complicaria ainda mais um circuito didático. Note que eu movi os resistores para os pinos negativos, também para simplificar.

Óbvio que em um projeto real ninguém usaria esse tipo de multiplexação, temos módulos de OITO algarismos controlados por apenas dois fios, através de uma conexão serial de dados.

displaysarduino6-1

O importante nesta série de artigos é diminuir o número de caixas-pretas. Meu objetivo é ensinar os conceitos básicos, mostrar o homem por trás da cortina, ao invés de empurrar a eletrônica pronta modularizada de hoje em dia. Sim, você compra um display pronto todo montado e bota pra funcionar em 2 minutos, mas não aprendeu nada com isso.

//rant

Existem outros métodos para otimizar o número de conexões entre os displays e o circuito de controle. Aprendemos que precisamos de oito pinos, um para o negativo e sete para os segmentos. Podemos melhorar, com ajuda deste bichinho aqui:

cd4511

É um circuito integrado CD4511. Ele tem uma função na vida: receber números binários e converter em caracteres de displays de sete segmentos. Tudo que nosso código do Arduíno faz na mão, ele faz em silicone, como dizem os programas mal-traduzidos do Discovery.

E como você se lembra lá das primeiras aulas, 9 em binário é 1001. Ou seja: para representarmos o maior número possível em um display, só precisamos de 4 bits, ou 4 pinos/conexões. Mais ainda: utilizando os registradores do Arduíno, ao invés de uma rotina imensa enviar um número para o display se resume a uma linha.

Gostou? Melhora mais ainda.

displaysarduino7-1

Se você por curiosidade resolveu contar, já sabe: são 64 LEDs acionados individualmente, o que aparentemente é impossível em um Arduíno, ainda mais usando apenas 5 fios.

O segredo na verdade são dois: primeiro, ele usa uma matriz, assim você só precisa de 16 conexões:

how-it-works-max7219-8x8-led-matrix

O controle é feito por um chip MAX7219, que pode ser usado com matrizes de LEDs e displays de sete segmentos. A comunicação é feita por 3 pinos, e você pode encadear vários chips, criando matrizes imensas.

A multiplexação é um conceito simples mas que pouca gente conhece. Mesmo assim é essencial para o mundo moderno. E para os Fuscas.

Aqui um pequeno vídeo com os circuitos mostrados no artigo:


Carlos Cardoso — Arduino Multiplex

Ah sim: no próximo artigo detalharei os circuitos e o software dos exemplos.

Onde encontrar alguns dos componentes mencionados:


Leia também:

relacionados


Comentários