Salve a tutti. Da circa un paio di mesi ho comprato un Arduino Uno e seguendo vari tutorial e un paio di libri sono riuscito a saperne quanto basta dal punto di vista software. Ho però un paio di quesiti dal punto di vista Hardware:
Ammettiamo per ipotesi che io abbia bisogno di connettere ad Arduino una ventina di potenziometri, ognuno su una porta analogica, e altrettanti led, ognuno su una porta digitale con pwm, in modo tale che Arduino legga ogni potenziometro con analogRead() e usi analogWrite() per accendere il led corrispondente.
Farne uno solo è facilissimo, e altrettanto facile è farlo utilizzando tutte le porte di Arduino (anche fosse il mega), ma se io volessi aumentare ancora il numero di potenziometri e led?
Per questo chiedo a voi un consiglio:
Mi è stato consigliato il mux shield: fa al caso mio? ho visto un paio di progetti con questo shield, ma tutti in inglese. Non capisco bene come si utilizza sia come HW che come SW. Esiste qualche guida o progetto in italiano?
Per comandare un alto numero di led serve un'altra sorgente di corrente a parte i 5V di Arduino?
Qui sotto elenco alcuni documenti trovati in rete riguardo il collegamento di più led ad Arduino. Qualcuno di questi fa al caso mio?
Per le entrate va bene il MUX-Shield. Per pilotare i LED in PWM serve uno o piú TLC5940 (16 LED ciascuno) per esempio SparkFun PWM Shield - DEV-10615 - SparkFun Electronics ma devi mettere poi 2 schedine in serie (conettore di lato; non possibile mettere una scheda sopra l'altra; deve essere collegato tutti pin in paralello ecetto il SOUT di quello sul Arduino col SIN del secondo.
Grazie per la risposta.
Per capire bene, il mux-shield aumenta il numero di porte, sia analogiche che digitali, ma quelle digitali non hanno il pwm. Oppure c'è bisogno di uno o più TLC5940 perchè altrimenti i 5V di Arduino non bastano per tutti i led?
Non esiste uno shield che fa entrambe le cose? Non tanto per il costo, quanto per l'ingombro di tutte queste schede. Posso anche usare integrati semplici o chip, senza schede, se può servire.
I 3 multiplexer montati sul MUX collegano ciascuno un pin analogico con una delle 16 entrate/uscite. Per questo il MUX non é usabile per espandere uscite. Solo uno dei 16 entrate/uscite ha un livello logico; gli altri 15 hanno alta impedenza.
Non, non conosco nessun shield che fa entrambe le cose, Hai gia pensato a un Arduino MEGA?
ciao Uwe
se vuoi pilotare dei led puoi utilizzare i circuiti integrati I2C come quelli di NXP PCA9685 (PWM 12 bit) oppure PCA9635 (PWM 8 bit), ma ve ne sono altri.
Si possono collegare direttamente a questi due circuiti integrati led con assorbimento fino a 25 mA a 5V.
Per le uscite puoi usare l'integrato TLC5940, che può pilotare 16 led in PWM a singolo canale (quindi un PWM per ogni canale). Puoi anche metterne più di uno in cascata. http://code.google.com/p/tlc5940arduino/
bilanciamist:
Continuo a non capire bene come funziona il mux. Per quanto ho letto può espandere anche le uscite, solo che fa solo o 0 o 5V. sbaglio? http://mayhewlabs.com/products/arduino-mux-shield
Potresti spiegarmelo meglio?
Prova di immaginarti il MUX come un interuttore rotativo con 1 comune e 16 posizioni e 16 contatti. Solo uno dei contatti é collegato col comune e percui puó dare una tensione in unscita. Tutti gli altri sono isolati e percui non utilizzabili come uscite.
Ciao Uwe
Ok, comincio a capire. non si possono attivare più di una uscita insieme. Neanche se faccio che ogni uscita dura un millesimo di secondo e poi passa all'altra? Lo stesso problema non è presente utilizzandolo come moltiplicatore di ingressi? In ogni caso mi sembra di aver capito che è meglio utilizzare altri sistemi.
Tra quelli che mi sono stati consigliati in questa pagina, qual'è il più semplice da montare e da utilizzare e che occupa meno spazio? (oltre a essere il più economico?).
bilanciamist:
Ok, comincio a capire. non si possono attivare più di una uscita insieme. Neanche se faccio che ogni uscita dura un millesimo di secondo e poi passa all'altra? ...
Se fai quello avrai le uscite che per un millesimo di secondo sono H o L e per il restanti 15 millisecondi sono flotanti. Avrai un alernata che pure non sai cosa succede nei restanti 15 Msecondi perché capti solo disturbi.
Il MCP23017 sul centipede é un espansione I/O con interfaccia I2C. Ogni pin puó essere programmato come entrata o uscita e settato H o L. A differenza del 4067 sul MUX non puó espandere le entrate analogiche.
Scusate, ma la mia soluzione del TLC5940 (out) più 4051 (in) non è valida?
I Tlc5940 tengono l'uscita impostata mentre per gli ingressi basta scorrere ciclicamente i potenziometri collegati ai piedini dei 4051 e leggere gli stati uno alla volta. Non penso che l'utente si metta a spostare 20 potenziometri da 0 a max e viceversa 100 volte al secondo
leo72:
Scusate, ma la mia soluzione del TLC5940 (out) più 4051 (in) non è valida?
I Tlc5940 tengono l'uscita impostata mentre per gli ingressi basta scorrere ciclicamente i potenziometri collegati ai piedini dei 4051 e leggere gli stati uno alla volta. Non penso che l'utente si metta a spostare 20 potenziometri da 0 a max e viceversa 100 volte al secondo
In effetti ho detto potenziometri per rendere più comprensibile ciò che mi serviva, ma in realtà si tratterà di sensori analogici di vario tipo, che a seconda del valore letto dovranno modulare i led. in effetti non mi interessa che abbiano una lettura iper-veloce, ma mi basta che la lettura sia abbastanza veloce da non far tremare i led.
Detto questo, dopo aver capito (più o meno) dalle parole di Uwe che neanche il centipede fa al caso mio, vorrei sapere qual'è il sistema più adatto alle mie esigenze. In particolare che sia semplice da montare o che almeno ci sia una buona guida, perchè non sono certo un tecnico.
Avevo pensato di provare il sistema proposto da leo72 ma, a parte trovare i componenti, mi sembra un po complicato al momento. Se non ci dovessero essere proposte migliori mi armerò di pazienza e ci proverò.
bilanciamist:
Avevo pensato di provare il sistema proposto da leo72 ma, a parte trovare i componenti, mi sembra un po complicato.
Se vuoi gestire 20 ingressi analogici differenti e altrettante uscite PWM anch'esse indipendenti non ti resta che moltiplicare le une e le altre perché né l'Arduino UNO né il Mega (16 in analogici e 14 out PWM) ti possono offrire ciò che cerchi.
leo72:
Se vuoi gestire 20 ingressi analogici differenti e altrettante uscite PWM anch'esse indipendenti non ti resta che moltiplicare le une e le altre perché né l'Arduino UNO né il Mega (16 in analogici e 14 out PWM) ti possono offrire ciò che cerchi.
Me ne rendo conto. So bene che nenache il Mega mi basta, ma speravo fortemente che ci fosse uno shield che aumentasse le porte, sia analogiche che digitali con pwm. A quanto sembra però non esiste uno shield che fa entrambe le cose.
Mentre aspetto di sentire ciò che ne pensa Uwe, sai se c'è una guida in italiano (oppure in inglese ma passo passo) per l'utilizzo del TLC5940 (out) più 4051 (in)?
Grazie
No, non lo so. Ma in questo ambito in italiano c'è poco, solo le guide fatte da qualche volenteroso o le traduzioni di articoli stranieri, la maggior parte delle cose è ovviamente in inglese essendo l'Arduino internazionale.
E devi conoscerlo per forza perché i datasheet sono tutti in inglese, se non sai leggerli non sai poi usare a fondo i dispositivi che compri.
leo72:
No, non lo so. Ma in questo ambito in italiano c'è poco, solo le guide fatte da qualche volenteroso o le traduzioni di articoli stranieri, la maggior parte delle cose è ovviamente in inglese essendo l'Arduino internazionale.
E devi conoscerlo per forza perché i datasheet sono tutti in inglese, se non sai leggerli non sai poi usare a fondo i dispositivi che compri.
Non è che l'inglese mi sia completamente sconosciuto, ma una guida in italiano è ovviamente meglio. Se riuscissi a trovare una guida passo passo anche in inglese non penso che avrei bisogno di studiarmi i datasheet dei componenti (spero). Grazie comunque.
se in output hai i led, allora ti conviene utilizzare un led driver, tipo quello che ti avevo indicato NXP PCA9685, che ha 16 canali in output.
Si programma in modo analogo al link che hai inserito sul PCF8574, ma il PCF8574 e' un circuito integrato che aggiunge I/O per uso generale, il PCA9685 (e fratelli) e' specializzato.
PCA9685 ha 16 canali, c'e' una serie di registri per agire su tutti le uscite led conteporaneamente, oppure vi sono poi dei gruppi di registri per comandare ciascun led indipendentemente l'uno dall'altro.
Costa circa Euro 1 ed ha 28 piedini con pacchetto TSSOP28 che e' la piu' facile da saldare fra quelli proposti.Ne puoi utilizzare fino a 62 assieme assegnado un differente indirizzo I2C a ciascuno, ossia puoi pilotare 62 x 16 = 992 led.
Per gli input analogici aggiungi un circuito integrato, ad esempio con comunicazione I2C, che abbia un sufficiente numero di canali a seconda dell'Arduino che scegli.
Qui vedi un esempio di utilizzo del PCA9635 (il fratello minore del PCA9685)
Come vedi fa un po' quello che vuoi tu, utilizza un potenziometro per gestire i led (anche se qui i led sono RGB).
bilanciamist:
Se riuscissi a trovare una guida passo passo anche in inglese non penso che avrei bisogno di studiarmi i datasheet dei componenti (spero). Grazie comunque.
I link che ti ho dato portano a progetti dei 5940 e dei 4051 con schemi e codice...
leo72:
I link che ti ho dato portano a progetti dei 5940 e dei 4051 con schemi e codice...
in effetti hai ragione, li avevo visti di sfuggita. Ciò non toglie che il tutto sia più complicato di quanto sperassi, ma visto che mi serve tanto vale farlo.
Il TLC5940NT usa 5 uscite digitali, come mai?
é meglio il tlc5940nt o il NXP PCA9685? per il tlc5940 esiste un'apposita libreria, per il NXP PCA9685?
per l'analogico uso i 4051?
Li avete provati di persona?
Intanto ho richiesto dei campioni alla texas instruments e alla nxp.