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);

  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 🙂

  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 !

  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

  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.

  20. VENANT Eric dit :

    Bonjour Andre
    Superbe travail, je réalise votre routeur pour chauffer un ballon ECS de 1200w
    J’ai pu apercevoir que vous avez ajouter un fusible, et je voulais connaitre la référence de ce dernier.
    Merci et vivement la V3
    Cordialement

  21. Stef D dit :

    Bonjour à tous,

    Est-ce que quelqu’un a ajouter une boucle de mesure de la puissance envoyée au chauffe eau ? Si tel est le cas, pouvez-vous partager le montage et le code svp ?
    L’idée est de suivre la conso du chauffe eau sur Domoticz.
    D’avance merci !

    • Samuel BURG dit :

      vous devirez reprendre le code qui lit et qui calcul la puissance sur le TC 1/2000 (le 100A/50mA) pour en controller un second de la même façon.
      vous intégrez le résultat sur la durée voulue et ça vous donne la consommation du chauffe eau (il faut mettre le second TC sur le câble de phase qui alimente le chauffe eau, sinon vous allez mesurer n’importe quoi au hasard)
      si vous exécuter trop d’interuption en même temps il va par contre falloir envisager d’utiliser le second core du CPU du ESP32 et modifier assez profondément l’architecture du programme.
      cordialement,

  22. JACOLET dit :

    Bonjour a tous, arrivez vous a mètre l’Arduino 2.1.0 en Français. même après redémarrage il n’est toujours pas en français ?

  23. Charles L dit :

    Bonjour
    Merci pour votre travail et votre partage.
    J’ai quasiment terminé mon routeur, et j’aurais 2 questions car je n’ai pas de grande connaissances en programmation:
    J’ai besoin( car contrat en Heures Super Creuses la nuit) de modifier les horaires de forçage, j’ai rentré les valeurs de 3 à 5 Heures
    du coup le ligne de code:
    if (LastHour == 4 && hour == 5) { ModeHeater = 0; } // Back to Automatic mode
    Doit aussi être modifiée (les termes LastHour et == ne me parlent pas!) du coup ce serait:
    if (LastHour == 5 && hour == 6) { ModeHeater = 0; } // Back to Automatic mode
    Le wifi de ma box est coupé de 23H à 6H, est-ce un soucis pour l’ESP32, qui doit avoir l’heure en permanence?
    Merci pour votre réponse
    Cordialement

    • F1ATB André dit :

      Je ne vois pas bien quelle plage horaire, vous voulez forcer. Si c’est de 3h00 à 5h59 , vous devez mettre:
      if (hour >= 3 && hour <= 5) { //Si l'heure est supérieure ou egal à 3 et inférieure ou égal à 5 ModeHeater = 5; //Mode forcée retard = 0; //Plus de retard à l'ouverture du Triac retardF = 0; //Plus de retard en nombre flottant } if (LastHour == 5 && hour == 6) { ModeHeater = 0; } // Si l'heure précédente (lors du dernier passage dans ce programme était égale 5 et l'heure actuelle est egale à 6. On met un double égal pour une comparaison de valeurs. On revient en mode automatique Modheater=0. LastHour = hour; on met l'ancienne heure égale à l'heure actuelle Si vous coupez le WIFI pendant quelques heures, il faudra faire l'essai. Je ne sais pas comment se comporte le programme (la bibliothèque) de gestion de l'heure en l'absence de réponse. Je pense que l'heure continu à se calculer, en utilisant l'horloge interne à l'ESP32. Cdlt

    • Samuel BURG dit :

      Bonjour,

      au vu du code de ce routeur, si vous coupez le WiFi, il va rebooter en continu et lors du reboot il va vautrer par ce qu’il ne pourra pas toucher un serveur NTP pour avoir l’heure.

      donc
      choix 1 :
      laissez la box avec le WiFi ‘on’

      choix 2 :
      modifier le code pour ne pas déclencher de reboot cpu soft (désactiver les « ESP.restart(); »)
      modifier le setup pour ne pas checker le WiFi pendant plus de 30 sec au démarrage
      absolument booter le ESP32 de jour pour qu’il se synchronize avec un NTP
      modifier le code pour que le client NTP ne cherche pas à se synchroniser toutes les 5 minutes pendant les heures ou le WiFi est ‘OFF’

      le choix 2 me semble cependant difficile pour vous.
      cordialement,

      • F1ATB André dit :

        J’avais oublié le test du Wifi toutes les 30s.
        sur la ligne 416
        if (millis() – previousWifiMillis > 30000) {
        mettez par exemple
        if (millis() – previousWifiMillis > 3600000) {
        Le systeme fera un test toutes les heures seulement. Vous avez droit à 20 erreurs (20h) avant qu’il ne reset.

        Cdlt

  24. Marconnet dit :

    Bonjour,

    Super travail ,merci beaucoup !
    Auriez vous une version en triphasé car j’ai tout en triphasé (chauffe eau, resistance appoint PAC,et surtout production photovoltaique)
    Merci de votre collaboration.

    Alain

  25. Pat dit :

    Bonjour,

    Great Job,
    je me suis inspirer de votre montage pour en faire un a moi , mais le Gradateur – Triac de chez Robotdyn ne semble pas fonctionner correctement , je n’arrive pas à faire une puissance graduelle celle ci ne fonctionne qu’a partir de 80%.

    J’ai fait des mesures à l’oscilloscope et je ne trouve pas la sortie ZeroCross en phase avec le zéro du secteur ( 2.4 ms de différence) ….avez-vous fait ces mesures car sur votre diagramme elle sont en phase ?

    Merci d’avance

    • F1ATB André dit :

      De mémoire, j’ai un peu galéré parce que le pulse est court et je savais pas s’il fallait un front montant ou descendant pour gérer l’interruption. Je n’ai pas noté de décalage entre un passage par zero de V et Zc.
      Faite un petit programme qui va de 1 à 100 pour les retards par pas de 1 toutes les secondes pour voir.
      Cdlt

      • Samuel BURG dit :

        Bonjour,

        j’ai le même problème de synchro avec mon gradateur Robodyn, j’ai un décalage de au moins 1ms pour le pulse ZeroCross.
        je n’ai pas encore eu le temps d’explorer ceci avec précision.

        Cordialement,

      • Pat dit :

        Je vais essayé , et je vous tiens au courant.

        • Samuel BURG dit :

          Bonjour,

          Donc j’ai fait de multiples essais avec mon gradateur RobotDyn et la version 2 du routeur solaire de André/F1ATB.
          J’ai utilisé la version logicielle sans modification telle que téléchargé sur ce site et une version que j’ai modifiée mois même.

          J’ai tester les différentes options de paramétrage de la bibliothèque Arduino/Espressif/ESP32 : attachInterrupt(), digitalPinToInterrupt() : RISING, FALLING, CHANGE.
          J’ai testé différent échantillonnage temporel pour le relevé de la courbe tension/intensité et différents format de donnée pour aussi mesurer et tester le nombre de points de mesure que l’on peut atteindre par cycle de 20ms.
          J’ai vérifié la fréquence des horloges de l’ESP32 et la fréquence de fonctionnement du CPU(): CPU getCpuFrequencyMhz(); // 240MHz —XTAL getXtalFrequencyMhz(); // 40 MHz — APB getApbFrequency(); // 80MHz

          Dans toutes les situations je retrouve toujours exactement le même résultat :
          – je plafonne à 103-105 mesures par cycle de 20ms (190ms par boucle)
          – j’ai exactement 1ms de décalage entre le point zero de la courbe de tension et le pulse zerocross du gradateur RobotDyn, avec une variation du décalage qui est inférieure à 0.1ms

          En l’état ce décalage, dans la version actuelle du logiciel, induit une limitation de l’ouverture du gradateur à 90%.
          Je n’ai pas comparer ce résultat avec un autre ESP32 ou un autre gradateur.
          Je n’ai pas d’osiloscope sous la main pour faire une mesure comparative.
          Je n’ai pas de charge sur la sortie du gradateur pendant cette mesure.

          Quelle peuvent êtres les cause d’un décalage aussi stable et aussi nette du zero cross ?
          – défaut logiciel ? – défaut du gradateur ? – défaut du montage électrique ? – position d’une capacité qui a un effet de filtre et de décalage ?
          Si je suis raisonnablement compétent en programmation, je ne pense pas avoir les compétences en électronique pour plus démêler ce problème en l’état.

          Cordialement,

          • F1ATB André dit :

            Sur la version 3 du routeur, https://f1atb.fr/index.php/fr/2023/05/18/realisez-un-routeur-solaire-avec-un-linky-diy/ , j’ai mis le relevé à l’oscilloscope du signal Zc et de la tension secteur. Il n’y a pas de décalage sur le plan électrique. Le front montant du signal Zc est bien en phase avec le zéro de la tension secteur. Pour les ouvertures, j’ai également mesuré le courant en sortie du Triac. A 100%, on est bien au maxi.
            Cdlt
            André

          • Samuel BURG dit :

            Bonjour,

            j’ai continuer de regarder ce problème.

            j’ai trouvé que la précision du zero cross est attendue à +/- 0.1ms (-0.1ms sur le front ‘rising’ et +0.1ms en ‘falling’), donc un délaçage de 1ms ne correspond pas à ce décalage.

            j’ai vérifier ma fréquence de courant par rapport à l’orloge du ESP32, j’ai du 49.9988 Hz, ceci entraine donc un décalage progressif du zero cross de 0.4723usec par cycle par rapport à un cycle de 20ms, ce qui n’est là aussi pas du tout 1ms.

            je vais désassembler mon montage pour le refaire et vérifier si il y a un faux contact qui pose problème.
            je vais faire un mini programme de lecture analogique sur les différents pins concernées du ESP32 pour enregistrer ~512 valeurs consécutives sur chaque pins et reconstituer des courbes « pseudo oscilloscope » et voir ce que ca me sort.

            Cordialement,

  26. Michael54 dit :

    Bonjour,

    Super routeur.
    Il est en service depuis peu et j’ai modifier le code pour le piloter via home assistant. Par contre je le lance quand ma batterie est pleine mais il pompe ma batterie en décharge. je voudrais modifier la consigne de régulation, de 0W a -100W. Quel ligne je dois toucher ? j’ai beau chercher je ne trouve pas…. Merci !

    • F1ATB André dit :

      Ouvrir la page action et cliquez sur « Seuil Pw : 0W » en dessous de Triac. Une fenetre s’ouvre et mettez la valeur de seuil qui correspond à votre besoin.
      Cdlt

      Excusez moi je me suis trompé de routeur, vous avez la version V2.01.
      Dans ce cas ouvrez le code à la ligne 278 et mettez
      retardF = retardF + (PW+100) / 200;
      si vous voulez réguler autour de -100W (légère injection)
      Cdlt

  27. Philippe63 dit :

    Bonjour André,
    J’ai un panneau solaire et j’ai installé le routeur solaire qui fonctionne très bien. Je voudrai ajouter un 2eme panneau solaire sur le toit de mon garage qui est séparé de la maison (meilleur exposition). La maison et le garage possèdent chacun un tableau électrique avec chacun un différentiel et une terre indépendante. Le capteur de courant est installé sur l’alimentation du tableau de la maison. Donc la consommation du garage (faible) n’est pas vue par le capteur car le garage a sa propre alimentation. Après le disjoncteur EDF situé dans la maison une boite de dérivation permet d’alimenter le tableau de la maison et celui du garage. Donc si je branche un panneau solaire sur une prise du garage, le courant produit par le panneau va remonter jusqu’à la boite de dérivation et la il a deux possibilités soit il est consommé par la maison soit il est réinjecté sur le réseau EDF, voilà ma question. Je pense que comme le courant prend le chemin le plus court il sera consommé par la maison mais je n’en suis pas sure. Si la nouvelle version du routeur permet d’avoir le capteur de courant déporté je le déplacerai dans la boite de dérivation ce qui permettra de prendre en compte la consommation du garage. D’avance merci pour votre réponse.

    • F1ATB André dit :

      OK, je vois votre problème avec le point de mesure qui n’est pas au bon endroit. Il y a 2 solutions :
      1) vous optez pour la nouvelle version V3.00_Linky avec un ESP32 et un coupleur optique près du Linky et le même ou l’ESP32 avec le Triac que vous avez déjà installé près du chauffe-eau je suppose.
      2) Vous déplacez votre sonde de courant près du Linky et attendez que je fasse une nouvelle version V2, qui reprendra les nouvelles possibilités comme la modularité de la version V3.00_Linky. Mais laissez moi un peu de temps pour souffler, la V3.00_Liky avec près de 3000 ligne de code m’a pris 3 mois à développer.
      Cdlt

      • Philippe63 dit :

        Merci André, je découvre avec votre message que la version V3.00 Linky est en ligne.
        Je regarde.
        Merci encore pour votre aide.

      • Philippe63 dit :

        Bonjour André, mon Linky est à l’entrée de mon terrain dans le coffret gris EDF et loin de la maison, donc sans alimentation 230V. Je vais d’abord faire un test pour relier la sonde de courant avec un câble réseau en utilisant une des 4 paires torsadées pour la connecter dans la boite de dérivation, ce qui permettra de voir l’injection des 2 panneaux solaire. Il me faut environ 5/6 mètres de câble réseau, le test me dira si cela fonctionne ou pas. Si cela ne fonctionne pas j’ai la solution d’alimenter l’ESP32 avec le coupleur optique avec le câble HC/HP (2 fils 1.5mm²) qui n’a plus d’utilité avec le routeur solaire et qui arrive dans le coffret gris EDF et qui est branché actuellement sur le Linky. Une autre solution serait de remonter l’info en sortie du coupleur optique via le câble HC/HP en modifiant un peu le circuit.
        Bravo encore pour cet énorme travail et merci pour l’aide que vous nous apportez.

        • F1ATB André dit :

          Très bonnes idées pour résoudre le problème de l’alimentation. Avec un câble blindé, type câble réseau, on doit pouvoir faire 20m au moins.
          J’aime beaucoup l’idée de reprendre les câbles HC/HP.
          Si on a des soucis avec de trop longs câbles, on peut modifier les 2 valeurs de résistance autour du LTV-814. Mais il faut un oscilloscope pour vérifier que le signal est bien carré à l’entrée de l’ESP32.
          Cdlt

  28. JACOLET dit :

    v2.0 problème pour les valeurs a indiquer dans la partie wifi /de la ligne 34 à 43 et a quoi elle correspondes expl: ip du modem ip : du esp32 , ip: smartphone ici en Belgique il y a des différences je dois les modifiés. je suis un peux perdu merci

    • F1ATB André dit :

      Les adresses IP en interne sur votre réseau, c’est comme les numéros de téléphone internes d’un réseau d’entreprise.
      C’est votre box internet qui les attribue. Mais pour un système de domotique, il vaut mieux forcer une adresse.
      Votre box attribue des adresses, par exemple dans la plage:
      192.168.0.1 à 192.168.0.254
      ou bien
      192.168.1.1 à 192.168.1.254

      Dans cette page d’adresse il y a une sous plage de valeurs dites dynamiques, attribuées par la box ex 192.168.0.10 à 192.168.0.100
      Les autres sont des adresses statiques. Vous pouvez prendre une adresse pour votre ESP ex 192.168.0.200
      Dans les paramètres réseaux DHCP vous trouvez ces informations.
      En genéral on ne prend pas celles qui se terminent par 1 ou 254, elles sont utilisées par les box.
      A la ligne gateway, mettez l’adresse de votre box.
      subnet et primaryDNS ou secondary DNS ne changé rien.

      Vous pouvez installer sur votre PC un logiciel comme Angry IP scanner, qui va vous faire la carte des adresses utilisées sur votre réseau.
      Je peux, si vous n’y arrivé pas prendre la main sur votre PC pour tout configurer. Ecrivez moi sur f1atb.fr@gmail.com
      Cdlt
      André

      • JACOLET dit :

        Bonjour, et merci pour les explications et la proposition de tout configuré, mais je vais essayer de configuré seul, il faux que je me débrouille pour apprendre. Cordialement Jean

  29. smiechowski dit :

    bonjour André , j’ai remarqué que le compteur (kwh) de la page web du routeur ne correspondait pas à la conso facturée (edf). J’en déduit que l’injection sur le réseau est soustrait du compteur de la page web.
    Est-il possible de paramétrer le routeur pour ne comptabiliser que les Kwh consommer du réseau ?

    • F1ATB André dit :

      Dans le tableau
      La puissance Apparente en VA affichée est la valeur instantanée du Linky sans modification.
      La puissance active en W est une moyenne estimée recalée sur les valeurs reçues en Wh du Linky quand elles évoluent.
      L’énergie Active du jour est la valeur du Linky – la valeur du Linky à 0h.
      L’energie Active Totale est la valeur du Linky

      Le premier graphe sur 10mn donne les valeurs en VA et en W comme dans le tableau.

      Le deuxième graphe en W sur 48h donne bien la différence Soutirée – Injectée. Pour des questions de mémoire de stockage, je stocke uniquement la différence et pas chaque valeur.

      Le troisième graphe sur 1 an donne également l’energie Soutirée – Injectée. Je ne peux pas stoker les valeurs séparément par manque de place en ROM.

      Cdlt

      Excusez moi, plus haut j’ai répondu pour un routeur en version V3.00_Linky. Vous m’avez posé la question pour une version V2.
      Cette version fait la mesure algébrique entre les Wh soutirés et les Wh injectés. Dans la prochaine version V3.00_Sonde , je ferai la séparation afin de retrouver les valeurs d’EDF.
      Attendez un peu, dans quelque temps, elle sera en ligne.
      Cdlt

      • christophe smiechowski dit :

        Bonjour André ,il y a un quiproquo . On est bien sur le fil du routeur V2 ? J’ai l’impression que vous parlez de la version 3.(linky)

        Merci d’avance de prendre le temps de me répondre.

        • F1ATB André dit :

          Vous avez raison, je me suis trompé de fil de discussions. J’ai tellement de messages par jour entre le site F1ATB et youtube.com/@f1atb
          Merci
          Cdlt
          André

          • Smiechowski dit :

            Pas de problème, vous en faites déjà beaucoup pour nous tous et je vous en remercie. J’attendrai la nouvelle version bien que la v2 fonctionne très bien. Merci et bonne soirée.

  30. Nutta dit :

    Oui, vous en avez déjà fait énormément et je crois bien que nous sommes vraiment très nombreux à vous remercier.
    >>>Pour remercier de façon plus concrète F1ATB, notons qu’il est possible de soutenir son travail en effectuant un don (en haut de page).

  31. Serge 11 dit :

    Bonjour,
    Pouvez vous me dire s’il est possible de contrôler la sortie du triac. J’ai une ouverture à 100 % mais pas de tension en sortie. Il y a bien 230 V en entrée.
    D’avance merci.
    Cdt
    Serge

    • F1ATB André dit :

      Vérifiez que votre Triac est bien branché. Dans ce cas si vous êtes à 100%, vous devez avoir autour de 3.3V sur l’entée Psm du Triac.
      En sortie, on peut mesurer la tension, sauf que s’il n’y a pas de charge, même sans excitation de l’entrée, on a une tension résiduelle sur le 230V. Le Triac n’est pas un interrupteur parfait.
      Cdlt

      • Serge 11 dit :

        Ce que vous appelez Psm est la gachette? la patte du triac qui n’est ni sur l’entrée ni sur la sortie 230 V.
        Le 3.3 V est entre la masse et la gachette?

        • F1ATB André dit :

          C’est le signal de commande qui sort du GPIO 22 et va sur le module Gradateur/Triac

          • Serge 11 dit :

            OK merci pour la précision.
            Je viens de voir que la led bleue du dimmer est allumée alors que j’ai une ouverture à 0 %.
            C’est normal?

          • F1ATB André dit :

            En gros à partir de 5% d’ouverture, la Led bleu s’allume. Si vous êtes à 0% et elle s’allume, il y a un problème. Débranchez le fil de commande pour voir si cela s’arrête.
            Cdlt

          • Serge 11 dit :

            Je viens de déposer le dimmer. Le triac a flashé sur la patte Load alors que j’avais sensiblement augmenter la surface du radiateur.
            Nouvelle commande mais je vais déporter le triac avec un gros radiateur.

  32. Anthony F dit :

    Bonjour,

    J’ai suivi le tuto (merci pour tous ces details),
    J’ai deux lampe a incandescence pour mes tests une en sortie de triac et l’autre pour la mesure du courant que j’ai installé en sortie d’un gradateur de lampe halogène du bon vieux temps …
    – mais j’ai un pb pour la mesure de tension : reste vers 0
    – et le courant n’est pas sinusoidale … (mais je mesure le courant du gradateur sur une ample de 60 w)

    PS : je ne suis pas certain d’avoir mis le capteur de courant ni le transformateur dans le bon sens, mais a-priori ca va ne jouer que sur le signe, correcte ?

    Une idée pour m’aider a trouver le pb, j’ai de la tension au secondaire du transformateur (220v – 6v), mais pas correcte en entree du esp …

    • F1ATB André dit :

      En premier, il faut une belle courbe rouge pour la sinusoide de la tension. Quel que soit le sens du transfo. Si ce n’est pas correcte entrée ESP, il doit y avoir un problème de câblage.
      Cdlt

  33. JACOLET dit :

    après le téléversement dans l’esp j’obtient ceci dans le monitor série: [108392][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    ets Jun 8 2016 00:22:57

    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:2
    load:0x3fff0030,len:1184
    load:0x40078000,len:13192
    load:0x40080400,len:3028
    entry 0x400805e4
    Booting
    [ 311][I][ArduinoOTA.cpp:141] begin(): OTA server at: esp32-943cc6384620.local:3232
    IP address: 192.168.0.200
    [ 315][W][esp32-hal-timer.c:226] timerAttachInterruptFlag(): EDGE timer interrupt is not supported! Setting to LEVEL…
    [ 44359][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:00:45
    Power:740.00
    [ 48390][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed

    • F1ATB André dit :

      Vous n’avez pas configuré correctement l’adresse IP, le gateway, le nom du réseau WIFI, le mot de passe.
      Comme vous n’êtes pas le premier, je vais un chapitre là-dessus, les commentaires au début du code ne suffisent pas.
      Cdlt
      André

  34. Pierre M dit :

    Bonjour André,

    Tout d’abord merci pour votre travail et surtout votre partage.
    J’ai réalisé un premier montage de votre version V2. Celle-ci à fonctionné à merveille pendant 1 mois.
    J’ai suite à cela voulu refaire mon montage au propre. Et c’est la que les ennuis sont arrivés.
    Depuis les courbes I et V ne s’affiche plus sur la page web. La tension, l’intensité et le reste des informations sont bien affichées mais pas de courbe.
    Auriez vous une idée pour m’orienter dans mes recherches ?

    En vous remerciant,

    • F1ATB André dit :

      Si la tension est correcte (autour de 230V) , je ne me le’xplique pas bien. Si elle n’est pas correcte, il doit y apoir un problème au niveau des 3 entrées de mesure.
      Certains ont eu des problèmes avec les GND (masse) de la carte qui n’étaient pas tous reliés ensemble.
      Cdlt

  35. Serge 11 dit :

    Bonjour,
    J’utilise la version V2 qui répond a mes attentes avec une sortie sur CE et une vers SSR pour un moteur. Ce moteur étant distant, je souhaite le piloter en WiFi.
    J’ai lu votre sujet sur SonOff Mini R2 qui doit pouvoir répondre a mon besoin mais je n’arrive pas à intégrer les lignes de programmation dans la version routeur V2.
    Si vous pouvez m’aider sur ce sujet.
    Cordialement.
    Serge

    • F1ATB André dit :

      Trois solutions.

      Pour commander à distance, inspiré vous de
      SendToDomoticz() à la ligne 160

      Ouvrez la version V3.00_Linky, que j’ai publié récemment qui fait cela, mais avec le Linky comme capteur et non la sonde de courant

      Cet été, je publierai une nouvelle version V2 qui s’appelera V3.00_Sonde. Elle inclura les commandes à distance.
      Cdlt

  36. steph031 dit :

    Bonjour,
    j’ai lu sur un routeur du commerce clé en main, l’incompatibilité avec des résistances en stéatite

    Est-ce le cas pour votre système ?

    cdt
    merci

    • F1ATB André dit :

      Je ne connais pas la raison de l’incompatibilité de la stéatite. Il y a des articles sur le sujet sur le web pas clairs.
      Le mien fait de la découpe du réseau à 50Hz.

      Cdlt
      André

      • Philippe63 dit :

        Pour info, sur mon ballon d’eau chaude de 200W j’ai une anode Titane. Il y a une petite carte électronique avec un accumulateur 9V pour alimenter l’anode (10mA environ) quand le chauffe-eau n’est pas alimenté. Lorsque le chauffe-eau est alimenté la carte recharge l’accumulateur 9V. Cette carte est alimentée en 220V et ne peut pas fonctionner correctement avec le découpage du 220V.
        J’ai donc déconnecté l’arrivée 220V sur la carte électronique et j’ai amené une alimentation séparée 220V en soudant les deux fils sur le connecteur d’arrivée 220V côté cuivre. J’ai ensuite enlevé l’accumulateur 9V qui ne sert plus à rien car la carte est alimentée en permanence.

    • christophe smiechowski dit :

      Bonjour ,je l’utilise depuis plusieurs mois sur un ballon stéatite. Aucun problème.

  37. Samuel BURG dit :

    Bonsoir,

    Après quelques jours de test, je reviens sur le sujet du délai des impulsions ZeroCross du Gradateur RobotDyn.

    Au vu de mes mesures, il est vraisemblable que mon exemplaire comporte un défaut et présente ainsi un décalage du Zero cross de 1.1ms.

    Pour la réactivité du ESP32, avec les bibliothèques « classiques », une interruption a un retard de ~ 2.5us +/- 0.7us.
    Il est possible de réduire ce délais à 0.08 us en utilisant un code en assembleur pour se rapprocher de la limite matérielle du ESP32 qui est bien meilleur que ce qui est implémenté dans la bibliothèque par défaut. Je n’ai cependant pas explorer cette voie car 2.5us de retard sur une interruption quand mon gradateur se prend 1.1ms … c’est pas un problème.

    Lors de mes différents test j’ai aussi exploré les possibilités des 8 canaux de numérisation du ADC1 pour chercher à augmenter la fréquence d’échanttillonage. Je n’ai pas exploité le ADC2 et ses 10 canaux par ce que celui ci est utilisé par le WiFi or la majorité de projets utilisent justement le WiFi.
    En outre il existe un mode « DMA » très intéressant mais justement exploitable uniquement avec le ADC1.
    Le but de cette recherche était de contourner le fait que je ne dispose pas d’un oscilloscope et que l’échentillonga par défaut du ESP32+Arduino est trop lent.
    A noter que sur les Dev Board utilisant un ESP32 WROOM seul 6 canaux ADC1 (channels 0,3,4,5,6,7) sont connectés sur des gpio utilisables.

    J’ai ainsi identifié 4 méthodes pour utiliser le ADC1 avec des possibilités variables de fréquence d’échatillonage :
    – ADC en mode ‘classique’ avec les bibliothèques Arduino: max 11kHz réparti sur les canaux activés parmi les 8 disponibles
    – ADC en mode ‘classique’ avec les bibliothèques Espressif: max 22kHz réparti sur les canaux activés parmi les 8 disponibles
    – ADC en mode ‘DMA’ avec l’interface du 2IS prévu pour l’audio: max 277kHz mais sur un seul canal à la fois parmi les 8 disponibles
    – ADC en mode ‘DMA’ sans 2IS (besoin de reformater les données obtenues): max 2MHz (!!) réparti sur les canaux activés parmi les 8 disponibles

    J’ai implémenté les 4 méthodes et les résultat de la version ‘ADC-DMA’ sont très utiles.
    En plus de donner un bien meilleur échantillonnage; celui ci se fait sans charge CPU car c’est le contrôleur qui fait le boulot et qui met les données en RAM via le DMA.

    Sur mon problème initial de décalage du ZeroCross, celui ci est donc confirmé.
    Ceci m’a aussi permis de mesurer la forme de l’impulsion du Zero cross qui en fait est assez large. J’ai une FWHM de 400us, un front ascendant de 200us, un plateau de 100us, un front descendant de 200us.
    Je note aussi que la forme de l’onde de courant est un peu bizarre. Je suis en train de préparer un outil de correction de la linéarité du ADC, bien que je doute que ceci en soit la cause.

    Je partage le code ici : https://burg.myqnapcloud.com:9443/share.cgi?ssid=c2807e20982a450289a5251d512906c2

    Cordialement,

    • Samuel BURG dit :

      Correctif de dénomination :
      – ADC en mode ‘one-shoot’ avec les bibliothèques Arduino: max 11kHz réparti sur les canaux activés parmi les 8 disponibles
      – ADC en mode ‘one-shoot’ avec les bibliothèques Espressif: max 22kHz réparti sur les canaux activés parmi les 8 disponibles
      – ADC en mode ‘continuous 2IS’ DMAx1 via l’interface de la bibliothèque 2IS prévu pour l’audio: max 277kHz mais sur un seul canal à la fois parmi les 8 disponibles
      – ADC en mode ‘continuous DMA’ DMAx8 via une bibliothèque dédiée (2IS en sousjacent mais besoin de reformater les données obtenues): max 2MHz (!!) réparti sur les canaux activés parmi les 8 disponibles

  38. Samuel BURG dit :

    Bonjour,

    J’ai écris un outil de calibration du DAC et du ADC pour l’ESP32 qui permet de calibrer l’ADC de son ESP32 à partir du DAC interne et d’un simple voltmètre (+ un calcul de fit linéaire dans un tableur).
    L’outil génère une LUT directement utilisable dans un programme.
    L’utilisation de la LUT est plus rapide et plus précise que les corrections implémentées dans la bibliothèque Espressif et Arduino.
    Le mode d’emploir est mis en commentaire au début du code.

    La référence sous jacente est : https://github.com/e-tinkers/esp32-adc-calibrate

    J’ai mis mon code à disposition au même endroit que pour les précédents:
    https://burg.myqnapcloud.com:9443/share.cgi?ssid=c2807e20982a450289a5251d512906c2

    Je n’ai pas encore testé pour évaluer selon quelle amplitude ceci améliore les mesures de tension, d’intensité ou de puissance.

    Cordialement,

  39. BARRES dit :

    Bonjour André

    Félicitations pour vos connaissances et d’accorder votre temps pour les non initiés.
    Je reconnais n’avoir pas lu l’ensemble de vos réponses aux commentaires très nombreux car vous avez peut être déjà répondu a cette question.
    Avant de construire votre routeur, avez vous mesuré le taux de réinjection résiduelle dans le réseau EDF en Wh moyen ainsi que la consommation EDF injecté dans le ballon ECS en Wh moyen lié au temps de réaction de la régulation sur les perturbations de consommation électrique.

    Merci pour votre réponse

    Christophe

    • F1ATB André dit :

      J’avoue ne jamais avoir fait les mesures avec précision. J’ai les deux types de routeur à la maison. Avec la sonde ampèremétrique qui réagit très vite. Une mesure toutes les 40 ms et l’autre avec le Linky, une mesure toute les 2s. Un peu lent, mais plus facile à réaliser. Je suis plus préoccupé par les watts perdus lorsque qu’il y a beaucoup trop d’énergie, les routeurs sont à 100% vers leur charge, mais il reste des Watt qui partent vers Enedis.

      • BARRES dit :

        Merci pour le retour André.

        Généralement les routeurs du marché sont plutôt calé pour être certain de ne pas avoir d’injection dans le réseau EDF donc le talon se situe au environ de 10w lorsque il y a transfert d’énergie vers le ballon ECS. On peut donc considérer que ces 10W chauffe aussi le ballon mais sont prélevés sur Enedis et non sur les panneaux.
        Votre routeur offre potentiellement des performances encore plus intéressantes, cela serait peut être intéressant de faire une mesure plus précise pour comparer.

        Bien cordialement

        Christophe

        • Samuel BURG dit :

          Bonjour,
          votre commentaire a attiré mon attention car je suis justement en train de travailler à une recalibration des pins ADC (convertisseur analogique -> digitale) du ESP32 couplé à une éventuelle modification des fonctions de lecture des sondes ampèremétriques et sondes de courant pour essayé d’amméliorer la précision des mesures, pas vraiment pour gratter 10W, mais plus pour le concept de voir jusqu’où est ce que l’on peut pousser le routeur présenté par André Buhart avec un ESP32.
          Cordialement,

        • F1ATB André dit :

          On peut régler le seuil de déclenchement comme on le souhaite. Néanmoins il faut bien réaliser que les consommations sont bruitées. Il y a sans arrêt de d’importantes variations, mise en marche de moteurs, découpage d’une plaque à induction etc.. qui font que l’on ne suit pas à 10w près. Les routeurs essayent de s’approcher de l’équilibre, mais sont sans arrêt perturbés.
          Cdlt

  40. JACOLET dit :

    Bonjour, dans le programme Arduino IDE 2.1.0 quand je modifie dans préférence, l’endroit ou stoker les fichiers en première ligne, le langage en Français, et en dernière ligne >> Additional boards manager URLs: https://dl.espressif.com/dl/package_esp32_index.json << Rien ne se passe Rien ne change même après redémarrage ? Savez vous peux être pourquoi

  41. Franck dit :

    Bonjour, mise en service à l’instant. C’est fonctionnel mais pose tout de même problème.
    Il ne route pas le surplus mais la totalité de la production solaire. Je m’explique ….
    Je produit 1000w, la charge (maison) consomme 300w donc j’injecte 700w dans le réseau EDF.
    Le routeur mis en route devrait logiquement me router les 700w vers le CE et bien pas dans mon cas, il cherche à router les … 1000w !!!
    En modifiant la ligne 278 qui est « retardF = retardF + PW / 200 » en « retardF = retardF + (PW+300) / 200 j’arrive à l’équilibre.
    Aurais je loupé quelques choses?
    Ps: j’ai un autre routeur en fonctionnement (ATMEG328P) qui lui route bien les 700w.

    • F1ATB André dit :

      vous n’auriez pas la sonde de courant monté a l’envers.?

      • Franck dit :

        Non, les valeurs sont bonnes et passe en négatif quand il le faut. Je vérifie la puissance dans chaque circuit via des shelly EM.
        Nous avons parlez par mail hier, vous m’aviez dit que vous aviez Discord, et dans mon dernier mail je vous est envoyé une invitation à rejoindre mon tchat. Je pourrais vous y montrez dès impression d’écran des différentes valeurs si vous voulez.

        • F1ATB André dit :

          Actuellement en voyage. Il m’est difficile de chater.

          • Franck dit :

            A l’occasion 😉
            Autre point, comment ce fait il que les valeur de U et I fluctue à ce point? Taux d’échantillonnage trop faible sur un ESP32 comparer à un ATMEG ? Je profite d’avoir les deux plate-forme pour faire des comparaisons.
            Étant donné que la base est la valeur PW, si cette dernière n’est pas stable il est normal que la commande du Triac en soit son reflet.

          • Franck dit :

            Je fait site à mon commentaire précédent car je n’est pas trouvé la façon de le modifier.

            Si je prend la valeur d’EDF, au multimètre elle ne fluctue que très peu (quelques mili-volt) donc pourquoi en sortie d’ESP celle ci fluctue presque de quelques volts?

  42. F1ATB André dit :

    Le calcul est fait sur 100 mesures durant 20ms. Elles ne sont pas moyennes comme le fait un multimètre. c’est pour cela que vous avez l’impression que cela fluctue. On pourrait faire une moyenne sur U et I, mais je préfère filtrer au niveau de l’ouverture du Triac, en fin de chaine de calcul.

    • Franck dit :

      Nous sommes bien d’accord mais j’ai rajouté dans la boucle Loop quelques Serial.print qui me permettent de visualiser dans le moniteur série les valeurs U, I et quelques autres.
      Mon point de comparaison est mon routeur actuel sur lequel je récupère U et I de la même manière et la comparaison est flagrante, Donc c’est le programme qui génère cette fluctuation de la régulation?
      Si je n’avais pas ce point de comparaison je trouverai peu être sa normal.

      • F1ATB André dit :

        Chez moi je n’ai pas de grosses fluctuations. en général inférieur a 1 volt. Cela me fait penser au problème avec certaines cartes qui n’ont pas les masses gnd reliées ensemble.

  43. Jos dit :

    Bonjour André,
    Merci pour tout ces explications. Super.
    Je n’arrive pas à communiquer avec l’ESP32. Je reçois le message d’erreur:
    exec: « python »: executable file not found in $PATH

    Compilation error: exec: « python »: executable file not found in $PATH

    Savez-vous pourquoi?

  44. LIMOU dit :

    Bonjour à vous,

    Je suis actuellement en plein apprentissage avec mon ESP32 et j’essaye tant bien que mal a charger le programme mais je suis bloqué depuis hier sur ce message d’erreur?

    /Users/Desktop/SolarRouter_v2.01/SolarRouter_v2.01/SolarRouter_v2.01.ino:30:21: fatal error: PageWeb.h: No such file or directory
    #include « PageWeb.h »
    compilation terminated.

    exit status 1

    Compilation error: PageWeb.h: No such file or directory

  45. F6FXW dit :

    73 André,
    Pour infos je voudrais ici partager quelques déboires que j’ai eu après réalisation du routeur V2.
    Le gradateur fonctionnait très mal. La charge (une lampe tungstène) ne pouvait s’allumer que pour des angles de retard importants ou très faibles.
    (Je précise que j’utilise le dimmer RobotDyn version 24A)
    J’ai donc réalisé un petit montage proto avec un nano qui me permette de piloter l’angle à partir d’un potard.
    Après quelques essais et mesures j’ai rapidement constaté que le triac ne pouvait s’allumer que pour des tensions instantanées inférieures à ~150V
    Donc soit en début de période de 10ms (retard faible) ou en fin de période (retard fort). Entre deux le triac ne s’allume pas tout simplement !

    -1- J’ai donc d’abord supposé que le triac était « foireux » et ai donc remplacé le BTA24 par un BTA12 que j’avais en fond de tiroir. Résultat idem !
    -2- J’ai ensuite soupçonné l’optoTriac CT3021, et l’ai remplacé par un MOC3023 que j’avais (Pas facile, car le CT3021 c’est du CMS, et le MOC3023 du traversant…).
    Et là bingo! Tout Ok, l’allumage est parfait sur toute la plage des 180°

    Le dimmer RobotDyn étant une « chinoiserie » d’AliExpress je ne suis pas trop surpris.
    Mais je tenais à laisser un message ici, car pour vos « follower » non électroniciens, et en tous cas sans oscilloscope ne pourront jamais comprendre pourquoi leur routeur tout neuf ne marche pas lorsque ce type de bug apparaît.
    Dans ce cas, et pour eux je pense qu’il ne faut pas hésiter ! Si vous avez ces mêmes symptômes, changez de dimmer. (A moins de 10€). Perso j’ai perdu deux jours à pister, investiguer et corriger… Mais je suis Radio-amateur et retraité, et n’abandonne pas quand j’ai un os à ronger !

    Encore merci André pour ce magnifique post qui est très clair.
    J’ai particulièrement apprécié l’idée du réservoir virtuel pour piloter la réinjection dans le réseau.

    Bonne continuation,
    et 73 de Michel F6FXW

    • F1ATB André dit :

      Je viens de faire une manip similaire, suite à votre remarque en mettant une ampoule à filament de 50W.
      La manip est très facile avec le routeur version 3.00_Linky ou demande de modifier le code en forcant le retard sur la version 2.01 avec une sonde ampèremétrique.
      Les résultats avec ampèremètre sont les suivants en dehors de la luminosité de l’ampoule qui suit bien le pourcentage d’ouverture du Triac.
      10% 0.03A
      20% 0.06A
      30% 0.10A
      40% 0.13A
      50% 0.15A
      60% 0.17A
      70% 0.18A
      80% 0.19A
      90% 0.20A
      100% 0.20A

      J’ai donc une bonne progression du courant en fonction du pourcentage d’ouverture.
      Vous avez fait l’essai avec une lampe tungstène. Je ne sais pas comment répond ce type d’ampoule avec un courant haché.
      7
      Cdlt 73

      • F6FXW dit :

        Bonjour,
        Oui bien sur, avec un module dimmer opérationnel on obtient les résultats tels que vous les indiquez.
        Dans mon cas il s’agit bien d’un module défectueux. (L’optotriac défaillant), et oui, la charge que j’ai utilisé est purement résistive (ampoule tungstène)
        J’ai les enregistrements scope si vous le souhaitez. Mais le défaut est réglé, ce n’est pas le problème.

        Ce post avait seulement pour objectif de prévenir d’autres makeurs qui seraient dans la même situation.
        Je n’ai bien sûr aucune idée du nombre de modules non-fonctionnels mis sur le marché.

        Ce dont je suis sûr, c’est que quelqu’un qui n’a pas une grande pratique de l’utilisation des triacs/thyristors aura bien du mal à comprendre ce type de fonctionnement erratique.

        Cordiales 73, F6FXW

      • Samuel BURG dit :

        Bonjour,

        j’ai fait récemment une manip similaire, aussi à cause d’un Dimmer partiellement défectueux (un ZC qui est en retard de 1.2ms).

        j’ai relevé la puissance de sortie du Dimmer RobotDyn avec comme charge une ampoule tungstène, la mesure est faite avec une « prise intelligente » qui relève W, VA, PF etc…

        j’ai pris en compte la correction du retard du ZC.

        j’obtiens alors une courbe très similaire à celle reportée par André avec 50% de sortie pour 30% d’ouverture et ~100% de sortie pour 80% d’ouverture.

        de mon coté j’ai fait ceci pour disposer d’une calibration du contrôle du dimmer que je vais injecter dans mon routeur basé sur une modification de la « V2 » de André.

        cordialement,

  46. JACOLET dit :

    Bonjour,Bonsoir, ouf j’ais reussi a ouvrir l’application sur un smartphone a encode les bonne valeur pour le voltage et l’ampérage, il me reste l’afficheur dans la petite maison dans la prairie a mètre au points, et ceci qui mes indiqué dans le moniteur série <> que cela veux t’il dire ?

  47. JACOLET dit :

    01:08:15
    Power:14802.00
    [498656][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [524627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:08:45
    Power:10097.00
    [528658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [554627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:09:15
    Power:126127.00
    [558658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [584629][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:09:45
    Power:49249.00
    [588660][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [614627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:10:15
    Power:15146.00
    [618658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [644630][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:10:45
    Power:120642.00
    [648661][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed
    [674647][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
    01:11:15
    Power:122504.00
    [678678][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
    connection failed

    • F1ATB André dit :

      Visiblement le Wifi n’arrive pas à se connecter. Reprenez la zone dédiée au WIFI et vérifiez :
      – le nom (SSID)
      – le mot de passe (password) de votre réseau
      – l’adresse IP que vous donnez à l’ESP32
      – l’adresse IP de la passerelle (gateway)

      • JACOLET dit :

        Le wifi se connecte bien avec mon smartphone les valeurs sont affichés et le graphique avec les sinusoïdes aussi et a l’air de bien le rester.
        Mais la carte esp32 avec l’afficheur n’est pas encore alimenter.

  48. F6FXW dit :

    Bonjour,
    Je n’obtient pas l’heure correcte. (il n’y pas d’erreur de compilation pour NTPserveur.h )
    Lorsque la fonction « void Read_Hour()  » est exécutée, l’instruction « Serial.println(temps.getFormattedTime() » renvoie un horodatage incorrect.
    Voir ci-dessus un extrait de la console.
    On voit bien qu’il y a une lecture toutes les 30s, mais l’heure n’est pas juste (puisque qu’en réalité il était 17h13 au lancement du programme)
    Du coup ModeHeader passe à ‘5’ et donc force le dimmer à plein pots !

    Qu’est-ce que j’ai pu mal faire ?…

    // ~~~~~~~~~ Extrait du moniteur série ~~~~~~~~~~~~~
    17:13:58.417 -> Test Time ->01:00:47
    17:13:58.417 -> Power:0.00
    17:14:28.413 -> Test Time ->01:01:17
    17:14:28.413 -> Power:0.00
    17:14:58.438 -> Test Time ->01:01:47
    17:14:58.438 -> Power:0.00
    17:15:28.435 -> Test Time ->01:02:17
    17:15:28.435 -> Power:0.00
    17:15:58.430 -> Test Time ->01:02:47
    17:15:58.430 -> Power:0.00
    17:16:28.460 -> Test Time ->01:03:17
    17:16:28.460 -> Power:0.00
    17:16:58.454 -> Test Time ->01:03:47

    Cordialement,
    73 F6FXW

    • F1ATB André dit :

      Il ne trouve pas le serveur de temps. Probablement l’adresse IP du Gateway (passerelle de votre réseau. En général adresse de la box internet) pour accéder au monde extérieur n’est pas bonne.
      Cdlt

      • F6FXW dit :

        Merci André,
        Sorry, je me suis rendu compte que l’aviez précisé dans votre paragraphe « Personnalisation » !
        C’est corrigé, et après mise à jour de l’offset à 7200, je récupère bien l’heure locale « juste »
        Merci,
        73 F6FXW

  49. F6FXW dit :

    Bonjour,
    Je ne sais pas comment joindre un document sur ce site.
    Je vous ai donc envoyé un courrier à votre adresse gmail, avec des copies d’écran et analyse des résultats.
    Les observations faites me laissent perplexe, et votre avis me serait bien utile.
    Bien cordialement,
    F6FXW Michel

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *