Progetto Arduino con 24 sensori analogici (piezo)

Ciao a tutti,

premessa: sono uno sviluppatore, e mi sto avvicinando al mondo Arduino (ed elettronica in generale). Lato sviluppo software non dovrei avere grossi problemi, purtroppo ho parecchie lacune lato componenti e nozioni di elettronica, che sto cercando cmq di recuperare.

Vorrei realizzare un progetto con Arduino che mi riesca a leggere dei valori di 24 sensori piezoelettrici, anche in maniera contemporanea. In pratica sono 24 strumenti musicali percussivi, e questi valori verranno trasformati in informazioni MIDI.

So che Arduino R3 supporta max 6 input analogici, qual è l'approccio migliore (e funzionale, nel mio caso) per espandere questi input da 6 a 24 ?

Grazie in anticipo :slight_smile:

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

1 Like

Ok fatto, grazie mille!

Ciao e benvenuto, se non lo hai già fatto dai un'occhiata a questo thread:

dove intanto puoi farti un'idea delle problematiche da affrontare con i sensori, poi vediamo come eventualmente aumentare gli ingressi a disposizione.

Ciao, Ale.

1 Like

Ciao Ale, si avevo trovato quel thread, molto interessante. Lo sto leggendo con calma cercando di apprendere, e fare ricerche parallele in base a quello che ancora non mi è chiaro.

Il mio approccio di progetto è sempre per step... e prima di arrivare alle problematiche relative ai piezo, volevo capire qual è la strada per espandere il numero in input analogici. Infatti il mio progetto ha senso solo se riesco ad arrivare ad un numero pari o superiore a 20. Stavo leggendo della possibilità di usare dei MUX, oppure di "dividere" ogni singolo input analogico con delle resistenze, e collegare più sensori ad un singolo input ... e ripeto, su questa parte purtroppo le mie conoscenze elettroniche sono molto limitate :frowning:

Un altro aspetto da considerare, è che le letture dei valori dagli ipotetici 20-24 piezo deve essere contemporanee, con la latenza minima possibile e un campionamento che permetta di rilevare più colpi ravvicinati possibili... mi viene in mente un 10ms, tra un colpo/vibrazione e l'altra...

Dal codice poi, ma su questo penso di essere preparato, implementerò tutti questi parametri in maniera dinamica: sensibilità, soglie, mask time, retriggering, ecc ...

Per "moltiplicare" gli ingressi analogici esistono essenzialmente 2 strade: o un MUX analogico (tipo il 4067, a 16 ingressi), o usare degli ADC esterni supplementari(es. MCP3008, 8 ingressi a 10 bit di risoluzione, ma ovviamente ne esistono molti altri). Riguardo alla velocità di campionamento, gli ingressi sono effettivamente molti, e leggerli in "contemporanea" qualunque sia il metodo usato la vedo dura. Persolnalmente partirei con una scheda un minimo più performante delle Arduino "standard" a 8bit, così da avere in partenza più velocità e più memoria a disposizione, un raspberry pi pico ad esempio potrebbe essere una buona base di partenza. Poi dovrai fare molte prove e decidere quale sia la migliore configurazione per il tuo caso, non ho un'esperienza specifica in materia da offrirti, sorry.

Ciao, Ale.

1 Like

Una analogRead su un UNO/nano dura 112 µs. Anche facendo doppia lettura per ogni ingresso, per 24 ingressi servono 5.4 ms. Impachettando i dati diciamo in 60 byte, per trasmetterli serialmente a 115200 b/s servono 5.2 ms. Le due operazioni credo possano andare avanti in parallelo in hardware+interrupt già gestiti dalle funzioni base, per cui anche senza cercare ottimizzazioni direi che in 10 ms si può fare tutto.
Un Arduino nano (8 ingressi analogici) e un CD4067 potrebbero bastare per 23 ingressi.

1 Like

Super interessante, grazie Claudio. Non mi resta che fare pratica, naturalmente con gli emulatori secondo te si riesce già ad impostare qualcosa? Il CD4067 va collegato a tutti i 6 ingressi analogici?

Con gli emulatori si può impostare la logica generale, ma poi le temporizzazioni reali e i livelli di tensione reali vanno visti dal vero. Il CD4067 si collega a un ingresso analogico, e si comanda con quattro segnali digitali di selezione.

1 Like

Buongiorno a tutti, ho ancora un qualche dubbio:

  1. Con un Arduino Mega che ha 16 Analog Pin potrei avere una base di partenza migliore? Mi riferisco ai calcoli sulla durata delle letture...
  2. Con un Arduino UNO R4 che ha gli analog settabili a 12 o 14 bit, potrei avere una migliore risoluzione o performance migliori lavorando con i MUX ?
  3. Perchè un Raspberry Pi Pico avrebbe performance migliori per questo tipo di circuito elettronico?

Grazie in anticipo a tutti :heart_eyes:

Non è detto che nel tuo uso specifico abbia performance migliori, in assoluto diciamo che ha più RAM, più Flash, è un dual core ed ha una velocità di clock maggiore degli altri 2, tutte cose che possono o meno servire, ma che in genere rendono la vita più semplice. Inoltre, al pari dell'R4 ma a differenza del Mega, ha l'interfaccia USB nativa, cioè che puoi programmare nel tuo sketch per farla diventare es. un dispositivo MIDI.
Poi, se vogliamo essere venali, costa anche molto meno...

Ciao, Ale.

1 Like
  1. no perche l'ADC è sempre e solo uno
  2. si
1 Like

Come ti ha scritto già qui sopra icio, no, tu devi sempre condiderare che, indipendentemente dal numero di ingressi analogici, normalmente il ADC è sempre UNO solo ed i vari ingressi sono solo in mux (da software selezioni quale colleghi al ADC).

Guglielmo

1 Like

Ciao a tutti, in base a tutto quello che ho letto e che mi avete consigliato, ho fatto una conta effettiva dei sensori analogici da leggere contemporaneamente, e andando al risparmio non saranno meno di 18. Sempre in questa fase teorica e progettuale, cercando ho trovato il Teensy 4.1 che ha già 20 analog input, che forse è una soluzione che mi evita di implementare dei MUX esterni ... che ne pensate?

In base a quello che scriveva @Claudio_FF e da quello che ho capito è che avendo un solo ADC per fare 20 letture analogiche avrò bisogno del relativo tempo ... e se avessi un ADC per ogni sensore analogico? Ovviamente esterno ... è molto complicato realizzare un BUS per collegare 20 ADC esterni? In questo caso dovrei risolvere il problema del tempo necessario per effettuare le letture contemporaneamente?

Grazie :heart:

I Teensy non li conosco. Anche la comunicazione su bus porta via tempo. Inoltre prima di decidere la fattibilità teorica totale in un senso, serve almeno qualche misura con un ingresso/sensore/collegamento reale, per vedere a cosa si va incontro e cosa può servire di inizialmente non previsto/prevedibile.

Ciao Claudio, "...anche la comunicazione su bus porta via tempo" intendi tempo per la progettazione? Volevo progettare qualcosa che fosse scalabile... e che mi desse la possibilità di collegare in cascata i sensori, per darmi la possibilità un domani di aumentarli senza dover cablare partendo dal microcontrollore, ma da sensore a sensore ... non so se è folle come idea, soprattutto per chi come me è agli inizi... :slight_smile: PS: buon anno a tutti!

Intendo il tempo fisico che serve ai dati per passare sul bus.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.