Ho costruito questo apparecchio, un inseguitore solare ad un solo asse, col duplice scopo di esercitarmi nell'uso di Arduino e di verificare l'effettiva fattibilità nel caso di un futuro utilizzo per panneli solari termici o fotovoltaici.
La costruzione meccanica risulta in tutta evidenza alquanto approssimativa, in accordo con gli scopi di cui sopra.
Ho economizzato al massimo sia i tempi che i materiali, per i quali non ho fatto alcun acquisto, utilizzando soltanto pezzi di recupero già in mio possesso.
L'esito è stato positivo: il marchingegno funzionava, come si vede nel filmato.
Tuttavia ha avuto vita breve: pochi giorni dopo è stato a sua volta cannibalizzato e poi completamente smontato.
Codice per Arduino:
/*
Alberto Casoli
Inseguitore solare ad un asse.
Ottobre 2020
*/
void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
Serial.begin(9600);
Serial.println("XXXXXXXXXXXXXXXXXXXXXXX");
}
int deltaTaratura = -52; /* a parità di illuminamento, luce1 produce
un valore diverso da quello di luce0,
e pertanto occorre effettuare questa correzione*/
int deltaLuceMax = 30; /* valore al disotto del quale la differenza tra luce1
e luce0 si considera trascurabile*/
int tempoAttesaQuandoEquilibrato = 3000;
void loop() {
int luce0 = analogRead(A0);
int luce1 = analogRead(A1);
luce1 = luce1 + deltaTaratura;
int deltaLuce = luce1 - luce0;
Serial.print("livello luce0: ");
Serial.print(luce0);
Serial.print(" livello luce1: ");
Serial.print(luce1);
Serial.print(" differenza luce1 - luce0: ");
Serial.println(deltaLuce);
delay(1000);
if (deltaLuce > deltaLuceMax) {
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
Serial.println("deltaLuce > deltaLuceMax");
}
if (deltaLuce < - deltaLuceMax) {
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
Serial.println("deltaLuce < - deltaLuceMax");
}
if (abs(deltaLuce) <= deltaLuceMax) {
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
Serial.println("luce equilibrata");
delay(tempoAttesaQuandoEquilibrato);
}
}
torna a inizio pagina
torna a pagina superiore
torna a pagina iniziale