Réalisez un Routeur Solaire pour gérer la surproduction

Version V2
Remplacé par la version V8
Pilotage depuis un SmartPhone ou un PC (navigateur Web)

Avec les panneaux solaires, dans une installation en autoconsommation, il est fréquent d’avoir de la surproduction d’énergie dont on ne sait que faire et qui est envoyée sur le réseau public. Une solution pour stocker cet excédent est de l’envoyer au chauffe-eau électrique.

Un rapide calcul, pour un chauffe-eau de 200l, équipé d’une résistance chauffante de 2400W, montre qu’il faut près d’une heure de chauffe, soit 2.3 kWh pour monter l’eau de seulement 10°.

200l*1000gr*4.18Joule*10°/3600s=2322 Wh = 2.3kWh

Chaque jour, c’est plusieurs kWh qu’il faut fournir au chauffe-eau. Pour un système classique, on effectue cela de nuit à un tarif réduit. En cas de surproduction dans la journée des panneaux photovoltaïques, il faut envoyer cette énergie au chauffe-eau. C’est une superbe batterie de stockage d’énergie. Mais il est fréquent de n’avoir que quelque centaines de watts disponibles et non pas la puissance de 2400 w que demande la résistance du chauffe-eau en branchement classique.

Exemple de régulation. Puissance consommée -16W, ouverture 76 % du temps vers le chauffe-eau.

Tableau des Versions

Différentes versions de routeur ont été décrites :

VersionMesure courant / puissanceActionneursModulaireDomoticzMQTT / Home AssistantDescription
1Sonde AmpèremétriqueRelaisNonOuiNonRouteur Solaire. Mesure de Puissance avec un ESP32
2Sonde AmpèremétriqueTriac + RelaisNonOuiNonRéalisez un Routeur Solaire pour gérer la surproduction
3.04_UxISonde AmpèremétriqueTriac + RelaisOuiOuiOuiU x I : Routeur Solaire pour gérer la surproduction photovoltaïque
3.10 LinkyLinkyTriac + RelaisOuiOuiOuiRéalisez un Routeur Solaire avec un Linky

Ici, nous allons réaliser un système qui envoi uniquement la puissance excédentaire au chauffe-eau en surveillant la puissance qui entre ou sort de la maison afin qu’elle soit nulle à l’aide d’une sonde de courant branchée derrière le compteur. Ce système ne fonctionne que pour les chauffe-eaux électriques classiques dans lesquels se trouve une résistance électrique et un thermostat électro-mécanique pour contrôler la température.

Schéma du routage de l’énergie excédentaire vers un Chauffe-Eau

Le routeur solaire agit comme une vanne qui s’ouvre pour laisser passer la surproduction en surveillant le courant en entrée de la maison afin qu’il soit nul.

Matériels

Pour réaliser l’ensemble, il faut les matériels suivants:

Capteur du Courant

Transformateur de courant 100A/50mA

Pour mesurer le courant en entrée de la maison, on utilise un capteur de courant dans lequel on fait passer le fil de phase du secteur. En sortie, agissant comme un transformateur, il fournit un courant identique, mais 2000 fois plus faible. Ce courant est envoyé aux bornes d’une résistance et nous allons mesurer la tension générée.

Il existe différents modèles suivant le courant Max que l’on souhaite mesurer. La version 100A est adaptée à un domicile ayant une puissance max délivrée de 12kVA. On la trouve en Chine chez Aliexpress.

Capteur de la tension

Pour savoir si de l’énergie rentre ou sort de la maison, il faut de même mesurer la tension électrique. C’est en comparant la phase du courant I et de la tension U que l’on connaitra le sens du transfert d’énergie.

Transformateur 220V/6V (Aliexpress)

Pour mesurer la tension, on utilise un transformateur bobiné classique abaisseur de tension qui nous isole du secteur. Par exemple un 230v/6v. Il faut un modèle le plus petit possible, on ne prélève aucune puissance. Cela n’est plus très facile à trouver. Un transformateur, dit de sonnette, peut faire l’affaire.

Micro-Calculateur ou Microcontrôleur

ESP32 – Development Board

Pour effectuer les mesures de tension et les calculs, L’ESP32 est un microcontrôleur adapté à notre besoin. Il comprend :
– des entrées analogiques pour mesurer des tensions,
– des entrées/sorties numériques pour actionner un relais ou un triac si besoin,
– une bonne capacité de calcul
– une liaison WIFI pour faire du reporting à distance sur une page web ou un système de domotique.

Gradateur – Triac

Gradateur avec détection de zéro

Pour ajuster le courant à injecter vers le chauffe-eau, on utilise un gradateur de chez RobotDyn composé d’un Triac et d’un système de détection du passage à zéro de la tension. Il existe en 16A ou 24A et est disponible chez Aliexpress.
Attention, le refroidisseur d’origine du Triac est sous-dimensionné sachant qu’il devra fonctionner pendant plusieurs heures. Rajoutez des éléments d’aluminium ou remplacez-le par un plus-grand. De même les 2 pistes entre le connecteur 230V et le Triac sont un peu faibles. On peut, en rajout, souder une couche de fil de cuivre.

En plus d’un gradateur, on peut rajouter en option 1 ou 2 relais solide pour actionner d’autres dispositifs si besoin.

Présentation de la réalisation matérielle

Mesure Courant et Tension

La mesure des 2 tensions représentantes du courant et le la tension secteur se fait par les entrées analogiques de l’ESP32. Ces entrées acceptent une tension positive entre 0 et 3.3V et numérisent la valeur sur 12 bits, valeurs entre 0 et 4095. Pour s’adapter à la dynamique d’entrée, on crée une référence de tension au milieu de la plage à 1.65V =3.3V/2 à laquelle on rajoutera la tension en sortie du transformateur et de la sonde de courant.

On prélève le 3.3V de l’ESP32 qui en passant par un pont de 2 résistances (R6 et R7) de 4700 ohm connecté à la masse nous fourni au milieu une référence de 1.65V. Pour éviter du bruit de mesure, un condensateur de 470uF (C2) filtre le 3.3V et un autre de 10uF (C1) filtre le point milieu à 1.65V.

Afin de ne pas dépasser les 3.3V crête à crête des signaux à mesurer, ou 1.65V crête, on se fixe une limite de +-1V efficace maximum.

Pour la sonde de courant avec 80A et une résistance de 24 ohm , on arrive à peu près au 1V crête à crête.

24*80A/2000=0.96V efficcace ou 1.36V crête à crête.

Ainsi la tension à mesurer sera dans la plage 1.65V +/- 1.36V.

Chez moi, avec un abonnement de 12KVA, je ne devrai pas dépasser les 60A.

Pour la mesure de tension, il faut mettre un pont de résistances (R4 et R5) pour abaisser le 6V autour de 1V efficace et avoir ainsi un signal à mesurer entre 1.65V +/- 1.41V. Si la courbe rouge de tension sur l’affichage est plate en haut et en bas, il faut augmenter R4 ou diminuer R5.

Raccordement à l’ESP32

Schéma électrique – ESP32 Development Board 2*19 pins

Le jeu de piste avec ces cartes qui intègrent un ESP32, est de trouver les GPIO disponibles et non utilisés pour la programmation Flash etc.
Dans notre cas, on mesure les tensions suivantes:
– GPIO 35 : la tension de référence à 1.65V en théorie.
– GPIO 32 : la tension en sortie du transformateur réduite par le pont de résistances R4 et R5
– GPIO 33 : la tension représentant le courant à mesurer

2 LED sur les GPIO 18 et 19 clignotent toutes les 2s. La jaune si on consomme du courant, la verte si on fournit du courant, car nous sommes en surproduction.

La commande du gradateur se fait via le GPIO22 et la lecture de l’impulsion du passage à zéro « Zero Crossing » de la tension secteur sur le GPIO23. Cette impulsion est essentielle pour se synchroniser avec le secteur.

En option, on peut par exemple, connecter un relais solide pilotable en 3.3V au GPIO5.

Timing

Ouverture du Triac 50% du temps

Le signal « Zero Crossing » sert de synchronisation au micro-contrôleur pour ouvrir le Triac entre 0 et 100% du temps d’une demi-période de 10 ms suivant le niveau d’énergie à transférer au chauffe-eau.

Mesure

La mesure des 2 valeurs représentant la tension et le courant prend environ 150uS. En pratique, on prévoit sur une période de 20ms (1/50Hz) de prélever 100 couples de valeurs, ce qui donnera une bonne description de la tension à priori sinusoidale et du courant souvent chahuté par les alimentations à découpage.

Formules de calcul des puissances

Pour bien caler dans le temps chaque mesure, on utilise le signal « Zero Crossing » du gradateur. Il passe à 1 durant 500 µs toutes les 10 ms lorsque la tension en 230v est nulle.

Toutes les 40 ms, on effectue :
– la mesure des tensions et courants durant 20ms
– une moyenne sur les dernières mesures pour lisser et réduire le bruit de mesure
– le calcul du courant efficace Ieff
– le calcul de la tension efficace Ueff
– le calcul de la puissance apparente Pva en kVA
– le calcul de la puissance active Pw en kW
– le cosinus φ

Calibration

Un calibrage préalable doit être fait pour définir la constante multiplicative kV dans le programme qui permet la conversion de la tension mesurée en binaire vers la tension réelle. De même pour le courant, la constante kI . Utilisez un voltmètre, une pince ampèremétrique ou votre compteur Linky pour la calibration.

Tension en sortie du transformateur trop élevée. Courbe plate en haut et en bas. Il faut augmenter R4 ou diminuer R5.

Suivant le transformateur servant à la mesure de tension, il peut y avoir des ajustements à faire. Si la courbe rouge de tension est une belle sinusoïde, ne changez pas R4 et R5. Si la courbe est plate en haut ou en bas, il faut augmenter R4 ou baisser R5.

Ensuite, commencer par mesurer avec un voltmètre la tension exacte du secteur. Par exemple, si la valeur affichée par le montage est 10% en dessous de votre mesure, augmentez la valeur de kV de 10%. Pour le courant, si vous n’avez pas de pince ampèremétrique, utilisez le Linky qui affiche la puissance apparente de VA. Comparez avec la valeur donnée par le système et augmentez ou diminuez en conséquence la valeur de kI.

La convention prise est d’avoir Pw positif si l’on consomme du courant en provenance d’Enedis et Pw négatif en cas de surproduction. En cas d’inversion du signe, tournez d’un demi-tour la sonde de courant sur la phase du secteur ou inversez les fils.

Taux de distorsion harmonique

À la demande de réalisateurs de la version 1 du système, j’ai rajouté le « Taux de distorsion harmonique ». THD. C’est un peu technique, vous pouvez sauter ce paragraphe….

THD + N pour la tension et le courant


Une tension et un courant idéals sont définis par une forme sinusoïdale parfaite à 50 Hz. En pratique, les appareils (type alimentations à découpage ou autres) introduisent des courants non sinusoïdaux générant de nombreuses harmoniques à 100 Hz, 150 Hz, 200 Hz, 250 Hz……et perturbent le fonctionnement des générateurs, transformateurs etc. Le THD va mesurer l’énergie contenue dans les harmoniques (Énergie totale – Énergie du signal à 50 Hz) par rapport à l’énergie principale et donner un pourcentage.
0% = une sinusoïde parfaite à 50 Hz,
100% = toute l’énergie se trouve dans les harmoniques

Ici, pour des simplicités de calcul, le résultat inclus l’énergie du bruit N en plus des harmoniques.

Exemples harmoniques

Ci-dessous trois cas de consommation/production. Le point de mesure est au niveau du compteur de la maison. Attention les échelles en verticale ne sont pas les mêmes. Les courbes sont toujours calées au max du graphique.

Le courant en vert est fortement non sinusoïdal, la consommation de 556 W est un exemple de ce qui tourne dans la maison avec probablement beaucoup d’alimentations à découpage qui génèrent cette forme de courant.

Pas de production photovoltaïque (PV) et pas de Triac

Triac = ouvert à 0%

PV = 0 W

I = 3.05A

PW = 556W

PVA= 752 VA

THDI+N= 42%

Le courant est très chahuté, mais l’échange avec le monde extérieur est faible 12W. La régulation par le Triac est en cours. C’est le résultat d’une consommation importante non sinusoïdale (2400W) et de la réponse des onduleurs.

Régulation avec le Triac pour amener autour de zéro la consommation en W

Triac = ouvert à 60%

PV = 2400 W

I = 2.12 A

PW = 12 W

PVA = 522 W

THDI = 99%

Ici en légère surproduction, le Triac est ouvert à 100%, il ne génère plus un courant non sinusoïdal, mais la consommation totale (2739W) non sinusoïdale de la maison se fait toujours sentir. Avec plus de charges résistives consommatrices comme du chauffage, on peut retrouver un sinus en courant comme la tension.

Surproduction

Triac = 100%

PV =3000W

I = 1.89A

PW = -261W

PVA = 469 VA

THDI+N = 53%

Fonctionnement

Toutes les 40 ms, la tension et le courant sont mesurés sur 100 points durant 20 ms. Si la puissance active Pw est orientée vers le réseau public (Pw<0), le triac s’ouvre un peu plus pour favoriser le transfert vers le chauffe-eau. Ceci est répété jusqu’à atteindre le point d’équilibre ou Pw est proche de zéro.

Si la température est atteinte, le thermostat du chauffe-eau coupe l’alimentation de la résistance. Dans ce cas, le routeur va ouvrir au maximum le triac, mais aucune surproduction ne sera consommé. La valeur Pw va devenir fortement négative, du niveau de la surproduction. À partir d’une certaine valeur, on peut activer (en option) un relais pour consommer sur un autre appareil. On l’arrête si la surproduction cesse. Attention d’avoir une différence entre le seuil d’enclenchement et d’arrêt supérieur à la consommation de l’appareil afin de ne pas avoir une entrée en oscillation du relais.

La nuit, si le niveau de chauffe du ballon n’est pas atteint, on laisse le relais Jour/Nuit d’Enedis prendre le relais (s’il est conservé) ou l’on peut programmer le routeur pour qu’il ouvre le Triac (23h à 4h en hiver). Le routeur prend l’heure sur le réseau internet. Attention, en cas de coupure d’internet, il risque de se désynchroniser. Mettre une plage horaire d’activation qui couvre l’horaire d’hiver et d’été pour éviter les mises à l’heure.

Dans le code source, vous trouverez un reporting vers le système Domoticz. C’est un exemple, en option, pour envoyer des données vers l’extérieur si besoin. Si vous ne le souhaitez pas, passez en commentaire la ligne 435 :
// SendToDomoticz();
Si vous l’utilisez, mettez à jour les paramètres de votre serveur Domoticz autour de la ligne 90.

Dans un souci de simplification, j’ai limité à l’essentiel les fonctionnalités. Les personnes à l’aise dans la programmation peuvent rajouter d’autres Triacs ou relais. De même, il est possible de rajouter une sonde de courant de 20A pour mesurer et afficher le courant envoyé au chauffe-eau.

Page Web

Le code installé sur l’ESP32 comprend un serveur Web qui permet d’afficher sur une page, les différentes mesures ainsi que les courbes de la tension et du courant durant une période de 20 ms. Il suffit de rentrer l’adresse IP de l’ESP32 dans le champ d’adresse de votre navigateur web.

Tableau des mesures
Courbes Tension et Courant vers le chauffe-eau

En mode « Auto », le système ajuste l’injection vers le chauffe-eau afin de ne plus envoyer de la surproduction vers le monde extérieur. On peut forcer, à la main, d’autres niveaux d’injection.

Il est possible d’afficher à distance ces mêmes informations sur un petit écran défini ici: https://f1atb.fr/affichage-a-distance-consommation-ou-surproduction-electrique/

Montage

Montage

Dans une boite d’électricien, on installe :

  • La carte ESP32 (Development Board 2*19 pins) chez Aliexpress ou plus rapidement une carte 2*16 broches ESP 32 Wroom chez uPesy.fr)
  • Une alimentation 230V – 5V 1A DC pour l’ESP32
  • Un transformateur basse tension 230V – 6V AC pour mesurer la tension (Aliexpress)
  • Un gradateur 16A ou 24A de RobotDyn suivant la puissance du chauffe-eau (Aliexpress)
  • Sonde de courant 100A/50ma (Aliexpress)
    • Résistances R1 et R2 : entre 470 et 820 Ω 1/4 ou 1/8W
    • R3 : 24 Ω 1/4W
    • R4 : 24000 Ω 1/4 ou 1/8 W (À ajuster suivant transformateur)
      • R5 : 4700 Ω 1/4 ou 1/8W (À ajuster suivant transformateur)
      • R6 et R7 : 4700 Ω 1/4 ou 1/8W
  • Condensateur C1 : 10μF ou plus en 12V ou plus
  • Condensateur C2 : 220μF à 470μF en 12V ou plus
  • 2 LEDS en face avant
  • Du fil de câblage et une plaque à trou pour le montage
  • Un fusible (option) pour protéger l’arrivée 230V

Raccordé à cette boite, on a la sonde de courant à placer autour du fil de phase du secteur à mesurer. Relier le blindage à la masse pour éviter de capter du bruit électrique.

Dans le schéma ci-dessous, on garde le contacteur Jour/Nuit et on installe en parallèle le routeur.
Remarque: le routeur ne coupe pas le neutre mais la phase uniquement.

Schéma de principe contacteur et routeur en parallèle

Code Source

L’ensemble du code est écrit en utilisant l’IDE Arduino. Il est injecté dans un premier temps par la liaison série, puis une fois en place, on peut le modifier si besoin par le WIFI comme décrit ici. Il faut dans les préférences de l’IDE, faire appel au gestionnaire de carte de « Espressif » qui développe l’ESP32. Allez dans Fichier / Préférences et mettez l’adresse : https://dl.espressif.com/dl/package_esp32_index.json

Le code source est composé de 3 fichiers installés dans le même dossier :
– le fichier principal SolarRouter_v2.ino
– le fichier PageWebb.cpp qui contient le code HTML et Javascript de la page web
– le fichier PageWeb.h de déclaration

Le code source est disponible ici:

Dezipper l’ensemble et ouvrez dans l’IDE Arduino (version 2.xx) le fichier SolarRouter_v2.01.ino.
Vérifiez que vous avez les bibliothèques installées sur votre IDE Arduino :
– RemoteDebug
– NTPClient
Pour la compilation du fichier SolarRouter_v2.01.ino, veuillez sélectionner la carte ESP32 Dev Module. Avec certaines cartes, si le téléversement du code dans l’ESP32 ne se fait pas, il faut presser sur le bouton boot au début de la tentative de téléversement.

Personnalisation

Il est nécessaire de modifier les premières lignes du code afin de donner à l’ESP32 les caractéristiques de votre réseau ethernet à la maison.

//WIFI
const char* ssid = "nom_du_reseau_wifi"; //Put here your WIFI SSID
const char* password = "12345678"; //Put here the WIFI password
// Set your Static IP address
IPAddress local_IP(192, 168, 0, 208);
// Set your Gateway IP address
IPAddress gateway(192, 168, 0, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8);    //optional
IPAddress secondaryDNS(8, 8, 4, 4);  //optional

À la première ligne, mettez le nom de votre réseau Wifi auquel l’ESP32 devra se connecter.

À la deuxième ligne, mettez le mot de passe de votre réseau Wifi.

Il faut ensuite donner une adresse IP (IPAddress local_IP) à votre ESP32 (c’est comme un numéro de téléphone). En général, les box internet ont un champ d’adresses dynamiques (qui peuvent changer à tout moment) qu’elles attribuent lorsque que quelqu’un se connecte au WIFI. Si c’est votre smartphone, c’est parfait, vous ne cherchez pas à communiquer avec lui. Pour l’ESP, il faut lui attribuer une adresse fixe. En allant faire un tour auprès de votre box à la rubrique réseau / DHCP, vous trouverez le champ des adresses dynamiques. Par exemple, souvent les Livebox d’Orange attribuent des adresses dynamiques DHCP entre 192.168.1.10 et 192.168.1.150. Il vous reste alors un champ libre pour attribuer vos propres adresses entre 192.168.1.151 et 192.168.1.253. Souvent les .254 et .255 sont réservés à autre chose. Vous pouvez ainsi donner comme adresse 192.168.1.200 à l’ESP32 si aucune autre machine sur le réseau occupe déjà cette adresse.

IPAddress gateway correspond à l’adresse IP de votre box. C’est elle qui fait la passerelle (gateway) avec le monde extérieur. Chez Orange, c’est en général 192.168.1.1. Chez Free, c’est plutôt 192.168.0.254. Les trois premiers chiffres 192.168.0 ou 192.168.1 doivent être les mêmes pour la box et votre ESP. C’est ce qui est traduit par le masque subnet (255,255,255,0) qui dit que les 3 premiers chiffres sont fixes sur le réseau et le dernier peut changer d’une machine à l’autre.

Toutes ces adresses sont au format IPV4, ancien format bien pratique mais qui sature et est en cours de remplacement par IPV6. Si vous avez un PC sous windows, tapez cmd dans le moteur de recherche en bas, puis dans la page à fond noir vous tapez ipconfig . Vous en saurez un peu plus sur votre réseau et l’adresse IP de votre PC

Les primaryDNS et secondaryDNS correspondent aux « Domain Name Server » ceux qui veut dire les serveurs d’annuaires. Quand vous tapez une adresse http://ToTo.com, ces serveurs convertissent le nom en adresse IP, seule compréhensible par les machines. Ainsi votre ESP quand il doit chercher l’heure chez « fr.pool.ntp.org », il peut trouver un serveur. Ne les changé pas.

Forçage de nuit

Le code comprend un forçage de nuit de 23h à 4h. Si vous voulez le retirer, passez le en commentaire en mettant en début de ligne //

//if (hour >= 23 || hour <= 4) {               //Force water Heater ....
//    ModeHeater = 5;
//    retard = 0;
//    retardF = 0;
//  }
// if (LastHour == 4 && hour == 5) { ModeHeater = 0; }  // Back to Automatic mode

Bugs Soft

Attention, si vous n’arrivez pas à communiquer entre votre PC et l’ESP32, c’est qu’il vous manque le driver pour l’interface USB. En général, c’est le CP2102 qui se trouve sur la carte ESP32. De nombreux Tutos sur internet expliquent comment l’installer. Exemple: https://techexplorations.com/guides/esp32/begin/cp21xxx/

L’IDE Arduino va vous demander un mot de passe lors de la compilation. Répondez n’importe quoi, 1 lettre minimum.

Parfois avec l’IDE Arduino en fin de transfert, l’icone reste jaune et vous n’avez plus la main. Fermez l’IDE et le relancer.

Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include <hwcrypto/sha.h>
Avec un editeur de texte, ouvrez le fichier dans vos bibliothèques Arduino C:\Users\Utilisateur\Documents\Arduino\libraries\RemoteDebug\src\utility\Websockets.cpp
Le début de l’adresse peut changer suivant l’utilisateur. Retrouvez le dossier Arduino pour localiser le fichier dans les sous-dossiers.

A la ligne 42, remplacez :
#include <hwcrypto/sha.h>
par
#include <esp32/sha.h>

Ne me demandez pas pourquoi, sur mon PC de bureau, je n’ai pas besoin de faire cette modification, sur mon PC portable, j’ai besoin.

Diagramme fonctionnel

Le gradateur avec le signal Zero Crossing toute les 10ms, permet de synchroniser l’ensemble en activant une interruption sur l’ESP32. Un timer fourni une interruption interne toute les 100μs permettant de générer un retard de 0 à 10ms par pas de 100μs pour déclencher l’ouverture du triac à l’instant défini par le logiciel.

Toutes les 40ms et durant 20ms, 100 valeurs de tensions et 100 valeurs de courants sont prélevés et stockés. Ensuite, les calculs de puissance sont effectués et peuvent être envoyés au client web qui les demande.

Présentation du logiciel

Heure de la douche

Maintenant que vous avez je l’espère bien compris le fonctionnement, vous remarquerez qu’il faut prendre sa douche le matin les jours de grand soleil afin de profiter de la surproduction à midi.

Exemple de routage

Dans cet exemple, il y a une légère surproduction. L’ouverture du triac vers le chauffe-eau est de 76% du temps. Le système se régule pour avoir une puissance échangée avec le réseau public autour de 0 (ici -16W). Sur une durée de sinusoïde de 20 ms, on a des périodes en orange où l’on consomme (produit U*I >0) sur le réseau public et des périodes en vert (produit U*I<0) où l’on injecte sur le réseau. Le somme des 100 mesures du produit U*I sur la période de 20 ms donne un résultat proche de zéro (-16 W). Par contre, pour le calcul de la puissance apparente qui est le produit de la tension et du courant efficaces qui ne tient pas compte du signe (voir formules ci-dessus), on a une valeur importante (776 VA).

Cette courbe est chahutée pour 2 raisons :
– le triac n’est ouvert que 76% du temps. Dans une demi-période de 10 ms, on envoie du courant au chauffe-eau en dents de scie (voir courbe ci-dessus) ce qui se traduit à l’entrée de la maison par des phases de consommation et d’injection suivant la réponse des onduleurs. Avec un bilan de puissance active (W) proche de zéro
– nombre d’appareils (comme les chargeurs, les alimentations d’appareils électroniques.) ne consomment pas un courant sinusoïdal et cela ressort plus lorsqu’il n’y a pas une grosse charge résistive qui consomme.

Votre fournisseur d’électricité vous facture en fonction des W ou Wh et non pas sur le VA (puissance apparente).

Sécurité

En travaillant sur ce projet en 230V, vous acceptez d’assumer la responsabilité de votre propre sécurité et de prendre toutes les précautions nécessaires pour éviter les accidents électriques.

Responsabilité

Articles sur le photovoltaïque

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

871 réponses

  1. jean-francois FEVRIER dit :

    Bonjour André,
    félicitations pour vos connaissances. j ai décidé de construire votre routeur. J ai un pb. La tension mesurée U et affichée sur l’interface web n’est pas stable. Au démarrage, elle est de 290V puis diminue (au fur et a mesure du rafraichissement de lécran) jusqu’à 75V environ).
    avez vous une idée de l origine du PB?

    Quelles sont les PIN sur l ESP32 non utilisées qui doivent être reliées au GND?
    merci pour votre réponse

    • F1ATB André dit :

      Je ne comprends pas pourquoi vous avez une chute de tension.
      J’espère que votre transformateur ne sort pas trop de tension et que l’on dépasse la plage 0v à 3.3V en entrée des GPIO
      Il n’y a pas de PINS/GPIO à mettre à la masse à part les Gnd (Ground).
      Cdlt

      • Février jf dit :

        merci André. l une des pins GND n était pas reliée avec les autres. depuis, U est stable. !
        merci pour votre réponse rapide.

        • F1ATB André dit :

          Très bonne information. Quelqu’un a déjà eu ce problème.

          • pat34 dit :

            Et j’ai toujours le problème !!!! J’ai refait le montage en « volant » , remplacer l’esp32, le transfo … toujours la tension qui passe de 220V à 75V … vérifier toutes les GND … raccorder toutes les GND entre elles.
            Malheureusement je dois faire une grossière erreur de câblage !!!!
            Si Jean Francois peut donner un peu + d’info sur son PB …
            Merci de votre aide
            pat34

          • BIENVENU N dit :

            bonjour, j’ai eu ce problème. L’alimentation USB (à découpage) perturbe le fonctionnement du devboard si elle est proche. Je suis passé en alimentation linéaire (7805) et le problème a disparu.

  2. pascal dit :

    Bonjour André,
    Comme tout le monde je tiens à vous féliciter pour vos travaux et vos explications.
    J’ai juste un blocage avec le bug que vous citez, je l’ai sur mon PC de bureau et mon portable.
    Par contre je ne trouve pas cette fameuse ligne 42
    #include
    à remplacer par
    #include
    NB: je suis novice en Arduino et suis aussi un peu perdu dans tout ce qui est communication, comment trouver l’adresse IP de la carte ESP32?
    Merci d’avance

    • F1ATB André dit :

      La modification à apporter n’est pas dans le programme. Il faut pour trouver le fichier à modifier allez dans le dossier Documents\Arduino\libraries\RemoteDebug\src\utility\Websockets.cpp et modifier le fichier websockets.cpp
      Pour l’adresse ip il faut aller dans votre box internet, voir la zone DHCP qui gère les adresses IP de votre réseau à la maison.
      Si vous avez une box orange,vous pouvez mettre par exemple :
      IPAddress local_IP(192, 168, 1,200);
      // Set your Gateway IP address
      IPAddress gateway(192, 168, 1,1);

      • Pascal dit :

        Super ! merci pour votre réponse, je n’aurais jamais trouvé tout seul 🙂
        bonne journée à vous

  3. FEVRIER JF dit :

    Bonjour André,
    autre pb que je rencontre , l interface web indique que le routeur fonctionne en mode forcé à 100% en permanence. Lorsque je coche la boite de dialogue »AUTO », celle ci reste cochée jusqu’au rafraichissement de l’écran suivant , puis, revient automatiquement en mode 100%.
    Pensez vous que cela puisse venir du fait que l’esp32 n’arrive pas à récupérer l’heure sur internet?
    Dans Votre script , je n ai pas vu trace de la bibliothèque « Time.h ». Est-ce un oubli? faut il rajouter la ligne : #Include Time.h ??
    (Je n ‘y connais pas grand chose en programmation)

  4. Ludo dit :

    bonjour Mr André
    j’ai regardé la vidéo ainsi que la liste du matériel et je ne comprends pas où est passé la pei les résistances et les condensateur ? comment faire

    • F1ATB André dit :

      Non, je ne connais pas ce produit. Je ne comprends pas le fonctionnement. Comment récupère-t-on les données. Je ne vois aucune explication.
      Cdlt

      • picard dit :

        Bonjour,
        Ce produit est utilisé par le Profs solaire pour son routeur solaire. j’ai un fichier pdf si vous voulez des infos.
        Voir la vidéo du prof solaire pour une explication du fonctionnement.
        J’ essai en vain de le faire fonctionner….

  5. Jean-Michel Marchand dit :

    bonsoir
    ,’ai trouvé ça sur le nrt (Youtube)
    https://www.youtube.com/watch?v=IwiVro6u89Q&list=PL1ajbYcl-hyfKT2c4rnTnyfmMDqsaN64f&index=8
    Cordialement
    JMM

  6. Laurent dit :

    Bonjour André.
    Je possède un cumulus thermodynamique, et j’ai cru comprendre que le système étant différent d’un chauffe-eau classique, je ne pourrais pas bénéficier des avantages du routeur solaire. Vous me le confirmez ?

    Merci 🙂

    • F1ATB André dit :

      Oui, mon projet de routeur n’est pas adapté aux cumulus thermodynamique.
      Cdlt

      • Nutta dit :

        Quoiqu’il me semble que les cumulus thermodynamique possèdent une résistance chauffante d’appoint – peut-être pas tous ?

  7. Damien dit :

    Bonsoir
    Aie aie aie … mon signal n’est vraiment pas joli: https://photos.app.goo.gl/qUSPiCyYvwML8taM8
    Je n’avais pas de résistance à 47kOhm du coup j’ai fait un pont avec 68kOhm et 10kOhm. Est ce que ca vient de la ? Pourquoi la sinusoïdale de la tension est elle écrasée comme ça ?

  8. jacolet dit :

    bonjour a la compilation du programme il indique une erreur
    C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino: In function ‘void setup()’:
    C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:382:18: warning: iteration 100 invokes undefined behavior [-Waggressive-loop-optimizations]
    sinus[angle] = int(30000 * sin(angle_rad));
    ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:380:29: note: within this loop
    for (int angle = 0; angle <= 100; angle++) {
    ~~~~~~^~~~~~
    Le croquis utilise 855405 octets (65%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.
    Les variables globales utilisent 53168 octets (16%) de mémoire dynamique, ce qui laisse 274512 octets pour les variables locales. Le maximum est de 327680 octets.
    qu'el est t'il ?

    • F1ATB André dit :

      Ceci est uniquement un avertissement du compilateur qui trouve 100 boucles suspectes. Les avertissements sont donnés ou pas suivant vos paramètres dans les préférences.
      Cdlt

      • Samuel BURG dit :

        C’est un avertissement justifié,
        le bon code est :
        …/…
        for (int angle = 0; angle < 100; ++angle)
        …/…
        ce qui permet au compilateur de faire une meilleur optimisation.

        En outre utiliser un int32 pour stocker un float avec rescale 30k n'est pas utile en architecture 32bits, autant utiliser directement un array de float32, ou alors passer sur un array de uint16_t et faire un rescale en 64k-1.

        Un rescale de 30k (ou 32k-1) se serrait pour un int16_t.
        Cette optimisation mémoire ne serait utile que pour un vrai Arduino ou un ancien ESP plus limité en Ram que un ESP32.

        • F1ATB André dit :

          Admiratif devant votre maitrise du code pour optimiser la compilation. L’idée de base était d’optimiser le temps de calcul. Un développement en série pour calculer un sinus est très long. Créer une table de sinus optimise le temps. Je retiens pour la version v3 en préparation.
          Cdlt

  9. JACOLET dit :

    Bonjour, chez moi c’est la même chose et je pense que c’est le réseau qui est comme ça. La mesure direct sur 6volts alternatif fais aussi des plats, mais en un peux mois fort.

  10. JACOLET dit :

    Dans le code routeur solaire v2.0 a quelle ligne faux t’il ajouter ajouter les donné personnel ssid, mp wifi et adresse IP du module. je suis un peux perdus merci

  11. Faure dit :

    Bonjour,
    merci pour pour toute ces explications. tout est câblé, vérifié, mais je peine a avoir l’interface web pour faire mon diagnostic en tension et courant… et sans cela. je ne peux avancer (enfin, si j’ai bien tout compris). svp, le programme est-il directement utilisable ? l’adresse IP est en dur 192.168.0.208 mais dans chrome comme Mozilla pas de réponse. y a-t-il un élément qui m’échappe ? (je connais les langage python, matlab, fortran, je comprends le C++ mais alors les interfaces web…je n’y connais rien du tout !)

    • F1ATB André dit :

      Il vaut mieux mettre l’adresse IP en dur, mais cela dépend de votre box. Il faut trouver le gateway (l’adresse IP de la box) et attribuer une adresse en dehors du champ des adresses automatiques (DHCP) que distribue la box.
      Si vous avez une box orange. En général le gateway c’est 192.168.1.1 et vous pouvez mettre l’adresse IP pour l’ESP : 192.168.1.200
      Si vous n’y arrivez pas, je vous le ferai en prenant le contrôle de votre PC à distance.
      Cdlt
      André

      • Faure dit :

        fait ! merci. (j’ai honte). par contre mon transfo 230-6V me délivre du 7.8V environ (je l’avais mesuré), j’ai des tensions écrêtée au possible que je vois bien maintenant ! je me lance dans les modifs de résistance. merci encore pour tout !

        • Nutta dit :

          Le mien (6V) sort du 11V à vide – j’ai dû également fortement atténuer le signal.

  12. JACOLET dit :

    après la modification de la ligne 42 esp/sha.h il mes ala compilation ceci C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino: In function ‘void setup()’:
    C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:379:18: warning: iteration 100 invokes undefined behavior [-Waggressive-loop-optimizations]
    sinus[angle] = int(30000 * sin(angle_rad));
    ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:377:29: note: within this loop
    for (int angle = 0; angle <= 100; angle++) {
    ~~~~~~^~~~~~
    In file included from c:\Users\jacol\OneDrive\Documents\Arduino\libraries\RemoteDebug\src\utility\WebSockets.cpp:42:
    C:\Users\jacol\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8/tools/sdk/esp32/include/mbedtls/port/include/esp32/sha.h:20:2: warning: #warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead [-Wcpp]
    #warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead
    ^~~~~~~
    c:\Users\jacol\OneDrive\Documents\Arduino\libraries\SolarRouter_v2.01\PageWeb.cpp: In function 'char* getPageWeb()':
    c:\Users\jacol\OneDrive\Documents\Arduino\libraries\SolarRouter_v2.01\PageWeb.cpp:119:5: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    "\r »;
    ^~~~~~~~~~~~~~~~~~~~~~je ne vois plus se qu’il faux faire . Merci

    • F1ATB André dit :

      Ce ne sont que des alertes et pas des bugs.
      Allez dans Fichier/Préférences et à la ligne Avertissement du compilateur, mettez ‘none’. Ainsi, vous ne serez plus embêté par ces messages verbeux de compilation.
      Cdlt

      • JACOLET dit :

        parfais Merci

        • Samuel BURG dit :

          … les charactères inf/sup sont interprétés comme des balises … ça a coupé le texte de mon précédent post…

          #include « sha/sha_parallel_engine.h »

  13. Fevrier dit :

    Bonjour,
    Après avoir longtemps galéré pour faire fonctionner le routeur, il fonctionne enfin. Je souhaitais donc vous faire un retour d expérience afin que les galères puissent servir..
    Un grand merci à André pour sa disponibilité et sa volonté de faire partager son savoir.
    1) ayant un PC sous windows7, j ai utilisé une version d Arduino ide plus ancienne que celle qui tourne sous Windows 10, mais ça fonctionne.
    2) pour ceux qui sont pourvus d une box bouygues, l adresse IP de la Gateway est celle de la box à savoir:192.168.1.254. L adresse IP de la carte Arduino est 192.168.1.208 (et non pas 192.168.0.208).le masque de sous réseau est 255.255.255.0
    3) une fois le soft d André télé versé dans la carte, j avais des reboot réguliers de celle ci, toutes les 30 sec. J ai cherché pendant des jours, sans trouver l origine du pb. En désespoir de cause, j ai désinstallé puis, ré installé Ide Arduino (Méme version que la précédente). Nouvel essai et apparition du message d erreur s #include Sha etc lors de la compilation,… Alors que je ne l avais pas la première fois. Re désinstallation, puis Re installation du soft, compilation Ok télé versement Ok ( en étant obligé d appuyer sur le bouton reset de la carte).
    Test un situ et la miracle, ça fonctionne à merveille.
    Conclusion : ide Arduino est un formidable outil mais qui semble peu stable puisque des mêmes causes ne donnent pas les mêmes consequences… Enfin, c est come cel que je l interprète. Donc, si vous avez des pbs, essayez de désinstaller/réinstaller ide Arduino et voyez si ça change qque chose….

    • F1ATB André dit :

      Merci pour votre retour d’expérience.
      Cdlt
      André

    • JACOLET dit :

      Bonsoir, il faux changer l’adresse ip dans de la ligne 38 par ceci , L adresse IP de la carte Arduino est 192.168.1.208 (et non pas 192.168.0.208). ?

      • Février dit :

        pour la Bbox, les adressés IP du réseau local vont de 192.168.1.1 jusqu’à 192.168.1.254.
        donc le routeur doit avoir une adresse IP commençant par 192.168.1.xx. après, cela dépend de chaque réseau local

  14. F5OYK Didier dit :

    À André
    Le routeur est programmé sans encombres, monté, calibré. Pour info, j’ai dû diminuer R5 à 2k7.
    Les variables dans le programme :
    Kv 0,2386
    Ki 0,717.
    Les essais sont concluants. Merci encore
    73

  15. Stéphane Charrier dit :

    Bonjour André.
    J’ai remarqué une chose hier soir, à 21h il n’y avait plus de production solaire, j’entendais par intermittence (toutes les 30 secondes environ), la résistance de mon chauffe eau résonnait 1s environ. On dirait que le triac s’ouvre brièvement et régulièrement. Rien d’anormal sur la page web, juste une rapide élévation de la puissance et ça redevient normal. Je ne vois pas de surconsommation dans mon suivi. Est ce normal ?

    • Samuel BURG dit :

      Bonjour,

      Ceci me fait évoquer un défaut de gestion des threads dans le programme.
      Toutes les 30 sec le ESP32 fait une interaction avec le WiFi et les envois vers Domoticz.
      Comme un seul core du ESP32 est utilisé il n’est pas disponible à ce moment pour traiter le contrôle du TRIAC et le TRIAC se ferme en fin de cycle.
      Quand le core du ESP32 est de nouveau dispo il reprend le contrôle du TRIAC et le rouvre.
      D’où la résonance dans le chauffe eau toute les 30 sec.

      Pour tester cette hypothèse, désactivez tous le code de gestion exécuté toutes les 30 sec et vérifier alors le comportement du chauffe eau.

      L’autre solution plus lourde est de ne pas utiliser « loop() » dans le programme mais de faire deux boucles, une sur chaque core 0 et 1 du ESP32, avec une des deux dédiée au TRIAC, l’autre à la gestion du WiFi, Domoticz etc…
      https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/
      (attention au Race Condition !!)

      • F1ATB André dit :

        Ce sont des questions que je me suis posé, mais une lampe en sortie du Triac fonctionne bien en continu. Toute l’activité du Triac est basée sur des interruptions et non pas dans le flot de la boucle loop.
        Je regarderai encore avec un oscilloscope.
        Cdlt
        André

  16. Samuel BURG dit :

    Bonjour,

    C’est un superbe projet !
    Très bien expliqué !

    Je vais l’utiliser pour faire un routeur solaire sur mon installation.

    J’ai repris le code pour faire un refactoring et je le posterais dès qu’il serra propre.

    Je suis aussi en train de rajouter un export MQTT avec auto-discovery pour l’intégration Domoticz/HomeAssistant.

    à bientôt

  17. Philippe dit :

    Bonjour, projet intéressant, je cherchais ce genre de solution d’optimisation d’autoconsommation, toutefois un point technique me gène à propos du variateur d’énergie qui fonctionne par alternances entières. Ça signifie que les micro-onduleurs doivent fournir une puissance maxi sur ces alternances et ensuite plus rien sur les alternances non alimentées. Les panneaux ne pouvant pas fournir les pointes de puissance, il faut probablement un stockage dans les micro-onduleurs, ou ajouter des condensateurs de stockage sur les panneaux pour fournir les alternances qui sont chargées ?
    De mon coté je cherchais une solution avec du PWM en AC afin d’avoir une consommation sinusoïdale. Il est probable que les micro-onduleurs n’aient pas de condensateur réservoir suffisant sur le bus DC pour fournir une telle consommation hachée ? D’où peut-être des problèmes possibles avec certains produits ?
    Avez vous des commentaires ?

    • F1ATB André dit :

      On travaille au niveau de la demi alternance du secteur de 10ms. Par exemple, après le passage à zéro de la tension, pendant 4ms le Triac ne conduit pas, puis durant les 6ms suivante, le triac conduit l’énergie vers un chauffe-eau par exemple. Puis, même scénario pour les 10ms suivantes.
      Cdlt
      André

  18. Duquenne dit :

    Bonjour Monsieur,
    Je vous remercie pour ce magnifique routeur, dont le fonctionnement est si bien expliqué. Je me suis lancé dans la réalisation, aujourd’hui
    je viens de finir le routeur et de le brancher à un moment où mes panneaux solaires produisaient peu environ 300W, ceci avec une intensité de l’ordre de 1A, d’après le petit compteur de mon installation. J’étais néanmoins en surproduction avant le branchement du routeur et quand je l’ai branché (mis sur ON le disjoncteur de 20A du chauffe-eau et du routeur) j’ai lu sur la page web une intensité de l’ordre de 100A et sur le Linky, j’ai vu que je consommais environ 1200VA, ce qui correspond aux 1200W de la résistance du chauffe eau. A un autre moment j’ai même lu sur la page web une tension U de plus de 500V. J’ai remis sur OFF le disjoncteur et coupé l’alimentation du routeur. J’ai dû faire une grossière erreur, mais je ne parviens pas à la trouver. Voyez-vous d’où peut venir le problème ? Merci pour l’attention portée à ce message.
    Bien cordialement
    E.Duquenne

    • F1ATB André dit :

      Bonjour
      Dans un premier temps, branchez le routeur mais sans charge en sortie, afin de faire une première vérification et calibrer la tension puis le courant.
      Si vous avez 500V d’affiché, cela veut dire que votre transformateur sort plus que 6V. Il faudra reprendre les valeurs de R4 et R5 afin d’avoir une courbe rouge qui ressemble à une sinusoïde puis éventuellement retoucher dans le programme le coefficient multiplicatif afin qu’il affiche la même tension secteur que vous affiche un voltmètre ou le Linky.
      Ensuite calibrez kI pour avoir une puissance qui correspond à ce que vous pouvez mesurer. Ensuite branchez le chauffe eau.
      Cdlt
      André

      • Duquenne dit :

        Merci beaucoup pour votre réactivité, votre analyse et vos conseils, demain matin, je vais suivre pas à pas vos conseils, en espérant résoudre le ou les problèmes. Bien cordialement.
        Eric

        • Duquenne dit :

          Bonjour Monsieur,
          depuis ce matin, j’ai résolu quelques problèmes de soudures, j’ai débranché le chauffe-eau, j’ai rajouté des résistances en série pour passer de 24000 ohms à 28200 ohms sur la R4 car j’ai effectivement 7V au transfo qui était pourtant vendu pour fournir 5V. (R4=R5(Ue-Us)/Us où Ue=7V ici, Us=1V) . Mais j’ai encore un problème, j’obtiens bien une sinusoïde rouge au dessus de l’axe noir et quand elle passe sous cet axe noir, elle devient horizontale. La formule que j’ai obtenue est-elle fausse ? Mes souvenirs de physique remontent à plus de 30ans…
          D’autre part, je n’avais pas de résistance de 24ohms en R3, j’ai mis une 22ohms. Mais la courbe verte que j’obtiens est très plate et occupe la bande supérieure de l’écran sur 0.2cm de haut. Dois-je la remplacer par exactement 24ohms pour résoudre le problème ou est-ce un problème de sonde ? La sonde de courant est sur la phase entre le tableau électrique et le boitier blanc d’interruption générale à côté du Linky, c’est le modèle que vous indiquez .
          J’ai passé toute la journée à faire, refaire les soudures, monter et démonter le routeur, tester, calculer, mais là, je suis au bout de ce que je peux faire. Je me demande si je ne devrais pas recommencer tout mon circuit.
          Je ne sais pas si vous pourrez encore m’aider avec ces indications. ( actuellement la page web indique 244V, 53A, 9031W et 12951VA)
          Bonne soirée et bon dimanche.
          Bien cordialement
          E.Duquenne

          • F1ATB André dit :

            A la lecture des constatations, je pense que vous n’avez pas 1.65V sur le GPIO35. La division par 2 des 3.3V avec les 2 résistances de 4.7k n’est pas correcte.
            Pour la 22 ohms, ce n’est pas un problème.
            Vous pouvez m’envoyer la photo de l’écran sur mon mail directement. f1atb.fr@gmail.com
            Cdlt

  19. Philippe dit :

    Re(bonsoir) (à André)
    Oui le principe de sortie par demies alternances est compris, avec un triac on ne peut pas faire mieux.
    La question qu’on peut se poser est; est ce que les onduleurs peuvent fournir la puissance max du chauffe-eau pendant les 10ms des demies alternances alors que les panneaux ne fournissent que très peu, les condensateurs des micro-onduleurs peuvent fournir un peu mais leur capacité est-elle suffisante ? Il est probable que plutôt c’est le réseau qui fournit la puissance crête lorsque le triac conduit…
    De mon coté j’ai abandonné cette solution à cause des grosses variations de puissance que ça demande au système photovoltaïque, je réfléchi à une solution PWM qui consomme du courant vrai sinus (redresseur, MOSFET ou IGBT + inductance de lissage…)
    Bons essais à tous

    • F1ATB André dit :

      En regardant la courbe, en fin d’article, au chapitre exemple de routage, on voit ce qui se passe au niveau de l’entrée de la maison. Sur 10ms, il y a des périodes de consommation où Enedis fournit et des périodes d’injection ou les onduleurs fournissent. Avec un décalage de phase. Il serait intéressant d’avoir sur la même courbe le courant en sortie des onduleurs.