Desenvolvimento

7 set, 2017

ESP32 – Utilizando o sensor capacitivo

Publicidade

ESP32 – Utilizando o sensor capacitivo

Botões sensíveis ao toque sempre me chamaram a atenção, talvez por parecer mágica ou pela sua sensibilidade, que em alguns casos não precisamos nem tocá-los para acioná-los. Eles são encontrados em muitos produtos, como elevadores, TVs, carros, telefones e micro-ondas.

Esses botões podem ser a solução para alguns problemas, como no caso de soluções hermeticamente fechadas, ou mesmo por design de uma solução de alto nível de sofisticação, fazendo os nossos produtos parecerem mais tecnológicos do que eles de fato são.

Sensores capacitivos do ESP32

O ESP32 possui na sua lista de periféricos, 10 sensores capacitivos, que detectam variações de capacitância, podendo até detectar a proximidade de um dedo ou de outros objetos. Esses sensores, são usualmente utilizados como botões, eliminando a parte mecânica, até mesmo possibilitando a criação de botoes diretamente na superfície do produto com o uso de películas especiais.

Funcionamento

O funcionamento do sensor capacitivo é baseado na variação da capacitância gerada pelo toque em um material, chamado de eletrodo. Essa variação de capacitância é lida e convertida pelo ADC.

Dependendo do eletrodo, ele pode agir como uma antena, detectando proximidade, mesmo sem o toque, ou mesmo detectando a pressão pela variação da capacitância.

Design do Eletrodo

O eletrodo é uma parte fundamental do sistema, já que será o responsável por captar a variação da capacitância no circuito.

O formato do eletrodo geralmente deve ser de um tamanho e forma similares ao dedo humano. Formas irregulares e o tamanho podem gerar interferências, fazendo a sensibilidade variar

Recomendações:

  • Eletrodos muito próximos uns dos outros podem gerar interferência. A distancia entre os eletrodos devem ser no mínimo o dobro do seu tamanho.
  • O comprimento da trilha do eletrodo até o pino de entrada do sensor não deve ser maior que 10cm. Quanto menor a trilha, menor capacitância parasita ela gera.
  • A distancia entre as trilhas dos eletrodos devem ser o dobro da espessura das mesmas.
  • Evite que a trilha passe por regiões de sinais de alta frequência, como barramentos de comunicações e antenas.
  • Não se deve colocar componentes próximos aos eletrodos nem abaixo deles.
  • Não se deve colocar planos de terra embaixo dos eletrodos. O ideal é que tenha apenas o próprio eletrodo sem planos abaixo.

 

Para quem usa o Eagle por exemplo, existem bibliotecas com botões prontos para serem usados nos projetos.

Porém se o intuito é apenas experimental, existem formas de eletrodos para serem testados, como faremos no exemplo abaixo!

Utilizando os sensores capacitivos no ESP32

Para utilizar os sensores capacitivos no ESP32, vamos usar a plataforma Arduino e vamos criar um exemplo que utilizará 3 sensores.

Para os testes, vamos fazer uma demonstração de como fazer a leitura do sinal do eletrodo, utilizando a placa de desenvolvimento da DFRobot, a FireBeetle ESP32, que foi gentilmente enviada para testes.

ESP32 – Utilizando o sensor capacitivo

Para adquirir uma, acesse o link: FireBeetle ESP32

Os pinos dos sensores capacitivos são:

ESP32 – Utilizando o sensor capacitivo

Para fazer a leitura do sensor, basta utilizar o comando

touchRead([SENSOR]);

Onde [SENSOR] poderá ser o numero da GPIO ou o canal. Por exemplo o canal T0

touchRead(4);

ou

touchRead(T0);

O retorno da função é um uint16 (inteiro de 16 bits sem sinal) com o valor da leitura do sensor. O valor detectado para o toque, é o mais próximo do 0, sendo 15 o valor encontrado nos testes que fiz.

O ideal é fazer uma especie de calibração para garantir que o valor correspondente seja interpretado como toque.

Utilizando interrupção

Uma outra maneira de fazer a integração, é com o uso de interrupção. O uso de interrupção é indicado para uma melhor ação do sistema, já que a execução do código é interrompida para a execução da função chamada pela interrupção, e depois retomada a partir do ponto de parada.

//Define o valor para a detecção do toque
int threshold = 20;
void setup() {
 //Configura a porta Serial
 Serial.begin(115200);
 //Faz a configuração da interrupção
 touchAttachInterrupt(T0, gotTouch, threshold);
}
void loop() {
 //Lê o valor do sensor T0 para a escrita na serial
 Serial.println(touchRead(T0));
 delay(100);
}
void gotTouch(){
 Serial.println("Sensor acionado!!\n");
}

Demonstração

Para a demonstração, vamos utilizar 3 sensores, onde cada sensor irá fazer o trigger de um som no buzzer, parecido com um instrumento musical.

//Define o valor para a detecção do toque
int threshold = 20;
void setup() {
 //Configura a porta Serial
 Serial.begin(115200);
 //Configuração para o PWM
 ledcSetup(0, 2000, 8);
 //Configuração para o PWM
 ledcAttachPin(5, 0);
}
void loop() {
 //Leitura dos sensores TOUCH
 Serial.println(touchRead(T0)); //GPIO4
 Serial.println(touchRead(T5)); //GPIO12
 Serial.println(touchRead(T6)); //GPIO14
//Caso o valor da leitura for menor que o threshold, teve contato
 if(touchRead(T0) < 15){
 //Configura o duty cycle do PWM
 ledcWrite(0, 100);
 //Configura a frequencia
 ledcWriteTone(0, 250);
 } else if(touchRead(T5) < 15){
 ledcWrite(0, 100);
 ledcWriteTone(0, 1000);
 } else if(touchRead(T6) < 15){
 ledcWrite(0, 100);
 ledcWriteTone(0, 2000);
 } else {
 ledcWrite(0, 0);
 ledcWriteTone(0, 0);
 }
delay(100);
}

Para a demonstração do sensor, vamos usar 3 objetos como eletrodo, como mostra o video abaixo:

Conclusão

O uso dos sensores capacitivos podem deixar o seu projeto com um aspecto mais interessante, podendo expandir as possibilidades. Existem inúmeras aplicações para sensores capacitivos, e podem ser usados como forma de entretenimento, demonstrações, teclados, entre outras aplicações.

Happy Hacking!