Récupérateur Energie Solaire en excès pour Eau chaude
Publié : 10 juin 2019, 18:40
Bonjour,
ça existe déjà mais j'ai fais le mien pour pas très cher (80 euros), très simple et surtout évolutif pour moi. Il marche maintenant depuis 10 mois sans aucun problème et me permet de faire de bonnes économies mais aussi de satisfaire ma fibre écologique.
Descriptif : Détecter l’exportation d’énergie solaire vers le réseau, en mesurer l'intensité et envoyer une intensité équivalente à une résistance électrique situé dans un chauffe eau. Tout cela est connecté à domoticz par l'intermédiaire de mysensors
Matériel : 2 PZEM 004, 1 arduino mega, un coupe circuit 2 fils (disjoncteur) correspondant à la puissance de votre résistance électrique (pour ma part 20A), un dimmer PWM 16A AC KRIDA.
Le choix du matériel :
-PZEM 004 : très fiable et peu cher, cablage simple
-arduino méga : car j'en avais mais surtout elle dispose de plusieurs RX,TX nécessaires aux PZEM.
-le dimmer krida (http://www.inmojo.com/store/krida-elect ... -arduino-/) . Au départ j'ai utilisé beaucoup mois cher mais celui là est top car il comporte toutes les sécurités températures et ventilations automatiques.
Il s'agit là de ma première version mais depuis j'ai construit 2 autres nœuds mysensors connectés et pilotés par celui là. Le premier est une borne de recharge de véhicule électrique DIY (coûtant 80 euros et paramétrable à distance par DZ) et le 2eme un noeud dédié à la gestion de la piscine. Ces 2 bornes attendent sagement les ordres de la première en fonction de l’énergie solaire disponible. Cette méthode me permet de n'exporter quasiment aucune Energie vers le réseau malgré une puissance de 6kw de panneau solaire.
Pour les branchements :
1)je vous laisse le soins de regarder la notice du pzem:
=> le PZEM Réseau sera connecté aux bornes serial1 de la mega
=> le Pzem solaire aux bornes serial2 de la mega
2)Le dimmer est dans mon exemple piloté par la broche 3.
Integration classique à DZ
Voilà...
ça existe déjà mais j'ai fais le mien pour pas très cher (80 euros), très simple et surtout évolutif pour moi. Il marche maintenant depuis 10 mois sans aucun problème et me permet de faire de bonnes économies mais aussi de satisfaire ma fibre écologique.
Descriptif : Détecter l’exportation d’énergie solaire vers le réseau, en mesurer l'intensité et envoyer une intensité équivalente à une résistance électrique situé dans un chauffe eau. Tout cela est connecté à domoticz par l'intermédiaire de mysensors
Matériel : 2 PZEM 004, 1 arduino mega, un coupe circuit 2 fils (disjoncteur) correspondant à la puissance de votre résistance électrique (pour ma part 20A), un dimmer PWM 16A AC KRIDA.
Le choix du matériel :
-PZEM 004 : très fiable et peu cher, cablage simple
-arduino méga : car j'en avais mais surtout elle dispose de plusieurs RX,TX nécessaires aux PZEM.
-le dimmer krida (http://www.inmojo.com/store/krida-elect ... -arduino-/) . Au départ j'ai utilisé beaucoup mois cher mais celui là est top car il comporte toutes les sécurités températures et ventilations automatiques.
Il s'agit là de ma première version mais depuis j'ai construit 2 autres nœuds mysensors connectés et pilotés par celui là. Le premier est une borne de recharge de véhicule électrique DIY (coûtant 80 euros et paramétrable à distance par DZ) et le 2eme un noeud dédié à la gestion de la piscine. Ces 2 bornes attendent sagement les ordres de la première en fonction de l’énergie solaire disponible. Cette méthode me permet de n'exporter quasiment aucune Energie vers le réseau malgré une puissance de 6kw de panneau solaire.
Pour les branchements :
1)je vous laisse le soins de regarder la notice du pzem:
=> le PZEM Réseau sera connecté aux bornes serial1 de la mega
=> le Pzem solaire aux bornes serial2 de la mega
2)Le dimmer est dans mon exemple piloté par la broche 3.
Integration classique à DZ
Voilà...
Code : Tout sélectionner
#define MY_RADIO_NRF24
// Numero Noeud de l'objet
#define MY_NODE_ID 5
// Bibliothèques
#include <SPI.h>
#include <MySensors.h>
#include <SoftwareSerial.h>
#include <PZEM004T.h>
#include <EEPROM.h>
// initialisation des PZEM004T et EmonLib
PZEM004T pzem(&Serial1);// PZEM 1 (Réseau)
PZEM004T pzemSol(&Serial2);// PZEM 2 (solaire)
IPAddress ip1(192,168,1,1);// Ip PZEM 1
IPAddress ip2(192,168,1,2); // Ip PZEM 2
//// Les variables/////
//Mesure Maison
#define CHILD_ID_WATT 1
//Mesure Solaire
#define CHILD_ID_WATTSOL 2
//Excés de puissance solaire
#define CHILD_ID_WATTEXCESS 3
// Données des PZEM
float p,e,psol,esol;
// Mesure surproduction
long int WattExcess=0;
long int HeatWatt=0;
// Puissance de sortie surproduction Solaire
int PWM=0;
int PWMrec;
// Intervalle entre 2 envoies MySensors
unsigned long MessTemps = 30 * 1000;
unsigned long DataTemps = millis();
// Messages MySensors Réseau
MyMessage msgWatt(CHILD_ID_WATT,V_WATT);
MyMessage msgKwh(CHILD_ID_WATT,V_KWH);
// Messages MySensors Solaire
MyMessage msgWattSol(CHILD_ID_WATTSOL,V_WATT);
MyMessage msgKwhSol(CHILD_ID_WATTSOL,V_KWH);
// Message MySensors Surproduction
MyMessage msgWattExcess(CHILD_ID_WATTEXCESS,V_WATT);
void setup() {
Serial.begin(115200);
pinMode(3, OUTPUT);//broche PWM Dimmer Solaire
pzem.setAddress(ip1); pzemSol.setAddress(ip2);
}
void presentation() {
// Présentation du PZEM
sendSketchInfo("PZEM 004T ", "1.0");
// Déclaration des capteurs réseau
present(CHILD_ID_WATT, S_POWER);
present(CHILD_ID_WATT, S_POWER);
// Déclaration des capteurs solaire
present(CHILD_ID_WATTSOL, S_POWER);
present(CHILD_ID_WATTSOL, S_POWER);
// Déclaration Surproduction
present(CHILD_ID_WATTEXCESS, S_POWER);
}
void loop() {
HeatEnergie();
if (millis() > DataTemps + MessTemps ) {ReadData(); SendMySensors();} // Lecture données des 2 PZEM Envoi données Gateway
}
// Routine Transfert Energie
void HeatEnergie(){
HeatWatt = pzemSol.power(ip2) - pzem.power(ip1); delay(10);
Serial.println("___________________________________________________________");
Serial.print("Mesure Surproduction Solaire : "); Serial.println(HeatWatt); Serial.print("PWM = "); Serial.println(PWM);
if (HeatWatt > 80 & HeatWatt <= 300) {PWM=PWM+2;}
if (HeatWatt > 300) {PWM=PWM+4;}
if (HeatWatt > 2700 ){PWM = 240;}
if (HeatWatt < 0 && HeatWatt >= -150) {PWM=PWM-2;}
if (HeatWatt < -150 && HeatWatt >= -300) {PWM=PWM-3;}
if (HeatWatt < -300 && HeatWatt >= -500) {PWM=PWM-4;}
if (HeatWatt < -500 && HeatWatt >= -1000) {PWM=PWM-8;}
if (HeatWatt < -1000){PWM =PWM - 10;}
if (HeatWatt < -2500){PWM = 0;}
if(PWM>240){PWM=240;};if(PWM<0){PWM = 0;}
if (PWM!=PWMrec){analogWrite(3,PWM);}
PWMrec = PWM;
}
// Routine Lecture des données PZEM
void ReadData (){
// Lecture Mesure Solaire
Serial.print("Mesure Solaire : ");
psol = pzemSol.power(ip2);if(psol<20){psol=0;};if(psol >= 0.0){ Serial.print(psol);Serial.print(" WSol - ");} delay(10);
esol = pzemSol.energy(ip2);if(esol >= 0.0){ Serial.print(esol);Serial.println(" WhSol");} delay(10);
// Lecture Mesure Réseau
Serial.print("Mesure Maison : ");
p = pzem.power(ip1);WattExcess=psol-p; if (WattExcess < 0) {WattExcess = 0;} ; p=p-psol; if(p<0){p=0;}; Serial.print(p);Serial.print(" W - "); delay(10);
e = pzem.energy(ip1); Serial.print(e);Serial.print(" Wh"); delay(10);
Serial.println();("___________________________________________________________");
}
// Routine Envoi Data GW
void SendMySensors () {
// Données Réseau
send(msgWatt.set(p, 1)); delay(10); send(msgKwh.set(e/1000, 1)); delay(10);
// Données Solaire
send(msgWattSol.set(psol, 1)); delay(10);send(msgKwhSol.set(esol/1000, 1)); delay(10);
// Donnée Surproduction
send(msgWattExcess.set(WattExcess, 1));
DataTemps = millis();
}