FACOLTÀ DI INGEGNERIA CORSO DI LAUREA IN...

58
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

Transcript of FACOLTÀ DI INGEGNERIA CORSO DI LAUREA IN...

UNIVERSITÀ DEGLI STUDI DI ROMATOR VERGATA

FACOLTÀ DI INGEGNERIA

CORSO DI LAUREA IN INGEGNERIADELL’AUTOMAZIONE

A.A. 2009/2010

Tesi di Laurea

SISTEMA DI CONTROLLO PER UNINSEGUITORE SOLARE FOTOVOLTAICO

RELATORE CANDIDATO

Ing. Daniele Carnevale Mattia Adducchio

Un padre e un figliocon 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 15

2.1 Funzioni e librerie C . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1.1 Motori.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1.2 Misura.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2 Algoritmi di ricerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2.1 Primo algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2.2 Secondo Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 23

2.2.3 Algoritmo finale . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.3 Implementazione codice Matlab . . . . . . . . . . . . . . . . . . . . . 28

INDICE I

INDICE

2.3.1 Real time plot . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.3.2 Tracciamento della traiettoria solare . . . . . . . . . . . . . . 29

2.4 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 idroelet-

triche 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’in-

stallazione 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 ter-

restre è 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 oc-

corrono 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 funziona-

mento 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’insegui-

tore 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 edella struttura

In questo capitolo si descrive il funzionamento fisico del pannellofotovoltaico e dei motori passo, la realizzazione del circuito di pi-lotaggio dei motori, le problematiche affrontate e come sono staterisolte.

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

duttori, 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 dro-

gaggio. 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 conduzioni1dall’inglese photovoltaics.2l’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.

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

mentare 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 es-

empio 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 pentava-

lente o trivalente, poichè in questo modo un elettrone dei quattro, che costituiscono

l’ultimo livello energetico del silicio, non saturerebbe legami con nessun altro elet-

trone adiacente. Dal punto di vista delle bande energetiche, quest’elettrone spaiato,

comporta la formazione di un ulteriore livello energetico proprio all’interno dell’ener-

gy 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 pro-

prietá 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 perme-

sso 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’in-

tegrato, 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 connet-

tore 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 “Step-

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

scopio 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 possa3Vout=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 invali-

dando 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 misura-

ta 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 re-

sistenza 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 de-

graderebbe 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 generalicreate, in seguito gli algoritmi di ricerca implementati su ArduinoUno per il controllo e il posizionamento dell’inseguitore e infinecome è 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) emotoreOFF(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 so-

lare, 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 par-

titore 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 al-

goritmi di ricerca. Per questo motivo è stata necessario creare la funzione misurame-

dia() 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 facen-

do 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 miglio-

rare 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 ro-

tazione 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 pri-

mo 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 §2.2 Algoritmi di ricerca

Serial.print(" ");

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ú grus-

solona 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 ingius-

tificata come ad esempio succede nel primo movimento del sistema, che essendo asso-

lutamente 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 succes-

sivo;

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

sivo;

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

valli 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’uti-

lizzatore del pannello l’immediato riscontro sul corretto funzionamento del sistema

complessivo, sia dal punto di vista hardware che software permettendogli di visualiz-

zare 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 uti-

lizzate 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 elab-

orate 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 con-

trollo 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 po-

sizione 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 ef-

fetti 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 il1Il 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 ottenuteconfrontando 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 traiet-

toria 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 diFigura 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 benifi-

cio 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’insegui-

tore, 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 ilriflesso.

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ú per-

formante, che non solo minimizzi i movimenti dei due motori, controllandone quindi

l’assorbimento di corrente, ma che tenga anche conto del tipo di perturbazione at-

mosferiche 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 ACodice 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 BCodice 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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.5 Inclinazione che il pannello fotovoltaico assume quando si scherma il

riflesso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.6 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