Chargeur Solaire Portable à Suivi Solaire avec Arduino et Servomoteur
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Servomoteurs (Tower Pro MG996R) | 1 |
| Photorésistance (LDR) | 2 |
| Résistance 10 kΩ | 2 |
| Convertisseur boost 2,5V vers 5V - Adapté USB | 1 |
| Panneau solaire - Taille loisir | 2 |
Outils et machines nécessaires
- Fer à souder (générique)
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Aller vers le vert
Je travaille dans l'industrie des énergies renouvelables en Australie et je bidouille avec des Arduinos depuis un certain temps, mais ce n'est que avec ce projet que j'ai enfin décidé de combiner les deux et de construire mon propre petit dispositif solaire. Une petite note au préalable : ce projet nécessite évidemment 5 V pour alimenter l'Arduino et le servomoteur, qui sont utilisés pour maximiser la sortie des panneaux solaires qui, au mieux, produisent 3,4 V. Ce n'est donc pas exactement rentable. Cependant, le concept est évolutif : si, par exemple, vous utilisiez ce concept sur un réseau de 8 panneaux produisant 12 V, vous pourriez alors alimenter l'Arduino et charger votre téléphone sans source d'alimentation externe. Je prévois de le faire un jour, et j'ajouterai un lien ici quand ce sera fait.
Pendant que j'y suis, je ferais mieux de créditer mes sources...
- The DIY Life - Arduino Solar Tracker
- Brown Dog Gadgets - Solar Altoids USB Charger
Les deux sont de bonnes sources d'informations sur le sujet, et c'est là que j'ai tiré le concept.
DÉMARRAGE
Alors, première chose, vous avez besoin de panneaux solaires. J'en ai utilisé deux, bien que vous puissiez en utiliser autant que vous voulez, pensez juste à combien un servomoteur de 9 g pourra soulever/abaisser (ne le rendez pas trop lourd). Les panneaux que j'ai trouvés étaient évalués à 1,5 V, 0,75 W de sortie, ce qui est au bas de l'échelle disponible de nos jours. Mais ils étaient légers et bon marché et, comme c'est un projet de preuve de concept pour moi, la sortie n'est pas super importante.
J'ai joint mes deux panneaux le long du bord avec de l'époxy. Pour connecter les panneaux en série, soudez simplement la borne positive d'un panneau à la borne négative de l'autre, ce qui devrait vous laisser avec un fil positif et un fil négatif restants. Attachez vos deux LDR de chaque côté du panneau solaire (Est et Ouest), et soudez une extrémité d'un fil de connexion à chacune de leurs bornes. Il est plus facile de souder un fil de connexion si vous coupez l'extrémité d'un côté et dégagez le fil d'environ 5 mm pour exposer les brins.

Pour que l'Arduino puisse lire les LDR, nous avons besoin d'un circuit diviseur de tension pour chacun. Voir ici pour les diviseurs de tension. Dans ce circuit, le LDR est R1, et nous utilisons une résistance de 10 kΩ pour R2, et connectons des fils de jonction à l'Arduino là où les deux résistances se rejoignent. Si vous construisez ce projet sur une plaque d'essai, une broche du LDR ira au diviseur de tension, l'autre ira au rail d'alimentation positif. Voir le diagramme Fritzing ci-dessous.

La Structure du Suiveur
La prochaine chose dont vous avez besoin est de construire une structure de support pivotante pour que le panneau puisse s'y asseoir. Mon design est essentiellement une longueur d'acier à ressort supportée par deux cadres en A. Le dessous du réseau de panneaux a de petites entretoises en bois, avec des trous pour l'acier à ressort. J'ai fait le tout en bois de balsa pour le garder bon marché, facile et léger, mais si cela devait être un dispositif permanent, vous le voudriez en acier fin ou en contreplaqué traité. Je n'ai pas bien documenté la construction du support pivotant, mais la vidéo ci-dessous devrait vous montrer comment c'est fait, ainsi que l'emplacement du servomoteur. Je l'ai construit avec le panneau à un angle vers le bas, de manière à pouvoir orienter la base de la structure vers le nord, donc quelle que soit la façon dont le panneau oscille en suivant le soleil, il sera toujours incliné un peu vers le nord pour maximiser la sortie. (Je suis dans l'hémisphère sud)
Montage du Servomoteur
Le servomoteur se trouve sur l'une des poutres de support du cadre en A, et soulève/abaisse un côté du panneau. J'ai plié de l'acier à ressort avec une pince pour obtenir des extrémités crochetées que vous pouvez boucler à travers votre entretoise de panneau et le bras du servomoteur. Vous devrez peut-être élargir les trous dans le bras du servomoteur pour y faire passer l'acier. J'ai utilisé le plus petit foret que j'ai pu trouver. Ne collez pas l'acier ni dans le bras du servomoteur ni dans l'entretoise du panneau, car il doit pouvoir tourner dans les trous pour que le panneau se soulève en douceur. Une fois en place, retirez le panneau de la structure, de sorte qu'il ne reste que le servomoteur pour pouvoir faire un peu de calibration.

Calibration du Servomoteur
Ouvrez un nouveau sketch et saisissez le code suivant.
#include <Servo.h>
Servo myservo1; // Create a servo object to control the servo
int pos = 10;
void setup() {
myservo1.attach(9); // attaches the servo object to PWM pin 9
}
void loop() {
myservo1.write(pos);
}
Téléversez sur votre Arduino, et voyez où le servomoteur bouge. Continuez à changer la valeur 'pos' entre 0 et 180 dans le sketch et re-téléversez le sketch, jusqu'à ce que vous trouviez les positions où le bras du servomoteur pointe droit vers le haut et vers le bas. Ce sont vos valeurs max et min. Pour moi, c'était 15 et 140. Si la valeur chevauche de 180 à 0, retirez le bras du servomoteur et repositionnez-le pour qu'il puisse être aligné correctement.
Assemblage Final
Allez-y et connectez tout, et saisissez le sketch suivant.
// Sun Tracker Sketch
// This sketch is designed for use with a 9gram servo, able
// to be powered directly from the Arduino without an external
// power source. For fritzing diagram, see Github repository
// https://github.com/nickalanf/Arduino--Projects
// The Serial monitor section is for debugging purposes, or for general interest,
// once the device is functioning correctly, can be disabled
// Sketch by FIELDING - 8/2/18
#include <Servo.h>
Servo servo; // Create a servo object to control the servo
int eLDRPin = A0; // Assign pins to the LDR's
int wLDRPin = A1;
int eastLDR = 0; // Create variables to store to LDR readings
int westLDR = 0;
int difference = 0; // Create a variable to compare the two LDR's
int error = 10; // Variable for if there is a noticeable difference between the two LDR's
int servoSet = 130; // Variable for position of servo - will be different for each device
void setup() {
servo.attach(9); // attaches the servo object to PWM pin 9
Serial.begin(9600);
}
void loop() {
eastLDR = analogRead(eLDRPin); // Read the LDR values
westLDR = analogRead(wLDRPin);
if (eastLDR < 400 && westLDR < 400) {
// Check to see if there is low light on both LDR's
while (servoSet <= 140 && servoSet >= 15) {
// if so, send panels back to east for the sunrise
servoSet++;
servo.write(servoSet);
delay(100);
}
}
difference = eastLDR - westLDR; // Check the difference
if (difference > 10) {
// Send the panel towards the LDR with a higher reading
if (servoSet <= 140) {
servoSet++;
servo.write(servoSet);
}
} else if (difference < -10) {
if (servoSet >= 15) {
servoSet--;
servo.write(servoSet);
}
}
Serial.print(eastLDR); // Serial monitor can be useful for debugging/setting up
Serial.print(" - "); // Use it to see if your LDR's are noticeably different when
Serial.print(westLDR); // They have equal light shining on them, if so, correct with the error value
Serial.print(" - ");
Serial.print(difference);
Serial.print(" - ");
Serial.print(servoSet); // Fine tune the servo settings, to maximise swing available
Serial.print(" - ");
Serial.println(".");
delay(100);
}
Ouvrez le Moniteur Série et dirigez de la lumière sur les LDR. Essayez de la diriger uniformément sur les deux, et vérifiez la valeur de différence affichée sur le moniteur série. Si elle est supérieure à environ 25, ou inférieure à -25, vous devez ajouter une calibration d'erreur. Ajoutez la valeur d'erreur pertinente dans le code, puis ajoutez ou soustrayez cette valeur du LDR concerné. Si les valeurs de différence sont proches, il devrait être bon de laisser tel quel.
Vous êtes prêt à faire un test ! Le plus simple est d'aller dans une pièce sombre et avec une lampe de poche/lampe. Balayez la lumière d'un LDR lentement vers l'autre et regardez le panneau bouger. Vous pouvez aussi couvrir un LDR et le panneau devrait s'éloigner de celui-ci.
BONUS - CHARGEUR DE TÉLÉPHONE

Si vous voulez réellement utiliser la sortie des panneaux, vous pouvez câbler un convertisseur DC-DC boost 2,5 V - 5 V directement sur les fils sortant des panneaux. C'est un circuit entièrement séparé de l'Arduino/plaque d'essai. Notez qu'un téléphone standard se charge à 5 V, et vos panneaux peuvent sortir 5 V mais à faible courant. Donc, si votre batterie est pleine ou la lumière du soleil faible, vous n'aurez pas assez de sortie pour charger. Le moyen le plus simple d'y remédier est simplement d'ajouter plus de panneaux !

Code
Sun Tracker Processing
// Sun Tracker Sketch
// This sketch is designed for use with a 9gram servo, able
// to be powered directly from the Arduino without an external
// power source. For fritzing diagram, see Github repository
// https://github.com/nickalanf/Arduino--Projects
// The Serial monitor section is for debugging purposes, or for general interest,
// once the device is functioning correctly, can be disabled
// Sketch by FIELDING - 8/2/18
#include <Servo.h>
Servo servo; // Create a servo object to control the servo
int eLDRPin = A0; // Assign pins to the LDR's
int wLDRPin = A1;
int eastLDR = 0; // Create variables to store to LDR readings
int westLDR = 0;
int difference = 0; // Create a variable to compare the two LDR's
int error = 10; // Variable for if there is a noticeable difference between the two LDR's
int servoSet = 130; // Variable for position of servo - will be different for each device
void setup() {
servo.attach(9); // attaches the servo object to PWM pin 9
Serial.begin(9600);
}
void loop() {
eastLDR = analogRead(eLDRPin); // Read the LDR values
westLDR = analogRead(wLDRPin);
if (eastLDR < 400 && westLDR < 400) {
// Check to see if there is low light on both LDR's
while (servoSet <= 140 && servoSet >= 15) {
// if so, send panels back to east for the sunrise
servoSet++;
servo.write(servoSet);
delay(100);
}
}
difference = eastLDR - westLDR; // Check the difference
if (difference > 10) {
// Send the panel towards the LDR with a higher reading
if (servoSet <= 140) {
servoSet++;
servo.write(servoSet);
}
} else if (difference < -10) {
if (servoSet >= 15) {
servoSet--;
servo.write(servoSet);
}
}
Serial.print(eastLDR); // Serial monitor can be useful for debugging/setting up
Serial.print(" - "); // Use it to see if your LDR's are noticeably different when
Serial.print(westLDR); // They have equal light shining on them, if so, correct with the error value
Serial.print(" - ");
Serial.print(difference);
Serial.print(" - ");
Serial.print(servoSet); // Fine tune the servo settings, to maximise swing available
Serial.print(" - ");
Serial.println(".");
delay(100);
}
Schémas

Processus de fabrication
- Cellules solaires : des premières expériences au photovoltaïque moderne – Technologie, production et perspectives
- Surveillance temps réel de panneau solaire avec Arduino : Acquisition de données bas coût
- Solar Tracker V2.0 – Système avancé de suivi solaire DIY pour panneau photovoltaïque
- Suiveur Solaire IoT : Gestion Intelligente de l'Énergie avec Arduino
- Système solaire suiveur de soleil biaxe DIY avec Arduino UNO
- SmartPostBox : Boîte aux lettres intelligente connectée IoT (Sigfox)
- Plateforme de suivi solaire à servos de précision pour une capture d'énergie optimale
- Qualité des panneaux solaires : points de contrôle essentiels pour une performance optimale
- Comment sont fabriqués les panneaux solaires : guide étape par étape pour une production d'énergie solaire de haute qualité