gestire matrice di sensori

Salve, scusate l'eventuale banalità della domanda, ma se almeno mi dite che chiave di ricerca posso usare per trovare discussioni che hanno già parlato dell'argomento ne sarei felice.

Dunque io voglio leggere diciamo 256 sensori di pressione con Arduino. La versione di Arduino che ho io ha 6 ingressi digitali.
Ciascun sensore è composto da una resistenza variabile a due pin: uno va alimentato sempre alla stessa tensione di 5V e sull'altro pin dovrò leggere una caduta di tensione proporzionale alla resistenza variabile.
Potrei pensare di usare un demultiplexer/multiplexer per aumentare il numero di ingressi ma il problema è che per ovvi motivi realizzativi non riesco a gestire 256+1 "fili".

Quindi,memore di quello che mi hanno spiegato all'università sull'indirizzamento delle memorie, avrei pensato di fare in questo modo:
faccio 16 righe e 16 colonne:
alimento la riga 1 e leggo la caduta di tensione sulla colonna 1: in questo modo leggo il sensore numero 1
alimento la riga 1 e leggo la caduta di tensione sulla colonna 2: in questo modo leggo il sensore numero 2
...
alimento la riga 2 e leggo la caduta di tensione sulla colonna 1: in questo modo leggio il sensore numero 17
...
e così via

In questo modo devo gestire solo 32 fili che poi dovrò trovare il modo di collegare ai miei sei ingressi analogici (se ho capito bene qui posso usare un multiplexer/demultiplexer)

Mi aiutate sia a capire come effettuare i collegamenti sia a cominciare a scrivere il codice?

Grazie e scusate se il mio primo post è un post di richiesta ma spero in futuro di poter ricambiare il favore.

Anzi ho appena letto che è gradita un minimo di presentazione: quindi poche aprole su di me.
Ho studiato ingegneria e quindi ho sempre visto sui libri queste cose ma solo da qualche mese ho iniziato a lavorare in una fabbrica di dispositivi medici come membro dell'ufficio tecnico e ho iniziato a toccare con mano resistenze, circuiti e quant'altro.
Sto cercando di realizzare un sistema di controllo posturale che possa dare al medico delle informazioni su come le pressioni dovute al nostro peso vengono distribuite quando siamo a letto oppure seduti

Esistono sensori indirizzabili con uscita seriale.

Ho visto sistemi che con tre fili leggono decine di sobde di temperatura... Prova a cercare qualcosa per la pressione. Cerca IIC, I2C, TWI, OneWire, 1-Wire.... ecc...

Hai una rete di partitori resistivi che sono collegati su massa e 5V.
Anche se li metti su una matrice 8x8 ( non capisco come arrivi a una metrice 16x16) con 8 righe di massa e 8 colonne di 5V e interrompendo l'alimentazione e la massa di tutte ecetto 1 hai sempre un risultato che é un paralello di tutti i sensori.
Forse é meglio che ci fai un schemino come vuoi collegare i sensori. (basta anche disegnare solo 4 sensori in una matrice piccola).
Ciao Uwe

Analizzando lo schema di una tastiera a matrice come link qui di seguito (4x4)immaginando di sostituire i pulsanti con delle resistenze variabili per poterle leggere i valori dovresti alimentare le righe R0-R15 una alla volta (altrimenti se le alimenti tutte avresti dei paralleli) e leggere in sequenza le colonne analogiche C0-C15 avresti così un 16x16, le righe R0-R15 però dovrebbero essere isolate con alta impedenza quando non lette per non influenzare i valori resistivi delle altre righe.

Un arduino con 16 input analogici e 16 output digitali forse potrebbe funzionare, solo in teoria, e anche se fosse mi chiedo la velocità di lettura e l'efficienza di un MCU a 16Mhz quale risultato concreto potrebbe portare, valutando anche il tipo di sensore che tu intendi impiegare.

http://www.alessioluffarelli.it/guide_tutorial/basso_livello/images/pic_schema_tastiera.png

ciao

ciao pablos
oggi sono di difficile comprensione.

Se metti i sensori al posto dei pulsanti Ti manca la seconda resistenza per fare un partitore resistivo.

Anche tutti eccetto uno delle R0-R15 e C0-C15 sono ad alta impedenza hai delle resistenze messe in parallello attraverso le righe e colonne.
Prendendo il tuo esempio e leggendo P1 (R2 a R4 e C2 a C4 sono ad alta impedenza) hai messo in paralello a P1 per esempio P2,P5 e P6 messe in serie. In tripla ( 3 in serie) sono tutti i sensori messi in paralello a quello da misurare. Nello stesso modo ci sono percorsi con piú di 3 resistenze messe in serie. Il risultato é che misuri un mescuglio di tutti i sensori.

Ciao Uwe

Scusa, sarò cotto, ma se alimento solo R1(+5v) e leggo gli ingressi C1 C2 C3 C4 e R2 R3 R4 sono isolati (infinite ohm) non vedo paralleli e le serie.....scusa magari sono tardo io :slight_smile:

Poi isolo R1 e passo a R2 (+5v) e così via ......

ciao

si hai ragione, il disegno inganna un po', le resistenze delle altre righe anche se isolate dal +5v andrebbero comunque a influenzare i valori in lettura ..... P5 eP6 si troverebbero in serie tra loro e collegate tra C1 e C2 ... non va bene :drooling_face:

Isoliamo anche le colonne non lette allora :slight_smile: una riga e una colonna alla volta .... 32 out digitali e 16 input analog

Una matrice così potrebbe andare se usasse solo dei contatti on-off su i punti di appoggio del corpo

pablos:
Isoliamo anche le colonne non lette allora :slight_smile: una riga e una colonna alla volta .... 32 out digitali e 16 input analog

Avevo fatto le mie considerazioni giá pensando di tener isolate sia le righe che le colonne non usate.

Una matrice così potrebbe andare se usasse solo dei contatti on-off su i punti di appoggio del corpo

Non so cosa vuoi dire. Se vuoi isolare ogni sensore vuol dire che devi mettere in serie a ogni sensore un dispositivo di isolamento.

La cosa che non ho ancora chiesto é per cosa servono 256 sensori di pressione. In che aria sono distribuiti? Non é meglio prendere piú Arduini con dei multiplexer analogici per aquisire i dati? Il cablaggio diventa piú semplice/corto se si usa delle sottounitá di aquisto. Per esempio 4 Arduini ciascuno con 4 multiplexer 4067 attacati a 4 entrate analogiche e collegate via I2C a un master che concentra i dati.

Ciao Uwe

La sparo grossa, insultatemi pure dopo la lettura.
L'arduino mega ha 16 pin analogici, se su ogni pin viene collegato l'output di un CD4067 abbiamo risolto...
Ovviamente su ogni CD4067 colleghiamo 16 sensori.
Rimane di trovare il modo di gestirli: ogni CD4067 ha 4 pin per interfacciarsi con l'arduino e già anche usando il mega non ci siamo; chissà se collegandoli in parallelo e facendoli funzionare contemporaneamente si possa risolvere, in fondo se tutti e 16 vengono pilotati dagli stessi segnali non viene compromesso il funzionamento... basterà leggere i sensori per multipli di 16, quindi durante la prima lettura avremo il valore dei sensori 1, 17, 33, 49..., nella seconda lettura avremo i sensori 2, 18, 34, 50... e così via.
Se tutto funziona sono richiesti soltanto 16 CD4067.

E ora via con gli insulti :slight_smile:

secondo me uno shift register sulle alimentazioni va più che bene.
dividi i sensori in gruppi di 6 (poichè puoi fare al max 6 letture), ogni cella di ogni gruppo è in parallelo con la corrispondente. di tutti gli altri gruppi. a questo punto con uno shift register invia un segnanle di clock, accende il pin, fa le letture, spegne il pin, e ricomincia il ciclo inviando il segnale di clock.

vengono 43 gruppi.

Grazie per le risposte e scusatemi per la mia ignoranza in questa materia! Anzi preciso subito che non ho nessuna pretesa che la cosa funzioni e sono aperto a qualsiasi tipo di critica/proposta.
Dunque ho fatto un disegnino per una matrice 4x4.

Il primo caso è quello che vorrei realizzare:
diciamo di avere un comune voltmetro: metto i puntali fra C1 e R1 e leggo il valore della resistenza variabile A, poi li metto fra C1 e R2 e leggo il valore della resistenza E, e così via…
io vorrei automatizzare questo con Arduino: gli voglio dare un certo tempo (poi andremo a capire quanto deve essere questo tempo) e alla fine lui mi deve dare un array di dati con i valori di tutte le resistenze variabili.
Lo stesso risultato si può ottenere con il secondo schema con un Arduino a 16 ingressi (ma anche se fossero di più ho letto che non dovrebbe essere complicato moltiplicare gli ingressi con qualche artificio) e leggendo di volta in volta la caduta di tensione fra Vin e i vari ingressi A
Però in questo modo i collegamenti da gestire diventano troppi e non ho proprio fisicamente lo spazio.

Scusate se ho detto troppe cavolate…
Riuscite ad aiutarmi? Quello che voglio realizzare è troppo complicato???

Pelletta:
La sparo grossa, insultatemi pure dopo la lettura.
L’arduino mega ha 16 pin analogici, se su ogni pin viene collegato l’output di un CD4067 abbiamo risolto…
Ovviamente su ogni CD4067 colleghiamo 16 sensori.
Rimane di trovare il modo di gestirli: ogni CD4067 ha 4 pin per interfacciarsi con l’arduino e già anche usando il mega non ci siamo; chissà se collegandoli in parallelo e facendoli funzionare contemporaneamente si possa risolvere, in fondo se tutti e 16 vengono pilotati dagli stessi segnali non viene compromesso il funzionamento… basterà leggere i sensori per multipli di 16, quindi durante la prima lettura avremo il valore dei sensori 1, 17, 33, 49…, nella seconda lettura avremo i sensori 2, 18, 34, 50… e così via.
Se tutto funziona sono richiesti soltanto 16 CD4067.

E ora via con gli insulti :slight_smile:

Perché insultarti? Hai detto quasi tutto giusto.
I 4 pin di indirizzo dei 4067 puoi metterli in paralello solo un uscita Arduino non riesce a pilotarne 16 tutti in contemporanea a causa della corrente necessaria.
Soluzioni:
Usare piú di 4 uscite e mettere 2 o 4 gruppi di 4067 e percui usare 8 o 16 uscite digitali
Usare dei driver di bus non invertenti che pilotano i 4067 in gruppi.

Ciao Uwe

Se ho capito bene quest'ultimo post è un po' quello che ho chiesto io nel mio secondo disegno, se è così resta il problema di dover gestire troppi collegamenti

ferdy87:
Grazie per le risposte e scusatemi per la mia ignoranza in questa materia! Anzi preciso subito che non ho nessuna pretesa che la cosa funzioni e sono aperto a qualsiasi tipo di critica/proposta.
Dunque ho fatto un disegnino per una matrice 4x4.

Analizzando il Tuo disegno hai tutte le resistenze in qualche modo messe in paralello. Pensa di applicare una tensione sul sensore A e disegna secondo la legge di Kirchhoff sulle correnti a ogni nodo dove vanno le correnti. Vedrai che ci saranno correnti in ogni sensore anche se le righe e colonne non utilizzate sono isolate. Vedrai che la corrente risultante (e percui la resistenza misurata) non sará solo quella del sensore che vuoi misurare ma molto di piú.

Nel Tuo circuito mancano anche le resistenze per fare il partitore resistivo.

Non hai spiegato per cosa servono 256 sensori.

Ciao Uwe

Per evitare giri strani di corrente bisogna isolare tutte le altre righe e le altre colonne non interessate. Se non sbaglio aveva accennato a qualcosa del genere l'utente pablos. È difficile fare qualcosa del genere?
I 256 sensori servono per misurare la distribuzione delle pressioni: cioè io voglio una misura quasi puntuale della pressione su una certa area. I sensori sono di tipo piezoelettrico.
Se servono altre info chiedete pure.

ferdy87:
Per evitare giri strani di corrente bisogna isolare tutte le altre righe e le altre colonne non interessate. Se non sbaglio aveva accennato a qualcosa del genere l'utente pablos. È difficile fare qualcosa del genere?

Non devi isolare le righe e collone ma devi isolare ogni singolo sensore con un elemento interuttore. Dovrebbe bastare un transistore che mette a massa uno dei 2 poli del sensore e l' altro va direttamente al entrata analogica con una resistenza a +5V per avere un partitore resistivo. Praticamente tutti i sensori sono messi in paralello con un transistore NPN in serie che collega a massa quello che leggi in quel momento. Ti servono 256 transistori, 256 resistenze sulla base e 256 segnali di pilotaggio. I segnali di pilotaggio puoi ricavare usando dei multiplexer che possono essere i 4067 nominati prima. Il circuito rispetto a dei multiplexer analogici che portano la tensione del partitore sul entrata analogica si é complicato aggiungendo un transistore per ogni sensore.
Puoi usare piú entrate analogiche e percui fare piú gruppi di sensori. Con 16 entarte analogiche hai 16 gruppi da 16 sensori con 16 4067, uno per ogni gruppo.

Ciao Uwe

chiedo troppo se chiedo una bozza di una schema?

Mi chiedo però quanto tempo impiega il piezo quando interrogato (liberato dal suo pin a massa) ad assumere il valore effettivo di misura il tutto X 256

Ora uwefed dirà .... sono di difficile comprensione, non capisco cosa vuoi dire :smiley: :smiley:

ciao

Non ho idea di quanto tempo impieghi il piezo ad "andare a regime".
Il sensore è fatto in questo modo: strato conduttivo, strato piezoelettrico, altro strato conduttivo.
Nel caso impiegasse troppo tempo tu hai qualche idea migliore?

se ci dai il modello del sensore é piú facile.
Ciao Uwe