Um dos principais objectivos deste projecto é criar um sensor de toque capaz de ser integrado em figurinos e que consiga traduzir o contacto da pele com o sensor num gesto musical.
Deste modo, precisa de ter as seguintes características:
- Ser leve, de baixo custo e fácil de reparar.
- Ser amovível ao figurino.
- Ser flexível para se ajustar ao movimento do tecido, mas não tão frágil que se danifique facilmente.
- Ter capacidade de comunicação wireless.
- Ser facilmente calibrado consoante as condições ambientais.
Para atender ao primeiro, segundo e quarto ponto, decidiu-se explorar o microcontrolador ESP32, muito popular na área da IoT – Internet of Things – por ser barato, pequeno, e possuir capacidades de comunicação tanto por serial – USB – como por Bluetooth e Wi-Fi. Além disso, pode ser facilmente programado com o Arduino IDE e a maioria das libraries de Arduino funcionam também com o ESP32.
A vasta maioria dos sensores de toque fazem uso da capacitância da pele para detectar quando existe contacto com a interface, como é o caso dos ecrãs de telemóveis. A capacitância define-se como a capacidade que um dado elemento têm para armazenar cargas eléctricas.
O ESP32 possui nativamente pinos GPIO que podem ser utilizados para este fim – Touch Pins – e incluí uma série de funções relacionadas com esta funcionalidade. Este circuito incluí um oscilador e mede a frequência de carga e descarga ao longo de um determinado intervalo de tempo no seu respectivo pino. Quando há contacto com este pino, a frequência é alterada pela carga da pele, e o sensor detecta que recebeu um toque comparando este novo valor com o anterior. O contacto da pele com o sensor – normalmente uma superfície metálica condutora – comporta-se como uma segunda superfície, completando assim o “condensador”.
O primeiro protótipo feito consiste numa pulseira que actua como botão. Utilizando arame de joalharia, que é condutor, fez-se uma simples correia em crochet, que foi directamente ligada ao Touch Pin. Enquanto a pulseira estava a ser tocada, o LED mantinha-se aceso.

Uma camada de tecido entre a pulseira e a pele garantiu que apenas se registava um toque intencional.

O código utilizado para este teste foi muito simples, sendo apenas necessário ajustar o valor de threshold para garantir que o sensor reconhecia devidamente o toque dadas as condições externas.
// set pin numbers
const int touchPin = 4;
const int ledPin = 23;
int ledState = 0; // variable to read the state
// change with your threshold value
const int threshold = 25;
// variable for storing the touch pin value
int touchValue;
void setup(){
Serial.begin(9600);
delay(500); // give me time to bring up serial monitor
// initialize the LED pin as an output:
pinMode (ledPin, OUTPUT);
}
void loop(){
// read the state of the pushbutton value:
touchValue = touchRead(touchPin);
ledState = digitalRead(ledPin);
Serial.println(touchValue);
// check if the touchValue is below the threshold
// if it is, set ledPin to HIGH
if(touchValue < threshold){
// turn LED on
digitalWrite(ledPin, HIGH);
Serial.println(ledState);
}
else{
// turn LED off
digitalWrite(ledPin, LOW);
Serial.println(ledState);
}
delay(250);
}
Neste ensaio aprendeu-se que o arame de joalharia é um bom material a utilizar pois é acessível, condutor, fácil de manipular com técnicas têxteis e suficientemente resistente para ser integrado num figurino. O arame pode ser moldado na forma desejada e posteriormente fixado ao tecido através de técnicas de bordado: de forma permanente com ponto de couching, e temporariamente através de ilhós bordados que permitem o encaixe do arame.
Aprendeu-se também que, apesar de ser extremamente fácil programar botões desta forma, esta técnica é demasiado limitada para o que se pretende, uma vez que não permite captar alterações graduais de capacidade ao longo do tempo.
Uma alternativa a explorar será a de recriar um circuito equivalente ao utilizado internamente pelo ESP32 onde existe a liberdade de escolher os valores dos componentes utilizados. Esta técnica é também ela muito simples e é a forma mais comum de implementar botões de toque em placas Arduino. A biblioteca utilizada neste cenário CapacitiveSensor.h normaliza os valores obtidos e emite um número arbitrário que descreve a capacitância medida.

No entanto, é possível que mesmo esta biblioteca seja demasiado simples para permitir a utilização pretendida.
Existem dois principais métodos de detectar alterações de capatacitância com recurso a microcontroladores programáveis. Um deles já utilizámos: detectar mudanças de frequência provocadas pela alteração de capacitância. O outro impõe um valor de tensão conhecido e detecta alterações ao mesmo[@davisonTechniquesRobustTouch].
No contexto de projectos anteriores (UC de Sensores e Actuadores, Projecto 3), a minha experiência leva-me a crer que esta segunda abordagem será mais apropriada uma vez que com recurso a divisores de tensão e componentes de resistência variáveis é fácil programar controladores MIDI em Arduino. No entanto, uma vez que a impedância do condensador depende da frequência, o cálculo da tensão que nele cai não é directo em corrente contínua, pelo que terei de pesquisar melhor como implementar.

Uma consideração importante a ter em mente é a susceptibilidade deste tipo de sensor ao ruído. A leitura de variáveis analógicas está sempre sujeita à interferência de campos electro-magnéticos parasitas inerentes à tecnologia que nos rodeia no dia-a-dia. Além disso, o próprio utilizador torna-se parte do sistema, e se a referência – ground – não for a mesma entre eles, o sistema interpretará a interacção como um sinal AC a ser injectado. Assim, temos ainda mais razão para não descurar a etapa de filtragem e debouncing – calibração – dos valores medidos, e o impacto das decisões de hardware na relação sinal-ruído – SNR.
Elaborei uma máquina de estados preliminar, para melhor guiar o processo de prototipagem:

É uma Behaviour State Machine pois aguarda pelo input de um utilizador para fazer uma determinada acção. Nas fases de calibração será controlado o ruído de forma a obter a melhor SNR possível. Na fase de leitura será feito o debounce para evitar leituras duplicadas e flutuações acidentais. Na fase de envio o valor obtido é convertido em informação MIDI (ou equivalente) e enviado para o software que contém o instrumento musical.
O próximo passo será criar um protótipo do sensor mais próximo da versão final, e começar a desenvolver os algoritmos necessários.
Referências:
- https://www.digikey.pt/en/maker/tutorials/2021/how-to-add-capacitive-sensing-to-any-arduino-project
- https://www.digikey.pt/en/articles/techniques-for-robust-touch-sensing-design
- https://docs.espressif.com/projects/arduino-esp32/en/latest/api/touch.html
