Sistema di controllo e realizzazione di un inseguitore solare

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