accad.it

accad.it

Pagine personali di Alberto Casoli
fai da te


inseguitore solare

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);
  }
}

 
 



navigazione

torna a inizio pagina
torna a pagina superiore
torna a pagina iniziale