2. L'obiettivo del progetto è realizzare un controllo
automatico della posizione angolare di un pannello
fotovoltaico in modo da massimizzare la resa energetica
3. Materiale utilizzato
Scheda Arduino uno
Mini pannello fotovoltaico
Motore passo passo e
4 resistenze e 2 pulsanti
470Ω1KΩ
2 foto resistenze
Regolatore di carica, batteria e
una lampadina
4. Schema a blocchi: i due sensori, i fine corsa, arduino, il motore.
Il sistema misura la luminosità sui due bordi del pannello, grazie agli ingressi
analogici di Arduino, quindi agisce sul motore in modo da minimizzare la
differenza tra i due valori ….
5. Schema elettrico
Il sistema è alimentato a 5VDC. Le fotoresitenze attraverso un partitore resistivo
generano un segnale analogico mentre i finecorsa un segnale digitale.
Il motore passo passo richiede un driver di potenza gestito da 4 pin di uscita di
Arduino ed una alimentazione separata.
6. Start
int Steps2Take;
float RF1 = 0;
float RF2 = 0;
float A = 0;
int val = 0;
float RF1 = analogRead(A0);
float RF2 = analogRed(A1);
RF1 = ((5*RF1)/1023);
RF2 = (5*RF2)/1023);
RF1>RF2
A=RF1 - RF2 A=RF2 – RF1
A>0.06
A
Dichiarazione ed
inizializzazione delle
variabili
DIAGRAMMA DI FLUSSO DEL SW
Lettura analogica dei due
sensori di luminosità e
conversione in un campo
tra 0 e 5....
Si calcola il valore
assoluto della differenza
7. if ( val == 0)
val= digitalRead(12);
break
RF1>RF2
A>0.06
A
small_stepper.setSpeed(200);
Steps2Take = 6;
small_stepper.step(Steps2Take);
float RF1 = analogRead(A0);
float RF2 = analogRead(A1);
RF1 = ((5*RF1)/1023)-0.10;
RF2 = (5*RF2)/1023;
RF1>RF2
A=RF1-RF2
A=RF2-RF1
B
B
Rotazione oraria.
Si controlla il fine corsa
relativo: se è attivo si ritorna
all'inizio del SW altrimenti si
entra in un ciclo che aziona il
motore in senso orario finchè
RF1 > RF2 oppure si raggiunge
il finecorsa.
8. if ( val == 0)
val= digitalRead(13);
break
A>0.06
B
small_stepper.setSpeed(200);
Steps2Take = -6;
small_stepper.step(Steps2Take);
float RF1 = analogRead(A0);
float RF2 = analogRead(A1);
RF1 = ((5*RF1)/1023);
RF2 = (5*RF2)/1023;
RF1>RF2
A=RF1-RF2
A=RF2-RF1
END
Rotazione antioraria.
Si controlla il fine corsa
relativo: se è attivo si ritorna
all'inizio del SW altrimenti si
entra in un ciclo che aziona il
motore in senso orario finchè
RF1 > RF2 oppure si raggiunge
il finecorsa.
9. Dopo avere fatto il diagramma di flusso l’ho tradotto in linguaggio c per il programmatore
Arduino
#include <Stepper.h>
#define STEPS 100
Stepper small_stepper(STEPS, 2, 4, 3, 5);
int Steps2Take;
float RF1 = 0;
float RF2 = 0;
float A = 0;
int val = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
float RF1 = analogRead(A0);
float RF2 = analogRead(A1);
RF1 = ((5*RF1)/1023)-0.10;
RF2 = (5*RF2)/1023;
if ( RF1 > RF2)
A = RF1 - RF2;
else
A = RF2 - RF1;
delay (1000);
if ( A< 0.06)
{
}
else
{
if( RF1 > RF2)
{
while ( A >0.06)
{
val= digitalRead(12);
if ( val == LOW)
{
break;
}
small_stepper.setSpeed(200);
Steps2Take = 6;
small_stepper.step(Steps2Take);
delay(50);
float RF1 = analogRead(A0);
float RF2 = analogRead(A1);
RF1 = ((5*RF1)/1023)-0.10;
RF2 = (5*RF2)/1023;
if ( RF1 > RF2)
A = RF1 - RF2;
else
A = RF2 - RF1;
}
}
else
{
while (A >0.06)
{
val= digitalRead(13);
if( val == LOW)
{
break;
}
small_stepper.setSpeed(50);
Steps2Take = -6;
small_stepper.step(Steps2Take);
delay(55);
float RF1 = analogRead(A0);
float RF2 = analogRead(A1);
RF1 = ((5*RF1)/1023);
RF2 = (5*RF2)/1023;
if ( RF1 > RF2)
A = RF1 - RF2;
else
A = RF2 - RF1;
}
}
}
10. Molto impegnativa è stata la realizzazione della parte
meccanica; ho dovuto superare problemi di
bilanciamento del pannello e del suo collegamento
all'asse del motore che è risultato leggermente
sottodimensionato.
11. Conclusioni
E' stato un lavoro molto appassionante e il buon risultato mi
ha gratificato del notevole impegno che ho profuso per
diverse settimane.
Sarebbe interessante applicare questa esperienza ad un
pannello fotovoltaico di maggiori dimensioni: elettricamente
si pone il problema del comando di un motore molto più
performante, mentre il sw sostanzialmente rimarrebbe
immutato.
Un altro aspetto da approfondire è valutare se effettivamente
la resa energetica del pannello orientabile riesce a bilanciare
il consumo e la maggiore complessità di un controllo
continuo