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…
?Download source.pde
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 58 | #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; } } |