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?
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
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
#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 :
@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.
@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 : BlueSolar PWM (12 / 24 / 48 Volt) - Victron Energy
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.