Teclado touch para Arduino – Touch Shield Sparkfun
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:
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.
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:
E dessa se você for utilizar um 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:
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!