Problema con sensore capacitivo

Ciao a tutti è la prima volta che mi vedo costretto a richiedere il vostro aiuto e spero di aver fatto tutto nel modo corretto. Detto questo vi spiego brevemente il problema:

sto realizzando uno "scompartimento segreto" che viene sollevato a seguito del corretto inserimento di una sequenza su un tastierino che ho realizzato con vernice conduttiva sul muro. Il problema risiede proprio nella calibrazione dei valori dei sensori capacitivi perché posso vedere il valore restituito dal tasto premuto mediante monitor seriale e settare i valori. Ma quando poi vado ad alimentare arduino autonomamente è come se tali valori cambiassero (come se i valori precedenti fossero influenzati dalla presenza del pc collegato). Risulta praticamente impossibile azzeccare le soglie corrette di attivazione dei vari tasti. Qualcuno sa come potrei risolvere??

Buongiorno e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Perfetto ho provveduto a scrivere una presentazione grazie millee

Credo che se non ci dai altre informazioni non è facile aiutarti.

Ad esempio con cosa alimenti Arduino quando non è su USB e come è connesso? Come hai collegato i sensori capacitivi? E usi qualche libreria o leggi direttamente in analogico? E qual è lo sketch che usi (o almeno la parte dove fai il riconoscimento)? Hai provato con uno sketch semplice che gestisce un solo tasto e vedere come si comporta con e senza USB (ed in tal caso, quali valori leggi)?

Allora per quanto riguarda l'alimentazione ho provato sia tramite ingresso VIN che tramite il jack ma il risultato è sempre lo stesso, i valori non corrispondono. Per quanto riguarda il collegamento io ho un tratto di vernice conduttiva sul muro, al termine del quale ho un cavo elettrico che si inserisce nella whiteboard e ad esso è collegato un secondo cavo,che va ad arduino, e una resistenza da 1M; dall'altro lato della resistenza si trova infine un secondo cavo anch'esso collegato ad arduino che avrà la funzione di "controllo" del sensore.
Per quanto riguarda la libreria che utilizzo è la "CapacitiveSensor.h", e per lo sketch credo la cosa più comoda sia quella di allegarlo al post, anche se a prima vista potrebbe essere un po confusionario dato che non riguarda solo i sensori ma svariati altri componenti del progetto.

codice_definitivo_2.ino (5.27 KB)

edo98767_:
Allora per quanto riguarda l'alimentazione ho provato sia tramite ingresso VIN che tramite il jack ma il risultato è sempre lo stesso, i valori non corrispondono.

Certamente, Vin e jack sono la stessa cosa ossia sono collegati insieme e vanno al regolatore di Arduino che porta la tensione a 5 V.

ho un cavo elettrico che si inserisce nella whiteboard

(immagino intendessi "breadboard"... :wink: ).

e ad esso è collegato un secondo cavo,che va ad arduino, e una resistenza da 1M; dall'altro lato della resistenza si trova infine un secondo cavo anch'esso collegato ad arduino che avrà la funzione di "controllo" del sensore.

Ok, non è proprio chiarissimo.. :smiley: Non facevi prima a fare uno schemino semplice anche con i caratteri (o con Paint o un programmino per disegnare circuiti anche online o disegnarlo su carta e fotografarlo, e postare quello)? Comunque più o meno credo che sia lo schema classico di un sensore capacitivo, diciamo come questo:

SENSORE ---+----------------> Pin 2
           |
           +-- R 1 MOhm ----> Pin 15

Per quanto riguarda la libreria che utilizzo è la "CapacitiveSensor.h", e per lo sketch credo la cosa più comoda sia quella di allegarlo al post, anche se a prima vista potrebbe essere un po confusionario dato che non riguarda solo i sensori ma svariati altri componenti del progetto.

Benissimo per la libreria, ma, come ripeto ormai molto spesso nel forum, quando c'è un problema bisogna isolarlo ossia, come ti avevo suggerito, fare un piccolo sketch che gestisce un solo tasto (magari derivato da un esempio della libreria) e vedere quali valori leggi con e senza USB.

Considera che i valori di questo tipo di sensori dipendono moltissimo dalle caratteristiche del GND, per cui è altamente probabile che i valori posssano cambiare con o senza USB, per cui penso sia importante capire di quali valori si stia parlando ossia di quanto si possono discostare tra loro e se sia possibile determinare un valore che risulti soddisfacente in entrambi i casi.
Quindi una cosa del genere:

#include <CapacitiveSensor.h>

CapacitiveSensor cs = CapacitiveSensor(2,15);

void setup()                    
{
  // Prova anche a modificare l'autocalibrazione (default 20.000 ossia 20 secondi)
  //cs.set_CS_AutocaL_Millis(0xFFFFFFFF);
  Serial.begin(9600);
}

void loop()                    
{
  Serial.println(cs.capacitiveSensor(30));
  delay(200);
  // o in alternativa puoi anche forzare ogni tanto l'autocalibrazione da codice
  //cs.reset_CS_AutoCal();
}

Anche la resistenza influisce sulla sensibilità, per cui magari invece di 1 MOhm si potrebbe pensare di aumentarla un poco.

Facci sapere l'esito di questa prova, e poi vediamo cosa fare.

Faro' un po l'avvocato del diavolo (di me stesso :stuck_out_tongue: :D), ma non consiglierei Arduino per usarlo con ingressi capacitivi, se non come esperimento didattico ... questo perche', anche se con la libreria e' possibile "in teoria" usare gli ingressi come capacitivi, la MCU di per se non e' studiata per fare quello ...

Sono tanti i fattori che possono variarti i valori, temperatura ed umidita' del muro, ad esempio, piu o meno prossimita' del corpo (anche se molto poco), qualita' e specifiche della vernice conduttiva, perfino il fatto che con il PC collegato hai un diverso "giro di massa" dell'intero impianto rispetto ad averlo alimentato senza il PC connesso (e gli ingressi usati in capacitivo alla fine li leggi come differenze di potenziale rispetto a massa, o in quel caso "terra" :wink: ) ... e tutto puo influire ...

A quel punto sarebbe meglio usare un componente progettato specificamente per essere usato come tastiera capacitiva, che poi userai per pilotarci arduino ... ad esempio, PCF8883 o MTCH101 (per tasti singoli, se ne servono pochi) ... oppure MPR121 (case schifoso, ma vendono anche le breakout board, tipo da sparkfun) ... o la serie AT42QT della Microchip (ad esempio, AT42QT1070 per 7 tasti, AT42QT1110 per 11 tasti, e cosi via) ... alcuni possono essere configurati anche come slider o "ruota capacitiva", sacrificando tre o piu ingressi, dipende dal modello ...

Il vantaggio e' che usano particolari circuiterie interne (sistema capacitive transfer) per leggere gli ingressi, per cui sono piu resistenti ai disturbi, piu efficenti nella rilevazione (alcuni hanno anche un'autocalibrazione), ed in genere molto piu efficenti di una MCU standard usata in modo non previsto dal costruttore :wink: