Adicione um teclado touch ao seu projeto com este Touch Shield da Sparkfun, um teclado capacitivo para ser utilizado com o Arduino, e que utiliza a conexão I2C para comunicação:

Teclado Touch Shield Sparkfun

A tecnologia capacitiva, muito usada em touch screen de tablets, computadores e afins, é aquela em que você não precisa “apertar” a tela (essas são as resistivas), apenas passar o dedo (ou um material condutor) e o contato é feito internamente. Isso gera uma enorme vantagem em termos de durabilidade.

Características do Touch shield Sparkfun

O teclado Touch Shield para Arduino pode ser utilizado tanto em forma de shield como ligado externamente, já que você pode por exemplo montar um painel com ele, e o Arduino não precisa necessariamente ficar grudado ao teclado.

Essa ligação externa também pode ser usada quando você vai usar o shield com outros tipos de Arduino. Vamos explicar.

Esse shield foi feito originalmente para ser acoplado ao Arduino Uno R3, usando os pinos 3.3v, SDA, SCL e o pino digital 2, que vai ser utilizado para a interrupção.

No Arduino Mega, por exemplo, os pinos SDA e SCL são o 20 e o 21,
logo o Shield não irá funcionar se você encaixa-lo diretamente, mas vai
funcionar se você realizar uma conexão externa e ligar os pinos
analógicos 4 e 5 do Shield nos pinos 20 (SDA) e 21 (SCL) do Mega. Vamos
mostrar isso na prática daqui a pouco.

O teclado em si é formado por 9 teclas,  numa matriz 3×3, e no lado direito do shield podemos observar que há um espaço para mais três eletrodos (pinos ELE9, ELE10 e ELE11), assim você pode ter até 12 teclas disponíveis.

A imagem abaixo mostra os pinos e conexões do Shield, conforme comentamos acima.

Touch Shield - Pinagem

As portas não identificadas estão livres para uso.

Conexões do Touch Shield Sparkfun

Assim, se você deseja ligar o shield sem usar barra de pinos, ligando os fios diretamente ao Arduino, faça a seguinte conexão:

  • Pino 4 do Shield ao pino SDA do Arduino
  • Pino 5 do Shield ao pino SCL do Arduino
  • Atenção na conexão do Pino GND: repare na imagem acima que não pode ser qualquer pino GND do Shield. Precisa ser exatamente o indicado no lado esquerdo, ao lado do pino 13
  • Pino 3.3v do Shield ao 3.3v do Arduino
  • Pino 5v do Shield ao 5v do Arduino

Sua ligação ficará dessa maneira se você utilizar o shield com o Arduino Uno:

Circuito Teclado e Arduino Uno

E dessa se você for utilizar um Arduino Mega:

Circuito Teclado e Arduino Mega

Programa teclado com Arduino

O programa abaixo, sem alterações, pode ser utilizado nos dois circuitos mostrados anteriormente. Antes de compilar o programa, coloque os arquivos mpr121, i2c, defs e types (todos com extensão .h) na mesma pasta do programa. Esses arquivos você encontra nesse link.

Vamos ao programa:

//Programa : Teste Touch Shield Sparkfun
//Alteracoes e adaptacoes : Arduino e Cia 
//Baseado no programa original de 
//Aaron Weiss, based on the MPR121 Keypad Example by Jim Lindblom

// Inclui as bibliotecas
#include "mpr121.h"
#include "i2c.h"

// Numero maximo de digitos
#define DIGITS 11 

// Relaciona as entradas do teclado com o numero
// dos eletrodos
#define UM 8
#define DOIS 5
#define TRES 2
#define QUATRO 7
#define CINCO 4
#define SEIS 1
#define SETE 6
#define OITO 3
#define NOVE 0

//Extras (nao utilizado)
#define ELE9 9
#define ELE10 10
#define ELE11 11

//Pino interrupcao
int irqpin = 2;  

void setup()
{
  //Define o pino da interrupcao como entrada e o 
  //coloca em HIGH
  pinMode(irqpin, INPUT);
  digitalWrite(irqpin, HIGH);
  
  Serial.begin(9600);
  
  DDRC |= 0b00010011;
  PORTC = 0b00110000; 
  //Inicializa a comunicacao I2C
  i2cInit();
  
  delay(100);
  //Inicializa o MPR121
  mpr121QuickConfig();
  
  //Cria uma interrupcao e a aciona quando um botao
  //e pressionado e o pino da interrupcao vai para LOW
  attachInterrupt(0,getNumber,LOW);
  
  //Mensagem inicial
  Serial.println("Aguardando...");
}

void loop()
{
  //Coloque aqui algum codigo adicional
}

void getNumber()
{
  int i = 0;
  int touchNumber = 0;
  uint16_t touchstatus;
  char digits[DIGITS];
  
  touchstatus = mpr121Read(0x01) << 8;
  touchstatus |= mpr121Read(0x00);
  
  //Verifica quantas teclas foram pressionadas
  for (int j=0; j<12; j++)
  {
    if ((touchstatus & (1<<j)))
      touchNumber++;
  }
  
  if (touchNumber == 1)
  {
    if (touchstatus & (1<<SETE))
      digits[i] = '7';
    else if (touchstatus & (1<<QUATRO))
      digits[i] = '4';
    else if (touchstatus & (1<<UM))
      digits[i] = '1';
    else if (touchstatus & (1<<OITO))
      digits[i] = '8';
    else if (touchstatus & (1<<CINCO))
      digits[i] = '5';
    else if (touchstatus & (1<<DOIS))
      digits[i] = '2';
    else if (touchstatus & (1<<NOVE))
      digits[i] = '9';
    else if (touchstatus & (1<<SEIS))
      digits[i] = '6';
    else if (touchstatus & (1<<TRES))
      digits[i] = '3';
      
    Serial.print("Tecla pressionada : ");
    Serial.println(digits[i]);
    i++;
  }
  
  //Nao realiza nenhuma acao caso mais de uma tecla
  //seja pressionada
  else if (touchNumber == 0)
    ;
  else
    ;
}

Após carregar o programa no Arduino, abra o serial monitor e acione as
teclas do shield. A cada tecla pressionada, você terá uma saída
correspondente no Serial Monitor:

Touch Sparkfun - Serial Monitor

Claro que você não ficará limitado aos números de 1 a 12 do shield. Com pequenas alterações, é possível imprimir strings e até mesmo acionar as portas do Arduino a cada acionamento das teclas.

Gostou? Confira outros posts usando Arduino aqui mesmo no Arduino e Cia!

Avalie este post!