Tracker solaire – le code

Les puristes sauront apprécier la compacité du code, l’art du commentaire pertinent, le choix judicieux des noms de variables, le découpage fin des fonctions… bref, c’est du code à l’arrach…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include  
 
Servo myservo;              // crée un objet servo
int pos = 0;                // la variable globale qui contiendra la position du servo en degré, de 0 à 180  
 
int count = 0;              // un compteur utilisé dans la partie suivie du tracker afin d'éliminer le "bruit"
const int differencereg = 5;// la différence de mesure des deux photorésistances sous
                            //laquelle on considère que le tracker est en position
int difference=2;           // la différence courante de mesure entre les deux photorésistances
 
void setup() 
{
  pinMode(A0,INPUT);        // l'entrée analogique correspondant à la première photorésistance 
  pinMode(A1,INPUT);        // ... celle de la seconde
 
  Serial.begin(9600);       // la liaison série sert à débugger 
  Serial.println("mesure photoresistor");
  myservo.attach(11);
  pos= recherchePosition(); // On appelle la fonction de recherche initiale de la position optimale
  myservo.write(pos);       // le résultat renvoyé sert à positionner le servo sur cette valeur de départ avant d'enclencher le suivi
}
 
int recherchePosition()
{
 
  int valeur1;
  int valeur2;
 
  int diffreg=1024;
  int moyreg=750;
  int posreg;
  int diff;
 
  myservo.write(0);             // On commence à la position 0° 
  delay(1000);
  for(pos=0;posmoyreg)          // On vérifie que la moyenne des mesures est supérieure 
    {                           // à celle du meilleur angle enregistré jusqu'à présent
    Serial.println("moyenne supérieure");   
    if (abs(diff)abs(differencereg)) 
    {count+=1;}
  else 
    {count=0;}
}
 
void loop () 
{
delay(100);  
suiviPosition();   
  if (count>5)                   // Au bout de 5 résultats de suite pire que la différence optimale
 {                                  // il est temps de chercher une meilleure position
  if (difference<0) { pos-=2;}   // suivant le signe de la différence, on fait partir le moteur dans un 
  else {pos+=2;}                    // dans un sens ou un autre
  myservo.write(pos);
  count=0;  
  }
 
}

Laisser un commentaire