Bonsoir.

Voici mon nouveau programme ARDUINO (le second car j'en suis à mes débuts).

Je vous le soumets, je pense que j'ai assez correctement expliqué à quoi il sert.

Bien sur votre avis et vos remarques/critiques sont importants pour moi.

Surtout l'utilisation de la fonction millis() pour les temporisation sans utiliser delay() qui me pose pas mal de soucis.

Code:
/*Programme qui controle la charge batterie par les panneaux photovoltaiques (circuit 12V, 2 panneaux de 75W, 1 batterie de 100Ah 12V).

A partir de 14.4V (batterie considérée chargée), on met en route une pompe 220VDC (moteur universel type mixer ou perceuse)
alimentée par un convertisseur DC12V/Dc280V.

Le but est de ne pas "gaspiller" l'énergie une fois la batterie chargée mais aussi de garder la pleine capacité de la batterie
pour pouvoir l'utiliser quand il n'y a plus de soleil pour s'éclairer le soir.

Le "surplus" est donc dévié vers une pompe à eau (90W/220V) qui rempli une cuve. On ajuste la puissance d'alimentation de la pompe
par une commande PWM en fonction de l'intensité du soleil disponible afin de ne pas puiser dans la batterie.

Un autre système de régulateur  est mis en place pour le cas ou une avarie arrive sur la pompe et que celle ci ne puisse absorber le 
trop plein d'énergie des panneaux et éviter de surcharger la batterie et la détruire. Dans ce cas on court-circuite les panneaux solaire.

J'ai choisi d'utiliser des MOSFET pour servir en commutation de tout celà.
IRF3205 pour alimenter le convertisseur en 12V 20A
DFP830 pour le PWM sur la pompe
IRF540 pour la régulation de sécurité court-circuitant les panneaux
*/



int mesureTensionBat = 0;        // select the pin A0 for the batterie voltage
int IRF3205 = 11;                // select the pin for the converter MOSFET IRF3205 55V, 110A, 8mOhm
int DFP830 = 12;                 // select the pin for the pump MOSFET DFR830, 500V, 5.3A, 1.5Ohm
int IRF540 = 10;                 // select the pin for the security over charge  MOSFET IRF540, 100V, 30A
int dutyCycle = 200;
int Ubat100 = 0;                 //tension batterie en centivolt
int tauxSurcharge = 0;
float Ubat = 0;
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;



void setup()
{
  digitalWrite(IRF3205, LOW);    // s'assure que tout est arrêté au démarrage de Arduino afin de commencer par charger la batterie
  digitalWrite(DFP830, LOW);     // ""
  digitalWrite (IRF540, LOW);       //s'assure que les panneaux ne sont pas court-circuité au démarrage de Arduino
  Serial.begin(9600);               //ouvre le serial monitor pour certain controle
    digitalWrite(13, LOW);          //éteint la LED de la platine Arduino qui ne me sert à rien
}
void loop()
{
  
   mesureTensionBat = analogRead(A0);                 //prend la tension batterie 12V par un pont diviseur 0-5V
 Ubat100 = map(mesureTensionBat, 0, 1023, 0, 1800);   //"map" la tension lue de 0 a 1800centiV
Ubat = Ubat100 / 100;                                 //transforme la tension batterie de centiV en V avec 2 décimales
Serial.print (Ubat);                                  //affiche la tension batterie avec 2 décimales sur le "serial monitor"
Serial.print("      ");                               //affiche 1 espace
Serial.println(mesureTensionBat);                      // affiche la valeur entre 0 et 1023 sur 10 bit correspondant à la tension batterie

  
  
  
  if (Ubat >= 14.2)   // si condition vraie, met en route le convertisseur puis, 1 seconde après, la pompe en ajustant le signal PWM pour maintenir 
                      //une tension batterie stable de 13.4V
  {
        digitalWrite(IRF3205, HIGH);                 // mise en route le convertisseur
        currentMillis = millis();
        if (currentMillis - previousMillis >= 1000)   // tempo 1s avant de mettre la pompe en route
        {                     
        analogWrite(DFP830, 200);    // mise en route de la pompe à 100% de 220V soit 78% de 280VDC (tension disponible au convertisseur) ou 78% de 0-255 pendant 1s avant prise en charge de la regul proportionnelle dutyCycle
              
        }
  }
  if (currentMillis - previousMillis >= 2000)
              {
              dutyCycle = map (Ubat100, 1340, 1445, 100, 220);    //ajuste le dutyCycle entre 50% de 220V (100) et 110% de 220V (220) 1s après le démarrage de la pompe
                                                                  // en foncton de l'intensité du soleil
              analogWrite(DFP830, dutyCycle);                     //ajuste la commande PWM en fonction du dutyCycle défini ci-dessus
              }
     
  
  previousMillis = currentMillis;
  
 if(Ubat < 13.4)    //si condition vraie, arrête pompe et convertisseur
    {
    digitalWrite(DFP830, LOW);    // arrêt de la pompe
                      
    digitalWrite(IRF3205, LOW);   // arrêt du convertisseur
    dutyCycle = 200;               // réinitialise dutyCycle à la valeur de démarrage (100% de 220V)
    }
     
     // régul de sécurité au cas ou le surplus d'energie ne soit pas absorbé par la pompe
 tauxSurcharge = map(Ubat100, 1420, 1445, 0, 255);  //map la tension entre 14.20V et 14.45V pour générer 1 duty cycle de court-circuitage des panneaux solaire
                                                   //14.20V taux de surcharge = 0; 14.45V taux de surcharge = 100%
 analogWrite(IRF540, tauxSurcharge);               //court-circuite les panneaux solaires en fonction du taux de surcharges défini par le "mapage" ci dessus
 
  
  
  
}