UNIVERSITÀ DEGLI STUDI DI ROMA TOR VERGATA FACOLTÀ DI INGEGNERIA CORSO DI LAUREA IN INGEGNERIA DELL’AUTOMAZIONE A.A. 2009/2010 Tesi di Laurea SISTEMA DI CONTROLLO PER UN INSEGUITORE SOLARE FOTOVOLTAICO RELATORE CANDIDATO Ing. Daniele Carnevale Mattia Adducchio Un padre e un figlio con un solo abbraccio, squarciano il tempo, vanno oltre lo spazio. Indice Introduzione 1 1 Analisi e realizzazione del circuito e della struttura 3 1.1 Effetto fotovoltaico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Motore passo-passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Realizzazione del circuito . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 Driver per i motori passo-passo . . . . . . . . . . . . . . . . . 5 1.3.2 Circuito di misura per il pannello solare . . . . . . . . . . . . 8 1.4 Circuito finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5 Realizzazione della struttura . . . . . . . . . . . . . . . . . . . . . . . 11 2 Software 2.1 2.2 2.3 INDICE 15 Funzioni e librerie C . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1 Motori.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.2 Misura.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Algoritmi di ricerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.1 Primo algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.2 Secondo Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.3 Algoritmo finale . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Implementazione codice Matlab . . . . . . . . . . . . . . . . . . . . . 28 I INDICE 2.4 2.3.1 Real time plot . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.3.2 Tracciamento della traiettoria solare . . . . . . . . . . . . . . 29 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3 Misure 33 4 Conclusioni e sviluppi futuri 40 Codice C 42 Codice Matlab 45 Elenco delle figure 52 Bibliografia 53 INDICE II Introduzione L’impatto disastroso che lo sfruttamento sempre piú massiccio dei combustibili fossili ha sul livello di inquinamento delle nostre cittá e di conseguenza sulla salute dell’uomo, ha portato, ormai dai molti anni, allo sviluppo di nuove tecnologie che permettono di sfruttare le fonti di energia rinnovabili, ovvero quelle forme di energia che per loro caratteristica si rigenerano e non pregiudicano le risorse naturali per le generazioni future. In Italia, per esempio, fino ad i primi anni sessanta la produzione energetica è stata in larga parte rinnovabile, grazie allo costruzione di numerosi centrali idroelettriche sia nell’arco alpino e sia in quello appenino. Oggi tuttavia, a causa della crescita della domanda di energia e dalla saturazione del territorio che non permette piú l’installazione di nuove centrali, le energie rinnovabili rappresentano ancora solo quote marginali della produzione totale. A far riflettere è senza dubbio un dato: l’energia solare che arriva sul suolo terrestre è dell’ordine delle decine di volte superiore alla domanda totale di energia, ma sfortunatamente, non è di facile immagazzinazione sia perchè per raccoglierne valori significativi si ha bisogno di aree molto vaste e sia perché per il suo sfruttamento occorrono prodotti in genere di costo elevato che rendono l’energia solare notevolmente costosa rispetto ad altri metodi di generazione dell’energia. Lo sviluppo di tecnologie che possano rendere economico l’uso dell’energia solare è un settore della ricerca molto attivo e sta portando ad un notevole risultato a giudicare dai profitti dell’aziende che Introduzione 1 Introduzione producono pannelli solari. In questo lavoro di tesi si è cercato di sviluppare ulteriormente una tecnologia giá molto diffusa e conosciuta come i pannelli fotovoltaici, creando un inseguitore solare a due gradi di libertá, comunemente denominato “girasole” , introducendo una innovativa legge di controllo per la determinazione e il raggiungimento del punto di massima potenza. Per poter centrare questo obiettivo si è dapprima costruito i circuiti di pilotaggio dei motori e di misura per il pannello solare, poi si è sviluppato un software che fosse in grado di controllare bene e in tempi adeguati l’inseguitore solare e infine sono state effettuate delle misure confrontando il “girasole” con un pannello fotovoltaico fisso. La tesi è strutturata cosí come segue: 1. nel Capitolo 1 viene descritto brevemente il prinicipio alla base del funzionamento dei pannelli fotovoltaici e dei motori passo. In seguito viene dato ampio rilievo al progetto e alla realizzazione del circuito elettronico. 2. nel Capitolo 2 si mostra l’evoluzione dell’implementazione software dell’inseguitore solare. Vengono descritte le funzioni principali implementate in C e i lavori sviluppati con Matlab. 3. nel Capitolo 3 vengono esposti i risultati ottenuti facendo degli esperimenti in laboratorio riproducendo attraverso l’utilizzo di un robot antropomorfo la traiettoria solare. 4. nel Capitolo 4 si evidenziano le conclusioni ponendo in risalto gli ulteriori sviluppi dell’inseguitore solare realizzato. Introduzione 2 Capitolo 1 Analisi e realizzazione del circuito e della struttura In questo capitolo si descrive il funzionamento fisico del pannello fotovoltaico e dei motori passo, la realizzazione del circuito di pilotaggio dei motori, le problematiche affrontate e come sono state risolte. 1.1 Effetto fotovoltaico Il fotovoltaico (PV)1 è un metodo di generare energia elettrica, convertendo l’energia solare in corrente continua, sfruttando le proprietá elettriche dei materiali semiconduttori, come ad esempio il silicio, che quando investiti da un fascio luminoso generano corrente elettrica. Questo fenomeno, detto effetto fotovoltaico, è prensente in tutti i semiconduttori che sono stati sottoposti ad un certo tipo di trattamento detto drogaggio. La maggior parte dei dispositivi elettronici sfrutta la proprietá delle unioni tra materiali semiconduttori caratterizzati da proprietá diverse, oppure tra metallo e semiconduttore. I semiconduttori puri, presentano un energy gap2 non eccessivamente ampio, ma comunque non ha un numero sufficene di elettroni in banda di conduzioni 1 dall’inglese photovoltaics. l’energy gap è la distanza tra la banda di conduzione e la banda di valenza, ed è ció che permette la classificazione dei materiali in isolanti, semiconduttori o conduttori. 2 3 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.2 Motore passo-passo tali da poter generare una ragionevole corrente elettrica. Per questo motivo, per aumentare in numero di elettroni in banda di conduzione consentendo il salto dell’energy gap da parte degli elettroni in banda di valenza, si ricorre al drogaggio che rende il materiale non piú puro ma estrinseco. Drogare un materiale significa agguingere al materiale stesso degli elementi estranei per cambiarne le proprietá elettriche. Ad esempio nel caso del silicio con l’operazione di drogaggio vengono sostituiti ad un certo numero di atomi di silicio un numero equivalente di atomi di un materiale o pentavalente o trivalente, poichè in questo modo un elettrone dei quattro, che costituiscono l’ultimo livello energetico del silicio, non saturerebbe legami con nessun altro elettrone adiacente. Dal punto di vista delle bande energetiche, quest’elettrone spaiato, comporta la formazione di un ulteriore livello energetico proprio all’interno dell’energy gap che favorisce notevolmente il passaggio di elettroni dalla banda di valenza a quella di conduzione. Nel caso dei pannelli solari l’esposizione alla luce fornisce l’energia sufficente per consentire agli elettroni di fare il salto da banda di valenza a quella di conduzione e consente quindi la generazione di corrente elettrica. 1.2 Motore passo-passo I motori passo-passo, detti anche stepper motor o step-by-step motor, hanno la proprietá di ruotare di un angolo fisso, detto passo, ad ogni impulso in ingresso. Sono caratterizzati da precesione ed affidabilitá; hanno l’incoveniente, rispetto ai motori in corrente continua, di essere di dimensioni maggiori a paritá di potenza, e di richiedere un circuito di comando piú complesso. A differenza degli altri tipi di motore, in uno stepper non ci sono contatti striscianti: per ottenere il movimento dobbiamo alternare dall’esterno il passaggio della corrente nei suoi avvolgimenti (Figura 1.1) in modo tale 4 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.3 Realizzazione del circuito da permettere la rotazione del megnete che viene attirato da un passo all’altro con l’attivazione delle elettrocalamite oppurtunatamente disposte. Figura 1.1: Alimentazione alternata degli avvolgimenti di un motore passo-passo. 1.3 Realizzazione del circuito La realizzazione del circuito elettronico, ovvero il “cuore’ ’ dell’inseguitore solare, è stata caratterizzata da due fasi distinte: 1. progetto e realizzazione del circuito di pilotaggio dei due motori passo passo; 2. progetto e realizzazione del circuito di misura per il pannello solare. Nei paragrafi 1.3.1 e 1.3.2 vengono analizzati passo dopo passo le due fasi sopra elencate, in modo da poter dare una descrizione dettagliata del lavoro svolto. 1.3.1 Driver per i motori passo-passo Di seguito, poichè i due motori utilizzati sono identici e quindi anche il driver sará lo stesso per entrambi, si fará riferimento al progetto del circuito di pilotaggio per un solo motore. Il motore usato per questo lavoro è un NEMA-17 (Figura 1.2), che produce una coppia di tenuta di ben 4800 g-cm a 2.4 A, ha una risoluzione molto fine, infatti ogni passo corrisponde a 0.9◦ , ha un asse con un diametro di 0.5 cm ed è un motore bipolare a 4 fili con valore di resitenza di 1 Ω. I quattro fili, come si puó immaginare, 5 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.3 Realizzazione del circuito servono per l’alimentazione alternata dei quattro avvolgimenti; infatti, come è giá rappresentato nella Figura 1.1, deve essere rispettato in fase di collegamento l’ordine di colori che fornisce la corretta seguenza di alimentazione degli avvolgimenti. Figura 1.2: NEMA-17. Il ponte H utilizzato per il funzionamento del NEMA-17 è il SN754410, che sebbene abbia una corrente massima di carico pari ad 1 A è stato possibile utilizzarlo poichè il sistema realizzato prevede movimenti molto piccoli a velocitá molto basse. Nonostante questo accorgimento, quando i due motori si trovano entrambi in funzione, la corrente assorbita dal circuito aumenta, fino a raggiungere i 4 A causando il surriscaldamento dei ponte H ed il relativo spegnimento, che avviene automaticamente per prevenire la compromissione del componente stesso. Questo problema è stato superato collegando l’enable del ponte H alle porte digitali dell’Arduino Uno, in questo modo si è potuto pilotare entrambi i motori ma uno solo alla volta, garantendo, dopo ogni spostamento, la disabilitazione dell’enable. In seguito peró si è reso necessario il mantenimento di una coppia costante per il motore, in modo da non permettere degli spostamenti non voluti causati dalla forza peso. Per ovviare a questa necessitá si è scelto di montare un dissipatore sul ponte H, in modo da poterlo raffreddare o quanto meno rallentarne 6 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.3 Realizzazione del circuito l’aumento della sua temperatura. Un altro componente utilizzato è il 74LS04, ovvero un Hex Inverter, che ha permesso il risparmio di due porte dell’Arduino per il controllo del motore. Infatti poichè il motore passo passo usato è un motore 4 fili, si sarebbero occupate otto porte solo per il controllo dei due motori, invece utilizzando un Hex Inverter, che prende il segnale d’ingresso e lo restituisce sia invertito che non invertito, si è limitato l’uso di porte del controllore. Attraverso l’utilizzo degli alimentatori da tavolo si è misurato l’assorbimento di corrente del circuito di pilotaggio e in base a questo è stato scelto un alimentatore in grado di fornire 12 V in DC e 700 mA. Tramite il regolatore di tensione LM2576T, i motori sono stati alimentati a 3 V e grazie alla componente reattiva presente nell’integrato, che sfrutta la caduta di tensione, si è raggiunto un totale di 1.3 A di corrente, che rappresenta la giusta quantitá per far funzionare i motori, per fornire la giusta coppia quando sono fermi e per non sovraccaricare il ponte H. Per prevenire danni causati dall’utilizzo di alimentatori con diversa polarizzazione da quello per cui il circuito è stato progettato, si è inserito un diodo tra il connettore dell’alimentatore e il pin 6 del trasformatore in modo da non compromettere il funzionamento del trasformatore stesso ma anche del resto del circuito. Una volta realizzato il driver bisogna collegare il motore facendo attenzione a rispettare il giusto ordine di colori che garantisce la sequenza d’alimentazione corretta delle 4 fasi. Nella fase di programmazione si è utilizzato la libreria standard di Arduino “Stepper.h”, che permette di far funzionare il motore semplicemente creando un oggetto di tipo stepper, che prende in ingresso il numero di passi che serve al motore per far fare al proprio asse un giro completo (400 nel nostro caso), e i pin digitali dell’Arduino ai quali è stato collegato. Per far girare i motori si utilizza semplicemente la funzione 7 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.3 Realizzazione del circuito step(int numero dei passi). Sfruttando questa libreria è stato possibile caricare un semplice programma su Arduino in modo da poter fare delle misure con uno oscilloscopio per verificare che tutti i segnali sia sull’inverter sia sul ponte H fossero corretti. Fare queste misure, come vedremo piú avanti è stato molto utile perchè ha permesso di correggere alcuni errori commessi in fase di montaggio dei componenti sulla millefori. 1.3.2 Circuito di misura per il pannello solare La cella solare utilizzata è costituita da silicio monocristallino, e puó erogare una potenza elettrica fino ai 250 mW con una corrente massima di 0.40 mA e tensione di 6.25 V. Nel circuito di misura schematizzato nella Figura 1.5, si nota come il pannello fotovoltaico viene utilizzato come generatore di tensione, che ha come carico un LED. Per diminuire la tensione del pannello solare in modo tale da renderla misurabile dalla periferica di controllo, è stato utilizzato un partitore di tensione composto da due resistenze: la prima di 33 KΩ, mentre la seconda di 47 KΩ. In questo modo, misurando la tensione di uscita del partitore con l’Arduino, è possibile risalire alla tensione del pannello solare utilizzando la formula per la risoluzione del partitore di tensione3 . Continuando l’analisi del circuito di Figura 1.5, si puó notare la presenza di un diodo Schottky, che a differenza di un diodo normale, ha una tensione di soglia di 0.35 V contro i 0.6 V e una velocitá di commutazione molto piú elevata; in questo modo si vincola il verso di scorrimento della corrente e si limita la caduta di tensione che deteriorebbe la misura. In questo caso l’accortezza di mettere un diodo poteva essere evitata visto la natura dissipativa del carico, ma nel futuro se si volesse sostituire il diodo ad emissione con una batteria, il diodo Schottky impedirá che la corrente possa 3 Vout=Vin*Rp/(Rs+Rp) 8 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.4 Circuito finale circolare nel verso opposto andando a finire sul partitore di tensione e di fatto invalidando la misura effettuata. Come detto in precedenza, il carico per il pannello solare è un led, o diodo ad emissione, che al variare della corrente generata dal pannello solare varia d’intesitá luminosa e questo da riscontro immediato del corretto funzionamento del pannello solare e della variazione di corrente in base all’assorbimento di luce. Attraverso una resistenza di valore noto (5 Ω) ed elevata precisione, viene misurata la corrente erogata dal pannello solare, ma visto i bassi valori di corrente che un sola cella eroga è stato necessario utilizzare l’amplificatore operazionale LM358N. La scelta della resistenza sulla quale la corrente viene misurata è frutto di un trade-off tra misura accurata e rapporto segnale-rumore. Infatti, se fosse stata scelta un resistenza con valore minore, ad esempio di 0.5 Ω il circuito di misura sarebbe rimasto praticamente inalterato, dall’altra parte peró un valore di resistenza cosí basso degraderebbe il rapporto il rapporto segnale-rumore, e il circuito di amplificazione non aumenterebbe solo il livello del segnale ma anche quello del rumore, rendendo di fatto una misura corretta quasi impossibile. Al circuito di amplificazione, in parallelo alla resistenza di 100 KΩ è stato applicato un condensatore, di valore 2.2 nF, in modo da formare un filtro passa basso per tagliare le alte frequenze. In Figura 1.3 viene esposto il diagramma di bode della funzione trasferimento del filtro. 1.4 Circuito finale Una volta disegnato lo schema elettrico (Figura 1.5), i due circuiti descritti in 1.3.1 e in 1.3.2 sono stati dapprima testati su una breadboard e successivamente tutto è stato spostato su una scheda millefori come riportato in figura 1.4. In fase di progetto come in quella di realizzazione si è fatto molto attenzione alla massa, distinguendo la massa digitale da quella analogica nonostante poi si siano collegate tutte allo stesso 9 Cap. 1 Analisi e realizzazione del circuito e della struttura §1.4 Circuito finale Figura 1.3: Diagramma dei moduli e delle fasi del filtro. ground dell’Arduino. Si è utilizzato questo accorgimento perché la quantitá di corrente utilizzata dai motori puó finire sui collegamenti tra l’amplificatore e la mossa e portare sensibili errori di misura. Per questo motivo i due circuiti, di pilotaggio dei motori e di misura, vanno mantenuti separati. Proprio a validare il discorso fatto prima, durante la fase di verifica dei segnali, a causa di un errore in fase di assemblaggio del circuito, con l’oscilloscopio, in corrispondenza dell’azionamento dei motori, si è notato la presenza di uno spike nel segnale di misura, che di fatto invalidava la misura della corrente generata dal pannello solare. Questo problema è stato risolto, andando a dividire il punto di unione delle masse dei due circuiti, in modo tale che la corrente dei motori non passasse piú nel circuito di misura. 10 Cap. 1 Analisi e realizzazione del circuito e della struttura§1.5 Realizzazione della struttura Figura 1.4: Circuito finale montato sulla scheda millefori. 1.5 Realizzazione della struttura Dopo che il circuito di pilotaggio dei motori e di azionamento del pannello solare sono stati realizzati e provati si è provveduto alla modellazione di una struttura che avesse due gradi di libertá. Con una tavola di compensato quadrata di circa 15 cm x 15 cm è stata realizzata la base e utilizzando quattro staffe angolari metalliche si è garantita l’immobilizzazione del primo motore. Come detto nella sezione 1.3.1 l’asse dei motori ha un diametro di circa 0.5 cm, e per questo motivo si è preso un cubo di compensato di dimensioni 5 cm x 5 cm x 3 cm ed è stato applicato un foro di 0.47 cm in modo che l’asse entrasse e riempisse perfettamente il foro. Su questo cubo di compensato è stato adagiato il secondo motore ed è stato accuratamente fissato con delle piccole staffe al bordo del cubo stesso. Successivamente si è preso un altro blocco di compensato piú lungo e sottile in modo da poter posizionarci sopra il pannello solare; a questo compensato è stato applicato un foro di 1 cm proprio al 11 Cap. 1 Analisi e realizzazione del circuito e della struttura§1.5 Realizzazione della struttura Figura 1.5: Schema elettrico disegnato con OrCAD. 12 Cap. 1 Analisi e realizzazione del circuito e della struttura§1.5 Realizzazione della struttura centro della tavola per permettere il passaggio dei due fili del pannello fotovoltaico. Per ultimare la struttura è stato utilizzato un’altra tavola di compensato per permettere il posizionamento del pannello al di sopra dei due motori. Il risultato ottenuto, come mostrato in Figura 1.6 e in Figura 1.7, è una struttura piuttosto solida che permette al pannello solare di poter ruotare rispetto due assi, noti in astronomia come Zenith e Azimuth. Figura 1.6: Vista frontale della struttura. Nel prossimo capitolo viene descritta l’evoluzione della legge di controllo per l’inseguitore solare sviluppato. 13 Cap. 1 Analisi e realizzazione del circuito e della struttura§1.5 Realizzazione della struttura Figura 1.7: Vista laterale della stuttura. 14 Capitolo 2 Software In questo capitolo vengono descritte dapprima le funzioni generali create, in seguito gli algoritmi di ricerca implementati su Arduino Uno per il controllo e il posizionamento dell’inseguitore e infine come è stata ricavata la legge oraria del Sole. 2.1 Funzioni e librerie C Per creare una struttura software piú ordinata possibile si è suddiviso il lavoro in piú parti creando delle librerie ad-hoc per ogni singolo ambito di sviluppo: 1. Motori.h: in questa libreria sono presenti tutte le funzioni e le variabili che riguardano il funzionamento dei motori, quindi il posizionamento del pannello; 2. Misura.h: in questa libreria sono presenti tutte le funzioni e le variabili che permettono di effettuare le misure, quindi la raccolta delle informazioni fornite dal pannello. 2.1.1 Motori.h Alla base dell’implementazione di questo header file c’è l’utilizzo della libreria standard di Arduino denominata “Stepper.h”, che garantisce l’azionamento dei motori attraverso alcuni semplici passi. Inanzitutto è necesessario creare tanti oggetti stepper quanti 15 Cap. 2 Software §2.1 Funzioni e librerie C sono il numero di motori da azionare. Per creare questo oggetto è indispensibile fare attenzione a quali pin dell’Arduino vengono collegati i fili per l’azionamento dei motori. In questo caso, invece di occupare quattro pin dell’arduino, ovvero uno per ogni filo del motore, come giá descritto nel paragrafo 1.3.1, attraverso l’utilizzo dell’hex inverter vengono impiegati soltanto due pin per motore. Ovviamente questo tipo di collegamento è giá previsto nella libreria Stepper.h, che infatti permette la creazione di oggetti stepper o con due o con quattro pin, ed è quindi stato possibile utilizzare questo tipo di collegamento. Oltre l’elenco dei pin di connessione è necessario specificare il numero di step necessari per compiere un giro completo: in questo caso 400. Successivamente bisogna impostare la velocitá di rotazione del motore, che in questo caso non avendo problemi di tempo poichè il sistema studiato è quasi statico, è stata scelta piuttosto bassa. Una volta creato l’oggetto stepper ed assegnatogli una velocitá è possibile utilizzare la funzione step() per far funzionare il motore. Per preservare lo stato di funzionamento dei ponte H, si è ricorso alla disabilitazione dei motori dopo ogni spostamento e per far questo si è collegato l’enable del ponte H ad un pin digital dell’Arduino. Dal punto di vista software, si è definito il pin digitale dove l’enable è stato collegato come output, ovvero come uscita, in modo da poter controllare il funzionamento del motore ponendo questa uscita alta nel caso in cui si voglia abilitarlo, o bassa nel caso si voglia disabilitarlo. Questa funzione di notevole importanza è stata semplificata creando due funzioni per ogni motore: motoreON(int numeroMotore) e motoreOFF(int numeroMotore), dove la prima abilita il ponte H, mentre la secondo lo disabilita. Queste due funzioni fanno ovviamente parte della libreria “Motori.h” e sono utilizzate sia nella fase di setup dell’Arduino, dove i due motori vengono spenti forzatamente, e sia all’interno della funzione passi(int numeroPassi) insieme alla funzione standard step(); in questo modo infatti si evita 16 Cap. 2 Software §2.1 Funzioni e librerie C di abilitare e disabilitare manualmente il motore, ma sará la funzioni passi() a farlo automaticamente. 2.1.2 Misura.h In questa libreria sono raccolte le funzioni che permettono la misurazione della potenza e della corrente erogata dal pannello solare. È stato giá descritto, sezione 1.3.2, com’è stato realizzato il circuito per l’azionamento del pannello solare e come quest’ultimo è stato collegato alla perifica di controllo. Per prima cosa nella fase di programmazione sono stati impostati come input i pin dell’Arduino dove il circuito di misura è connesso. Considerando come è stato progettato il circuito di azionamento del pannello solare, non ci aspettiamo di misurare direttamente i veri valori di tensione e di corrente del pannello solare. Infatti collegati all’Arduino ci sono la tensione di uscita del partitore di tensione e la corrente oppurtunamente amplificata che scorre nella resistenza da 5 Ω, che sono strettamente legate alle due grandezze d’interesse, come riportato nello schema elettrico in Figura 1.5. La tensione e la corrente prelevate dal circuito sono delle grandezze analogiche che vengono trasformate in digitale tramite il convertitore analogico-digitale presente sulla perifirica, quindi una volta utilizzata la funzioni analogRead() bisogna riscalarlo correttamente secondo questa formula di “ricostruzione”: Analogico = (V ref ∗ Digitale)/1023 (2.1.1) dove Vref puó essere 5 V o 3.3 V a seconda della tensione di alimentazione utilizzata che in questa caso è la 5 V. La funzione principale di questa libreria è double misura() che calcola il valore della potenza elettrica generata dal pannello solare svolgendo il prodotto tra la tensione e la corrente che viene misurata dai pin A0 e A1 dell’Arduino. 17 Cap. 2 Software §2.2 Algoritmi di ricerca Una delle problematiche importanti che sono state risolte via software riguarda la presenza del disturbo della frequenza di rete (50 Hz) quando vengono effettuate le misure in laboratorio con una lampada alogena come sorgente di luce; infatti anche se il pannello solare rimaneva fermo nella stessa posizione, si misuravano delle variazione della potenza, derivata dall’impercettibile, ai nostri occhi, oscillazione della luminositá della lampada. Ovviamente questo provocava molti problemi nell’esecuzione degli algoritmi di ricerca. Per questo motivo è stata necessario creare la funzione misuramedia() che effettua 40 misure, con un tempo di campionamento di 1 ms, restituendo il valore di potenza medio. In questo caso il disturbo ha una frequenza di 50 Hz ed il campionamento è stato effettuato con una frequenza di 1000 Hz, quindi facendo 40 misure, una ogni millisecodno, si prendono due periodi completi del disturbo sinusoidale, che ha un periodo di 20 ms. Questa funzione introduce un ritardo di 40 ms che, nel nostro sistema quasi statico, non comporta nessuna controindicazione. 2.2 Algoritmi di ricerca Gli algoritmi di ricerca usati fanno tutti parte della categoria dei line-search, ovvero di ricerca lineare, ma caratterizzati dal fatto che il posizionamento corretto del pannello dipende da due angoli indipendenti. In linea generale, tutti gli algoritmi utilizzati sono caratterizzati da due fasi, piú o meno distinte nell’implementazione: la prima prevede una ricerca piú grossolana, caratterizzata quindi da uno step molto ampio; mentre la seconda parte prevede una ricerca piú raffinata per permettere al pannello solare il corretto posizionamento. Nel seguito del paragrafo verranno descritti gli algoritmi implementati e i vantaggi e gli svantaggi che l’utilizzo di ognuno di loro comporta. 18 Cap. 2 Software §2.2 Algoritmi di ricerca Immaginiamo di muovere il pannello solare facendo ruotare la base arbitrariamente a destra o a sinistra, ora se spostandoci l’energia solare assorbita è aumentata significa che ci siamo spostati nella direzione corretta e possiamo aumentare il passo perché ci aspettiamo che potrebbe migliorare di molto. Altrimenti se la potenza è diminuita dobbiamo invertire la direzione di spostamento e decrementare il passo perché ci aspettiamo che potremmo essere vicini a trovare un punto di massimo. Avendo chiara l’idea di fondo, si è cominciato a programmare e a ideare nuovi algoritmi passo dopo passo, cercando di risolvere i problemi incontrati e di migliorare di volta in volta l’efficenza del sistema fino ad arrivare ad una soluzione piú che soddisfacente del problema. Verranno proposti tre leggi di controllo diverse, che rappresentano l’evoluzione cronologica del software sviluppato. 2.2.1 Primo algoritmo Come detto la gestione della ricerca del punto di potenza massimo viene resa piú complicata dai i due movimenti distinti che il sistema puó compiere ed è in base ad entrambi che il massimo viene trovato. L’algoritmo prevede l’implementazione delle due fasi descritte nel paragrafo 2.2 nella stessa funzione, partendo con un passo molto ampio e diminuendolo poi pian pian fino al raggiungimento del punto massimo della potenza. Il funzionamento dell’algoritmo si basa sull’esecuzione dei seguenti passi: 1. Rotazione di 15 gradi rispetto l’azimuth e misura della potenza nella nuova posizione. 2. se la potenza aumenta, incrementa la rotazione di un grado, e passa al punto 4. 19 Cap. 2 Software §2.2 Algoritmi di ricerca 3. se la potenza diminuisce, inverti il senso di rotazione, ritorna nella posizione precedente, decrementa la rotazione di due gradi e vai al punto 4. 4. Rotazione di 15 gradi rispetto lo zenith e misura della potenza nella nuova posizione. 5. se la potenza aumenta, incrementa il passo di 1 e passa al punto 1. 6. se la potenza diminuisce, ritorna nella posizione precedente, decrementa la rotazione di 2 gradi e torna al punto 1. I vantaggi di questo algoritmo sono rappresentati da una elevata precisione nel posizionamento e dalla presenza al suo interno dell’algoritmo di ricerca piú grossolona che agevole il posizionamento iniziale del pannello solare. Senza questa fase si rischia di posizionare il pannello non in un massimo globlale delle funzione, bensí in un massimo locale, il che porterebbe ad un risultato sbagliato. Invece partendo con un passo molto ampio, ci assicuriamo di aver scansionato gran parte dell’area di ricerca d’interesse e una volta trovato il punto migliore si procede con un passo sempre minore per una ricerca molto piú sensibile, in questo modo, grazie alla ricerca grossolana, si ha certezza di essere sempre in un massimo locale ma rispetto ad un aria piú grande. Lo svantaggio principale è sicuramente il tempo di assestamento durante il primo lancio della ricerca che porta si sicuramente ad un risultato ottimale ma anche ad un vistoso rallentamento dell’algoritmo. Un altro svantaggio è l’utilizzo del tipo di incremento e decremento utilizzato, infatti quello addizionale permette sempre di riprendere l’algoritmo ma incide negativamente con il tempo di convergenza. Di seguito viene pubblicato il codice C implementato per questo algoritmo. double findmax() 20 Cap. 2 Software §2.2 Algoritmi di ricerca { do{ for (int i=1; i<3; i++) { Serial.print(theta[1]); Serial.print(" "); Serial.print(theta[2]); Serial.print(" "); p[1]=misura_media(); Serial.print(p[1]); Serial.println(" "); ptot[i]+=delta[i]*d[i]; if(i==1) passi1(delta[i]*d[i]); if(i==2) passi2(delta[i]*d[i]); delay(100); theta[i]+= delta[i]*d[i]*0.9; Serial.print(theta[1]); Serial.print(" "); Serial.print(theta[2]); 21 Cap. 2 Software Serial.print(" §2.2 Algoritmi di ricerca "); p[2] = misura_media(); Serial.print(p[2]); Serial.println(" "); diff = p[2]-p[1]; if(diff==0) {delta[1]=0; delta[2]=0;} else if(diff<gamma) { d[i] = - d[i]; theta[i]+= delta[i]*d[i]*0.9; if(i==1) passi1(delta[i]*d[i]); if(i==2) passi2(delta[i]*d[i]); delta[i]=delta[i] - 2; if (delta[i]<2) delta[i]=0; } else delta[i]++; if(delta[i]>10) delta[i]=10; delay(150); }} while((delta[1]!=0)||(delta[2]!=0)); delta[1]=10; 22 Cap. 2 Software §2.2 Algoritmi di ricerca delta[2]=10; return p[2]; } Nella figura si nota come i due motori convergano lentamente fino a trovare il massimo della potenza. Il grafico riportato è stato realizzato in RealTime con Matlab attraverso la raccolta dei dati inviati dall’Arduino sulla porta seriale. Figura 2.1: Grafico RealTime dell’andamento nel tempo della potenza e dei due angoli 2.2.2 Secondo Algoritmo L’algoritmo qui presentato ha un tempo di convergenza molto minore rispetto a quello visto in precedenza, ma necessita anch’esso di una fase di ricerca iniziale piú grussolona che stavolta non è inclusa nell’algoritmo stesso. Vediamo dettagliatamente come funziona elencando i passi necessari per il corretto funzionamento: 23 Cap. 2 Software §2.2 Algoritmi di ricerca 1. definire n variabili una per ogni angolo di rotazione; 2. effettuare una rotazione rispetto l’azimuth; 3. se la potenza aumenta, eseguire il punto 5 4. se la potenza diminuisce, controlla la variabile booeleana relativa alla rotazione se è vera impostala falsa e vai al passo 5, altrimenti diminuire di un grado la rotazione, cambia la direzione e vai la punto successivo. 5. effettuare una rotazione rispetto lo zenith; 6. se la potenza aumenta, eseguire il punto 2 7. se la potenza diminuisce, controlla la variabile booeleana relativa alla rotazione se è vera impostala falsa e vai al passo 2, altrimenti diminuire di un grado la rotazione, cambia la direzione e vai la punto 2. Attraverso l’utilizzo della variabili booeleana viene introdotto un controllo sul primo cambio di direzione, perché può portare ad una diminuzione del passo ingiustificata come ad esempio succede nel primo movimento del sistema, che essendo assolutamente random puø’ ruotare nella parte sbagliata introducendo una diminuzione del passo ingiusticata. La fluiditá del sistema, la precisione del controllo e la velocitá di convergenza ci ha portato alla scelta di questo algoritmo nelle successive misure effettuate. Come detto il pannello va prima posizionato in prossimitá di un punto massimale della potenza. Di seguito è proposto il codice C dell’algoritmo: void loop() { 24 Cap. 2 Software §2.2 Algoritmi di ricerca for (int i=1; i<3; i++) { if(i==1) passi1(delta[i]*d[i]); if(i==2) passi2(delta[i]*d[i]); theta[i]+= delta[i]*d[i]*0.9; delay(10); p[2] = misura_media(); if(Pmax<p[2]) Pmax = p[2]; diff = Pmax - p[2]; if(diff>-gamma) { if(!primocambio[i]) { d[i] = - d[i]; delta[i] = delta[i]-1; if(delta[i]<3) delta[i] = 3; } else primocambio[i] = false; theta[i]+= delta[i]*d[i]*0.9; } } if(delta[1]+delta[2]==6) 25 Cap. 2 Software §2.2 Algoritmi di ricerca { if(wait-- <=0) { delta[1]=0; delta[2]=0; checkpower=1; } } pot[1]=misura_media(); pot[2]=misura_media2(); Serial.print(pot[1]); Serial.print(" "); Serial.println(pot[2]); if (checkpower==1) { double diff= p[2]-pot[1]; if(diff>0.5) { delta[1]=delta[2]=8; checkpower=0; delay(500); 26 Cap. 2 Software §2.2 Algoritmi di ricerca } } } La seconda parte del codice C non fa parte dell’algoritmo di ricerca ma serve a riattivare il movimento quando si misura una variazione di potenza maggiore di 0.5 W rispetto al valore con il quale la funzione si è stabilizzata e quindi permette l’esecuzione della misura durante tutto l’arco della giornata. 2.2.3 Algoritmo finale Questa è la legge di controllo sicuramente piú raffinata che è stata implementata ed è stata usata per effettuare le misure descritte nel capitolo 3. L’algoritmo prevede un incremento dei passi a seconda della percentuale di incremento della potenza, consente il riattivamento dello spostamento se l’altro motore ha effettuato piú di 10 spostamenti, ed anche quando il sistema si è stabilizzato se viene misurata una variazione di potenza di 0.4 mW. I passi effettuati sono i seguenti: 1. effettuare una rotazione rispetto l’azimuth; 2. se la potenza aumenta, controlla la percentuale di incremento e assegna un nuovo passo di rotazione e passare al punto 4; 3. se la potenza diminuisce, dimezza il passo di rotazione ed esegui il passo successivo; 4. effettuare una rotazione rispetto lo zenith; 27 Cap. 2 Software §2.3 Implementazione codice Matlab 5. se la potenza aumenta, controlla la percentuale di incremento e assegna un nuovo passo di rotazione e passare al punto 1; 6. se la potenza diminuisce, dimezza il passo di rotazione ed esegui il passo successivo; Vengono inoltre controllate il numero di oscillazione intorno ad un punto, e se il sistema ne compie piú di due la ricerca viene fermata. La quantizzazione di intervalli di potenza permette un controllo ottimale del pannello solare, che ad un grande incremento di potenza associa un passo piú ampio mentre per piccoli incrementi di potenza ne associa uno piú piccolo. Avendo usato questo algoritmo nelle misure effettuate, per la visione dei grafici si rimanda al Capitolo 3. 2.3 Implementazione codice Matlab Un’altra parte molto importante del lavoro di tesi ha riguardato l’uso di Matlab sia per l’elaborazione dei risultati, in real time e non, e sia per l’utilizzo di un algoritmo per il tracciamento della traiettoria del sole durante qualsiasi istante della giornata. Attraverso l’algoritmo di sun tracking è stato possibile ricavare gli angoli iniziali del pannello solare come descritto nel paragrafo 2.3.2. 2.3.1 Real time plot Il graficamento in tempo reale dell’energia assorbita dal pannello solare da all’utilizzatore del pannello l’immediato riscontro sul corretto funzionamento del sistema complessivo, sia dal punto di vista hardware che software permettendogli di visualizzare sia il raggiungimento del punto di massimo della funzione e sia come il sistema converge gradualmente su due angoli specifici. 28 Cap. 2 Software §2.3 Implementazione codice Matlab Per creare questa interfaccia unidirezionale tra Arduino e Matlab sono state utilizzate le funzioni serial che permettono a Matlab di leggere i dati in ingresso dalla porta seriale, una volta specificati il numero della com e il boundrate opportuno ed il collegamento rimane aperto per un tempo prestabilito alla fine del quale vengono elaborate altre figure. Il controllo temporale viene effettuato con un ciclo while andando a controllore ad ogni iterazione che il valore di clock(5), ovvero ció che in matlab sono i minuti, non superi il valore dichiarato nella fase di istaurazione della connessione. Nel caso in cui dall’Arduino ci si aspettassero n valori si è pensato di introdurre un controllo sul corretto dimensionamento dell’array in modo tale da garantire sia la corretta esecuzione del programma si il corretto funzionamento dell’Arduino. Il corretto ordine dei valori con il quale si inviano i dati è fondamentale per ricostruire correttamente con Matlab il vettore che rappresenta ogni singolo numero. Una volta collezionato ogni dato, viene effettuato il plot e la funzione drawnow garantisce il tracciamento istantaneo della linea che collega i vari punti. Una volta chiusa la connessione della porta seriale, vengono elaborati altri tre grafici: i primi due riportano la variazione della potenza per ogni angolo, mentre il terzo è un grafico 3D che riporta sulla X l’azimuth e sullla Y lo zenith mentre sull’asse Z la potenza in modo tale da disegnare la funzione potenza per ogni variazione dei due angoli. 2.3.2 Tracciamento della traiettoria solare Ci sono molte pubblicazioni che riguardano l’algoritmo per il tracciamento della posizione solare per applicazioni come l’inseguitore solare sviluppato in questo lavoro. La migliore incertezza raggiunta nel calcolo dei due angoli (azimith e zenith) in molti di questi articoli è di circa 0.01 gradi. Per alcuni, la validitá dell’algoritmo è limitata 29 Cap. 2 Software §2.3 Implementazione codice Matlab in un arco di anni che va dai 15 anni in su. L’algoritmo scelto per il lavoro di tesi è stato sviluppato dalla National Renewable Energy Laboratory del Colorado, è sicuramente uno dei migliori visto che garantisce una elevata precisione nel calcolo degli angoli solari, infatti l’incertezza è di 0.0003◦ , ed un periodo di validitá che va dall’anno -2000 fino al 6000. Per ottenere dei risultati cosí importanti l’algoritmo richiede l’inserimento di molte informazioni: • Universal Time (o anche Greenwich civil time); ha come unitá di misura l’ora, quindi i minuti e i secondi vanno trasformati in frazione di ora. Ad esempio le 17.30.00 sono in UT le 17.5. • Data; giorno D, mese M, anno Y. La data e l’ora serviranno per calcolare lo Julian Day corrispondente. • Differenza tra UT and TT; il TT è il terrestrial time che è una misura del tempo indipendente dalla rotazione della terra • Longitudine e latitudine; servono a specificare la nostra posizione e puó essere calcolata facilmente utilizzando un GPS oppure googleMaps • Pressione atmosferica. • Temperatura in Celsius. L’algoritmo calcola la coordinate globali del sole (declination e right ascension), e le coordinate locali (Zenith e Azimuth), correggendole tenendo conto della refrazione dell’atmosfera. Errori nell’inserimento della longitudine e della latitudine o della data provocona errori non nella posizione globale del sole ma in quella locale. La pressione e la temperatura determinano l’indice di refrazione dell’aria, ma non sono valori determinanti tranne che per valori molto piccoli di elevazione. 30 Cap. 2 Software §2.4 Conclusioni L’algoritmo produce il calcolo prima della posizione angolare della Terra rispetto al sole nel piano eclittico1 (Figura 2.2); da questo angolo, e dall’inclinazione dell’asse terrestre, la posizione del sole nelle coordinate geocentriche puó essere calcolata. Poi elabora prima le coordinate topocentriche del sole come ad esempio (declination e right ascension) che vengono trasformate in seguito in Azimuth e Zenith. Figura 2.2: Piano eclittico. Per garantire un errore di misura contenuto l’algoritmo considera i principali effetti di disturbo che posso condizionare la posizione del Sole, come ad esempio: la perturbazione della Luna, la nutazione, e la differenza tra le coordinate topocentriche e geocentriche. Alcune correzioni empiriche sono state fatte introducendo il calcolo della longitudine eliocentrica, a cui vengono sommate tutte le altre perturbazioni. 2.4 Conclusioni Gli algoritmi fino qui implementati permettono il movimento autonomo e il calcolo della traiettoria solare al variare del tempo. Ora il nuovo obiettivo è unire questi due aspetti per creare un inseguitore che non sia affetto da errori di posizionamento iniziali e che si posizioni sempre nel punto di massimo locale della funzione. Negli inseguitori classici il posizionamento iniziale rappresenta un aspetto cruciale per il 1 Il piano eclittico è il piano dell’orbita della traiettoria che la Terra compie attorno al Sole, ed è il piano di riferimento per la descrizione della posizione di corpi nella Sistema Solare. 31 Cap. 2 Software §2.4 Conclusioni corretto funzionamento del sistema, che posizionandosi seguendo una legge oraria fissata, ha bisogno di un punto di riferimento. Con il passare del tempo, il sistema ha dei cali di rendimento causati da un lento deterioramento della precisione nel posizionamento dell’inseguitore che necesiterebbe di una nuova taratura. Con la legge di controllo implentata l’inseguitore ritrova l’esatto posizionamento poichè è in grado di risalire dalla posizione finale alla posizione iniziale. Il calcolo della traiettoria, infatti, ci permette di conoscere in quale angolo di azimuth e in quale angolo di zenith il sistema dovrebbe essersi posizionato, in piú conoscendo la posizione del pannello dopo aver eseguito l’algoritmo si ricava la posizione iniziale corretta con la semplice equazione: θ0 = θd − θe (2.4.1) dove θ0 è l’angolo iniziale, θd l’angolo desiderato e θe è l’angolo effettivo. 32 Capitolo 3 Misure In questo capitolo vengono esposti i risultati delle misure ottenute confrontando l’inseguitore solare ed un pannello fotovoltaico fisso. Per poter effettuare delle misure prescindendo dalle condizioni atmosferiche ed in modo tale da poter ricreare lo stesso scenario ogni volta, si è implementato la traiettoria solare mediante l’uso di un robot antropomorfo disponibile presso i laboratori (Figura 3.1). In questo modo per poter ottenere diversi angolo azimuthali basta cambiare la stagione inserendo il numero del giorno che si vuole simulare ad esempio la stagione estiva (in Figura 3.2) piuttosto di quella invernale (in Figura 3.3). Una volta preparato lo scenario ed implementato sullo Scorbot la traiettoria solare si è dato inizio all’esperimento facendo una simulazione di una giornata di Luglio che va dalle ore 7 alle ore 20. La simulazione, al contrario da quanto accadrebbe nella realtá, impiega circa 4 minuti per essere portata a termine, ed è questo un’altro motivo che ha portato la scelta di questo tipo di esperienza. Come da aspettative, l’inseguitore solare ha un guadagno maggiore, rispetto a quello fisso, soprattutto durante l’alba e il tramonto, quando l’altro, che è disposto a Sud, prende solo parzialmente dei raggi solari, mentre l’inseguitore si posizione sempre 33 Cap. 3 Misure Figura 3.1: Traiettoria dell’effettore nello spazio operativo Figura 3.2: Traiettoria solare nel mese di Luglio. 34 Cap. 3 Misure Figura 3.3: Traiettoria solare nel mese di Dicembre. a 90◦ rispetto di loro. I risultati ottenuti, presentati in Figura 3.4 evidenziano proprio questo tipo di comportamento. Figura 3.4: Potenza generata dal pannello fotovoltaico durante l’arco solare di Figura 3.2. Si è notato che non sempre il pannello solare si dispone ortogonalmente rispetto al fascio di luce, questo non è dovuto ad un errore nel sistema, ma bensí è un punto di forza, perchè a causa di riflessi il pannello si puo disporre in un altra posizione nella quale misura una potenza maggiore rispetto alla posizione che ci si aspettava. In questo senso un inseguitore solare che si muove seguendo la legge di controllo 35 Cap. 3 Misure implementata puó portare a dei miglioramenti rispetto al classico “girasole” . Ad esempio se si pone l’inseguitore solare in una localitá marina, il riflesso del Sole sul mare durante l’alba o il tramonto porterá il pannello a non fermarsi ortogonalmente ai raggi solari ma in una posizione leggermente diversa dove catturerebbe meglio anche i riflessi. Questo tipo di situazione è stata simulata in laboratorio ponendo la nostra sorgente luminosa molto vicina alla base di legno ed osservando come il pannello si riposizioni ogni volta che viene immesso o viene tolto un cartoncino nero dalla base. Nella Figura 3.5 si nota come il pannello ha cambiato inclinazione, infatti è piú diretto verso la fonte luminosa, mentre nella Figura 3.6, dove non è presente il cartoncino nero, il pannello solare si posizione in maniera tale da assorbire anche il riflesso di luce causato dalla base. Per vedere come il pannello si comporta in caso di presenza di nuvole, sono state coperte con il dito alcune celle, e si è avviata la ricerca. Si è notato come l’inseguitore si avvicini all’area oscurata, ma subito dopo, notata la differenza di potenza, torna indietro posizionandosi nel nuovo massimo della funzione. Questa caratteristica del pannello solare sviluppato, puó portare un grande benificio in termini di potenza erogata, rispetto agli inseguitori classici che continuerebbero a puntare in una direzione predeterminata anche se in quel momento è presente un oscuramento. Il guadagno dell’inseguitore solare viene ben espresso nelle Figura 3.7, dove si puó notare che in seguito allo spostamento del “Sole”, si registra un calo della potenza e quindi, come descritto nel paragrafo 2.2.3, provoca il riposizionamento dell’inseguitore, che come rappresentato in Figura 3.8, trova una nuova posizione che migliora la potenza rispetto a quella misurata dopo la transizione del “Sole”. 36 Cap. 3 Misure Figura 3.5: Inclinazione che il pannello fotovoltaico assume quando si scherma il riflesso. 37 Cap. 3 Misure Figura 3.6: Inclinazione del pannello fotovoltaico con il riflesso. Figura 3.7: Variazione della potenza in corrispondenza dello spostamento del Sole. 38 Cap. 3 Misure Figura 3.8: Maggior dettaglio della figura precedente. 39 Capitolo 4 Conclusioni e sviluppi futuri Lo scopo di questa tesi è stato quello di realizzare un inseguitore solare a due gradi di libertá in modo tale da poter implementare una innovativa legge di controllo per il posizionamento corretto del pannello solare. La tesi quindi puó considerarsi divisa in due parti: nella prima sono stati progettati e realizzati il circuito driver per i motori passo-passo, e il circuito permettese una misura della tensione e della corrente erogata dal pannello fotovoltaico; nella secondo parte attraverso l’utilizzo della periferica di controllo Arduino Uno si è interfacciato il computer ai circuito realizzati in modo tale da poter implentare la legge di controllo, che pian piano ha preso forma. Si sono resi necessari alcuni interventi non solo sull’hardware come l’aggiunta sul circuito di un filtro analogico per eliminare i rumori ad alte frequenze, ma anche di interventi sul software per mediare la misura in modo da eliminare i disturbi sulla misura derivati dalla rete elettrica. Ovviamente quest’ultimi sono stati necessari per effettuare le misure in laboratorio, che è stato sicuramente un aspetto che ha da una parte agevolato il compito, visto l’inderteminatezza delle condizioni atmosferiche, ma dall’altra lo ha complicato poichè ha introdotto sia i disturbi della rete elettrica e sia delle misure di grandezza molto piú piccole di quelle che si avrebbero avute effettuande le misure all’esterno. Per la fase finale di misura è stato necessario realizzare un ulteriore circuito 40 Cap. 4 Conclusioni e sviluppi futuri elettronico per la misura da un pannello aggiuntivo, che puó rimanere fisso o in un futuro potrá essere azionato con una legge di controllo classica per gli inseguitori, cosí da poter effettuare un confronto tra i due sistemi. I risultati ottenuti, che sono stati mostrati nel Capitolo 3, hanno rispettato le aspettative e hanno evidenziato il netto vantaggio che si ha utilizzando un inseguitore solare piuttosto che un pannello fotovoltaico fisso. Ovviamente ci si aspetterá anche un miglioramento della potenza generata rispetto ad un inseguitore classico, ma questo dato non è possibile confermarlo visto che non si è avuta la possibilitá di effettuare un ulteriore misura di questo tipo. Sicuramente sará possibile in futuro sviluppare una legge di controllo ancor piú performante, che non solo minimizzi i movimenti dei due motori, controllandone quindi l’assorbimento di corrente, ma che tenga anche conto del tipo di perturbazione atmosferiche che ci possono essere a seconda della stagione in cui ci si trova, decidendo quindi se è il caso di muoversi o meno. Infine, questa tesi è stata svolta nella convizione e nella speranza che, anche un “piccolo” lavoro come questo, possa contribuire ad un progetto molto piú grande e ambizioso, che riguarda non solo la salvaguardia del nostro ambiente ma anche la qualitá della vita delle generazioni future e perché no, anche della nostra. 41 Appendice A Codice C ***Motori.h*** #ifndef Motori_H_ #define Motori_H_ #include "WProgram.h" #include <Stepper.h> #define STEPS 400 #define pinE2 13 #define pinE1 12 void motoreOFF(int mot); void motoreON(int mot); void passi1(int npassi); void passi2(int npassi); extern Stepper stepper1; extern Stepper stepper2; extern int test; extern int bstep; extern int sstep; 42 Cap. 4 Conclusioni e sviluppi futuri extern int pstep; #endif ***Misura.h*** #ifndef Misura_H_ #define Misura_H_ #include "WProgram.h" #define count 0.0049 #define partitore 1.70213 #define pinV A0 #define pinI A1 #define pinV2 A3 #define pinI2 A4 #define MEDIA 40 #define DELTAB 5 //soglia di rumore di bigstep #define DELTAS 0.02 //soglia di rumore di smallstep #define DELTAPV 0.02 double misura(); double misura2(); double misura_media(); double misura_media2(); void countdown(int tempo); 43 Cap. 4 Conclusioni e sviluppi futuri #endif 44 Appendice B Codice Matlab *** RealTimePlot.m*** clear all; s1 = serial(’COM10’, ’BaudRate’, 9600); theta1=0; theta2=0; potenza=0; potenza2=0; N=400; fopen(s1); c=clock; delay=5; MAXTIME=c(5)+ delay end R=1; while (c(5)<MAXTIME) fprintf(s1,’%f’); a=fscanf(s1,’%f’); 45 Cap. 4 Conclusioni e sviluppi futuri [rig,col]=size(a); if (rig==3) theta1(R)=a(2,1); theta2(R)=a(3,1); potenza(R)=a(1,1); potenza2(R)=a(2,1); figure(1) hold on subplot(2,2,1) plot(theta1) ylabel(’theta1 [deg]’) xlabel(’campioni’) drawnow subplot(2,2,2) plot(theta2) ylabel(’theta2 [deg]’) xlabel(’campioni’) drawnow title(’Pannello fermo’) plot(potenza) ylabel(’potenza [mW]’) xlabel(’campioni’) 46 Cap. 4 Conclusioni e sviluppi futuri drawnow subplot(2,1,2) title(’Pannello fermo’) plot(potenza2) ylabel(’potenza [mW]’) xlabel(’campioni’) drawnow R=R+1; end c=clock; end hold off fclose(s1); figure(2) plot(theta1,potenza) figure(3) plot(theta2,potenza) [XI,YI]=meshgrid(theta1,theta2); ZI=griddata(theta1,theta2,potenza,XI,YI,’cubic’); 47 Cap. 4 Conclusioni e sviluppi futuri figure(4) surf(XI,YI,ZI) ***Sun.m*** clear all clc %% Inizializzazione location.longitude = 12.29; % Longitudine location.latitude = 41.53; % Latitudine location.altitude = 100; % Altitudine time.year = 2011; time.month = 1; time.day = 350; time.hour = 7.0; time.min = 0; time.sec = 0; time.UTC = +1; % Fuso orario zenith_min = 2; %solar panel position in cm x0 = 0; 48 Cap. 4 Conclusioni e sviluppi futuri y0 = 47; z0 = 15; % radius distance of the bulb from the panel in cm R = 20; % hours steps orario_stop = 20; %% Memorizzazione su file fid = fopen(’a.txt’, ’w’) fprintf(fid,’home\n’); x = zeros(-time.hour+orario_stop+1,1); y = zeros(-time.hour+orario_stop+1,1); z = zeros(-time.hour+orario_stop+1,1); zenith = zeros(-time.hour+orario_stop+1,1); azimuth = zeros(-time.hour+orario_stop+1,1); k=1; while (time.hour <= orario_stop) sun = sun_position(time, location); time.hour = time.hour + 0.5; zenith(k) = 90 - sun.zenith; azimuth(k) = sun.azimuth-180; 49 Cap. 4 Conclusioni e sviluppi futuri %vai(x,y,z,p,r,1) x(k) = x0 - R*sin(azimuth(k)*pi/180)*cos(zenith(k)*pi/180); y(k) = y0 - R*cos(azimuth(k)*pi/180)*cos(zenith(k)*pi/180); z(k) = z0 + R*sin(zenith(k)*pi/180); if(z(k) > 1) fprintf(fid,’vai(’); fprintf(fid,’%2.1f,%2.1f,%2.1f’,[x(k),y(k),z(k)]); fprintf(fid,’,0,0,1)\n’); end %end k = k+1; end fprintf(fid,’home\n’); fclose(fid); %% Plot degli angoli calcolati!! figure(1) plot3(x,y,z) grid on axis square 50 Cap. 4 Conclusioni e sviluppi futuri figure(2) plot(azimuth,zenith,’LineWidth’,3) xlabel(’azimuth’) ylabel(’zenith’) title(’Traiettoria Solare’) 51 Elenco delle figure 1.1 Alimentazione alternata degli avvolgimenti di un motore passo-passo. 5 1.2 NEMA-17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Diagramma dei moduli e delle fasi del filtro. . . . . . . . . . . . . . . 10 1.4 Circuito finale montato sulla scheda millefori. . . . . . . . . . . . . . 11 1.5 Schema elettrico disegnato con OrCAD. . . . . . . . . . . . . . . . . 12 1.6 Vista frontale della struttura. . . . . . . . . . . . . . . . . . . . . . . 13 1.7 Vista laterale della stuttura. . . . . . . . . . . . . . . . . . . . . . . . 14 2.1 Grafico RealTime dell’andamento nel tempo della potenza e dei due angoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2 Piano eclittico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.1 Traiettoria dell’effettore nello spazio operativo . . . . . . . . . . . . . 34 3.2 Traiettoria solare nel mese di Luglio. . . . . . . . . . . . . . . . . . . 34 3.3 Traiettoria solare nel mese di Dicembre. 35 3.4 Potenza generata dal pannello fotovoltaico durante l’arco solare di . . . . . . . . . . . . . . . . Figura 3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 3.6 35 Inclinazione che il pannello fotovoltaico assume quando si scherma il riflesso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Inclinazione del pannello fotovoltaico con il riflesso. . . . . . . . . . . 38 52 ELENCO DELLE FIGURE ELENCO DELLE FIGURE 3.7 Variazione della potenza in corrispondenza dello spostamento del Sole. 38 3.8 Maggior dettaglio della figura precedente. . . . . . . . . . . . . . . . . 39 53 Bibliografia [1] D. Carnevale, A. Astolfi, L. Boncagni, C. Centioli, S. Podda, V. Vitale and L. Zaccarian, “Maximizing radio-frequency heating on FTU via extremum seeking: parameter selection and tuning”,University of Rome “Tor Vergata”,2009. [2] Ibrahim Reda - Afshin Andreas, “Solar Position Algorithm for Solar Radiation Applications”, National Renewable Energy Laboratory, 2008. [3] R. Grena, “An algorithm for the computation of the solar position”, ScienceDirect, 2007. [4] G. Biondo - E. Sacchi, “Manuale di elettronica e di telecomunicazioni”, Hoepli, 1996. [5] G. Saggio, “Basi di Elettronica”, Universitalia, 2007. 54