Convertisseur analogique numérique et masse positive sur régulateur solaire

Bonsoir, depuis quelques temps déjà, je cherche à obtenir des mesures de tensions à partir d'un régulateur de charge solaire. Mon montage est déjà réalisé ainsi que le code arduino. Le souci, c'est que la masse ou plutôt le commun du régulateur est la tension positive. Les résultats obtenus ne sont pas ceux attendus car j'ai préalablement contrôlé au voltmètre la tension en sortie des panneaux sur le régulateur. Y a t-il moyen d'obtenir les bonnes mesures faites par le CAN connaissant ce problème de commun positif?

Cordialement, F. M.

schéma ?

slt j’ai eu le même soucis j’ai réussi à détecter la présence ou pas de tension pour savoir si il fait jour ou nuit pour allumer une lampe la nuit, en fait je n’ai pas besoin de précision mais il me reste à faire la mesure précise de la batterie mais comme l’arduino est branché dessus je ne pense pas avoir de souci avec …
ci joint le plan de mon montage, la nuit l’entrée passe à 1 car la tension augmente du à un retour de la batterie

Houlà ! pas de résistance en série avec la LED sous 12v ?

oui en fait c'est un spot à led qui est alimenté direct en 12v, le schéma c'est un aide mémoire de mon montage qui fonctionne je l'ai fait après coup le + du panneau est relié au régulateur mais les + sont commun au panneau et à la batterie d'ou le problème de notre ami moricef

Bonsoir, voici mon schéma : et le code :

#include <SD.h>
#include <Wire.h>
#include <SPI.h>
#include "RTClib.h"
#include "Statistic.h"

// A simple data logger for the Arduino analog pins

// how many milliseconds between grabbing data and logging it. 1000 ms is once a second
#define LOG_INTERVAL  5000// mills between entries (reduce to take more/faster data)

#define ECHO_TO_SERIAL   1 // echo data to serial port

// The analog pins that connect to the sensors
const int analogInPinBat = A0; // Analog pin the battery voltage divider is attached to
const int analogInPinPanNeg = A1; //Analog pin the panel negative to ground voltage divider is attached to
//const int analogInPinPanPos = A2; //Analog pin the panel positive to ground voltage divider  is attached to
//Ground is provided by the negative battery
const float Vcc = 4.91; // µC Vcc (V)
/*Voltage divider positive panel (Ohm)
const float R1 = 37000; 
const float R2 = 13000; */
//Voltage divider negative panel (Ohm)
const float R3 = 37000;
const float R4 = 13000;
//Voltage divider battery (Ohm)
const float R5 = 27000;
const float R6 = 13000;

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3

RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

// the logging file
File logfile;

//the statistics
Statistic PanStats;
Statistic BatStats;

void error(char *str)
{
  Serial.print("Erreur: ");
  Serial.println(str);
  
  // red LED indicates error
  digitalWrite(redLEDpin, HIGH);
  
  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();
  
  PanStats.clear(); //explicitly start clean
  BatStats.clear();
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
/*#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START
*/  
  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
 //create a new file
  char filename[] = "BATPAN00.CSV";
  logfile = SD.open(filename, FILE_WRITE);
  
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin();  
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif  //ECHO_TO_SERIAL
  }
  
  logfile.println("millis; date; VPan; VBAt");
  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println("millis; date; VPan; VBAt");
  Serial.println();
#endif //ECHO_TO_SERIAL
 
  // If you want to set the aref to something other than 5v
  //analogReference(EXTERNAL);
}

void loop(void)
{
  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
  
  digitalWrite(greenLEDpin, HIGH);
  
  // log milliseconds since starting
  uint32_t m = millis();
   
  #if ECHO_TO_SERIAL
  Serial.print(m);         // milliseconds since start
  Serial.print("; ");  
#endif

  // fetch the time
  now = RTC.now();
  
  // log time in serial console
  #if ECHO_TO_SERIAL
  Serial.print(now.day(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.year(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  #endif //ECHO_TO_SERIAL

   // read the analog in value:
 /* analogRead(analogInPinPanPos);
  delay(10);
  int sensorValuePanPos = analogRead(analogInPinPanPos);*/
  
  analogRead(analogInPinPanNeg);
  delay(10);
  int sensorValuePanNeg = analogRead(analogInPinPanNeg);
  
  analogRead(analogInPinBat);
  delay(10);
  int sensorValueBat = analogRead(analogInPinBat);
   
  /*float v_pinPanPos = Vcc*sensorValuePanPos/1023;
  float v_PanPos = v_pinPanPos/(R2/(R1+R2));*/
  float v_pinPanNeg = Vcc*sensorValuePanNeg/1023;
  float v_PanNeg =  v_pinPanNeg/(R4/(R3+R4));
  float v_pinBat = Vcc*sensorValueBat/1023;
  float v_Bat = v_pinBat/(R6/(R5+R6));
  float v_Pan = (v_Bat - v_PanNeg) * ;
  
  #if ECHO_TO_SERIAL
  //for debugging
  Serial.print("; ");
  Serial.print(sensorValuePanPos);
  Serial.print("; ");
  Serial.print(sensorValuePanNeg);
  Serial.print("; ");
  Serial.print(sensorValueBat);
  /*Serial.print("; ");
  Serial.print(v_PanPos);*/
  Serial.print("; ");
  Serial.print(v_PanNeg);
  
  Serial.print("; ");
  Serial.print(v_Pan);
  Serial.print("; ");
  Serial.println(v_Bat);
  #endif //ECHO_TO_SERIAL
  delay(100);  
  digitalWrite(greenLEDpin, LOW);
  
  PanStats.add(v_Pan);
  BatStats.add(v_Bat);
 
  if ((PanStats.count() == 120) && (BatStats.count() == 120))
  {
    // log time
    logfile.print(now.day(), DEC);
    logfile.print("/");
    logfile.print(now.month(), DEC);
    logfile.print("/");
    logfile.print(now.year(), DEC);
    logfile.print(" ");
    logfile.print(now.hour(), DEC);
    logfile.print(":");
    logfile.print(now.minute(), DEC);
    logfile.print(":");
    logfile.print(now.second(), DEC);
        
    //log data
    logfile.print("; ");    
    logfile.print(PanStats.average(), 2);
    logfile.print("; ");    
    logfile.println(BatStats.average(), 2);
  
    logfile.println();
    
    #if ECHO_TO_SERIAL
    Serial.println("=====================================");
    Serial.print("  Count: ");
    Serial.println(PanStats.count());
    Serial.print("  v_Pan Min: ");
    Serial.println(PanStats.minimum(),2);
    Serial.print("  v_Bat Min: ");
    Serial.println(BatStats.minimum(),2);
    Serial.print("  v_Pan Max: ");
    Serial.println(PanStats.maximum(),2);
    Serial.print("  v_Bat Max: ");
    Serial.println(BatStats.maximum(),2);
    Serial.print("  v_Pan Moyenne: ");
    Serial.println(PanStats.average(), 2);
    Serial.print("  v_Bat Moyenne: ");
    Serial.println(BatStats.average(), 2);
    Serial.println("=====================================");
    Serial.println();
    #endif // ECHO_TO_SERIAL
      
    PanStats.clear();
    BatStats.clear();
    delay(10);
  
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  delay(500);
  digitalWrite(redLEDpin, LOW);
  }
  
}

@ pepe : quel type d'amplificateur correspondrait à mon cas? les deux ponts diviseurs sont calculés pour limiter la tension d'entrée dans le CAN à 4,9V. Sachant que la tension max aux panneaux est de 19V et j'ai fixé celle de la batterie à 15V.

Bonjour, Il suffisait de mettre une diode anti retour entre le panneau et la batterie, indispensable pour éviter que la batterie se décharge dans le panneau et garder GND comme référence. Comme ici :|500x193

Qu'avez-vous prévu comme régulation de charge batterie ?

PS : Tu peux attacher directement tes pièces jointes, même les images directement depuis ton disque dur, sur le forum.

Bonjour, questions bêtes, sans doute:

n'est-il pas possible de recâbler le panneau pour éviter toutes ces complications ?

les panneaux sont-ils généralement livrés avec le + commun ? pourquoi ?

trimarco232: les panneaux sont-ils généralement livrés avec le + commun ? pourquoi ?

les panneaux ont simplement un + et un - comme les piles, le pb vient du régulateur derrière

@pepe : Je ne vois pas comment l'atmega peut recevoir plus que 5V puisqu'il est alimenté par le biais du LM7805 via la batterie dans tous les cas. Et au pire, ce serait via les ponts diviseurs qui plafonnent à 4,9V.

@achess : J'aurai du préciser le but du montage au début de mon post : Sachant que les batteries acide/plomb (soit-dit en passant, c'est une technologie complètement archaïque au 21ème siècle) saturent et n'acceptent plus la charge en milieu de journée lorsque l'ensoleillement est au plus fort, même en février... puisque le régulateur (je l'ai constaté avec d'autres régulateurs) affiche une batterie pleine et n'envoie plus de courant à celle-ci pendant un certain temps, voire plusieurs heures en été. Donc avec un second lot de batteries, je souhaite quand même profiter de ce pic d'ensoleillement en basculant d'un lot sur l'autre grâce à mon montage et un relais. Pour ce faire, il me faut déterminer à quel moment la tension de la batterie est inférieure à celle des panneaux par des mesures prises au niveau du régulateur (un Victron BlueSolar). Avec un régulateur de charge, le dispositif d'anti-retour est déjà prévu.

@trimarco232 : Ce ne sont pas les panneaux qui sont câbler avec le commun positif mais le régulateur de charge. Et quel que soit le fabricant.

@trimarco232 : Ce ne sont pas les panneaux qui sont câbler avec le commun positif mais le régulateur de charge. Et quel que soit le fabricant.

Bonjour, merci, sans doute la facilité de réguler par le négatif (NPN ou canal N) si j'y touche un jour je changerais sans doute cela

Ce régulateur est caractérisé comme PWM. Il semblerait qu'un microcontrôleur ST72324J6 soit présent ainsi que 3 MOSFET 75329p et une IRFZ48N.

Bonjour,
Dans ce cas, un inverseur de tension à transistor PNP
Entrée reliée sur un pont diviseur aux bornes du panneau solaire.

inverseur tension.jpg

Bonjour,
Et comme ça avec un gain négatif, - 19 V au panneau devrait donner environ 5 V en sortie, non ?

comment attacher l’image dans le message ?

inverseur tension.jpg

Bonsoir et merci à tous de vos réponses.

@pepe : Je ne comprend pas tout du dernier schéma, notamment les équations mais je vais potasser ça. En attendant, est-ce que ce montage est à placer devant le pont diviseur des panneaux, ou est-ce un schéma de principe à part entière. Les tensions de batterie sont comprises entre 14V grand max et 11,2V rarement en dessous sachant que je tire sur la batterie via un onduleur branché directement sur cette dernière et qui ne passe donc pas par le régulateur (c'est normal). Les mesures qui m'importent sont celles prises en journée quand les panneaux donnent. Du coup, est-ce qu'un AOP est toujours de rigueur?

J'aurai du préciser le but du montage au début de mon post : Sachant que les batteries acide/plomb (soit-dit en passant, c'est une technologie complètement archaïque au 21ème siècle) saturent et n'acceptent plus la charge en milieu de journée lorsque l'ensoleillement est au plus fort, même en février... puisque le régulateur (je l'ai constaté avec d'autres régulateurs) affiche une batterie pleine et n'envoie plus de courant à celle-ci pendant un certain temps, voire plusieurs heures en été. Donc avec un second lot de batteries, je souhaite quand même profiter de ce pic d'ensoleillement en basculant d'un lot sur l'autre grâce à mon montage et un relais. Pour ce faire, il me faut déterminer à quel moment la tension de la batterie est suffisamment décalée pour estimer que la batterie ne charge plus.

pepe: Sinon, je ne vois toujours pas bien de quelle manière on utilise la mesure la tension du panneau, vu que tu n'as parlé que de la tension de la batterie. Je pose la question parce que, généralement, c'est plutôt le courant produit qui fait l'objet d'un monitoring.

tout dépend du type de régulateur : si PWM la tension panneau ne donne pas grand chose mise à part l'indication "il fait jour" si MPPT la tension associée au courant panneau peut servir à vérifier le fonctionnement du MPPT

pepe: Et si l'on veut mesurer les performances exactes du MPPT, on risque de devoir mettre en œuvre un système adapté, notamment si le fonctionnement implique une ondulation de la tension à fréquence élevée.

la recherche du MPPT est une procédure assez lente, d'ailleurs sur certains onduleurs on a accès au temps entre deux recherches de MPPT, il y a un optimum a trouver car une recherche permanente provoquerais une perte de puissance

Je ne faisais pas référence aux dernières trouvailles technologiques comme les batteries LiPo ou autres, mais à l'absence apparente ou réelle de recherches en matière de stockage efficace d'énergie, dans le domaine industriel tout du moins. Peut-être que dans le domaine privé ces recherches ont lieues, mais je n'en ai pas entendu parler. En tout cas, et pour preuve de l'aspect archaïque des batteries acide/plomb est leur fragilité relative et la complexité de leur fonctionnement en charge/décharge pour obtenir la pleine capacité; je ne parle ici que du solaire. Je ne compte plus le nombre de batteries mortes envoyées à la déchetterie depuis 12 ans, que ce soit chez moi, entre le solaire, le groupe électrogène, les postes de clôture électriques et la bagnole (rien que 4 batteries mortes l'été dernier à cause de la canicule, dont la batterie solaire de 180Ah âgée de 4 ans à peine qui avait perdu la majeure partie de son eau par évaporation), ou chez les voisins. Donc concernant l'absence d'entretien et la surconsommation, il y a certainement mieux. Mais je concède qu'en matière de technologie le dernier cri est rarement le meilleur.

Il est quand même difficile d'expliquer et d'accepter ce phénomène de saturation à la charge en milieu de journée. À moins que ce ne soit un aspect normal du fonctionnement du régulateur PWM? Dont voici le modèle : https://www.victronenergy.fr/solar-charge-controllers/bluesolar-pwm-pro

Sinon je mesure aussi la tension aux panneaux puisque c'est à cette même tension que je compare celle de la batterie pour estimer à quel moment basculer sur l'autre lot de batteries. Enfin c'est ce que j'ai dans le code.