0% ont trouvé ce document utile (0 vote)
60 vues3 pages

Projet-Code Tracker Solaire

Transféré par

Ismael Diallo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
60 vues3 pages

Projet-Code Tracker Solaire

Transféré par

Ismael Diallo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Code Tracker Solaire - Explication et

Optimisation
1. Introduction
Ce document présente le code complet pour un tracker solaire à deux axes utilisant des
moteurs pas-à-pas (28BYJ-48) et des photorésistances (LDR). Le système ajuste sa position
en fonction de la direction de la lumière, avec une gestion du seuil de nuit et une routine de
mise à l'est au démarrage.

2. Code Complet avec Explications


Code source commenté :

#include <Stepper.h>

const int stepsPerRevolution = 2048;

const int IN1_H = 8;


const int IN2_H = 9;
const int IN3_H = 10;
const int IN4_H = 11;

const int IN1_V = 4;


const int IN2_V = 5;
const int IN3_V = 6;
const int IN4_V = 7;

const int ldrPins[] = {A0, A1, A2, A3};


const int LDR_HAUT = 0;
const int LDR_BAS = 1;
const int LDR_GAUCHE = 2;
const int LDR_DROITE = 3;

const int seuilLumiere = 50;


const int seuilNuit = 100;
const int microStep = 10;

Stepper motorHorizontal(stepsPerRevolution, IN1_H, IN2_H, IN3_H, IN4_H);


Stepper motorVertical(stepsPerRevolution, IN1_V, IN2_V, IN3_V, IN4_V);

void lireValeursLDR(int val[]) {


for (int i = 0; i < 4; i++) {
val[i] = analogRead(ldrPins[i]);
}
}
int getLuminositeMoyenne(int val[]) {
return (val[LDR_HAUT] + val[LDR_BAS] + val[LDR_GAUCHE] + val[LDR_DROITE]) / 4;
}

void afficherValeursLDR(int val[]) {


Serial.print("H: "); Serial.print(val[LDR_HAUT]);
Serial.print(" | B: "); Serial.print(val[LDR_BAS]);
Serial.print(" | Diff V: "); Serial.print(val[LDR_HAUT] - val[LDR_BAS]);
Serial.print(" | G: "); Serial.print(val[LDR_GAUCHE]);
Serial.print(" | D: "); Serial.print(val[LDR_DROITE]);
Serial.print(" | Diff H: "); Serial.print(val[LDR_GAUCHE] - val[LDR_DROITE]);
Serial.print(" | Moyenne: "); Serial.println(getLuminositeMoyenne(val));
}

void miseALest() {
Serial.println("Mise a l'est...");
motorHorizontal.step(-stepsPerRevolution / 4);
motorVertical.step(-stepsPerRevolution / 8);
Serial.println("Mise a l'est terminee.");
delay(1000);
}

void setup() {
Serial.begin(9600);
Serial.println("Demarrage du tracker solaire 2 axes...");
motorHorizontal.setSpeed(10);
motorVertical.setSpeed(10);
miseALest();
}

void loop() {
int valLDR[4];
lireValeursLDR(valLDR);
int luminositeMoyenne = getLuminositeMoyenne(valLDR);

if (luminositeMoyenne < seuilNuit) {


Serial.println("Luminosite faible. Arret du suivi.");
delay(5000);
return;
}

int diffVerticale = valLDR[LDR_HAUT] - valLDR[LDR_BAS];


int diffHorizontale = valLDR[LDR_GAUCHE] - valLDR[LDR_DROITE];

afficherValeursLDR(valLDR);

if (abs(diffVerticale) > seuilLumiere) {


if (diffVerticale > 0) {
motorVertical.step(-microStep);
} else {
motorVertical.step(microStep);
}
}
if (abs(diffHorizontale) > seuilLumiere) {
if (diffHorizontale > 0) {
motorHorizontal.step(-microStep);
} else {
motorHorizontal.step(microStep);
}
}

delay(100);
}

3. Explications Importantes
- Le programme lit en boucle les valeurs de 4 photorésistances (haut, bas, gauche, droite).

- Il compare la lumière reçue de chaque côté pour déterminer s’il doit ajuster la position.

- Si la lumière moyenne est trop faible, le système ne fait rien (mode nuit).

- Une fonction `miseALest()` permet de repositionner l'appareil vers l'est au démarrage.

- Des fonctions sont utilisées pour organiser le code, le rendant plus lisible et modulaire.

4. Suggestions d'Amélioration
- Ajouter le support des fins de course pour éviter les débattements mécaniques.

- Ajouter un contrôle proportionnel (PID ou simple variation du nombre de pas).

- Sauvegarder la dernière position pour la restaurer après une coupure.

- Optimiser la gestion de l'énergie si le système est sur batterie.

Vous aimerez peut-être aussi