Manual

do

Maker

.

com

Substitua botões por esse teclado capacitivo de 4 dígitos

Substitua botões por esse teclado capacitivo de 4 dígitos

Quando queremos acessar um menu ou executar uma determinada função com arduino, normalmente fazemos uso de push buttons. Nesse caso, precisamos de N resistores, ferro de solda e wiring. Mas existe uma maneira muito mais simples e elegante de interagir com seu Arduino. Conheça o teclado capacitivo de 4 dígitos!

Teclado capacitivo

Infelizmente parece que tenho um certo isolamento estático e para acionar o teclado, preciso esfregar o dedo no que me resta de cabelo antes de tocar no teclado. Ele é bastante sensível, um suave toque e já faz o acionamento. E o mais legal desse teclado é que ele tem um LED de resposta para cada botão selecionado, ou seja, uma solução bonita e completa para seus projetinhos com Arduino - ou qualquer outra MCU, ou CPU. Ainda mais que nesse artigo estou utilizando ele de uma maneira um pouco diferente.

PCF8574

O PCF8574 é um expansor de IO I2C, de fácil conexão com o Arduino ou qualquer outro processador que desejar utiizá-lo, desde que ele possua suporte a I2C. Nesse projeto estou utilizando o Arduino UNO, portanto 2 pinos analógicos estão sendo utilizados para a comunicação I2C e apenas 1 pino digital, utilizado aqui para receber interrupções do PCF8574, ou seja, você pode ter até 12 teclas dispensando apenas 1 pino digital para interrupção. Essa limitação de teclas é devido ao PCF8574 suportar apenas 3 conexões, que você pode fazer simplesmente conectando um modulo PCF8574 ao outro. Claro, para obter a origem da interrupção você precisará ler todos os módulos conectados para verificar o estado ou, se utilizando apenas 2 módulos, pode utilizar os pinos 2 e 3 para as interrupções.

Se desejar detalhes mais profundos sobre esse magnífico módulo expansor, sugiro esse outro artigo. Se está procurando por um teclado maior, recomendo o desse artigo. E se precisa de informações mais detalhadas, esse sobre interrupções e timer com Arduino.

Por que utilizar interrupções?

O teclado não é de forma alguma o fluxo principal do seu código. Seu objetivo é unicamente interação com o usuário, sendo que todo o resto é trabalho do seu programa. Por esse mesmo motivo, dispensar montes de GPIO para interagir com o usuário é disperdício de recursos, uma vez que esses pinos poderiam estar sendo utilizados para periféricos do seu projeto. E por isso mesmo que é precioso o recurso desse expansor, porque você pode utilizar um Arduino UNO ou até mesmo um ESP8266-01 e ter recursos de sobra para futuras expansões!

Wiring

O wiring é a coisa mais simples do mundo para esse expansor I2C. Olhando-o pela parte de trás, você vê as definições dos pinos, que vão de J1 para o primeiro bit até o pino INT.  Conecte os pinos J1,J2,J3 e J4 aos pinos D1,D2,D3 e D4 do teclado, respectivamente. Conecte VCC e GND do teclado à saída de expansão do PCF8574. Entre o Arduino e o PCF8574 a conexão é tão simples quanto. Mas veja a tabela abaixo, é mais simples e mais rápido que colocar um desenho:

Arduino UNOPCF8574Teclado 4x4
5VVCC IN
GNDGND IN
Analógico 4SDA
Analógico 5SCL
Digital 2INT
VCC OUTVCC
GND OUTGND
J1D1
J2D2
J3D3
J4D4

Apenas para exclarecimento, VCC OUT do PCF8574 está no slot de conexão com um segund (ou terceiro) módulo PCF8574.

Código

Para controlar esse teclado capacitivo, utilizei interrupção pelas razões descritas logo ao início do artigo. O código fica bastante enxuto, bastando fazer o seguinte:

#include <Wire.h>
byte data       = 0;
bool isAttached = false;
int keys[4]     = {1,2,4,8};

void doWrite(byte val){
  Wire.begin();
  Wire.beginTransmission(0x20);
  Wire.write(val);
  Wire.endTransmission();
}

void doRead(){
  delay(50);
  Wire.requestFrom(0x20,1);
  if (Wire.available()){
    data = Wire.read();
  }
}

void isrKeyboard(){
    noInterrupts();
    for (byte i=0;i<4;i++){
      if (keys[i] == data){
        Serial.println(i+1);
        data = 0;
        break;
      }
    isAttached = false;
  }
}

void setup() {
  Serial.begin(9600);

  //Os bits 4,5,6 e 7 ficam em HIGH
  Wire.begin();
  Wire.beginTransmission(0x20);
  Wire.write(15);// ou 0x0F, ou 0b00001111
  Wire.endTransmission();

  pinMode(2,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2),isrKeyboard,FALLING);

}

void loop() { 
    if (!isAttached){
      delay(15);
      doWrite(15);
      interrupts();
      isAttached = true;
    }
    doRead();
}

 

Onde comprar o módulo PCF8574 e o teclado capacitivo 4x4?

O teclado capacitivo você encontra através desse link da AutoCore Robótica. Já o módulo PCF8574 vou ficar devendo porque já esgotou em todos os parceiros, cuja recomendação poderia fazer com confiança.

Uma aproximação sutil de sua digital acionará facilmente o teclado capacitivo. Estranhamente, um pressionamento intenso não responderá da mesma maneira.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.