Calcolare forza pressione con tasti capacitivi

sto lavorando su una specie di pianola e per risparmiare abbiamo deciso di puntare su tasti capacitivi
il problema è che ho bisogno di sapere con che forza vengono premuti i tasti perchè poi il suono emesso cambia...

io ho provato a risolvere il problema usando la libreria capsense e facendo una specie di derivata dei valori che ottengo, riesco a distinguere accettabilmente 3 o 4 valori di forza..
questo sistema però va tarato ogni volta perchè, chiaramente, i risultati dipendono molto dal modo in cui la persona che preme i tasti si relaziona con l'ambiente che lo circonda e viceversa... per esempio essere scalzo o avere le scarpe cambia moltissimo... ed è un po' una rottura settare ogni volta...

voi avete qualche idea diversa o qualche suggerimento per migliorare questo sistema?

Secondo me i Tasti capacitivi non leggono la forza con cui vengono premuti; forse c'é una leggere differenza perché la pelle premuta con piú forza aderisce con piú superfice.

Ciao Uwe

uwefed:
Secondo me i Tasti capacitivi non leggono la forza con cui vengono premuti; forse c'é una leggere differenza perché la pelle premuta con piú forza aderisce con piú superfice.

Ciao Uwe

si è vero quello che dici, forse mi sono espresso male, infatti quello che ho fatto io è vedere la velocità con cui viene premuto, poi questo dato è legato alla forza con cui il dito preme... purtroppo ci sono molti problemi che ho già detto
la superficie di contatto non varia molto perchè da quel che mi dicono amici tastieristi il pianoforte si suona con la punta delle dita

Il sensore capacitativo "sente" solo la durata della pressione. Normalmente una persona quando applica una forza maggiore fa sì anche che la durata dell'applicazione della forza aumenti, è normale. Se parti per dare un colpetto con la punta del dito ti viene d'istinto di ritrarre subito il dito stesso, se parti per tirare un cazzotto è normale che la mano si fermerà qualche istante in più.
Penso quindi che potresti giocare sui tempi letti dal sensore per capire la "pressione" esercitata dalla persona.

Leo non sono del tutto d'accordo della Tua tesi. La durata della pressione dipende molto da persona a persona. Per esempio su touchscreen malfunzionati io tendo a fare delle pressioni prolungate.
Ciao Uwe

Più che sensori capacitivi penso bisogna parlare di resistivi:
Ho googlato un po' e ho trovato questo:

Spero ti possa tornare utile.

purtroppo questa idea è poco attuabile per quello che devo fare io, infatti in un pianoforte tu premi il tasto e lo tieni premuto finchè non vuoi far terminare la nota

dato che il dito crea comunque qualche influenza avvicinandosi al tasto, se si avvicina più velocemente la velocità di variazione della capacità è maggiore per questo il ho pensato di fare una specie di derivata del valore che ottengo con la libreria capsense.
questo è il codice di quello che sto provando a fare, non è ancora ottimizzato ma per testare va bene:

#include <CapSense.h>

CapSense   cs_4_2 = CapSense(4,2);        //500k resistor 

long v=0, read=0, force=0; 
unsigned long time=0;

void setup()                    
{
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); 

  Serial.begin(115200);
}

void loop()                    
{
  long er= cs_4_2.capSense(30);   

  v= er-read;
  read=er;

  if(read>100 && time==0)
  {
    time=millis();

    Serial.print("START =  ");

    Serial.print(force);
  }

  if(read<100 && time!=0)
  {
    Serial.print("    FORCE =  ");

    Serial.print(force);
    
    Serial.print("    DURATION =  ");

    Serial.println(millis()-time);
    
    time=0;
    force=0;
  }

  if(v>force && v>=15)
  {
    force=v;
  }
}

pighixxx:
Più che sensori capacitivi penso bisogna parlare di resistivi:
Ho googlato un po’ e ho trovato questo:

Code Tinker Hack: How to add Velocity sensitivity / Aftertouch to Piano toy midi controller

Spero ti possa tornare utile.

grazie per il link :slight_smile: avevo già pensato a quei sensori ma c’è il problema che si alzano i costi e poi in giro non ne trovo delle misure che mi vanno bene, ce ne sono o di troppo grandi o di troppo piccoli :stuck_out_tongue_closed_eyes:

Non so se hai visto ma non usano un sensore per ogni tasto, ne usano uno per ogni ottava.

edit
ho trovato qualcosa da DigiKey ma penso si trovino ovunque:

pighixxx:
Non so se hai visto ma non usano un sensore per ogni tasto, ne usano uno per ogni ottava.

edit
ho trovato qualcosa da DigiKey ma penso si trovino ovunque:
http://www.digikey.com/product-detail/en/30-61710/1027-1003-ND/2476472?cur=USD

io però non ho dei tasti fisici che fanno pressione per quello mi servirebbero della misura giusta :frowning:
quelli lì da 24'' si trovano un po' ovunque, avevo pensato di prenderne un po' e di tagliarle per farne 2 o 3 pezzi, forse funziona comunque :slight_smile:

Fin'ora, almeno su strumenti musicali di fascia medio-alta (e prezzo relativo :P), l'unico sistema decente per leggere la "forza simulata" dei tasti, e' quello di avere tasti meccanici con un contatto deviatore, in cui il contatto NC si apre PRIMA che si chiuda il contatto NA ,,, cono scendo la larghezza di questo intervallo, il processore calcola l'intervallo di tempo fra l'apertura dell'NC e la chiusura del corrispondente NA (piu il tempo e' ridotto, piu il tasto e' stato premuto con forza), e restituisce il corrispondente valore per ogni tasto ...

Avevo visto in una specifica applicazione (simulatore per batteria) dei sensori piezoelettrici cablati ad un processore che rilevava la forza del colpo di bacchetta in base all'ampiezza del picco di tensione generato dal piezo, ma non so se si potrebbe adattare qualcosa di simile anche ad una tastiera, bisognerebbe probabilmente creare una serie di routines che cancellassero qualsiasi segnale di disturbo (vibrazioni della cassa dello strumento, effetto microfono, ecc) ...

Bisognerebbe comunque usare una cialdina piezo per ogni tasto, tipo magari queste o simili http://www.ebay.it/itm/10-x-20mm-Piezo-Elements-Sounder-Sensor-Trigger-Drum-Disc-/121095776646?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1c31dee986 ... oppure un piezofilm (una volta li chiamavano PVDF oppure vibratab, sono foglietti di plastica a fluoropolimeri che si comportano come la ceramica piezoelettrica) ... non so quanto verrebbe a costare alla fine :wink:

la questione è che dovendo fare 61 tasti vorrei provare a perfezionare il sistema capacitivo, soprattutto per i costi... il pcb lo devo fare comunque
pensavo di sostituire arduino con qualche circuito elettronico in modo da velocizzare le letture ed avere dei tempi di reazione più bassi possibili
poi al massimo mi accontenterò di suonare sempre con le scarpe e schermandomi dai campi elettrici circostanti :sweat_smile: o se proprio non riesco ad ottenere qualcosa di decente passo a sensori di farza resistivi o ai piezo...
vi tengo informati sugli sviluppi :wink:

ho una domanda per chi ne sa di pcb, guardando questo prodotto della sparkfun https://www.sparkfun.com/products/10250 ho notato che nel layer opposto ai tasti non c'è il classico riempimento che poi va a GND ma ci sono solo le piste che vanno ai tasti, secondo voi questo influenza molto i tasti?
poi ho visto che montano questo integrato interessante che fa tutto il lavoro https://www.sparkfun.com/datasheets/Components/MPR121.pdf ma ad occhio non va bene per quello che voglio fare io...

Mi e' venuta una delle mie solite folli idee, ma bisognerebbe testarla perche' e' proprio un'idea al volo ... potresti continuare ad usare la tastiera capacitiva, ma allo stesso tempo incollare sotto ai tasti una decina di dischetti piezo, connessi in parallelo attraverso opportune resistenze, ad un circuito che rilevi gli impatti delle dita sullo stampato ... piu pesti con forza (:P) sui tasti, piu il "bump" rilevato possiede un livello alto ...

Certo poi bisogna fare la parte dello stampato con i tasti in un certo modo, striscia continua di vetronite, sospesa con delle "gocce" di silicone al piano sottostante disposte a griglia regolare in modo che possa vibrare in maniera uniforme quando ci pesti (pardon, "suoni" :P) sopra, ecc ... potrebbe essere un'esperimento interessante (vediamo se qualche costruttore di strumenti musicali mi frega anche questa idea :stuck_out_tongue: :D)

Per quanto riguarda il piano di massa sottostante ai tasti, tieni presente che un piano di massa del genere scherma dai disturbi, ma riduce anche la sensibilita'.

Etemenanki:
Mi e' venuta una delle mie solite folli idee, ma bisognerebbe testarla perche' e' proprio un'idea al volo ... potresti continuare ad usare la tastiera capacitiva, ma allo stesso tempo incollare sotto ai tasti una decina di dischetti piezo, connessi in parallelo attraverso opportune resistenze, ad un circuito che rilevi gli impatti delle dita sullo stampato ... piu pesti con forza (:P) sui tasti, piu il "bump" rilevato possiede un livello alto ...

Certo poi bisogna fare la parte dello stampato con i tasti in un certo modo, striscia continua di vetronite, sospesa con delle "gocce" di silicone al piano sottostante disposte a griglia regolare in modo che possa vibrare in maniera uniforme quando ci pesti (pardon, "suoni" :P) sopra, ecc ... potrebbe essere un'esperimento interessante (vediamo se qualche costruttore di strumenti musicali mi frega anche questa idea :stuck_out_tongue: :D)

Per quanto riguarda il piano di massa sottostante ai tasti, tieni presente che un piano di massa del genere scherma dai disturbi, ma riduce anche la sensibilita'.

ci penso ad una cosa del genere, ma mi sa che i piezo non hanno una grande sensibilità...

comunque mi stavo chiedendo se fosse possibile riprodurre i sensori di forza resistivi ed in qualche modo integrarli nel pcb, non li ho mai visti dal vivo, qualcuno può spiegarmi brevemente come sono fatti?
grazie

Ce ne sono di diversi tipi ... da quelli piezoresistivi, in cui e' il materiale, in genere un semiconduttore, a cambiare la resistenza intrinseca quando viene piu o meno compresso o stressato, a quelli a deformazione di filo metallico, come le celle di carico in cui una sottile traccia di materiale metallico su un supporto flessibile cambia la sua resistenza in base a quanto lo pieghi o stiri, a quelli basati sul contatto in punti diversi di due lamine, una resistiva ed una metallica (cambia la resistenza in base al punto in cui premi insieme le due lamine, non in base alla forza che ci metti), ai sensori di pressione in cui la resistenza cmbia perche' piu lo premi e maggiore e' la superficie che viene a contatto con lo strato metallico ... ce ne sono anche altri tipi ma sono per misure da laboratorio :wink:

I dischetti piezoelettrici non sarebbero in grado di rilevare la pressione continua, potrebbero pero' darti il valore di picco con cui hai colpito lo stampato, piu il picco e' alto piu hai colpito con forza ... quindi niente regolazione dinamica in tempo reale, solo il valore iniziale.

se metti la tastiera su un supporto molto rigido, come ad esempio un piano di vetro, sospeso con dei gommini sopra alcuni sensori di pressione resistivi, potresti rilevare dinamicamente il valore medio della pressione sui tasti, come una bilancia ... ma solo il valore medio, non certo il valore di ogni singolo tasto ... senza usare un singolo sensore per ogni tasto, la vedo difficile da gestire ... oppure, ma poi non so come potresti gestirlo a livello di software, dovresti fare i tasti con una serie di piste a pettine ... piu premi, maggiore e' la superfice del dito che viene in contatto con le piste e maggiore e' il segnale ...

Cosi al volo non mi viene in mente altro per il momento ...

Etemenanki:
Ce ne sono di diversi tipi ... da quelli piezoresistivi, in cui e' il materiale, in genere un semiconduttore, a cambiare la resistenza intrinseca quando viene piu o meno compresso o stressato, a quelli a deformazione di filo metallico, come le celle di carico in cui una sottile traccia di materiale metallico su un supporto flessibile cambia la sua resistenza in base a quanto lo pieghi o stiri, a quelli basati sul contatto in punti diversi di due lamine, una resistiva ed una metallica (cambia la resistenza in base al punto in cui premi insieme le due lamine, non in base alla forza che ci metti), ai sensori di pressione in cui la resistenza cmbia perche' piu lo premi e maggiore e' la superficie che viene a contatto con lo strato metallico ... ce ne sono anche altri tipi ma sono per misure da laboratorio :wink:

I dischetti piezoelettrici non sarebbero in grado di rilevare la pressione continua, potrebbero pero' darti il valore di picco con cui hai colpito lo stampato, piu il picco e' alto piu hai colpito con forza ... quindi niente regolazione dinamica in tempo reale, solo il valore iniziale.

se metti la tastiera su un supporto molto rigido, come ad esempio un piano di vetro, sospeso con dei gommini sopra alcuni sensori di pressione resistivi, potresti rilevare dinamicamente il valore medio della pressione sui tasti, come una bilancia ... ma solo il valore medio, non certo il valore di ogni singolo tasto ... senza usare un singolo sensore per ogni tasto, la vedo difficile da gestire ... oppure, ma poi non so come potresti gestirlo a livello di software, dovresti fare i tasti con una serie di piste a pettine ... piu premi, maggiore e' la superfice del dito che viene in contatto con le piste e maggiore e' il segnale ...

Cosi al volo non mi viene in mente altro per il momento ...

grazie per le info, adesso rifletto su cosa mi conviene fare :wink:

secondo voi se per esempio prendo dei sensori di forza tipo questi: Interlink Electronics 24" Long FSR - RobotShop
che sono lunghi 24'', posso tagliarli in 6 parti e poi saldarmi dei contatti sulle estremità e farli funzionare comunque? sapete se c'è già qualcuno che ha provato a farlo?

Tagliarli, puoi tagliarli, ma tieni presente che in genere quelle metallizzazioni sono fatte depositando inchiostro a base di argento su film polimerico, quindi al 99% di possibilita', saldarli a stagno non se ne parla neppure (anche i loro pin per saldarli sono crimpati, non saldati)

Una possiblita' ci sarebbe ma richiede pazienza ed un po di manualita' ... quando lo tagli, e lo incolli sul supporto, tirando via una piccola parte dello strato superiore in corrispondenza delle piste di contatto laterali, in modo da esporre la pista metallizzata (senza massacrarla) ... poi si prendono un paio di pezzi di filo con il conduttore composto da molti fili il piu sottili possibile, sia per la flessibilita' che per l'aderenza, e li si "saldano" alle piste esposte usando della colla conduttiva a base di rame o argento, la trovi tipo su ebay cercando "silver glue" oppure "wire glue", attenzione che c'e' anche a base di carbone in barattoli e non va bene per questo tipo di lavori, e costa :stuck_out_tongue: ...

il lavoro va comunque fatto con cura, si fissa il pezzetto di filo al supporto con del nastro in modo che l'estremita' spelata sia sulla pista, si mette una goccia di adesivo conduttivo (non esagerare) , si lascia immobile almeno 24 ore per essere sicuri che sia asciutta, poi e' meglio prendere dell'epossidica bicomponente e coprire i punti incollati, includendo un po di filo, e lasciare altre 24 ore ... e comunque poi va maneggiata con cura, nonostante la resina non e' comunque una saldatura a metallo, e non ha la stessa resistenza meccanica :wink:

grazie mille per le info! :wink: