Go Down

Topic: ok , sto impazzendo . Fluttuazione ingressi analogici. (Read 1 time) previous topic - next topic

magum12

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 :( 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   :smiley-eek-blue:

Michele Menniti

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?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

magum12

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

Etemenanki

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 ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

lesto

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.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

magum12

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...

lesto

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)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Michele Menniti

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

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Michele Menniti

Ma davvero quel LED RGB ricevente riesce a generare una tensione di 5V su ogni pin??? :smiley-eek-blue:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lesto

secondo me è un led RGB a 5v, quindi con le resistenze interne. Non genera 5v, ma funziona a 5v.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

magum12

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 .. :)


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

Michele Menniti

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Etemenanki

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 ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Michele Menniti

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lesto

questo tizio ha usato i led RGB per creare una (grezza) telecamera con arduino, vedi i suoi schemi https://www.sparkfun.com/news/956
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up