Protótipo Preliminar 1

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:

  1. Ser leve, de baixo custo e fácil de reparar.
  2. Ser amovível ao figurino.
  3. Ser flexível para se ajustar ao movimento do tecido, mas não tão frágil que se danifique facilmente.
  4. Ter capacidade de comunicação wireless.
  5. 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 IoTInternet 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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *