mi servirebbe un pin in più!

Vi illustro il mio progetto. Vorrei realizzare un termocontrollore con Arduino uno che legga 5 sensori di temperatura LM35, che visualizzi tutte e 5 le temperature su un display LCD, che ci sia un menù per modificare le 5 soglie di temperatura per aprire e chiudere 5 relè. Facendo i calcoli mi manca un pin analogico collegando LCD con l'i2c e più di uno collegando LCD direttamente ai pin digitali, avete idee a riguardo per recuperare qualche pin? Io avevo pensato per gestire il menú di usare 4 pulsanti da collegare a 4 pin digitali

Complessivamente Arduino dispone di 20 pin di cui 6 sono utilizzabili sia come ingressi ADC che come normali GPIO. Facendo due conti: Display 6 pin (4 dati e 2 di gestione) Relè 5 pin Pulsanti 4 pin

Ingressi LM35 5 pin

Totale 20 pin

In pratica basta che usi un ingresso analogico, p.e. A5, come ingresso per un pulsante (pull up attiva e pulsante che chiude verso GND) e sei a posto, se usi i pin 0 e 1 anche loro per i pulsanti non perdi la possibilità di poter programmare Arduino da USB anche quando tutto è collegato.

Però perderebbe la possibilità di scaricare informazioni via seriale durante l'esecuzione del programma.

Potrebbe collegare tutti i pulsanti sull'ultimo pin analogico rimasto utilizzando una rete di resistenze.

Potrebbe essere sufficientemente preciso l'adc a 10 bit per solo 4 valori.

niki77: Però perderebbe la possibilità di scaricare informazioni via seriale durante l'esecuzione del programma.

No se non ci sono pulsanti premuti, il fatto di collegarne due a A0 e A1 non blocca la seriale, ovviamente è necessario prevedere una procedura che consente di passare dalla seriale a GPIO a comando, p.e. tenendo premuto il pulsante 4 per due secondi disattiva la seriale e consente l'uso dei pulsanti 1 e 2, poi dopo 10 secondi, o tot tempo a piacere, che non viene premuto nessun pulsante la seriale torna attiva.

Se usa l'I2C non può usare A4 e A5 come ingressi/uscite analogici o digitali.

Usa uno shift register per il display lcd così usi solo 3 pin al posto di 6. Lo stesso discorso vale per i relè, dato che ne hai 5 se li colleghi diretti useresti 5 pin mentre con un altro shift register ti basterebbero solo 3 pin. Con questa soluzione con solo 6 pin controlli sia il display sia i relè... Inoltre se al posto degli LM35 metti dei DS18B20 puoi collegarli tutti su un unico pin digitale. Basta così? ;)

Ho dimenticato di scrivere che il tutto verrà prototipizzato su una pcb, compreso l'atmega e quindi i pin TX e RX li vorrei lasciare per programmare. E multiplexare gli LM35? Tanto rilevare la temperatura di ogni sensore ogni 5 secondi sarebbe più che sufficiente veloce

vitoos: Ho dimenticato di scrivere che il tutto verrà prototipizzato su una pcb, compreso l'atmega e quindi i pin TX e RX li vorrei lasciare per programmare.

Con la soluzione che ti ho proposto non perdi la programmabilità della scheda tramite seriale, in alternativa puoi collegare i quattro pulsanti su A5 in modo analogico creando un partitore variabile, quando premi un pulsante hai una tensione diversa abbinato allo stesso e in questo modo li puoi distinguere.

Certamente NON può usare l’LCD su I2C; visto che occupa A4 e A5 non avrebbe sufficienti pin analogici per gli LM35.
Usandolo a 4 bit prende 6pin (diciamo dal 2 al 7)
i relé li pilota dall’8 al 12
gli LM35 da A0 a A4
restano liberi solo il 13 ed A5 e ovviamente i pin della seriale, che non deve toccare per semplificarsi la vita futura
Non c’è altra soluzione, se non vuole aggiungere/sostituire componenti, che creare un partitore resistivo con 4 resistenze da 3k3 in serie tra loro tra 5V e GND, come PENSO stiano suggerendo Niki e Astro, uno schema del genere potrebbe funzionare?

4 pulsanti su A5.png

Meglio mettere anche una resistenza di pulldown su A5

Mi sembra che questo problema sia stato già affrontato concludendo che era difficile discriminare la pressione contemporanea di pù pulsanti. O sbaglio?

Basta metterli distanti 3 metri uno dall'altro e il problema non si pone :stuck_out_tongue_closed_eyes:

PaoloP: Mi sembra che questo problema sia stato già affrontato concludendo che era difficile discriminare la pressione contemporanea di pù pulsanti.

Se sfrutti un ladder R/2R ottieni un semplice DAC a quatto bit che ti permette di sapere quali tasti sono premuti simultaneamente in base alla tensione in ingresso al ADC.

ma l'idea è quella di usare un pulsante per volta, immagino gli serva per muoversi sul menu.... Comunque le R andrebbero da 1-2-4-8 K (relativi valori commerciali)? Concordo poi con BUD sulla necessità di una pull-down, ma verrebbe a trovarsi in parallelo a quelle "sotto" il pulsante premuto, a questo punto forse conviene lavorare in parallelo e non in serie, tra poco posto lo schema che ho in mente....

Io ho un vecchio shield Nuelectronics con un minijoystick a 4 vie più pulsante (pressione dello stesso joystick) letto da un'unica porta analogica, con 5 resistenze. Ecco lo schemino dello shield, al centro c'è il joystick con le sue R http://www.nuelectronics.com/download/projects/Nokia_3310_lcd.pdf

non ho visto lo schema di Leo, intanto pubblico cosa ho pensato, poi commentiamo

EDIT: mi sembrano simili, eccetto il fatto che io uso la pull-down e quello schema la pull-up, lì ci sono valori più bassi ma non ne vedo la necessità; forse l’ho azzeccata :sweat_smile:

EDIT 2: ho modificato i valori delle R in modo che non sia possibile una sovrapposizione di valori premendo più tasti in contemporanea, in tal modo è possibile gestire via software qualsiasi combinazione di tasti.

4 pulsanti su A5_2.png

Lo schema del mitico Menn è proprio quello che intendevo. Semplice ed economico. Non penso che al nostro amico serva di premere simultaneamente i pulsanti.

Grazie della conferma Niki, in realtà dovevo calcolare le R come suggeriva Astro, in tal modo ogni combinazione di due o tre tasti non genererebbe mai una configurazione di un tasto solo. P.es. 1k - 2k2 - 4k7 - 10k. Se nessuno trova obiezioni modifico lo schema precedente ad uso e consumo del Forum.

[quote author=Michele Menniti link=topic=140679.msg1057067#msg1057067 date=1357321737] non ho visto lo schema di Leo, intanto pubblico cosa ho pensato, poi commentiamo [/quote]

io ho usato uno schema simile...simile perchè le resistenze che ho usato non erano 2-4-8 eccetera ma tutte da 1k...(tranne quella di 0 mi pare) in ogni caso il concetto sarebbe similare (se trascuriamo la mia non possibilita di gestire doppie pressioni)... Il problema che ho riscontrato è che la mia tastiera era (come succede frequentemente) a membrana con la gomma conduttiva a fare da contatto ...ed evidentemente non fa esattamente ed immediatamente un contatto esattamente a 0 ohm il che si traduce in valori abbastanza ampi dell'analogica... anche talune sovrapposizioni... 4 tasti in tutto ho... Le "medie" come spesso si fa su letture analogiche su queste letture sono un po' complesse perchè bisogna escludere lo 0 e ci sono grossi problemi con la doppia pressione del tasto. Detto questo alla fine l'ho fatto e grossomodo funziona come metodo... però consiglierei un tasto "decente" e "pochi tasti".

se hai usato R tutte uguali devi aver realizzato lo schema che ho pubblicato nella prima pagina; quest'ultimo non funzionerebbe mai con le R tutte uguali.