Inseguitore solare con Arduino – prima parte

Il progetto che ti presento oggi è l’inseguitore solare ossia un dispositivo in grado di simulare il meraviglioso moto che madre natura ha dato al girasole.

inseguitore solare con arduino

A cosa serve?

L’applicazione di questo progetto nasce da un’esigenza, manifestata da alcuni utenti del Blog, di sfruttare al massimo l’energia prodotta dal proprio impianto a pannelli fotovoltaici.

Sai già che i pannelli fotovoltaici si posizionano rivolti a sud, trovandoci noi nell’emisfero borale, o anche emisfero nord, in questo modo sono colpiti dal massimo grado di luce possibile nell’arco della giornata, se a questo aggiungi una corretta inclinazione sull’asse Y, che varia al variare delle stagioni non ti resta che inseguire il sole nelle ore di luce. Infatti puoi decidere di variare l’inclinazione Y manualmente in quanto varia lentamente da stagione a stagione, ma per variare l’inclinazione sull’asse X, variando questa continuamente nelle 12 ore, dovresti sederti vicino ai pannelli tutto il giorno per ruotarli manualmente.

Ecco che un inseguitore solare con pochi euro ti risolve il problema.

Materiale necessario

  • n.1 Arduino Uno;
  • n.2 fotoresistenze uguali, io ho usato due LDR 20-50Kohm;
  • n.1 servomotore adeguato al peso da spostare;
  • n.1 breadboard;
  • n.10 cavetti per breadboard;

Costruisci il sensore

Per il mio esperimento l’ho realizzato su di una breadboard, una volta definito puoi costruirti con una millefori o con un PCB apposito il sensore finale da posizionare sul tuo pannello.

Sensore Inseguitore solare

Sensore Inseguitore solare

L’importante, ed anche il trucco, sta nell’inclinare ogni fotoresistenza di 45° rispetto all’asse verticale ( asse Y ) del pannello, come mostrato in figura:

foto resistenze

Collega ad arduino il sensore appena realizzato ed il servo seguendo lo schema di collegamento seguente:

schema collegamenti

Il principio di funzionamento

Le due foto resistenze poste a 90° l’una rispetto all’altra fanno in modo che solo quando il sole è verticale rispetto ad esse le due resistenze siano identiche. Al muoversi del sole da Est ad OVEST una delle due rileverà più luce dell’altra e incrementerà la propria resistenza sbilanciando il circuito e facendo rilevare ad arduino una variazione rispetto al punto iniziale.

In questa condizione Arduino inizierà a seguire il sole ossia a spostare il servo, che avrai collegato al pannello su cui è fissato il sensore, per ribilanciare il valore letto dalle due foto resistenze.

Lo Sketch

/*
 * Inseguitore solare - prima parte
 *
 * Autore: Mauro Alfieri
 * web: www.mauroalfieri.it
 * Tw: @mauroalfieri.it
 *
 */

#include <Servo.h>

int sensorPin = A0;
int servoPin  = 9;

int sensorValue = 0;
int servoGrad = 90;
int tolleranza = 40;

Servo myservo;

void setup() {
  pinMode( sensorPin, INPUT);
  myservo.attach( servoPin );
  myservo.write( servoGrad );
}

void loop() {
  sensorValue = analogRead(sensorPin);
  if ( sensorValue < (512-tolleranza) )
  {
    if (servoGrad < 180) servoGrad++;
  }

  if ( sensorValue > (512+tolleranza) )
  {
    if (servoGrad > 0) servoGrad--;
  }

  myservo.write( servoGrad ); 

  delay(100);
}

Leggendolo linea per linea:

linea 10: includi la classe Servo.h, che semplifica tutta la gestione del servomotore;

linea 12: imposta la variabile di tipo integer a cui assegni il pin a cui colleghi il sensore, in questo esempio A0;

linea 13: imposta la variabile di tipo integer a cui assegni il pin a cui colleghi il servomotore, in questo esempio 9;

linea 15: imposta una variabile di tipo integer a cui addegnerai il valore letto dal sensore in fase loop();

linea 16: imposta una variabile di tipo integer che indica la posizione, in gradi, del servo, in fase di start dello sketch posiziono il valore del servo a 90°, se tu vuoi partire da una angolazione differente puoi variare questo valore;

linea 17: imposta una variabile di tipo integer a cui assegni una tolleranza entro la quale il servo non deve ruotare anche se il sensore rileva variazioni dal valore centrale, vedrai in seguito meglio a cosa serve;

linea 19: inizializza l’oggetto Servo assegnandolo all’istanza myservo;

linea 22: imposta il pin a cui è connesso il sensore in modalità INPUT;

linea 23: con il metodo attach(pin) dell’oggetto myservo indichi a quale pin è collegato il servomotore;

linea 24: con il metodo write(grad) imposti i gradi a cui il servo deve posizionarsi, in fase di setup() il valore sarà quello definito alla linea 16;

linea 28: leggi il valore proveniente dal pin analogico ( A0 ) con la funzione analogRead() e lo assegni alla variabile sensorValue definita alla linea 15;

linea 29: esegui il primo controllo se il valore letto dalla linea 28 è minore della differenza tra 512 e la tolleranza impostata sei nella condizione in cui il pannello non è più orientato difronte al sole, una delle due foto resistenze sta rilevando una intensità maggiore dell’altra, quale sia dipende da come hai collegato le resistenze, nel mio esempio è la foto resistenza destra e per adeguare la posizione del pannello devo ruotare oltre i 90 gradi iniziali, tra 90° e 180°;

linea 31: esegui una ulteriore verifica, che il valore in gradi assunto dal servo non sia > di 180 in quanto il servo che stai utilizzando non sarebbe comunque in grado si andare oltre, se l’angolo del servo è < di 180° allora puoi incrementare i gradi di rotazione. L’espressione servoGrad++ indica di incrementare di un grado il valore di servoGrad da 90 a 91,92,93 ecc… ad ogni loop() arduino;

linea 34: verifica una condizione simile a quella della linea 29. In questo caso il valore letto dal sensore è confrontato con la somma tra 512 + tolleranza;

linea 36: verifica che l’angolo il cui il servo si trova non sia inferiore a 0, anche in questo caso non sarebbe possibile per il servomotore eseguire lo spostamento richiesto. Decrementa quindi il valore di servoGrad un grado per ogni loop() in cui si verificano le condizioni descritte;

linea 39: è arrivato il momento di far muovere il servo, riutilizza il metodo write( gradi ) per ottenere lo spostamento del servo nella posizione desiderata.

linea 41: attendi un tempo di 100 millisecondi tra una rilevazione e la succesiva, questo permette al servo di raggiungere la posizione indicata prima che la rilevazione dei sensori cambi. Puoi aumentare questo valore di molte migliaia in quanto il sole impiega delle ore per spostarsi.

Il Video

ed ecco il video dimostrativo dell’inseguitore, nel vido sono io a muovere la breadboard con su le foto resistenze, non è ancora montato ad alun pannello, puoi osservare come il servo sia in movimento prima in un senso e poi in quello opposto in funzione della quantità di luce ce colpisce i sensori:

Tolleranza

Buona inseguimento.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/inseguitore-solare-con-arduino.html

170 pings

Skip to comment form

  1. […] on https://www.mauroalfieri.it Condividi: Pin ItShare on TumblrMoreEmailDiggStampaLike this:Mi piaceBe the first to like […]

  2. […] realizzato il Robot Beginner Kit inseguitore puoi leggere l’articolo dedicato all’inseguitore solare, trattato in una delle lezioni del corso avanzato e usato da Michele per realizzare il […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.