ok , sto impazzendo . Fluttuazione ingressi analogici.

Salve , questo è il progetto che sto studiando , che ho visto tempo fa e che mi è stato anche proposto da qualcuno di voi : http://www.gioblu.com/tutorials/sensori/275-sensore-di-colore-led-rgb

All'inizio ho seguito facendo quel che spiegava la guida.. il che non ha avuto un buon fine : inizialmente ho avuto problemi con processing , con cui , alla fine ne sono venuto fuori e ho risolto , ok a questo punto arduino comunica con processing , ma non fa quello che dovrebbe fare :frowning: allora ho studiato il codice di arduino , adesso so quello che fa e come funziona! Ma facendo varie prove al di fuori del progetto mi sono accorto , scrivendo un programma il cui scopo era quello di leggere la tensione ai capi di un solo led usando il procedimento del progetto linkato sopra ( nel mio caso ho usato due normali led rossi , e successivamente anche due rgb per ulteriori prove ) , che nel monitor seriale mi dava delle fluttuazioni più o meno da -40 a +100 , appena però applicavo una fonte di luce o comunque la riflessione della luce prodotta da un altro led su una superficie , la tensione aumentava e questo va bene... ma cosa sono quelle oscillazioni?.. dopo vari scervellamenti mi sono chiesto ... e se le oscillazioni non fossero dovute al led? allora ho tolto il led e le fluttuazioni persistevano , perché? come risolvo il problema?

Aiuto :fearful:

Che tensione di riferimento stai usando?
Come alimenti il circuito?
qual è il range di valori di tensione che stai applicando all'ADC?
Quandi ingressi ADC stai usando?
Stai lavorando con Arduino o in stand-alone?

5V;
Tramite cavo usb;
da 0 a 5V ( 0 - 1023);
intendi gli ingressi analogici? ne sto usando 3 , per ottenere i 3 valori RGB;
Cosa si intende per stand alone?

Grazie per la risposta

Piuccolo suggerimento pratico, se vuoi usare i led invece dei sensori di colore veri e propri ... scherma i led, sia i detector che gli emettitori, con un po di termorestringente o con qualche pezzetto di cannuccia nera (si, quelle da bar da 6 o 7 mm di diametro :P), in modo che i riflessi e le rifrazioni non confondano le letture ...

Inoltre, in che modo leggi i detector ? ... i vari tipi di led non sono sensibili solo alla loro lunghezza d'onda, quindi in teoria dovrebbe essere meglio illuminare con un colore e leggere solo il corrispondente detector, a rotazione ... illuminare, ad esempio, con il verde, ma leggere tutti e tre i detector, potrebbe dare letture falsate ...

un pin arduino non collegato legge delle fluttuazioni, è normale. Bisogna mettere una resitenza di pull-up (dal pin a vcc) o pull-down (dal pin a gnd) per risolvere il problema.

Per ogni colore faccio la lettura... prima per il rosso poi per il verde e poi per il blu , per esempio : Accendo il led rosso , A0 legge ... Accendo il led verde , A1 legge...

Se metto delle reistenza di pull-up o pull-down non ricevo più nulla...

perchè la resistenza deve essere abbatsanza piccola per fare il suo lavoro, ma abbastanza grande da non "rovinare" il segnale. vedi partitore di tensione per averele formule che cerchi (e che menniti mi perdoni e corregga se dico baggianate)

Lesto, non mi pigliare per il ... :smiley:

Magum, le fluttuazioni sull'ADC derivano da disturbi sull'alimentazione e da instabilità della stessa; se colleghi un multimetro serio a +5V dell'Arduino vedrai delle fluttuazioni più o meno estese (dipende anche dall qualità del tuo PC) che, usando tu la stessa tensione come riferimento, ovviante si ripercuotono sulla qualità della lettura.
Lo stand-alone è u circuito basato sul solo microcontrollore e pochi altri componenti esterni, in modo da non dover usare tutto Arduino; in questo caso si potevano fare degli interventi di valore sul circuito per migliorare di molto la risposta dell'ADC. Invece nelle tue condizioni puoi:
1 - infilare un C da 100nF tra il pin ARef e GND
2 - effettuare letture multiple con calcolo della media per ogni ingresso; p.es.: apri A0, con un ciclo for fai 10 letture sommandole in un totalizzatore, quindi dividi il totale x10 e lo assegni ad A0, quindi ripeti la cosa per A1 e A2; qualcuno suggerisce addirittura di non prendere in considerazione la prima lettura delle dieci, quindi inizi a totalizzare dalla 2 alla 9 ed alla fine dividi per 9, oppure fai 11 letture, salti la prima e dividi x10. Personlamente non ho mai notato benefici dal saltare la prima lettura, ma tu la prova puoi farla.
Circa le R di pull ora provo a guardare lo schema, per capire se si può fare qualcosa, tu intanto testa quanto ti ho detto, noterai già validi miglioramenti.

Ma davvero quel LED RGB ricevente riesce a generare una tensione di 5V su ogni pin??? :fearful:

secondo me è un led RGB a 5v, quindi con le resistenze interne. Non genera 5v, ma funziona a 5v.

No , garantisco che non riesce a generare 5V , credo massimo 1 volt e mezzo .. Inoltre i valori cambiano per il verde e per il blu ... il rosso da valori più alti , questo nel mio caso.. puoi comunque guardare i map dei vari segnali letti da processing noterai che sono diversi .. :slight_smile:

Comunque seguirò i tuoi consigli , domani stesso mi metterò a l'opera , sono appena tornato da una partita di pallone.. :~
Grazie per le risposte :slight_smile:
Vorrei tanto realizzare questo progettino , è interessante! :slight_smile:

Infatti mi sembrava impossibile, ma tu mi hai risposto da 0 a 5V ( 0 - 1023); e quindi era bene chiarire. Dovresti misurare con precisione il valore massimo che esce da ogni LED nella sua migliore condizione, perché ancora è tutto migliorabile, comunque vediamo prima l'esito delle prove. Ah, vedi che io non ho guardato lo sketch, Gioblu non è uno sprovveduto, quindi potrebbe già aver adottato il metodo della media, quindi guarda bene, al limite aumenta il numero di letture. La prova delle R di pull-down rifalla: metti una R da 22k (se la cosa migliora devi provare a scendere fino a 10k) tra ognuno dei pin analogici che usi e GND.

Be', in quel caso la soluzione migliore sarebbe di usare un'operazionale per ogni led ... la tensione generata dalla giunzione potra' arrivare ad 1,5V, se letta con un multimetro da qualche decina di MOhm di impedenza di ingresso, ma le correnti in gioco sono bassissime ... anche solo qualche decina di KOhm dei pull-up te ne porterebbe via un bel po ...

Cosi ad occhio direi, resistenza da 220K e condensatore da 10nF in parallelo al led (per stabilizzarne la risposta), poi un'operazionale in configurazione non invertente per amplificarne il segnale (puoi usare 47K di ingresso e 470K di trimmer di reazione, con un'altro 47K in serie al trimmer, cosi puoi regolare l'amplificazione e portare tutti e tre i led ad una risposta piu o meno uguale) ... dovrebbe bastare un LM324, contiene 4 operazionali ad alimentazione singola ...

i led generano tensione positiva rispetto allo 0, non può usare una pull-up; se non supera 1,1V si può usare il Reference INTERNAL che è molto più stabile, risolvendo il problema senza "complicare" lo schema. All'epoca della presentazione del progetto GIOBLU dimostrò che funzionava abbastanza bene, c'è anche il video. Personalmente penserei alla tua idea per un circuito stand-alone; il vero problema non sono le bassissime correnti, ma le fluttuazioni in tensione; delle pull-down potrebbe fare anche a meno, si tratta di verificare la risposta all'applicazione del metodo della media delle letture.

questo tizio ha usato i led RGB per creare una (grezza) telecamera con arduino, vedi i suoi schemi Engineering Roundtable - Nick and his DIY Camera - News - SparkFun Electronics

Ho provato a fare la media di 10 letture , ma non ha dato esito positivo... domani vi posto il programma nel caso in cui ho sbagliato qualcosa ^^

ma non ti avevamo chiesto di fare delle altre misure/verifiche?

Ma quando vi entrerà in testa che un led emittore di luce non è un fotoricettore ?
Tra i due device vi sono delle notevoli differenze costruttive, in particolare un normale led, sebbene può generare tensione quando illuminato, non solo rende disponibili pochi uA quando usato, erroneamente, come fotoricettore, ma in condizioni di scarsa illuminazione è praticamente un circuito aperto che lascia l'ingresso ADC flottante e in grado di captare tutto la "porcheria" emi circostante.
Altro problema è che l'impedenza d'uscita di un normale led usato come fotoricettore è molto più alta dei 10k massimi ammessi dal ADC di Arduino.
Io li metterei tutti in galera quelli che consigliano di usare dei led come fotoricettori :grin:

astrobeed:
Io li metterei tutti in galera quelli che consigliano di usare dei led come fotoricettori :grin:

:smiley: :smiley: :smiley:

per il pin flottante siamo d'accordo, per l'alta impedenza non so cosa comporta (una spiegazione o un link?), ma CREDO che entrambi i problemi siano risolvibili usando una pull-down.

Poi che un rcevitore sia più adatto siamo d'accordo, ma in pratica ci si arrangia con ciò che si ha in casa :slight_smile: