Vai al contenuto
PLC Forum


Misurare L'illuminamento Con Fotodiodo E Microcontrollore!


bios85

Messaggi consigliati

Salve a tutti, come da titolo devo realizzare un piccolo corcuitino che mi misuri l'illuminamento di una zona mediante un fotodiodo.... per iniziare a fare delle prove ho acquistato una piccola board (light click) della mikroelettronica che contiene il fotodiodo, il circuito di condizionamento e un adc a 12bit!!! Il fotodiodo è il seguante PD15-22C-TR8 e questo è il datascheet http://www.everlight.com/datasheets/PD15-22C-TR8_datasheet.pdf

Ora ho provato la schedina e misurando in una stanza con una luce non fortissima (misurato con luxometro 350 lux) satura subito... così ad occhio bastano circa 200 lux per saturare. Quello che volevo chiedervi è mi potreste spiegare la relazione tra la corrente del fotodiodo e la luce?

Essendo che la sensibilità del fotodiodo non è costante (nel suo range di misura), come devo tenerne conto?

Io da datasheet ho capito che il sensore fa passare circa 6,5uA di corrente per ogni mW/Cm2 di illuminamento, è corretto oppure ho capito male?

Ringrazio tutti anticipatamente e scusate per le troppe domande!

Link al commento
Condividi su altri siti


I data sheet hanno sempre ragione. Il problema è che c'è una notevole dispersione dei parametri, poi molto dipende dalla polarizzazione del fotodiodo.

Poi potresti prevedere anche una sorta di diaframma per evitare che saturi con poca luce.

Per la linearizzazione, visto che hai un microcontrollore, ti conviene farla eseguire al micro.

Link al commento
Condividi su altri siti

Salve, ovvio che i datasheet hanno sempre ragione... io intendevo dire se io ho interpretato bene!!! Per quanto riguarda la linearizzazione il fotodiodo dovrebbe dare una risposta in corrente già lineare, il mio problema è che non riesco a capire come tenere conto della sensibilità! Confrontando le mie misure con un luxometro noto che il mio sensore misura circa 1/4 di quanto misura il luxometro.....

Link al commento
Condividi su altri siti

Parlo da ignorante... non ho esperienza sull'argomento

A naso tu dovresti fare una taratura iniziale Le tue misure secondo me,ma ripeto posso anche sbagliare del tutto,

dovrebbero essere relative fai una misura al buio e quello è il tuo offset poi misuri alla luce e fai la differenza

Come convertire in lux il valore trovato non so rispondere Hai trovato qualcosa nel sw che danno con la schedina ?

Sempre secondo me....

Guarda la Fig.4 del datasheet credo che la chiave sia in quel grafico

Consocendo al corrente ricavi E mW/cm2

Modificato: da accacca
Link al commento
Condividi su altri siti

Si infatti la chiave è in quel grafico... ma è riferito a una lunghezza d'onda di 875nm, e se la luce che misuro ha una lunghezza d'onda diversa? Nell'esempio della schedina non convertono in lux ma restituisce una variabile con valore da zero a 100% sensa unità di misura....

Ieri ho fatto una prova di confronto con un luxometro in una stanza con delle lampade a luce bianca (non tubi fluorescenti) e la scheda della mikroe segna circa 80 lux invece il luxometro circa 350lux....

Ho sostituito la R2 da 1M a 100K perchè altrimenti saturava con pochissima luce e ho fatto in questo modo: ho letto il valore dell'ADC e l'ho convertito in tensione, poi da questo valore ho ricavato il valore di corrente che scorre in R2, poi ho diviso questo valore di corrente per 6,5uA e ho ottenuto i mW/Cm2 dai quali ho ricavato i lux.... In pratica non ho tenuto conto della sensibilità, non ho capito come fare!

Secondo voi la procedura è corretta?

Qui c'è lo schema della schedina: http://www.mikroe.com/downloads/get/1985/light_click_manual.pdf

Modificato: da bios85
Link al commento
Condividi su altri siti

Forse grafico di figura 2 hai 1 a 875nm a seconda della tua lunghezza d'onda diminuisci il risultato ottenuto

Cavoli non è un problema banale dovresti tenere conto anche della variazione della "corrente di buio" con la temperatura (grafico fig.3)

Secondo me con l'hw che hai in mano puoi solo fare come hanno fatto loro restituire un valore del tipo

poco-abbastanza-tanto

fare una misura precisa da quel poco che leggo è piuttosto complesso probabilmente devi avere anche qualche filtro ottico davanti al sensore

(come sempre le sparo...)

Link al commento
Condividi su altri siti

Tutti i fotodiodi e fototransistor hanno sensibilità differenti alla varie lunghezze d'onda. Nei datasheet c'è sempre un bel diagramma che sinstetizza questa risposta.

Per realizzare strumenti di misura "seri" si usano arrays di diodi con sensibilità differenti a differenti lunghezze d'onda, poi si eseguono medie pesate delle varie risposte.

Il diaframma, per ridurre la quantità di luce che incide sul sensore, serva anche a minimizzare gli effeti di non linearità.

Link al commento
Condividi su altri siti

Infatti io devo stimare i lux che sono su una strada per poi regolare delle lampade per mantenere l'illuminamento costante, questa è l'idea.... ma ancora la differenze con il luxometro secondo me è tanta.... anche se devo testare se questa differenza è uguale a diverse intensità di luce e se fosse così potrei risolvere il problema via software!!!

Link al commento
Condividi su altri siti

Se è solo per mantenere costante la luminosità poco importa la misura assoluta, tanto compari una soglia con l'uscita del sensore. Quello che veramente è importante è la costanza della misura, ovvero misure identiche per condizioni identiche.

Il valore di soglia lo puoi definire con l'ausilio di uno strumento di misura.

Ricalibrazioni, linearizzazioni ed altro non sono necessarie se non ti interesa una misura assoluta.

Link al commento
Condividi su altri siti

Salve a tutti, in questa settimana ho fatto più prove ma non c'è stato modo di riuscire a tarare questo sensore, troppe differenze anche tra lampade diverse... quindi la mia deduzione e che è troppo sensibile agli infrarossi!!!

Allora ho acquistato questo: TEMD5510FX01 che è già filtrato, ora secondo voi che modifiche dovrei apportare alla schedina?
Poi qualcuno di voi sa dirmi dove posso trovare le norme con i valori di illuminamento delle strade?

Grazie

Link al commento
Condividi su altri siti

ora secondo voi che modifiche dovrei apportare alla schedina?

Se vuoi misurare l'illuminazione stradale per una tua curiosità è un conto, se invece devi eseguire misure per motivi professionali compre uno strumento certificato, altrimenti le tue misure son tempo e soldi sprecati: non servono a nulla.

Link al commento
Condividi su altri siti

Come ho già detto sopra devo realizzare una scheda in grado di pilotare una lampada a led in modo da avere un illuminamento x (il sistema è più complesso ma lo scopo finale è questo) . La retroazione del circuito è appunto un fotodiodo.

Io ho detto che non mi serve una precisione di un lux, ma nemmeno un errore di 300 lux tutto qua! Le misure di riferimento le sto facendo con un luxmetro professionale ovviamente.

Link al commento
Condividi su altri siti

Come proposto da Livio al #9 con quello che hai puoi dividere il campo di misura in 4/5 parti e riconoscere 4/5 situazioni differenti non i LUX in assoluto.

Secondo me potresti fare una cosa diversa

Caratteristiche del led che usi lumen/w (misuri la corrente di alimentazione)

conosci l'angolo del cono di illuminazione

Conosci al distanza lampada piano da illuminare

Credo che con questi dati potresti riuscire a stimare i lux sul piano (Sempre approssimazione è ma non devi usare più l'ambardan di cuui sopra)

Per fare una cosa più furba potresti fare delle misure con il luxmetro professionale e crearti una tabella tot corrente tot lux.

Mediando su più lampade potresti avere una tabella che caratterizza in modo abbastanza preciso la tua illuminazione

Immagino che la resa del led lumen/w dipenderà anche dalla temperatura Poichè la tua applicazione è da esterno dovresti valutare se la variazione estate/inverno

procude variazioni apprezzabili della tabella di cui sopra.

Temp fa il responsabile dell'azienda municipalizzata della mia città, aveva scritto un'articolo sulla sperimentazione che aveva fatto con lampade a led per illuminazione stradale. Ti riassumo quello che ricordo:

All'epoca le aziende che avevano proposto soluzioni con lampade a led si erano dimostrate molto superficiali e ignoranti in materia. Tutte avevano dato risalto alla durata della lampada led ma avevano dimostrato poche o nuessuna conoscenze delle normative relative all'illuminazione pubblica. (Non mi sembra il tuo caso ma ti avviso perchè anche il lampione più figo del mondo se non è a norma....)

Altra cosa che ricordo è che il tizio aveva fatto a tutte la stessa domanda: ok per la lampada manutenzione (quasi) nulla ma l'alimentatore ? Ha la stessa durata ?

e qui erano cadute le pere (e sarei cascato anche io con tutte le scarpe).

Cerco l'articolo se lo trovo in rete ti posto il link.

Link al commento
Condividi su altri siti

grazie per i consigli.... comunque nei dati del fotodiodo c'è un grafico che illustra la corrente inversa del fotodiodo in funzione dei lux che lo colpiscono, questo andamento è lineare! essendo l'area del fotodiodo nota penso che questo grafico ne tenga conto... poi a me mi serve sapere sulla superficie da illuminare quanti lux ci sono in modo da regolare la potenza della lampada.

Una volta che questo funziona si passa allo step successivo e quindi alimentatore, driver ecc e si terrà conto di efficienza e tutto il resto.

Per quanto riguarda le normative è vero non so nulla ancora, adesso è l'inizio di un prototipo.....

Link al commento
Condividi su altri siti

Salve e buona sera.... oggi mi è sorto un'altro problema, sto facendo delle prove di controllo della lampada impostando una soglia di illuminamento e cercando di tenerla costante allontanando ad esempio la lampada dal sensore.... Il controllo che faccio è molto semplice: in pratica leggo il sensore e confronto la lettura con la soglia, se sono al di sopra abbasso di 1 il duty de PWM altrimenti lo aumento di 1 e rifaccio il controllo!!!

Il problema è che la lampada pulsa intorno alla soglia impostata.... io pensavo che con una frequenza di controllo abbastanza elevata questo effetto non si notasse!!!

Potete darmi qualche consiglio su come risolvere il problema? Con un controllo PID potrei risolvere?

Ringrazio ancora tutti...

Link al commento
Condividi su altri siti

Con un controllo PID potrei risolvere?

Assoutamente no!

Tu ora stai lavorando solo in proporzionale, l'aggiunta di una componente integrale ti porta solo ad eliminare l'errore, mentre quella derivativa potrebbe migliorare la velocità di risposta.

nel tuo caso devi solo filtrare adeguatamente la lettura del sensore.

Link al commento
Condividi su altri siti

Grazie mille per i consigli sempre gentilissimo... Comunque mi potresti spiegare meglio?

Io ora il duty cycle lo gestisco con questa routine:

//-------------Regola luminosità lampada in moda da avere i LUX_desiderati----------

void Regola_intensita_lampada(unsigned int LUX_desiderati){
   //pwm_period1---> corrisponde a duty cycle pari a 1
   //lux ---> sono i lux misurati dal sensore
     if((lux > LUX_desiderati) && (lux > soglia_minima_LUX) && (pwm_duty > 0)){
            pwm_duty=pwm_duty-1;
            PWM_Set_Duty(pwm_duty, 1);
     }
     
     if((lux < LUX_desiderati) && (pwm_duty < pwm_period1)){
            pwm_duty=pwm_duty+1;
            PWM_Set_Duty(pwm_duty, 1);
     }
}
//-------------Fine Regola luminosità lampada in moda da avere i LUX_desiderati----------

Per il filtraggio intendi modificare il filtro R6-C8 del seguente schema?

s9a7.jpg

Grazie ancora

Link al commento
Condividi su altri siti

Fai molto meglio se il filtro lo fai in modo digitale direttamente nel micro.

COn quale periodo leggi il sensore?

Link al commento
Condividi su altri siti

Non lo so di preciso, questo è il ciclo:

     while(1){ //LOOP INFINITO

              Net_Ethernet_28j60_doPacket();                         //Processa i pacchetti ETHERNET
              for(i = 0; i < NUM_OF_SOCKET_28j60; i++) {
                    if(socket_28j60[i].open == 0)
                    pos[i] = 0;
              }
              Regola_intensita_lampada(soglia_LUX);              
              Leggi_sensori();        //Leggo il sensore

     }//LOOP INFINITO

Il tutto dipende da quanto tempo occorre per gli altri metodi.... comunque il clk del mikro è 120MHz!!!

Link al commento
Condividi su altri siti

Non richiami la lettura a tempo?

Tra l'altro la varaizione di luce ambiente non è un fenomeno estremamente rapido, se campioni a 100 ms sei anche troppo veloce.

Potresti realizzare una media scorrevole su 20 campioni effettuati con clock da 100 ms, usi il valore così ottenuto e non dovresti avere oscillazioni dovute al PWM.

Come hai settato il geenratore di PWM del PIC?

Link al commento
Condividi su altri siti

comunque il clk del mikro è 120MHz!!!

Grrrrrrrrr! facciamo tutti firmware quando il micro corre ........

MI è venuto un dubbio: la variazione di 1 passo del tuo PWM è apprezzabile sulla luminosità della lampada ?

Cioè se cambi di 1 il pwm avanti indietro riesci ad apprezzare la varaizione di intensità luminosa.

Perchè a me sembra succeda questo:

tu quando puoi aggiorni il dutycycle del pwm che oscilla +/-1 attorno alla soglia siccome non sei regolare rimani per x tempo sotto e y tempo sopra soglia

e riesci a vedere lo sfarfallio.

Link al commento
Condividi su altri siti

Accacca quelle regolazioni van fatte....come si fa una regolazione. :smile:

Sembra un concetto lapalissiano e banale ma lo è molto meno di quanto sembri.

Tutte le regolazioni ad anello chiuso quantizzate devono rispettare alcune condizioni ben precise, come banda morta di regolazione, tempo di campionamento rigorosamente costante, etc.

Se ci si limita a chiudere l'anello si rischia quasi sempre l'instabilità.

Poi c'è anche un'errore concettuale:

              Regola_intensita_lampada(soglia_LUX);             
              Leggi_sensori();        //Leggo il sensore

Prima si legge il sensore e poi si regola la variabile.

Per fare le cose fatte decentemente bisognerebbe avere un tempo di campionamento a periodo fisso e non influenzabile dai vari processi, ovvero un iterrupt temporizzato ad alta priorità. Con questa temporizzazione si legge la variabile e si corregge l'uscita.

La metodologia di regolazione quantizzata la descrivo dettaglaitamente, con numerosi esempi e funzioni in pseudo "C", nel mio tutorial sulle regolazioni. (sezione didattica, sottosezione elettrotecnica).

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Allora questi sn i settaggi del PWM:

//--------Inizializzo modulo PWM------------------------------------------------
   pwm_period1 = PWM_Init(10000, 1, 1, 2);  //Inizializzo PWM1 (Utilizza TIMER 2)
   PWM_Set_Duty(0, 1);                      //Inizialmente setto il duty del PWM1 a zero
   PWM_Start(1);                            //Avvio modulo PWM
 

La frequenza è 10KHz, la funzione PWM_Init(10000, 1, 1, 2) mi restituisce pwm_period1 che è il valore da assegnare al modulo PWM per avere un duty paro a 1. Quindo posso variare il duty nell'intervallo 0<= duty<=pwm_period1!

Per quanto riguarda la lettura del sensore faccio già una media su 20 campioni, però leletture le faccio una dopo l'altra.... comunque proverò a temporizzare il tutto con un timer e vediamo se riesco a migliorare qualche cosa!!!

Ci tengo a precisare che io sono ancora studente e non ho esperienze lavorative sulle spalle, quindi ho solo da imparare!!!

Grazie

Modificato: da bios85
Link al commento
Condividi su altri siti

Ci tengo a precisare che io sono ancora studente...

Questo si era capito abbastanza bene. E' proprio per questo che cerco di farti fare un'analisi critica del lavoro invece di darti soluzioni pronte.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...