Botões em entrada analógica

Vamos trabalhar com botões em entrada analógica, um dispositivo que lê dez botões utilizando apenas uma entrada analógica de qualquer microcontrolador. A ideia é economizar pinos de microcontroladores, como por exemplo do Attiny85 que tem apenas 6 pinos disponíveis.

Faço isso através de divisor resistivo, onde cada botão pressionado “fecha” o circuito com um resistor de valor diferente. Isso possibilita obter tensões diferentes com o pressionar de botões diferentes.

A tensão na imagem está 5V, porém 3,3V podem ser utilizados. Veja que temos um resistor de 10k na parte alta e os seguintes resistores na parte baixa: 8k2, 10k, 12k, 22k, 33k, 39k, 47k, 56k, 68k, 100k. Abaixo você vê os valores inteiros obtidos no Arduino UNO para cada resistor, bem como a respectiva tensão.

Valores analógicos do teclado
Valores analógicos do teclado

No nosso caso de 10 botões os valores em tensão ficaram bem afastados uns dos outros, qualquer conversor analógico-digital consegue fazer a leitura. Fiz um protótipo do circuito em placa perfurada, já com os componentes “finais”. No teste abaixo eu estou utilizando o Fritzen UM, um Arduino que eu mesmo fiz.

teclado analógico com Arduino
Protótipo de leitura de botões em entrada analógica

Eu então criei uma placa de circuito impresso para o projeto, conforme visto abaixo. Coloquei um capacitor de 100nF na saída da tensão analógica, para filtro.

Teclado em entrada analógica
Teclado em entrada analógica

Todos os arquivos de fabricação da placa (em Kicad) estão aqui.

Parte traseira do teclado em entrada analógica
Parte traseira do teclado em entrada analógica

Teste de funcionamento

A fim de testar o funcionamento do produto eu criei um código para Arduino, neste link. Criei também um código para microPython do Raspberry Pi Pico, que tem uma resposta em 16 bit (65535 valores). O Circuito é visto abaixo: o pino analógico é o 26, fora isso é só colocar 3,3V e GND na placa.

Teclado em entrada analógica com Raspberry Pi Pico
Teclado em entrada analógica com Raspberry Pi Pico

Em termos de código eu fui bem simples, apenas leio o valor inteiro (representação do analógico) em

pot_value = pot.read_u16()

e mando imprimir na porta serial, a cada 100mS.

# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-analog-inputs-micropython/
from machine import Pin, ADC
from time import sleep

pot = ADC(Pin(26))

while True:
  pot_value = pot.read_u16() # read value, 0-65535 across voltage range 0.0v - 3.3v
  print(pot_value)
  sleep(0.1)

Lembrando que para trabalhar com microPython no Raspberry Pi Pico eu utilizo a Thonny IDE, cujo guia de configuração está aqui. O resultado aparece no Shell/console da Thonny IDE, visto abaixo.

Valores analógicos do teclado
Valores analógicos do teclado

Veja que o valor 21221 é o botão um, 32679 é o botão dois e assim por diante, até chegar em 59406 que é o botão zero (ver imagem do teclado acima). O primeiro e último valor da imagem (64911 e 64943) são para nenhum botão pressionado (fundo de escala).

Estes valores podem então ser processados, por exemplo através de IF() para executar a função que você desejar.

Conclusão

A ideia de utilizar uma entrada analógica para ler diversos botões não é nova, na internet tem bastante referências (principalmente em Inglês). É uma ótima “ferramenta” para ser ter na sua caixinha do dia-a-dia. Caso você queira adquirira a placa, comente logo abaixo ou então entre em contato pelo meu LinkdeIn.