Panneaux Solaires : gestion cumulus quand soleil (LDR + relais)

Hello,

J'ai un projet et je suis total novice dans la prog d'arduino.

Futur installation solaire d'environ 1200Wc je désire chauffer l'eau de mon cumulus de 300L (3000W) avec un max d’énergie solaire mais sans utiliser un "routeur" qui me délesterai que ce qu'il faudrait, mais la puissance installée en solaire ne couvrira pas assez le besoin pour bien chauffer l'eau (routage d'environ 300W vers le ballon, trop faible...)

L'idée serait donc de programmer le cumulus lors du pic éventuel de soleil (12h - 14h30) suffisant pour mon cas.
Une horloge ferait l'affaire car il faut bien chauffer l'eau dans tous les cas.
Mais c'est la ou l'arduino intervient, si il y a eu du soleil de 10h à 12h et nuages de 12h à 14h30 je perds complètement le gain d'utiliser la prod solaire sur ce jour.

Entrée : simple LDR (j'ai commandé un TEMT6000 qui semble plus approprié)
Sortie : carte relais basique en attendant un SSR définitif.

Le besoin : Lorsque le soleil tape activer la chauffe du cumulus.
Si : Etre dans le créneaux horaire de 9h - 18h
Si : Soleil présent pendants une période consécutive (2min)
Alors on chauffe l'eau

Sinon : Si nuage pendants (2min)
alors on arrête la chauffe.

J'aimerai rajouter la gestion du temps. Un compteur qui cumule le temps ou la sortie est active.
Ainsi en fin de journée, comparer cette valeur avec une valeur définie (2h30) et si la valeur n'est pas atteinte alors on demande d'activer une autre sortie pour faire une chauffe la nuit du complément pendants 2h30 (au cas ou il y est eu une journée couverte).

Idéalement ajout d'un afficheur 20x4 pour afficher la puissance produite LIVE, le cumul journée, cumul année et temps d'activation de la sortie relais.

J'espère avoir été clair.

Le code que j'ai pu faire :
J'ai simplement géré l'allumage de la LED/RELAIS via la LDR avec un temps.
Mais je ne sais pas comment faire pareil pour la désactivation, car la c'est instantané.
(plus de soleil, on éteint).

Ensuite pour l'ajout des compteurs de temps je suis également largué :confused:

//***** EN-TÊTE DÉCLARATIF *****

int LDRPin = 0;  //On renomme la broche A0 de la LDR
int ledPin = 9;  //On renomme la broche 9 de la LED qui permet de connaitre l'etat de la sortie du relais 1
int RelaisOUT1 = 11;  //On renomme la broche 11 du RELAIS 1
long tempsReference;


//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme
void setup()
{
    pinMode (ledPin, OUTPUT);
    pinMode (RelaisOUT1, OUTPUT);
    Serial.begin(9600);
}
int seuil = 775;   //On définit un seuil de luminosité (sur 1023) à partir duquel la LED s'allume
int loopDelay = 1000; //en millisecondes
int dureeSeuilNecessaire = 10000; //durée à atteindre avant d'allumer la led : temps concécutif de présence du soleil , en millisecondes
int dureeSeuilActuel = 0; //variable qui va compter le temps d'ensoleillement
float tension = 0;

void loop()
{  
    tension = (analogRead(A0) * 5.0) / 1024;
    int ValeurEntreeAnaA0 = analogRead(A0); // permet la lecture de la valeur de la LDR de 0 à 1023 via moniteur serie
    Serial.print("LDR Valeur Absolu = ");
    Serial.println(ValeurEntreeAnaA0); // moniteur serie pour afficher la valeur en live
    Serial.print("LDR Tension = ");
    Serial.print(tension);
    Serial.println(" V");
    Serial.print("Compteur Seuil Soleil =");
    Serial.println(dureeSeuilActuel);
   
    if (analogRead (LDRPin)> seuil)  //Si la luminosité est plus élevée que le seuil
    {
        dureeSeuilActuel = dureeSeuilActuel + loopDelay; // on incrémente de loopDelay millisecondes la dureeSeuilActuel, 1 seconde dans ce cas
        if(dureeSeuilActuel > dureeSeuilNecessaire && digitalRead (ledPin) == LOW ) //si on a plus de 30 secondes d'ensoleillement dans ce cas alors on allume la led seulement si elle était éteinte
        {
          digitalWrite (ledPin, HIGH);  // on allume la LED.
          digitalWrite (RelaisOUT1, HIGH);  // on active le relais OUT1
        }
    }
    else //Sinon...
    {
        if(digitalRead (ledPin) == HIGH) //Si la led était déjà allumée alors on l'éteint
        {
          digitalWrite (ledPin, LOW);  //...on éteint la LED
          digitalWrite (RelaisOUT1, LOW);  // on désactive le relais OUT1
        }
        dureeSeuilActuel = 0; //on a perdu la luminosité nécessaire donc on réinitialise à 0 à chaque fois
    }
    delay(loopDelay); //on reboucle dans x millisecondes pour voir si le seuil est atteint ou pas pour gérer l'état de la led
}

Merci pour vos retours :slight_smile:

Bonjour et Bienvenue

ce message n'a rien à faire dans le sous-forum dédié à la présentation des choses F I N I E S . OK quand la réalisation sera aboutie !!

  1. Demandes rapidement au modérateur (lien Report to Moderatror ) le déplacement dans le forum princial
  2. Prends connaissance des Règles du Forum Francophone et des autres messages épinglés en tête de ce forum
    Tu y découvriras poù poster ? quelles informations fournir.......

Oups désolé, déplacement fait par modo, merci.

en gros tu veux faire un MPPT... la plupart des convertisseur/onduleur le fait....

Ensuite, il te faut un repartiteur de charge,300W, c'est pas grand chose...

Mais avant toute chose, il faut savoir ce que tu as en installation electrique... convert? onduleur? batterie?
12V? 24? 48?

Un LDR ne sert a rien, et un nuage de 2minutes, ne va pas trop impacter la charge...

il faut resonner en courant et tension,

pic des heures entre 11H et 13H ( environ), tu as le max de courant.

Je ne souhaite pas faire de charge de batterie.

L'idée est simplement d'activer un relais (SSR) lorsque j'ai du soleil durant X minutes consécutives.

De comptabiliser cette activation / jour pour dire que si par exemple le relais n'a pas était actif au moins 2h, alors la nuit entre 0h et 3h forcé l'activation du relais. (Journée donc avec peu de soleil, pas suffisant pour chauffer l'eau au max)

Je n'arrive pas à intégré la notion de comptage et d'horloge.

Merci

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.